Invocação Dinâmica de Web Services - JAX-WS

1 resposta
ricardo.ludwig

Preciso desenvolver um cliente que possa fazer invocação dinâmica para diferentes web services que possuem o mesmo contrato sendo diferenciados apenas pela URL e pelo targetNamespace. Tentei a seguinte implementação com o JAX-WS (não estou certo se esse possui suporte a esse tipo de invocação “dinâmica”)

//os parâmetros são fictícios para ilustração
javax.xml.ws.Service s = Service.create(new java.net.URL(http://localhost:7001/servico?WSDL), 
                                        new javax.xml.namespace.QName("http://targetName", "tagServiceNameWSDL");

InterfaceWS ws = (IntefaceWS) s.getPort(new javax.xml.namespace.QName("http://targetName", "tagPortNameWSDL"), InterfaceWS.class);
Response response  = ws.invocaServicoWS(arg0, arg1);

Porém a interface (InterfaceWS no exemplo acima) possui as seguintes anotações

@WebMethod(operationName = "SendTextMessageProvider")
@WebResult(name = "Response", targetNamespace = "http://xpto.com.br/")
@RequestWrapper(localName = "SendTextMessageProvider", targetNamespace = "http://xpto.com.br/", className = SendTextMessage")
@ResponseWrapper(localName = "SendTextMessageResponse", targetNamespace = "http://xpto.com.br/", className = SendTextMessageResponse")
public Response invocaServico (
        @WebParam(name = "Request", targetNamespace = "http://xpto.com.br/")
        TextMessage request);

Se eu removo as ref. ao tagetNamespace das anotações @WebResult e @WebPram recebo exceptions JAX-B Exception pois ele não consegue resolver os nomes para Request e Response, o interessante é se apago o arquivo package-info.java os parâmetros passam a serem reconhecidos.
Removendo as ref. ao targetNamespace das anotações @RequestWrapper e @ResponseWrapper recebo uma javax.xml.ws.soap.SOAPFaultException: Cannot find dispatch method for …

Para invocações aonde o contrato exposto (WSDL) possui o mesmo targetNamespace não há problemas. Para invocações para o contratos idênticos com outro targetNamespace preciso alterar as anotações e ainda o arquivo package-info.java.

Por favor, ignorem quaisquer erros nos códigos acimas, são apenas exemplos para eu tentar ilustrar melhor o meu problema.

Seria uma opção para invocação dinâmica usar o CFX, SAAJ ou há alguma forma de conseguir com o JAX-WS, ou isso não é possível?

Obrigado.

1 Resposta

BabyCode

Olá sei q faz um tempinho este post, mais gostaria de saber se vc solucionou o problema pois é parecido com o que eu estou enfrentando.

Criado 6 de outubro de 2011
Ultima resposta 19 de nov. de 2013
Respostas 1
Participantes 2