2012-12-18 30 views
7

Tôi đã một dịch vụ web bên ngoài, đó là các công trình trên https, tôi có thể tạo ra các lớp java với wsimport nhưng khi tôi invnoke dịch vụ tôi recive ngoại trừ sau:Webservice với HTTPS

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) 

Lớp học của tôi mà gọi dịch vụ là một cái gì đó như thế này:

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(); 
    } 
} 

tôi tryed sử dụng soapUI gọi webservice, nhưng nó cho thấy một ngoại lệ:

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

EDITED:

webservice này là của tôi, nhưng đó là trong một máy chủ bên ngoài, tôi thấy ColleagueService lớp học của tôi (nó không phải là tôi, người đã làm) nó annoted với:

@WebService(serviceName="ColleagueServiceService") 
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) 
public class ColleagueService { 

WSDL được tạo tôi đã này:

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

các máy chủ bên ngoài (một khách hàng) có một máy chủ JBoss và một máy chủ apache http, máy chủ http chuyển hướng tất cả requestes bởi ProxyPass với path/dịch vụ/để JBoss máy chủ (server JBoss là host ECM01), dù sao thì wsdl cũng sai vì rvices là https và trong wsdl Tôi đã http

Có ai giúp được không? Cảm ơn bạn.

+0

PS: Tôi có thể truy cập https://my.webservice.url.com/ColleagueService?wsdl trong trình duyệt. –

+0

Bạn có bất kỳ cơ hội nào sau proxy không? –

+0

@ AndersR.Bystrup Có, trong mạng nội bộ của tôi có một proxy. –

Trả lời

8

Nguyên nhân: java.net.UnknownHostException: ECM01

Đây có phải là một host cụ thể trong WSDL? Hãy tìm một phần như thế này:

<wsdl:port binding="tns:FooBinding" name="FooPort"> 
    <soap:address location="https://ECM01/FooService"/> 
</wsdl:port> 

Nếu vậy, bạn sẽ phải set the endpoint trên cổng:

BindingProvider bindingProvider = (BindingProvider) port; 
bindingProvider.getRequestContext() 
    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 

này sẽ được thêm các nhiệm vụ khác như cung cấp một proxy configuration như Anders R. Bystrup đề cập và (có thể) configuring SSL client certificates.


Hoàn toàn bình thường khi WSDL không phản ánh điểm cuối dịch vụ thực. Bất cứ nơi nào tôi đã làm việc, một URI xấu đã biết được sử dụng (ví dụ: localhost nơi mọi thứ được phân phối trên các máy chủ khác nhau.) Khách hàng có thể thiết lập điểm cuối một cách rõ ràng thông qua một cơ cấu cấu hình (xem mã trên cho máy khách JAX-WS). trong quá trình phát triển và ngăn chặn các máy chủ sai được sử dụng trong giai đoạn từ phát triển đến sản xuất.

Điều đó nói rằng, khi sử dụng WSDL tự động, tôi nghĩ cách phần tử địa chỉ SOAP được tạo là chi tiết triển khai thực hiện JAX-WS của bạn. Tôi không chắc chắn vì tôi chưa bao giờ dựa vào nó. Tôi sẽ tham khảo tài liệu về việc triển khai vùng chứa của bạn.

+0

Cảm ơn @McDowller, tôi nghĩ bạn đã tìm thấy sự cố của mình, tôi nghĩ rằng wsdl của tôi sai, bạn có thể giúp tôi không? Xem những gì tôi đã chỉnh sửa trên bài đăng. –