Remover prefix namespace JAX-WS

Ninguém?

Para fazer isso você pode usar o JAXB https://jaxb.dev.java.net

Na verdade estou utilizando o NetBeans para criação de uma classe de comunicação, assim como foi feito para a NF-e. O problema é que como o CT-e não segue o padrão da NF-e, onde o método era chamado com 2 parâmetros String (cabeçalho e dados), ainda não consegui passar as informações para o objeto cteDadosMsg.

Eu já possuo o XML gerados, tudo que eu preciso é passar para a classe cteDadosMsg.

Poderia dar uma dica? No projeto de NF-e, eu jogava os dados do XML para Strings e estava ok.

Obrigado

Você já importou o WS com o wsimport para gerar as classes?

Não, eu gerei as classes diretamente no NetBeans utilizando o WSDL. O que ele gera é:

try { // Call Web Service Operation
br.inf.portalfiscal.cte.wsdl.ctestatusservico.CteStatusServico service = new br.inf.portalfiscal.cte.wsdl.ctestatusservico.CteStatusServico();
br.inf.portalfiscal.cte.wsdl.ctestatusservico.CteStatusServicoSoap12 port = service.getCteStatusServicoSoap12();
// TODO initialize WS operation arguments here
br.inf.portalfiscal.cte.wsdl.ctestatusservico.CteDadosMsg cteDadosMsg = new br.inf.portalfiscal.cte.wsdl.ctestatusservico.CteDadosMsg();
// TODO process result here
br.inf.portalfiscal.cte.wsdl.ctestatusservico.CteStatusServicoCTResult result = port.cteStatusServicoCT(cteDadosMsg);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}

Muito similar ao que gerava para NF-e. O que eu não estou sabendo fazer é passar os dados dos XML, que já tenho em variáveis String para o objeto cteDadosMsg.

Obrigado novamente!

Então, você já tem o objeto cteDadosMsg o que voce precisa fazer é fazer o binding usando o JAXB.

O JAXB possui duas classes que ajudam fazer isso uma delas é o Marshaller que transforma o objeto java em XML.

Outra é o UnMarshaller que transforma o XML em Objeto.

Exemplo:


String xml = "...."

JAXBContext jaxbContext=JAXBContext.newInstance(CteDadosMsg.class);

Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
JAXBElement<CteDadosMsg> element = (JAXBElement<CteDadosMsg>) 
unMarshaller.unmarshal(new StreamSource(new ByteArrayInputStream(xml.getBytes())),CteDadosMsg.class);

CteDadosMsg cteDadosMsg = element.getValue();

Esse link pode te ajudar melhor:
http://onjava.com/pub/a/onjava/2004/12/15/jaxb.html

cristiano.andrade vc conseguiu resolver esse problema do namespace?

Estou exatamente com o mesmo problema na NF-e.
Qdo adiciono um Document xml no meu objeto NfeDadosMsg na tag infCanc, ele adiciona o namespace e um xmlns="" (vazio)

Olha só o xml gerado:

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Header>
        <ns2:nfeCabecMsg xmlns:ns2="http://www.portalfiscal.inf.br/nfe/wsdl/NfeCancelamento2" xmlns="http://www.portalfiscal.inf.br/nfe">
                <ns2:cUF>41</ns2:cUF>
                <ns2:versaoDados>2.00</ns2:versaoDados>
        </ns2:nfeCabecMsg>
</S:Header>
<S:Body>
<ns2:nfeDadosMsg xmlns:ns2="http://www.portalfiscal.inf.br/nfe/wsdl/NfeCancelamento2" xmlns="http://www.portalfiscal.inf.br/nfe">
<cancNFe versao="2.00">
  <infCanc xmlns="" xmlns:ns3="http://www.portalfiscal.inf.br/nfe" Id="ID41101206065256000163550010000005040001194848">
    <ns3:tpAmb>2</ns3:tpAmb>
    <ns3:xServ>CANCELAR</ns3:xServ>
    <ns3:chNFe>41101206065256000163550010000005040001194848</ns3:chNFe>
    <ns3:nProt>21123123123</ns3:nProt>
    <ns3:xJust>alguma justificativa generica</ns3:xJust>
  </infCanc>
</cancNFe>
</ns2:nfeDadosMsg>
</S:Body>
</S:Envelope>

O estranho é que só aparece esse xmlns="" qdo o xml tem algum atributo, como por exemplo o Id=“ID41101206065256000163550010000005040001194848”

Se puder me dar uma luz ficaria muito agradecido.

Amigo… alguem conseguiu retirar esses prefixos <ns2: do XML ?

Então. Não consegui remover. :stuck_out_tongue:

Tive que criar um envelope soup na mão.

para remover esses prefixos indesejáveis precisa implementar esta interface: NamespacePrefixMapper

segue: https://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb

Diferente dessas pessoas que somente diz que resolveu e não posta a solução, vou postar aqui como consegui resolver, de todas foi a mais fáil que achei :

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.meunamespace.inf.br",
		xmlns =
		  {
		    @javax.xml.bind.annotation.XmlNs(prefix = "",
		      namespaceURI="http://www.meunamespace.inf.br")
		  },
		elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)	
package br.inf.portalfiscal.nfe;

Criei o arquivo package-info.java, coloquei dentro da pasta onde gera o XML e funfou perfeitamente.

[quote=Marcelo Bento]
Diferente dessas pessoas que somente diz que resolveu e não posta a solução, vou postar aqui como consegui resolver, de todas foi a mais fáil que achei :
Criei o arquivo package-info.java, coloquei dentro da pasta onde gera o XML e funfou perfeitamente.[/quote]

se esta usando o JAX-WS essa sua solução só serve para a geração do XML quando for enviar para a sefaz na versão 1.2 do SOAP que precisa enviar os dados com o tipo mime XML e não String como se faz no Axis2 não ira funcionar pois precisa colocar o objeto e ainda tem os dados do cabeçalho o máximo que consegue com sua solução é consumir o status do serviço falo se usar JAX-WS, abraços.

Olá AIX, blz?

Cara… comigo funcionou filet e obtive os restornos esperados!

Abraço.