【发布时间】:2014-06-18 04:22:53
【问题描述】:
我正在尝试使用 CXF 异步 HTTP 客户端传输,通过设置“use.async.http.conduit”属性,详见this thread,并由this CXF article推荐。
我使用以下代码执行此操作:
Client client = ClientProxy.getClient(wsClient);
client.getRequestContext().put("use.async.http.conduit", Boolean.TRUE);
碰巧的是,我的 Web 服务调用超时(可能是由于某些环境网络问题),并且我的客户端异常包含(提取):
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:698)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:641)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1218)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.getResponseCode(URLConnectionHTTPConduit.java:260)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1513)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1486)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1305)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623)
上面的异常堆栈表明 java.net.HttpURLConnection 类仍在使用中,并且根据 CXF 文档,该设置尚未生效。
我想弄清楚的是如何确保“use.async.http.conduit”已经生效,即是否有可以测试的特定行为,或者我可以启用的特定日志配置毫无疑问会告诉我 Apache HttpAsyncClient 正在使用的客户端?
非常感谢:)
【问题讨论】:
标签: java web-services asynchronous cxf httpurlconnection