2011-02-03 5 views
0

私は、Apache CXFを使用してAxis2 Webサービスと通信するアプリケーションを持っています。ソケットが閉じられ、weblogicにデプロイされたAxis2 Webサービスに接続しようとしています

INFO: Interceptor has thrown exception, unwinding now 
org.apache.cxf.interceptor.Fault: Could not send Message. 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:466) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:75) 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124) 
    at $Proxy131.retrieveAccountSummary(Unknown Source) 
. 
. 
. 

Caused by: java.net.SocketException: Socket Closed 
    at java.net.PlainSocketImpl.setOption(PlainSocketImpl.java:201) 
    at java.net.Socket.setTcpNoDelay(Socket.java:850) 
    at weblogic.net.http.HttpClient.openServer(HttpClient.java:326) 
    at weblogic.net.http.HttpClient.openServer(HttpClient.java:411) 
    at weblogic.net.http.HttpClient.New(HttpClient.java:241) 
    at weblogic.net.http.HttpURLConnection.connect(HttpURLConnection.java:176) 
    at weblogic.net.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:242) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1836) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1794) 
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42) 
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:70) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1854) 
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66) 
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:595) 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
    ... 40 more 

限り、私は、ネットワーク上の何も接続を終了していない、と言われた、と私はからのConnectionTimeoutとRecievingTimeoutを増加させたとして:テスト環境ですべてが、次の例外が発生した本番環境への移行、スムーズに行ってきましたcxf設定は使用できません。

両方のアプリケーションが異なるサーバー上のweblogic 10.3.2.0にデプロイされているため、どこに問題があるのか​​に関するガイダンスが必要ですか?ソケットが閉じられる原因は何ですか?私はこの問題に関係していないことを調べることは望まない。

答えて

0

問題は解決しました。

CXFクライアントは何の問題もなくWSDLにアクセスしましたが、WSDLでサービスポートアドレスではなく、サーバーのIPアドレスの localhostに設定した

<wsdl:service name="serviceName"> 
    <wsdl:port binding="tns:servicePortBinding" name="servicePort"> 
     <soap:address location="http://localhost:7001/app/services/service/" /> 
    </wsdl:port> 
</wsdl:service> 

私のアプリケーションが送信しようとしていましたlocalhostへのリクエストともちろん、SocketExceptionへのリクエストでした。

元のWSDLではsoapアドレスがlocalhostに設定されていますが、Axis2 Webサービスを作成してテスト環境にデプロイすると、そのアドレスはマシンのIPアドレスに更新されていました(これはUAT )。

soapアドレスがいつ、どのように更新されるのかよく分かりませんが、マシンに複数のネットワークインターフェイスがある場合、Axisはアドレスをそのまま残すか、localhostに更新します。例外が5秒以内に起こるご返信用

port = service.getMyServicePort(); 
BindingProvider provider = (BindingProvider) port; 
String endpointAddress = "http://<ip address>:7001/app/services/service/"; 
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointAddress); 
0

これは、固定時間= 30秒または60秒のような接続タイムアウト後に発生しますか、またはそれは即座に失敗しますか?

瞬時に、両方のサーバー間に接続が確立されている、つまり間にファイアウォールやその他の制限はありません。pingまたはtelnetは両方のサーバー間で機能しますか?

テスト設定はLiveとまったく同じですか、つまりWLSとCXFのバージョンは同じですか? も参照してください。http://osdir.com/ml/users-cxf-apache/2010-03/msg00407.html

+0

おかげで、(のConnectionTimeoutとRecievingTimeoutの増加は助けにはならなかった)とtelnetが細かい上に働いた:次のように私はoverride the service addressに持っていたこの問題を解決するために今すぐ

同じポート。 私は、テスト環境と本番環境で同じバージョンのCXFとweblogicを使用しています。 実際にCXFバージョンを提案してアップグレードした同じリンクを見つけました。テスト環境では動作し続けましたが、CXFはlocalhostに配置されているかのようにWSDLの場所を読み取るようになりました(つまり、 ')だから、私はCXF 2.1.3に復帰しました。 –

+0

@Ahmad:通常、5秒はweblogicが他のサーバに全く接続できないことを示しています。 https urlがあるか 'setConnectionTimeout(0);'を試してください。これはタイムアウトが全くないことを意味します。また 'setMaxRetransmits'を3にしようとすると – JoseK

+0

、実際にはsetMaxRetransmitsは3に設定されます:) あなたが参照したリンクのように、CXFバージョンのアップグレードを続けます。以前は、CXF jarファイルをアップグレードして、欠落している依存関係を追加しました。次の例外が発生しました: 'のSocketExceptionは、httpを呼び出す:// localhostを:7001/QARの%20WS /サービス/ RetSrvc /:私は、次のWSDLの場所を'提供するため、有線であるソケットClosed' http://10.20.11.2:7001/ QAR%20WS/services/RetSrvc?wsdl'は異なるマシンのIPです。 今回は、正しいバージョンのCXF依存関係を使用していることを確認します。 –

関連する問題