JAX-WS: So erhalten Sie einen Griff zum Starten/Ende der Verarbeitung eingehender Seifennachricht
Frage
Situation: JAX-WS-Webdienst auf Weblogic AppServer; WSDL Erste Entwicklung, JAXB -Anpassungen in externer Bindungsdatei.
Ich möchte den tatsächlichen JAXB -Kontext verarbeiten, der die eingehende SOAP XML -Nachricht verarbeitet. Vor Es wurde in Java -Objekte unangebracht.
Dann würde ich gerne gerne erhalten Der Unmarshaller dieses JAXB -Kontextes - derjenige, der tatsächlich während der Unmarshalling verwendet wird. Und dann einige Eigenschaften dieses Unmarshallers (z. B. Hörer und Idresolver) einrichten.
Lösung
Das neue @USESJAXBCONTEX Annotation JaxbContextFactoryin Jaxws 2.1.5 - Jaxb 2.2 ist wahrscheinlich das, was ich dafür brauche. Weblogic 10.3.1 verwendet jedoch JAXWS 2.1.1, JAXB 2.1.3.
Eine andere Lösung ist zu verwenden:
@WebServiceProvider(portName = "Port", serviceName = "Service", targetNamespace = "tns", wsdlLocation = "/wsdls/x.wsdl")
@BindingType(value = "http://schemas.xmlsoap.org/wsdl/soap/http")
@ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE)
public class ServiceProvider implements Provider<SOAPMessage>
Dies gibt Zugriff auf die SOAP XML -Nachricht. Ich muss noch herausfinden, wo der Methodenname gefunden werden kann.
Anstatt von:
@WebService(portName = "Port", serviceName = "Service", targetNamespace = "tns",
wsdlLocation = "/wsdls/x.wsdl", endpointInterface = "tns.PortType")
@BindingType("http://schemas.xmlsoap.org/wsdl/soap/http")
public class ServicePort implements PortType