JAX-WS: Como obter um identificador para iniciar/final do processamento da mensagem SOAP
Pergunta
Situação: Serviço da Web Jax-WS no WebLogic AppServer; WSDL First Development, Jaxb Customizations no arquivo de ligação externa.
Eu gostaria de obter um identificador para o contexto Jaxb real que processará a mensagem SOAP XML, antes da Ele foi solto em objetos Java.
Então eu gostaria de pegue O UNMARSHALLER deste contexto JAXB - aquele que realmente será usado durante o UNSARSHALLING. E, em seguida, configure algumas propriedades deste UNMARSHALLER (por exemplo, ouvinte e IdResolver).
Solução
O novo @USESJAXBCONTEX Anotação JaxbContextFactoryin JAXWS 2.1.5 - JAXB 2.2 é provavelmente o que eu preciso para isso. No entanto, o WebLogic 10.3.1 usa o JAXWS 2.1.1, JAXB 2.1.3.
Outra solução é usar:
@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>
Isso dá acesso à mensagem SOAP XML. Eu ainda tenho que descobrir onde o nome do método pode ser encontrado.
Ao invés de:
@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