SOAP-Fehlermeldung WebServiceException: Could not send Message umgehen

Beim Verbindungsaufbau zu einem WebService, bin ich über ein Problem gestolpert, dass der Zugriff auf den WebService nicht mehr möglich war. Obwohl bei der Generierung des Services (javax.xml.ws.Service) die URL zur WSDL-Datei angegeben wurde und in dieser Datei die Endpoint-URL definiert war, funktionierte der Aufruf jeweils nur einmal nach dem Deployment im jBoss Application Server. Warum? Keine Ahnung. Zunächst wurde die Verbindung wie folgt aufgebaut:

String plainUrl = "http://mywebserivce:9999/call.php?wsdl";
Url url = new Url(plainUrl);
PrintManagerService service = new PrintManagerService(url);	
soap = service.getPrintManagerPort();

In der lokalen Testumgebung (Windows) funktionierte das einwandfrei. Erst im Produktionssystem (Linux; vermutlich spielt das BS hier keine Rolle) kam es zu folgender Fehlermeldung:


javax.xml.ws.WebServiceException: Could not send Message.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135)
...
Caused by: java.io.IOException: IOException invoking http://localhost:8080/call.php: HTTP response '404: Not Found'

Der Host wurde offensichtlich von mywebservice:9999 auf localhost:8080 geändert. Im Code konnte ich keine Stelle finden, an dem vom localhost auf Port 8080 die Rede war. Durch Ergänzung von

((BindingProvider)soap).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, plainUrl);

konnte das Problem gelöst werden. Nun wird einmal die URL übergeben und direkt danach der Endpoint ein weiteres Mal gesetzt:

String plainUrl = "http://mywebserivce:9999/call.php?wsdl";
Url url = new Url(plainUrl);
PrintManagerService service = new PrintManagerService(url);	
soap = service.getPrintManagerPort();
((BindingProvider)soap).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, plainUrl);

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*