Ninguém?
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.
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.