クライアントでApache CXF
があります。java.net.SocketException:cxfにオープンファイルが多すぎます
私は、サーバーに接続したいとき時々私は例外をキャッチ:
javax.xml.ws.WebServiceException: Could not send Message.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135) ~[cxf-rt-frontend-jaxws-2.3.3.jar:2.3.3]
at $Proxy81.transferFunds(Unknown Source) ~[na:na]
Caused by: java.net.SocketException: SocketException invoking http://10.20.112.30:40001/Service/JJMService?wsdl: Too many open files
at sun.reflect.GeneratedConstructorAccessor418.newInstance(Unknown Source) ~[na:na]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_05]
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) ~[na:1.7.0_05]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2107) ~[cxf-rt-transports-http-2.3.3.jar:2.3.3]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2092) ~[cxf-rt-transports-http-2.3.3.jar:2.3.3]
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) ~[cxf-rt-core-2.3.3.jar:2.3.3]
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697) ~[cxf-rt-transports-http-2.3.3.jar:2.3.3]
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) ~[cxf-rt-core-2.3.3.jar:2.3.3]
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255) ~[cxf-api-2.3.3.jar:2.3.3]
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516) ~[cxf-rt-core-2.3.3.jar:2.3.3]
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) ~[cxf-rt-core-2.3.3.jar:2.3.3]
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265) ~[cxf-rt-core-2.3.3.jar:2.3.3]
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) ~[cxf-rt-frontend-simple-2.3.3.jar:2.3.3]
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124) ~[cxf-rt-frontend-jaxws-2.3.3.jar:2.3.3]
... 36 common frames omitted
Caused by: java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:447) ~[na:1.7.0_05]
at java.net.Socket.connect(Socket.java:577) ~[na:1.7.0_05]
at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[na:1.7.0_05]
at sun.net.www.http.HttpClient.openServer(HttpClient.java:378) ~[na:1.7.0_05]
at sun.net.www.http.HttpClient.openServer(HttpClient.java:473) ~[na:1.7.0_05]
at sun.net.www.http.HttpClient.<init>(HttpClient.java:203) ~[na:1.7.0_05]
at sun.net.www.http.HttpClient.New(HttpClient.java:290) ~[na:1.7.0_05]
at sun.net.www.http.HttpClient.New(HttpClient.java:306) ~[na:1.7.0_05]
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:995) ~[na:1.7.0_05]
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931) ~[na:1.7.0_05]
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:849) ~[na:1.7.0_05]
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1090) ~[na:1.7.0_05]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:2003) ~[cxf-rt-transports-http-2.3.3.jar:2.3.3]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1955) ~[cxf-rt-transports-http-2.3.3.jar:2.3.3]
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42) ~[cxf-api-2.3.3.jar:2.3.3]
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69) ~[cxf-api-2.3.3.jar:2.3.3]
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2023) ~[cxf-rt-transports-http-2.3.3.jar:2.3.3]
... 45 common frames omitted
私は次のコードで、プロキシクライアントを構築します。1回
org.apache.cxf.jaxws.JaxWsProxyFactoryBean factoryBean = new org.apache.cxf.jaxws.JaxWsProxyFactoryBean();
factoryBean.setAddress("http://10.20.112.30:40001/Service/JJMService?wsdl");
factoryBean.setServiceClass(Service.class);
Service proxyObject = (Service) factoryBean.create();
HTTPConduit httpConduit = (HTTPConduit)ClientProxy.getClient(proxyObject).getConduit();
httpConduit.getClient().setConnectionTimeout(5000);
httpConduit.getClient().setReceiveTimeout(5000);
にこのコードの呼び出しを、proxyObject
がシングルトンであることを意味します。
私は牽引の質問があります。例外の上に
- は、サーバーや私のクライアントで発生しましたか?
- この問題の解決方法を教えてください。
EDITED:
上記スニペットコードでは、私は、次のように、呼の方法のために、私は単にService
インターフェースのメソッドを呼び出す、Service
インターフェイスにクライアント・インスタンスを作成する:
proxyObject.notifyAccountStatement(acountNumber);
注Service
インタフェースはインスタントで同時に呼び出されます(proxyObject
)
私Apache CXF
バージョンは次のとおりです。2.3.3
例外がクライアント上にあります。開いているファイルが多すぎると、開いている接続が多すぎるということです。すべての接続をクローズしていることを確認してください。 – pedrofb
@pedrofb 'Apache CXF'のクローズ接続の方法は? – MJM
基本的に応答を消費します。 WebClientはあなたのためにそれを行います。 Webサービスを呼び出すクライアントコードを含めて、CXFのバージョンを示してください – pedrofb