2012-12-18 28 views
7

ho un servizio web esterno, è lavori su HTTPS, è possibile generare le classi Java con wsimport ma quando ho invnoke il servizio che ho recive l'eccezione seguente:Webservice con 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) 

mia classe che invocano la il servizio è qualcosa di simile:

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

ho provato l'uso SoapUI per chiamare il webservice, ma mostra un'altra eccezione:

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

Modificato:

Questo webservice è mio, ma è in un server esterno, ho visto la mia classe ColleagueService (non sono stato io che ha fatto) E 'annotata con:

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

WSDL generato I' ve questo:

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

il server esterni (un client) ha un server JBoss e un server HTTP Apache, il server HTTP reindirizzare tutte le requestes da ProxyPass con il percorso/servizi/a JBoss server (server JBoss è l'ospite ECM01), comunque il wsdl è sbagliato perché il se rvices è https e in wsdl ho http

Qualcuno può aiutare? Grazie.

+0

PS: Posso accedere a https://my.webservice.url.com/ColleagueService?wsdl nel browser. –

+0

Sei per caso dietro un proxy? –

+0

@ AndersR.Bystrup Sì, nella mia intranet esiste un proxy. –

risposta

8

causati da: java.net.UnknownHostException: ECM01

È questo l'host specificato nel WSDL? Cercare una sezione come questa:

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

Se è così, si dovrà set the endpoint sulla porta:

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

Questo sarà in aggiunta altri compiti come fornire un proxy configuration come Anders R. Bystrup citazioni e (forse) configuring SSL client certificates.


È perfettamente normale che il WSDL non rispecchi il vero endpoint del servizio. Ovunque abbia funzionato, viene utilizzato un URI errato noto (ad esempio localhost in cui tutto è distribuito su host diversi). I client possono impostare l'endpoint in modo esplicito tramite un meccanismo di configurazione (vedere il codice sopra per un client JAX-WS). Ciò consente flessibilità durante lo sviluppo e impedisce l'utilizzo dell'host sbagliato durante lo staging dallo sviluppo alla produzione.

Detto questo, quando si utilizzano WSDL generati automaticamente I pensare come viene generato l'elemento di indirizzo SOAP è un dettaglio di implementazione dell'implementazione JAX-WS. Non sono sicuro come non ho mai fatto affidamento su di esso. Vorrei fare riferimento alla documentazione dell'implementazione del contenitore.

+0

Grazie a @McDowller, penso che tu abbia trovato il mio problema, penso che il mio wsdl sia sbagliato, puoi aiutarmi? Guarda cosa ho modificato in post. –