2012-11-27 1 views
9

Ich habe eine Webservice-Implementierung mit wsimport aus einer WSDL generiert. Dieser Dienst wird auf einem Tomcat-Server in einer Spring-Webanwendung bereitgestellt. Die Feder-Konfigurationsdatei (nur der Webservice Teil) wie dieses istWie kann ich die automatisch generierte Soap ändern: Adresse von einem JAX-WS Webdienst WSDL mit Spring

<wss:binding url="/fooService"> 
    <wss:service> 
     <ws:service bean="#fooService"> 
    </wss:service> 
</wss:binding> 

Als ich dieses Webapp in tomcat einsetzen, kann ich die WSDL, wenn ich

http://localhost:8080/foo/fooService?wsdl 

und die Wsdl Seife zu

gehen: Adresse Eigenschaft ist wie folgt:

<service name="FooService"> 
    <port name="FooService" binding="tns:FooServiceBinding"> 
     <soap:address location="http://localhost:8080/foo/fooService"/> 
    </port> 
</service> 

Und für jetzt ist alles ok.

Das Problem ist, dass wir in der Produktion einen Apache-Webserver haben und dieser Server die Anfragen an Tomcat umleitet. Es funktioniert auch, aber wenn wir die WSDL bekommen, ist die soap: Adresse immernoch localhost: 8080 und wir brauchen dies als öffentliche URL zum Webservice.

Irgendwelche Ideen?

Vielen Dank.

+0

informieren Sie mich, was Ihre xml Frühjahr Schema kennen, können Header, um Feder verbindlich für Hafen- und Seife in Ihrem Code-Snippet oben registrieren benutzerdefinierte Endpunktadresse zu erfüllen waren und Hafen. Ich habe http://jax-ws.dev.java.net/spring/core, servlet und local-transport ausprobiert, sehe aber, dass keiner von ihnen auf diese verweist. Als Ergebnis bekomme ich Saxparserexceptions. Kann keine einfache Antwort finden. Vielen Dank im Voraus für jegliche Hilfe. – arcseldon

+0

Doh! ok, du verweisst hier die wsdl-datei. Entschuldigung, ich suche, wie man die Endpunktadresse in Config überschreibt. – arcseldon

Antwort

8

Nun, ich habe eine Lösung gefunden:

Es scheint, dass JAX-WS diese Eigenschaft automatisch erzeugt. Ich habe festgestellt, dass andere Webservice-Frameworks-Implementierungen es dem Benutzer ermöglichen, dies durch Festcodierung der URL in einer Eigenschaft zu ändern, aber es scheint, dass JAX-WS dies nicht tut. Jemand weiß, ob es einen Weg gibt?

Wie auch immer, ich habe eine Problemumgehung gefunden: Mit proxyName und proxyPort Eigenschaften in tomcat Connector-Konfiguration können Sie Tomcat sagen, dass hinter einem Proxy (in unserem Fall Apache-Server) und das ist der "echte" Port für die Clients ist 80.

Durch diese Änderung enthält die automatisch generierte soap: -Adresse den korrekten Wert.

Referenzen:

+0

weiß jemand, wie man das in wildfly macht? – Smalcat

+1

unser Server stand auch hinter einem Loadbalancer und ich hatte auch Probleme, die http zu https ändern. Schließlich löste ich es, indem ich die drei Werte "scheme =" https "proxyName =" host.com "proxyPort =" 443 "" zu meiner server.xml von Tomcat hinzufügte. – Steve

+0

Hey @Smalcat Hast du herausgefunden, wie man auf WildFly löst? Vor einem ähnlichen Problem hier. Bitte teilen Sie, wenn Sie es getan haben. Vielen Dank! – Enoobong

Verwandte Themen