最近用JAX-WS2.0開發一個WebService 客戶端,訪問普通http沒有什么問題,但當訪問 HTTPS時老是提示 HTTP transport error: Connection refused的錯誤,如下:
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:119)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:128)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:74)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:581)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:540)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:525)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:422)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:235)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:120)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:230)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
我用Myeclipse10 帶的“Test with Web Services Explorer”工具或SOAPUI工具測試,不管是HTTP還是HTTPS都可以得到正確的結果,就覺得奇怪了,到底哪里出了問題。
后來google 了一把,發現以下2篇文章,比較有用
https://www.java.net//node/666240
https://community.jboss.org/thread/204961?_sscc=t
文中都提到了要 覆蓋 BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
修改了代碼,問題解決。
如:
String wnsaddr = "https://www.xxx.com/ws/"
One_Service service = new One_Service();
Wsport port = service.getPort(Wsport.class);
((BindingProvider) port).getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY, wnsaddr);
port.dosomething();