2012-12-18 15 views
7

Mam zewnętrzny serwis internetowy, to prace nad https, mogę wygenerować klas Java z wsimport ale kiedy invnoke usługę ja recive wyjątek następująco:Webservice 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) 

moją klasę, która powołać się na usługa jest coś takiego:

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

tryed użytkowania SoapUI do wywołania usługa, ale to pokazuje inny wyjątek:

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

edycja:

Ta usługa jest moja, ale to w serwerze zewnętrznym, widziałem moja klasa ColleagueService (to nie ja zrobiłem) to annoted z:

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

Wygenerowany WSDL I ve to:

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

zewnętrznego serwera (klient) ma serwer JBoss oraz serwer Apache, serwer http przekierować wszystkie requestes przez ProxyPass z ścieżka/usług/do JBoss serwer (serwer JBoss jest gospodarzem ECM01), w każdym razie wsdl jest źle, ponieważ se rvices jest https i we wsdl Mam http:

Czy ktoś może pomóc? Dziękuję Ci.

+0

PS: Mogę uzyskać dostęp do strony https://my.webservice.url.com/ColleagueService?wsdl w przeglądarce. –

+0

Czy jesteś przypadkiem za proxy? –

+0

@ AndersR.Bystrup Tak, w moim intranecie jest proxy. –

Odpowiedz

8

Spowodowany przez: java.net.UnknownHostException: ECM01

Czy ten gospodarz określone w WSDL? Spójrz na części jak ten:

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

Jeśli tak, to trzeba będzie set the endpoint na porcie:

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

To będzie oprócz innych zadań jak zapewniając proxy configuration jak Anders R. Bystrup wspomina i (być może) configuring SSL client certificates.


Jest to całkowicie normalne, że WSDL nie odzwierciedla rzeczywistego punktu końcowego usługi. Gdziekolwiek pracowałem, używany jest znany zły identyfikator URI (np. Localhost, gdzie wszystko jest rozprowadzane na różnych hostach). Klienci mogą ustawić punkt końcowy jawnie za pomocą mechanizmu konfiguracji (patrz powyższy kod dla klienta JAX-WS). Pozwala to na elastyczność podczas rozwoju i zapobiega wykorzystywaniu niewłaściwego gospodarza podczas przemieszczania z etapu rozwoju do etapu produkcji.

To powiedziawszy, podczas korzystania z generowanych automatycznie WSDL I myśleć, jak element adresu SOAP jest generowany szczegółów implementacji implementacji JAX-WS. Nie jestem pewien, ponieważ nigdy na nim nie polegałem. Odwołuję się do dokumentacji Twojej implementacji kontenera.

+0

Dzięki @McDowller, Myślę, że znalazłeś mój problem, myślę, że mój wsdl jest zły, możesz mi pomóc? Zobacz, co edytowałem w poście. –

Powiązane problemy