jax-ws: come ottenere un handle per iniziare / terminare l'elaborazione del messaggio soap in arrivo
Domanda
Situazione: servizio web jax-ws su Weblogic appserver; wsdl primo sviluppo, personalizzazioni jaxb nel file di associazione esterno.
Vorrei ottenere un controllo sul contesto jaxb effettivo che elaborerà il messaggio soap xml in arrivo, prima che non è stato suddiviso in oggetti java.
Quindi vorrei ottenere il non marshalling di questo contesto jaxb - quello che verrà effettivamente utilizzato durante il marshalling. E quindi imposta alcune proprietà di questo unmarshaller (ad esempio listener e idresolver).
Soluzione
Il nuovo @UsesJAXBContex annotazione JAXBContextFactoryin jaxws 2.1.5 - jaxb 2.2 è probabilmente quello di cui ho bisogno. Comunque weblogic 10.3.1 usa jaxws 2.1.1, jaxb 2.1.3.
Un'altra soluzione è utilizzare:
@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>
Questo dà accesso al messaggio soap xml. Devo ancora capire dove si trova il nome del metodo.
Invece di:
@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