Cabeçalho para consumir WS da NFe

mas com essa String você escreve outro XML e passa esse novo XML para a classe XMLStreamReader?

tipo

String xml = "<consStatServ>...</consStatServ>";

xml = "<pog>" + xml + "</pog>";

ai vc passa a sua string para o método

o XmlStreamReader vai eliminar a tag pog e vai ficar apenas seu XML

Criou o NfeDadosMsg.

Agora tenho outra dúvida o método nfeStatusServicoNF2(NfeDadosMsg, NfeCabecMsgE)

Esse segundo parâmetro também crio com sua respectiva Factory?

não, vc instância ele que tem um método que seta o cabeçalho

zeron não sei se aconteceu com vc, mas comigo o XML de resposta foi esse:

<?xml version='1.0'?> <nfeStatusServicoNF2Result> <retConsStatServ versao="2.00"> <tpAmb>2</tpAmb> <verAplic>RS20100210143458</verAplic> <cStat>516</cStat> <xMotivo>Rejeicao: Falha no schema XML - inexiste a tag raiz esperada para a mensagem</xMotivo> <cUF>43</cUF> <dhRecbto>2010-02-27T11:03:42</dhRecbto> <tMed>1</tMed> </retConsStatServ> </nfeStatusServicoNF2Result>

Isso significa que a tag NFe deve ter sido removida em algum lugar. Não será na classe XMLStreamReader?

Comigo deu certo

vc deve estar preenchendo errado algum campo

faz o seguinte

vc usa log4j??

se não usar coloca ele ai, e seta o level principal do loog como DEBUG, ai qdo vc executar o axis ele vai escrever os soap de envio e de resposta no console, ou no seu log q vc especificou

Ele está escrevendo isso aí:

1913 [main] DEBUG httpclient.wire.content - >> "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv=“http://www.w3.org/2003/05/soap-envelope”>soapenv:Header<ns1:nfeCabecMsg xmlns:ns1=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2” soapenv:mustUnderstand=“false”>ns1:cUF43</ns1:cUF>ns1:versaoDados2.00</ns1:versaoDados></ns1:nfeCabecMsg></soapenv:Header>soapenv:Body<ns1:nfeDadosMsg xmlns:ns1=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2”>“aqui ele escreve até a metade da tag "
1914 [main] DEBUG httpclient.wire.content - >> “[\r][\n]”
1914 [main] DEBUG org.apache.axiom.om.impl.MTOMXMLStreamWriter - Calling MTOMXMLStreamWriter.flush
1914 [main] DEBUG org.apache.axiom.om.impl.MTOMXMLStreamWriter - Calling MTOMXMLStreamWriter.flush
1914 [main] DEBUG org.apache.axiom.om.impl.MTOMXMLStreamWriter - Calling MTOMXMLStreamWriter.flush
1914 [main] DEBUG org.apache.axiom.om.impl.MTOMXMLStreamWriter - Calling MTOMXMLStreamWriter.flush
1914 [main] DEBUG org.apache.axis2.transport.http.SOAPMessageFormatter - end writeTo()
1914 [main] DEBUG httpclient.wire.content - >> “709[\r][\n]”
1915 [main] DEBUG httpclient.wire.content - >> “e aqui ele escreve a partir da outra metade da tag até o fim da nota”</ns1:nfeDadosMsg></soapenv:Body></soapenv:Envelope>”

Essa quebra na escrita influencia em algo?

Vc está assinando o Status do Serviço??

Esse não assina heim

O XML não assinado dá o mesmo retorno de: inexiste a tag raiz esperada para a mensagem.

É necessário colocar a tag …? Se for necessário, eu já coloquei e deu o mesmo erro.

o xml deve ser assim

<consStatServ versao="2.00" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe">
	<tpAmb>2</tpAmb>
	<cUF>35</cUF>
	<xServ>STATUS</xServ>
</consStatServ>

Eu vi o XML depois, vi que o que eu enviava era o errado. Concertei e deu certo.

Estou tentando entender agora como ele monta o XML para o serviço de Recepção, pois o Axis não fez o Factory para Dados e não criou uma classe tipo: NfeRecepcaoStub.NfeCabecMsg. Ele criou uma classe NfeRecepcaoStub.NfeDadosLote que recebe duas String’s, onde uma é a nfeCabecMsg e a outra é nfeDadosMsg.

olá!

estou usando o netbeans pra gerar os códigos do webservice e ele gerou o código abaixo:

[code]br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2 service =
new br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2();
br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServico2Soap12 port =
service.getNfeStatusServico2Soap12();

    br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServicoNF2.NfeDadosMsg nfeDadosMsg =
            new br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServicoNF2.NfeDadosMsg();

    br.inf.portalfiscal.nfe.wsdl.nfestatusservico2.NfeStatusServicoNF2Response.NfeStatusServicoNF2Result result =
            port.nfeStatusServicoNF2(nfeDadosMsg);

    System.out.println("Result = " + result);[/code]

