我正在使用HTTPS上的Web Logic测试SOAP请求。我已经从WSDL创建了所需的类(使用wsimport)。我已经启用了SSL调试,看起来会话是在握手过程之后建立的。但是,在那之后,我得到了一个EOFException。同样的服务在另一个端口的HTTP中运行得很好,访问这个端口没有任何问题。
***
%% Cached client session: [Session-8, TLS_RSA_WITH_AES_128_CBC_SHA]
[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', WRITE: TLSv1 Application Data, length = 405
[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', WRITE: TLSv1 Application Data, length = 1
[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', WRITE: TLSv1 Application Data, length = 1573
javax.xml.ws.WebServiceException: java.io.EOFException: Response contained no data
at com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:221)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:204)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:124)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:118)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:866)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:815)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:778)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:680)
at com.sun.xml.ws.client.Stub.process(Stub.java:272)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:153)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:115)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:95)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:136)
at com.sun.proxy.$Proxy194.postEWOOrder(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)客户端代码
// These two classes are WSDL -> java generated class
EWOProviderWSEWOWsdl ewoProvider = new EWOProviderWSEWOWsdl();
EWOWsdlPortType servicePort = ewoProvider.getEWOProviderWSEWOWsdlPort();
BindingProvider bindingProvider = (BindingProvider) servicePort;
Map<String, Object> requestContext = bindingProvider
.getRequestContext();
// Target End Point URL is set in the context here
requestContext
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"https://MY Url where WSDL is deployed");
// Timeouts in milliseconds
requestContext.put("com.sun.xml.internal.ws.request.timeout", "25000");
requestContext.put("com.sun.xml.internal.ws.connect.timeout", "15000");
// Credentials are set in over here
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("UserName"));
headers.put("Password", Collections.singletonList("Password"));
requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
System.setProperty("proxySet", "true");
System.setProperty("proxyPort", "80");
System.setProperty("proxyHost", "myproxy_host");
JAXBElement<EWOOrders> ewoOrders = generateWSRequestObject();
String generatedXml = generateXmlRequestForProgistix(ewoOrders);
System.out.println("XML >> " + generatedXml);
DocTypeRefStatusMessageResponse responseMessage = servicePort
.postEWOOrder(ewoOrders.getValue());经过长时间的搜索,我在这里找到了一些东西,但不确定如何才能做到这一点,因为我的代码主要是由wsimport生成的,我只是通过wsimport访问服务。看看我所说的链接,
http://deepakmodi2006.blogspot.ca/2011/05/how-to-fix-javaioeofexception-response.html发布于 2015-12-30 03:35:32
我们从一个独立的客户端执行此操作,以再现实际发生的情况,并发现由于我们的代理返回的异常,内部有5次向发送的试用请求迭代。
5警告/异常,如下所述:
< 2015年12月18日上午9:18:30 EST> secure-test.myserver.com不受信任,导致EST>握手失败。检查证书链以确定是否应该信任它。如果它应该是受信任的,则更新客户端受信任的CA配置以信任签署了对等证书链的CA证书。如果要连接到使用演示证书的WLS服务器(默认的WLS服务器行为),并且希望此客户端信任演示证书,请在命令行上为此client.>指定-Dweblogic.security.TrustKeyStore=DemoTrust
最后,客户端应用程序只抛出一个异常,即EOF异常。
原因是我们的代理不信任这种通信。在安全团队将服务器证书安装到它的代理/证书存储中之后,这个问题就解决了。
https://stackoverflow.com/questions/34292026
复制相似问题