2013-02-23 28 views
1

我是JAX-WS的新手。我正试图访问公司内的远程计算机上的Web服务。JAX WS com.sun.xml.internal.ws.client.ClientTransportException:HTTP传输错误:java.net.ConnectException:连接被拒绝

我使用wsimport工具从我们的Intranet上存在的WSDL资源生成JAVA类。 Java文件已成功创建。

我试着通过SOAPUI发送一个请求,我得到一个有效的响应。但是,当我尝试运行我的代码时,它会拒绝Connection。

这是我的代码。

URL url = new URL("https://xmattersqa.com/api/services/xmatters-4.1.7?wsdl"); 

QName qname = new QName("http://www.xmatters.com/webservices/schema#4.1.7", "xmatters- 4.1.7"); 

FindWhoIsOnDuty f = new FindWhoIsOnDuty(); 
Xmatters417 cdoubleprime = new Xmatters417(url,qname); 

Xmatters417PortType port = cdoubleprime.getXmatters417SOAP11PortHttp(); 

FindWhoIsOnDutyReturn fresponse = port.findWhoIsOnDuty("fmsopsqa","fmsopsqa", "", "", "", "Default Company", "Test Grp 1","23/02/2013 0:00:00 AM", "24/02/2013 0:00:00 AM", false); 

后来我尝试添加这段代码,但它仍然不起作用。

Authenticator.setDefault(new ProxyAuthenticator("fmsopsqa","fmsopsqa")); 
System.setProperty("http.proxHost","sprdxmaws401.corp.net"); 
System.setProperty("http.proxyPort", "8081"); 

这是我得到

com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused 
at  com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:121) 
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:142) 
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83) 
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105) 
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) 
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) 
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) 
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) 
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211) 
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) 
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107) 
at $Proxy32.findWhoIsOnDuty(Unknown Source) 
at FindDuty.main(FindDuty.java:76) 
Caused by: java.net.ConnectException: Connection refused 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) 
at java.net.Socket.connect(Socket.java:529) 
at java.net.Socket.connect(Socket.java:478) 
at sun.net.NetworkClient.doConnect(NetworkClient.java:163) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:388) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:523) 
at sun.net.www.http.HttpClient.<init>(HttpClient.java:227) 
at sun.net.www.http.HttpClient.New(HttpClient.java:300) 
at sun.net.www.http.HttpClient.New(HttpClient.java:317) 
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:949) 
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836) 
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014) 
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:109) 

服务端点的链接似乎正确设置。

@WebServiceClient(name = "xmatters-4.1.7", targetNamespace = "http://www.xmatters.com/webservices/schema#4.1.7", wsdlLocation = "https://xmattersqa.com/api/services/xmatters-4.1.7?wsdl") 
+2

你试图连接到一个SSL安全的web服务就像使用常规的HTTP服务。它不这样工作。看看[这个例子](http://stackoverflow.com/q/11001102/1530938)方向 – kolossus 2013-02-23 05:19:50

+0

好的,谢谢我会尝试。为什么soapUI不需要任何证书? – AKG 2013-02-25 21:17:23

+0

我无法令人满意地解释我自己,但我最好的猜测是soapUI可能能够通过本机窗口处理自动协商SSL连接,您在代码中没有执行 – kolossus 2013-02-26 16:32:45

回答

7

我想这是太晚了,但也许这种解决方案将帮助其他人面临同样的问题。 我刚刚遇到同样的问题,发现我的代理存根对象调用另一个URL比我给服务对象。

java.net.URL wsdlURL = new URL("http://myServiceHost.com/online/myService?wsdl"); 
Service serviceWebClient = new ServiceWebClient(wsdlURL, new QName("my/namespace", "MyServiceName")); 

我的调试器显示我,然后,我的服务没有尝试访问给定的URL,但一个内部IP地址,这是投影WSDL中的服务标签下这个网址。

<service name="MyServiceName"> 
    <port name="MyServicePort" binding="tns:MyServiceBindingBinding"> 
    <soap:address location="http://192.168.3.20:9443/online/myService/"/> 
    </port> 
</service> 

所以存根指出,在192.168.3.20终点,但我的服务是不是在同一台机器上,因此它可能obiously无法达成。为了解决这个问题,你必须纠正这样

MyService myService = serviceWebClient.getPort(MyService.class); 
BindingProvider bindingProvider = (BindingProvider) myService; 
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, wsdlURL.toString()); 

存根URL这个固定的问题,对我来说

+0

谢谢 - 我的是一个类似的修复 - 但ENDPOINT_ADDRESS_PROPERTY需要是URL(没有?WSDL后缀) – PeterX 2017-09-07 01:10:43

相关问题