2016-10-27 20 views
0

私は、WoodstoxのDeserializationExceptionに当たる前に、プロキシサービスからSOAP応答を変更/除去するソリューションを探していました。以下は私が得ている例外です。プロキシSOAPサービスの応答からCTRL-CHARを取り除くためにSpring/Woodstox jaxwsを設定する方法

  • これはそう何のTomcat、

  • は、WSDLを持っており、Javaのデスクトップアプリケーションではありません:CTRL-CHARのようstraigtの答えを配っする前にいくつかの事実のカスタムSOAPメッセージハンドラを作成し、XMLは有効ではありません

    <bean id="serviceProxy" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"> 
        <property name="serviceInterface" value="local generated stub"/> 
        <property name="wsdlDocumentUrl" value="--wsdl URL--"/> 
        <property name="namespaceUri" value="urn:address"/> 
        <property name="serviceName" value="proxyService"/> 
        <property name="portName" value="Some_Wsi_HandlerPort"/> 
        <property name="lookupServiceOnStartup" value="false" /> 
    </bean> 
    
:スタブは2.2.8

  • Webサービスクライアントの構成は以下の通りであるJAX-WS RIを介して生成されています

    私は、次の設定を試してみましたが、それはうまくいきませんでした:

    <jaxws:client id="localService"> 
        <jaxws:properties> 
         <entry key="javax.xml.stream.XMLOutputFactory"> 
          <ref bean="xmlOutputFactory"/> 
         </entry> 
        </jaxws:properties>  
    </jaxws:client> 
    
    <bean id="invalidCharHandler" class="com.ctc.wstx.api.InvalidCharHandler$ReplacingHandler"> 
        <constructor-arg value=" "/> 
    </bean> 
    
    <bean id="xmlOutputFactory" class="com.ctc.wstx.stax.WstxOutputFactory"/> 
    
    <beanclass="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
        <property name="targetObject"> 
         <ref bean="xmlOutputFactory" /> 
        </property> 
        <property name="targetMethod"> 
         <value>setProperty</value> 
        </property> 
        <property name="arguments"> 
         <list> 
          <util:constant static-field="com.ctc.wstx.api.WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER"/> 
          <ref bean="invalidCharHandler" /> 
         </list> 
        </property> 
    </bean> 
    

    私もカスタムSOAPHandlerとLogicalHandlerを作成しようとしたが、彼らはどちらかの助けにはなりませんでした。

    私はこれのdidn、レスポンスボディからUnicodeの文字を検索および置換する方法がある知っているとレスポンスボディをmanupulatingした後、それを消費しますが、私が探していますが、単に上記WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLERの設定のようにフィルタであり、私はちょうどWoodstoxやSpringや、エラーを投げて通信を破る前に、応答から無効な文字をフィルタリングするためにカスタマイズできるものを手に入れたい。

    org.springframework.remoting.RemoteAccessException:[null]でリモートサービスにアクセスできませんでした;ネストされた例外はcom.sun.xml.ws.encoding.soap.DeserializationException:Faです。応答を読み取るためにile化された: - リンク例外あり: [com.ctc.wstx.exc.WstxUnexpectedCharException:不正な文字((CTRL-CHAR、コード31)) at [row、col {未知のソース}]:[91222] org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.invokeでorg.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:565) で(JaxWsPortClientInterceptor.java:541) com.sun.proxyでorg.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) でorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) で 。$ Proxy42 .salesOrderInfo(不明な情報源)

  • 答えて

    0

    出力側を制御した場合は、見つかった方法(説明済みhere)が機能します。しかし、それは他の何かが書き込み/無効な文字の追加のように聞こえる。

    もしそうなら、制御文字を取り除くだけのjava.io. FilterInputStreamを実装する必要があると思います。比較的簡単に見つけることができます。 0x1Fに問題がある場合のみ。

    +0

    java.io.FilterInputStream実装をコンフィグレーションに挿入するにはどうすればよいですか? – UCJava

    +0

    @UCJava残念なことに、あなたが実際の呼び出し(あなたがそうでないように聞こえる)を制御しないと、私はそのことに答えられません。だから、サーバーを手に入れて適切なXML制御文字を与える方法を考えなければならないかもしれません。 – StaxMan