alguém sabe como usar isso?
como passar as informações sobre cabeçalho e dadosnfe para esse método?

vlw!

Estava com o mesmo problema rodrigobraz, não consegui passar os dados da mensagem e nem os dados do header, pois o construtor só recebe os dados da mensagem, e mesmo os dados da mensagem estão encapsulados nessa classe wrapper, porem não tem como setar os dados nessa classe. Por isso acabei migrando essa parte de infraestrutura para o Axis2, em dois dias consegui migrar. Já estamos conseguindo enviar e receber as NFes para as novas URLs, estamos somente validando a parte de negocio.

Se eu puder ajudar em algo…

e ae klaus…

cara, eu estou tentando usar o axis2 mas estou parado num erro aqui… será que vc poderia me ajudar?

eu cheguei nesse método pra consultar o status da sefaz (nem sei se ta certo):

[code]ByteArrayInputStream baisCab = new ByteArrayInputStream(_nfeCabecMsg.getBytes());
XMLStreamReader streamCab = XMLInputFactory.newInstance().createXMLStreamReader(baisCab);
NfeStatusServico2Stub.NfeCabecMsg cabecalho = NfeStatusServico2Stub.NfeCabecMsg.Factory.parse(streamCab);

NfeStatusServico2Stub.NfeCabecMsgE cabE = new NfeStatusServico2Stub.NfeCabecMsgE();
cabE.setNfeCabecMsg(cabecalho);

ByteArrayInputStream baisDados = new ByteArrayInputStream(_nfeDadosMsg.getBytes());
XMLStreamReader streamDados = XMLInputFactory.newInstance().createXMLStreamReader(baisDados);
NfeStatusServico2Stub.NfeDadosMsg dados = NfeStatusServico2Stub.NfeDadosMsg.Factory.parse(streamDados);

NfeStatusServicoNF2Result result = new NfeStatusServico2Stub().nfeStatusServicoNF2(dados, cabE);

return result.getExtraElement().toString();[/code]

quando chamo esse método, ele da o erro:

java.lang.Exception: org.apache.axis2.databinding.ADBException: Unexpected subelement cabecMsg

eu to passando esses xmls, concatenando uma tag diferente, conforme me indicaram aqui no forum:

&lt;pog&gt;&lt;cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"&gt;&lt;versaoDados&gt;2.00&lt;/versaoDados&gt;&lt;/cabecMsg&gt;&lt;/pog&gt;

e, para os dados:

&lt;pog&gt;&lt;consStatServ versao="2.00" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe"&gt; &lt;tpAmb&gt;2&lt;/tpAmb&gt; &lt;cUF&gt;41&lt;/cUF&gt; &lt;xServ&gt;STATUS&lt;/xServ&gt; &lt;/consStatServ&gt;&lt;/pog&gt;

mas não vai =/

se puder me dar uma luz, agradeço =]

abr

Certo, não consegui parsear o cabeçalho também, por isso fiz dessa forma:

        String nfeDadosMsg = "&lt;nfeDadosMsg&gt;&lt;consStatServ versao=\"2.00\"" + 
                " xmlns=\"http://www.portalfiscal.inf.br/nfe\"&gt;" + 
                "&lt;tpAmb&gt;2&lt;/tpAmb&gt;&lt;cUF&gt;42&lt;/cUF&gt;&lt;xServ&gt;STATUS&lt;/xServ&gt;&lt;/consStatServ&gt;&lt;/nfeDadosMsg&gt;";
        
        XMLStreamReader dad = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(nfeDadosMsg));

        NfeDadosMsg dadosMsg = NfeStatusServico2Stub.NfeDadosMsg.Factory.parse(dad);
        NfeStatusServico2Stub.NfeCabecMsg cabecMsg = new NfeStatusServico2Stub.NfeCabecMsg();
        cabecMsg.setCUF("42");
        cabecMsg.setVersaoDados("2.00");

        NfeStatusServico2Stub.NfeCabecMsgE cabecMsgE = new NfeStatusServico2Stub.NfeCabecMsgE();
        cabecMsgE.setNfeCabecMsg(cabecMsg);

        NfeStatusServico2Stub stub = new NfeStatusServico2Stub();
        System.out.println(stub.nfeStatusServicoNF2(dadosMsg, cabecMsgE).getExtraElement());

Qualquer coisa estamos ai…

vlw klaus…

retornou o xml agora!

muito obrigado!

pessoal implementei como vcs disseram aqui em cima, e tambm que paravoes isso funcionou.
para mim não funcionou
deu esse erro

Foi mau ai,
foi erro meu!
na hora de setar os certificados dos .pfx e . keystore eu inverti as coisas…
esta funcionando beleza!
vlw!

Janjan como vc colocou os certificados?

Klaus,
Eu implementei o webservice inclusive com o seu codigo, mas esta me retornando o erro 214 Rejeição: Tamanho da mensagem excedeu o limite estabelecido, vc saberia o motivo.

obrigado