закрыт сокет при попытке подключиться к веб-сервису Axis2, развернутому на weblogic - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть приложение, которое использует Apache CXF для связи с веб-сервисом Axis2. В тестовой среде все прошло гладко, при переходе в производственную среду возникает следующее исключение:

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 и RecivingTimeout из конфигурации cxf, но бесполезно.

Оба приложения развернуты в Weblogic 10.3.2.0 на разных серверах, мне нужно несколько советов, где может быть проблема? что может привести к закрытию сокета? Я не хочу изучать вещи, не связанные с этой проблемой.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2011

Теперь проблема решена.

Клиент CXF без проблем обращался к WSDL, но в WSDL адрес порта службы был установлен на localhost вместо IP-адреса сервера:

<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.

Адрес мыла установлен на localhost в исходном WSDLоднако, когда я создал веб-сервис Axis2 и развернул его в тестовой среде, адрес обновлялся до IP-адреса компьютера (чего не было в UAT).

Я не уверен, как икогда мыльный адрес обновляется, но я предполагаю, что когда у машины более одного сетевого интерфейса, Axis оставляет адрес как есть или, возможно, обновляет его до localhost.

Теперь, чтобы исправить эту проблему, мне пришлось переопределить адрес службы следующим образом:

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 голосов
/ 04 февраля 2011

Происходит ли это после постоянной фиксированной продолжительности = тайм-аут соединения, например, 30 или 60 секунд, или он мгновенно дает сбой?

Если он мгновенный, существует ли установленная связь между обоими серверами, т.е. нет брандмауэра или других ограничениймежду - ping или telnet работает между обоими серверами?

Является ли настройка теста точно такой же, как Live, т.е. версии WLS и CXF одинаковы?Также см. http://osdir.com/ml/users-cxf-apache/2010-03/msg00407.html

...