Ich habe eine einfache Java-Schnittstelle/Implementierung, die ich über CXF exponiere. Ich habe ein jaxws Element in meiner Spring-Konfigurationsdatei wie folgt aus:CXF-Code erster Dienst, WSDL-Generierung; soap: Adressänderungen?
<jaxws:endpoint id="managementServiceJaxws"
implementor="#managementService" address="/jaxws/ManagementService" >
</jaxws:endpoint>
Es die WSDL aus meiner kommentierten Schnittstelle erzeugt und macht den Dienst. Dann, wenn ich http://myhostname/cxf/jaxws/ManagementService?wsdl treffe, bekomme ich eine schöne WSDL. Am unteren Ende in der WSDL-Datei: Service-Element, werde ich
<soap:address location="http://myhostname/cxf/jaxws/ManagementService"/>
jedoch sehen, einige Zeit ein oder zwei Tage später, ohne Neustart der Anwendung, die gleiche URL schlagen produziert:
<soap:address location="http://localhost/cxf/jaxws/ManagementService"/>
Diese verursacht eine Reihe von Problemen, aber was ich wirklich will, ist es, es zu beheben. Im Moment gibt es einen bestimmten Client für den Webservice, der den Endpunkt auf localhost setzt. weil es auf derselben Maschine läuft. Ist es möglich, dass die WSDL neu generiert und zwischengespeichert wird und dann die 'localhost' Version anzeigt? Teilweise kenne ich nicht den genauen Mechanismus, mit dem man von einer? Wsdl-Anfrage in CXF zur Antwort geht. Es scheint fast sicher zu sein, dass es eine zwischengespeicherte Version abruft, vorausgesetzt, dass es die Adresse bestimmen soll, indem man den Servletcontainer (Jetty) fragt.
Als Referenz weiß ich, eine Stopgap-Lösung verwendet den Hostnamen auf dem Client und stellt sicher, dass ein Alias vorhanden ist, so dass es über den Loopback geht.
EDIT: Als Referenz habe ich bestätigt, dass, wenn ich meine Anwendung hochbringen und zuerst über localhost, dann die Abfrage für die WSDL über den Hostnamen zeigt die Adresse als localhost. Umgekehrt bewirkt das erste Drücken auf den Hostnamen, dass localhost-Anfragen den Hostnamen anzeigen. Offensichtlich wird hier etwas zwischengespeichert.
EDIT2: ich glaube, das Problem OsgiServletController sein könnte, da es eine Methode ist:
private synchronized void updateDests(HttpServletRequest request) {
if (disableAddressUpdates) {
return;
} //snip
Aber ich sehe die Bestätigung keine Möglichkeit, dass das Problem ist, dass dieser Booleschen Wert auf true gesetzt ist oder wie ich könnte es tatsächlich aktualisieren!
2.2.10 ist die Version, die ich verwende. – jcalvert