java - JAX WS com.sun.xml.internal.ws.client.ClientTransportException : HTTP transport error: java.net.ConnectException:连接被拒绝

标签 java jax-ws wsimport

我是 JAX-WS 的新手。我正在尝试访问公司内远程计算机上的 Web 服务。

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

我尝试通过 SOAPUI 发送请求,我得到了有效响应。但是当我尝试运行我的代码时,它抛出连接被拒绝。

这是我的代码。

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")

最佳答案

我想这已经太晚了,但也许这个解决方案会帮助其他面临同样问题的人。 我刚遇到同样的问题,发现我的代理 stub 对象调用的 URL 不是我提供给服务对象的 URL。

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

然后我的调试器告诉我,我的服务没有尝试访问给定的 URL,而是尝试访问服务标签下此 URL 上的投影 wsdl 内的内部 IP 地址。

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

因此 stub 指向 192.168.3.20 处的端点,但我的服务不在同一台机器上,因此无法访问它。为了解决这个问题,您必须像这样更正 stub 上的 URL

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

这解决了我的问题

关于java - JAX WS com.sun.xml.internal.ws.client.ClientTransportException : HTTP transport error: java.net.ConnectException:连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036155/

相关文章:

java - 从 WSDL 生成的客户端能否生成排除可选 header 元素的请求?

web-services - 如何使用 wsimport 生成 wsdl 需要身份验证的 Web 服务客户端?

java - 通过 Firebase 单击通知获取 Intent Extra

java - GWT 未知参数 : -nosuperDevMode

java - 用于 jaxws-maven-plugin 下载问题的 m2e 连接器

classpath - 错误 listenerStart - JaxWS - JBoss as 7

java - WsImport ant 任务和 JDK 6

wsdl - wsimport 不起作用

java - @RestController bean 在根上下文中注册,尽管被排除在 exceptFilters 中

Java:替换第一个位置上除符号 "+"之外的所有非数字符号