JAX-WS Problema com prefixo soap

6 respostas
F

Ola galera;

Estou com problema para criar um webservice que deverá falar com uma aplicação de terceiro pré-existente, gerei a estrutura como solicitada, mas o retorno do não está exatamente igual ao solicitado pela documentação do terceiro por conta de alguns prefixos, porém não sei como ajustar esses prefixos e cabeçalhos do meu response. Alguém pode me ajudar?

Veja, este o é o meu reponse gerado no JAX-WS

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body>
  <ns2:primeira_tag xmlns:ns2="http://autovhc.co.uk/">
    <segunda_tag>
      <ns2:Message>Order line is saved</ns2:Message>
      <ns2:Success>true</ns2:Success>
     </segunda_tag>
  </ns2:primeira_tag>

</S:Body>
</S:Envelope>

Mas o esperado é isso

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soap:Body>
     <primeira_tag xmlns="http://autovhc.co.uk/">
           <segunda_tag>
             <Message>Call successful</Message>
             <Success>true</Success>
          </segunda_tag>
       </primeira_tag>
    </soap:Body>

</soap:Envelope>

Estou pesquisando e checando mas não achei algo que corrija isso, desde já agradeço a atenção dispensada.

6 Respostas

A

Ola @fbnois,

da para fazer de várias formas, uma delas é utilizar uma package-info no pacote onde estão seus objetos, ex:

package-info.java

@XmlSchema(namespace = "http://mycompany.com/schema/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED).

eu não lembro tudo de cabeça mas da para configurar as namespaces ex:

@XmlSchema(namespace = “”,

xmlns = {

@XmlNs(namespaceURI = <a href="http://xmlgw.company.com.br">http://xmlgw.company.com.br</a>”, prefix = “”),

@XmlNs(namespaceURI = <a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a> , prefix=“xsi”)

},

Outra forma que fiz a muito tempo no passado foi implementando a interface NamespacePrefixMapper, ex:

Marshaller m = context.createMarshaller();

NamespacePrefixMapper mapper = new CustomNamespacePrefixMapper();

m.setProperty(com.sun.xml.internal.bind.namespacePrefixMapper, mapper);
F

Implementei conforme você orientou no entanto o prefixo Soap continuou não aparecendo apresentando somente “S”, segue código:

@XmlSchema(namespace = "http://meusite.com.br/",
        elementFormDefault = XmlNsForm.UNQUALIFIED,
        xmlns = {
            @XmlNs(prefix = "", namespaceURI = "http://meusite.com.br/"),
           @XmlNs(prefix = "xsi", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")

        }
)
package model.ServiceOrderLineItem;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
P

Talvez porque nas tuas anotações XmlNs não tenhas definido o namespace que queres…

A

verifique o que o colega @pmlm falou, outro ponto é que o S ou SOAP não deve influenciar no consumo do WS, o que é validado é o conteúdo do XML, o protocolo, versão do SOAP se é 1.2 ou não, os headers da requisição, alguns validam as namespaces, a sefaz faz isso, o que não vejo o menor sentido pois XML não foi criado para humanos lerem, mas enfim, testa e nos diz caso não de certo, abração.

F

Não compreendi, pode me ajudar?

F

Valeu @aix consegui fazer a comunicação graças a uma dica sua, acrescentei na minha classe de resposta a seguinte annotation:

@BindingType(value = SOAPBinding.SOAP11HTTP_BINDING)

Obrigado a todos pela atenção.

Criado 16 de junho de 2016
Ultima resposta 17 de jun. de 2016
Respostas 6
Participantes 3