2017-11-02 27 views
-1

WebServiceTemplateを使用してSOAPサービスを呼び出しているときに、以下の例外が発生しています。私は、エンドポイントのURLに接続するためにプロキシを使用しています。java.net.SocketTimeoutException:読み取りタイムアウトしました。WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:561)

以下

は私のXMLの構成です:Webサービスの呼び出し中に

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> 
    <property name="marshaller" ref="jaxb2Marshaller"></property> 
    <property name="unmarshaller" ref="jaxb2Marshaller"></property> 
    <property name="defaultUri"><value>${ws.url}</value></property> 
    <property name="interceptors"> 
     <list> 
      <ref local="wsClientSecurityInterceptor"/> 
     </list> 
    </property> 
    <property name="messageSender" ref="messageSender"></property> 
    </bean> 

    <bean id="messageSender" class="org.springframework.ws.transport.http.CommonsHttpMessageSender"> 
    <constructor-arg ref="httpClient"></constructor-arg> 
    </bean> 

    <!-- This is my custom class to set the proxy --> 
    <bean id="proxyConfig" class="com.somepackage.client.ProxyConfiguration"> 
    <property name="proxyHostPlusPort"><value>${proxy.host}:${proxy.port}</value></property> 
    </bean> 

    <bean id="httpParams" class="org.apache.commons.httpclient.params.HttpClientParams"> 
    <property name="soTimeout" value="120000" /> 
    </bean> 

    <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient"> 
    <property name="hostConfiguration" ref="proxyConfig" /> 
    <property name="params" ref="httpParams" /> 
    </bean> 

    <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="packagesToScan"> 
     <list><value>com.aaa.wsdl</value></list> 
    </property> 
    </bean> 

    <bean id="wsClientSecurityInterceptor" 
    class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"> 
    <property name="securementActions" value="UsernameToken" /> 
    <property name="securementUsername"><value>${ws.username}</value></property> 
    <property name="securementPassword"><value>${ws.password}</value></property> 
    <property name="securementPasswordType" value="PasswordText" /> 
    </bean> 

は時々私は例外の下に取得しています:

org.springframework.ws.client.WebServiceIOException: I/O error: Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out 
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:561) 
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390) 
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:383) 

私はsoTimeoutを設定しているにもかかわらず、私はこの問題を取得しています。私が疑うところは、プロキシが2分以上ダウンしているときに問題が発生するということです。

どうすればこの問題を解決できますか? soTimeoutだけで十分か、いくつかのパラメータを設定する必要がありますか?

ありがとうございました。

+0

あなたはより信頼性の高いプロキシを使用するよりも、他の2分以上、のためにダウンしているプロキシを取り除くことはできません。あなたが何を求めているのか不明です。 – EJP

+0

プロキシまたは実際のエンドポイントシステムに実際に問題があったかどうかをどのように確認できますか? – rupesh

答えて

0

低レベル(ハードウェア/ネットワーク)のエラーを無視することはできません。アプリケーション内でインテリジェンスを追加することで、それを追跡して対応できると言われています。

たとえば、2つの追加の試行などを行います。 より堅牢なアプリケーションを作成するためです。

いくつか試してみると、ネットワークに問題があり、要求を即時に実行できないという旨のメッセージをユーザーに返信し、ロガーを使用して追跡することができます。

これが本当に頻繁な場合は、インフラレベルで対応する必要があります。

用途:

-> try/catch, throw exception 
関連する問題