Webservice avec HTTPS
J'ai un service web externe, il fonctionne sur https, je peux générer des classes java avec wsimport mais quand je invnoke le service que j'ai en attente de la suite d'exception:
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)
Ma classe qui appelle le service est quelque chose comme ceci:
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();
}
}
J'ai essayé d'utiliser SoapUI pour appeler le webservice, mais il montre une autre exception:
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)...
ÉDITÉ:
Ce service web est le mien, mais il est dans un serveur externe, j'ai vu ma classe ColleagueService(ce n'était pas moi qui l'ai), il est annotée avec:
@WebService(serviceName="ColleagueServiceService")
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class ColleagueService {
Le wsdl généré, j'ai ceci:
<port binding="tns:ColleagueServiceBinding" name="ColleagueServicePort">
<soap:address location="http://ECM01:80/services/ColleagueService"/>
</port>
Le serveur externe(client) a un serveur jboss et le serveur http apache, le serveur http de redirection de tous les requestes par la directive ProxyPass avec chemin d'accès /services/jboss server (serveur jboss est l'hôte ECM01), de toute façon le wsdl est mauvais, parce que, dans les services est en https et en wsdl j'ai http
Peut aider quelqu'un? Merci.
Êtes-vous, par hasard derrière un proxy?
Oui, dans mon intranet, il y a un proxy.
Et l'URL que vous avez frapper est externe à votre réseau? Dans ce cas, vous avez besoin pour faire de votre client HTTP code de conscience de l'hôte proxy, port et, éventuellement, auth.
Oui, l'URL est à l'extérieur de mon réseau, Comment dois-je faire? Puis-je utiliser wsimport -httpproxy?
OriginalL'auteur Lucas Merencia | 2012-12-18
Vous devez vous connecter pour publier un commentaire.
Est-ce l'hôte spécifié dans le fichier WSDL? Recherchez un article comme ceci:
Si oui, vous aurez à définir le point de terminaison sur le port:
Ce sera en plus d'autres tâches comme la fourniture d'une la configuration du proxy comme Anders R. Bystrup mentions et (peut-être) configuration de SSL certificats client.
Il est parfaitement normal pour le WSDL de ne pas refléter la véritable point de terminaison de service. Partout où j'ai travaillé, une mauvaise connaissance de l'URI est utilisée (par exemple localhost où tout est distribué sur des hôtes différents.) Les Clients peuvent définir le point de terminaison explicitement par l'intermédiaire d'un mécanisme de configuration (voir le code ci-dessus pour un JAX-WS client.) Cela permet de la souplesse au cours du développement et empêche le mauvais hôte utilisé pendant la mise en attente du développement à la production.
Cela dit, lors de l'utilisation de l'auto-générés langage wsdl je pense comment le SAVON adresse de l'élément est généré est un détail de l'implémentation de votre JAX-WS mise en œuvre. Je ne suis pas certain que je n'ai jamais compté sur elle. Je vous renvoie à la documentation de votre conteneur de mise en œuvre.
Je vous remercie. Cela a fonctionné. Étrangement. Cela ne m'est arrivé une fois, nous avons été à l'aide d'un proxy apache pour servir le WSDL & c'est le service.
OriginalL'auteur McDowell