具有长请求的Apache CXF客户端“连接重置”
我有一个SOAP Web服务。
从SoapUI调用它时,无论消息内容的大小如何,请求都能正常工作。
如果我从Apache CXF客户端代码发出相同的请求,它可以处理小请求,但如果我的消息内容太长,我会得到“连接重置”,但有以下exception:
Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source) at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.HttpURLConnection.getResponseCode(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1606) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1532) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1440) ... 37 more
有什么可能导致它或如何调试它的想法?
问题是由于当请求大小超过阈值且服务器端不支持时由CXF启用的分块机制引起的。
可以通过编程方式禁用此分块,但CXF中存在一个错误,使得在SSL连接时不考虑编程配置 。
解决方案是通过弹簧配置文件禁用分块。
尝试:
-Dhttps.protocols=TLSv1.2
或者服务器支持的任何版本。
- JAXB生成JAXBElement 而不是String
- Apache Camel根据请求丰富了包含文件内容的消息
- 如何在Apache CXF jax-rs(REST)中将JSON数据作为请求主体提交
- Apache CXF wsdl通过SSL / TLS下载
- 如何使用CXF框架使用受HTTP基本身份validation保护的Web服务?
- 是否可以使用JAX-RS设置ETag而无需使用Response对象?
- maven-cxf-codegen-plugin使用Jaxb绑定为所有生成的类添加inheritance
- Apache CXF – 在In和Out拦截器之间共享数据
- cxf-codegen-plugin不生成源代码