繁体   English   中英

无法使用Java代码访问Web服务,但是通常可以从Chrome看到其wsdl

[英]Web Service can't be accessed in Java code, but its wsdl can be normally seen from Chrome

大家!

我遇到了一个非常奇怪的问题。 我在Netbeans中编写了一个Web服务示例。 在Netbeans IDE中,Web服务客户端和Web服务运行得很流畅,即使运行缓慢。 但是,在将其部署到Tomcat 7.0后,客户端无法正常评估Web服务。

wsdl的网址是http://221.207.220.12:7001/InterWebService/InterService.wsdl?wsdl ,可通过Chrome浏览器查看。

以下是异常信息:

Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException:      HTTP transport error: java.net.ConnectException: Connection timed out: connect
       at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:117)
       at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:208)
       at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:130)
       at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:95)
       at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:1121)
       at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:1035)
       at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:1004)
       at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:862)
       at com.sun.xml.internal.ws.client.Stub.process(Stub.java:448)
       at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:178)
       at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
       at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77)
       at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147)
       at com.sun.proxy.$Proxy32.news(Unknown Source)
       at Main.news(Main.java:19)
       at Main.main(Main.java:13)
Caused by: java.net.ConnectException: Connection timed out: connect
       at java.net.DualStackPlainSocketImpl.connect0(Native Method)
       at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
       at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
       at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
       at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
       at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
       at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
       at java.net.Socket.connect(Socket.java:589)
       at java.net.Socket.connect(Socket.java:538)
       at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
       at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
       at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
       at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
       at sun.net.www.http.HttpClient.New(HttpClient.java:308)
       at sun.net.www.http.HttpClient.New(HttpClient.java:326)
       at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1167)
       at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1146)
       at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:997)
       at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:931)
       at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1281)
       at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1256)
       at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:104)
       ... 15 more
Java Result: 1
BUILD SUCCESSFUL (total time: 23 seconds)*

寻找别人的帮助! 并预先感谢。

我也遇到过类似的问题,并找到了根本原因,如下所示:

在调查问题的根本原因时,发现WSDL文件中“ wsdl:port”元素的“ soap:address”所引用的URL与通过其调用Web服务的URL不匹配。 根据SOAP规范,这是不正确的。

在我们的环境中,“ soap:address”是指wsdl文件中的“反向代理” URL(即“ xxx.com:9040/service.asmx”),这不是我们试图通过其访问Ace服务的实际URL(即“ xxx.com/service.asmx“)

听起来您需要将代理配置为Java客户端代码。 你可以用类似的方法

String proxyHost = "192.168.2.2";
String proxyPort = "3128";
System.out.println("Setting up with proxy: " + proxyHost + ":" + proxyPort);
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort);
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");

假设您的代理位于“ 192.168.2.2:3128”。 我相信您在启动时需要执行一次此操作,然后再访问任何HTTP连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM