Java 使用HTTPS的Webservice

Java 使用HTTPS的Webservice,java,web-services,wsdl,Java,Web Services,Wsdl,我有一个外部web服务,它通过https工作,我可以使用wsimport生成java类,但当我取消该服务时,我收到以下异常: Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.UnknownHostException: ECM01 at com.sun.xml.internal.ws.transport.http.cl

我有一个外部web服务,它通过https工作,我可以使用wsimport生成java类,但当我取消该服务时,我收到以下异常:

Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.UnknownHostException: ECM01
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)...
Caused by: java.net.UnknownHostException: ECM01
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
调用服务的类如下所示:

public static void main(String[] args) {
    ColleagueServiceService cs = new ColleagueServiceService();
    ColleagueService service = cs.getColleagueServicePort();

    try {
        service.getColleagues("user", "password", 1);
    } catch (Exception_Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
<wsdl:port binding="tns:FooBinding" name="FooPort">
  <soap:address location="https://ECM01/FooService"/>
</wsdl:port>
我尝试使用SoapUI调用webservice,但它显示了另一个异常:

Tue Dec 18 09:40:06 BRST 2012:ERROR:org.apache.http.conn.HttpHostConnectException: Connection to https://my.webservice.url.com refused
org.apache.http.conn.HttpHostConnectException: Connection to https://my.webservice.url.com refused
at com.eviware.soapui.impl.wsdl.support.http.SoapUIMultiThreadedHttpConnectionManager$SoapUIClientConnectionOperator.openConnection(SoapUIMultiThreadedHttpConnectionManager.java:321)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.java:236)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.java:345)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:241)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)...

Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)...
编辑:

这个Web服务是我的,但它在一个外部服务器中,我看到了我的类CollegService(不是我做的),它的注释是:

@WebService(serviceName="ColleagueServiceService")
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class ColleagueService {
已生成的wsdl如下所示:

<port binding="tns:ColleagueServiceBinding" name="ColleagueServicePort">
    <soap:address location="http://ECM01:80/services/ColleagueService"/>
</port>

外部服务器(客户端)有一个jboss服务器和一个apache http服务器,http服务器通过ProxyPass将所有请求通过path/services/重定向到jboss服务器(jboss服务器是主机ECM01),无论如何,wsdl是错误的,因为服务是https,在wsdl中我有http

有人能帮忙吗?多谢各位

原因:java.net.UnknownHostException:ECM01

这是WSDL中指定的主机吗?请查找类似以下内容的部分:

public static void main(String[] args) {
    ColleagueServiceService cs = new ColleagueServiceService();
    ColleagueService service = cs.getColleagueServicePort();

    try {
        service.getColleagues("user", "password", 1);
    } catch (Exception_Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
<wsdl:port binding="tns:FooBinding" name="FooPort">
  <soap:address location="https://ECM01/FooService"/>
</wsdl:port>
除此之外,还需要完成其他任务,如提供所提到的和(可能)的报告


WSDL不反映真实的服务端点是完全正常的。在我工作过的任何地方,都会使用已知的坏URI(例如,localhost,其中所有内容都分布在不同的主机上)。客户机可以通过配置机制显式设置端点(请参阅上面的JAX-WS客户机代码)这允许在开发过程中保持灵活性,并防止在从开发到生产的过渡过程中使用错误的主机


也就是说,当使用自动生成的wsdl时,我认为如何生成SOAP地址元素是JAX-WS实现的一个实现细节。我不确定,因为我从来没有依赖过它。我会参考您的容器实现的文档。

PS:我可以在浏览器中访问。您是否有可能使用代理?@AndersR.Bystrup是的,在我的内部网中有一个代理。并且您访问的URL位于您的网络外部?在这种情况下,您需要让您的HTTP客户端代码知道代理主机、端口以及可能的身份验证?我可以使用wsimport-httpproxy吗?谢谢@mcdowler,我想你发现了我的问题,我想我的wsdl是错的,你能帮我吗?看看我在帖子上编辑的内容。谢谢。这起作用了。奇怪的是。这只发生在我们使用apache代理来服务WSDL&它的服务时。