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:
<pog><cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><versaoDados>2.00</versaoDados></cabecMsg></pog>
e, para os dados:
<pog><consStatServ versao="2.00" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe">
<tpAmb>2</tpAmb>
<cUF>41</cUF>
<xServ>STATUS</xServ>
</consStatServ></pog>
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 = "<nfeDadosMsg><consStatServ versao=\"2.00\"" +
" xmlns=\"http://www.portalfiscal.inf.br/nfe\">" +
"<tpAmb>2</tpAmb><cUF>42</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg>";
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
- Retrying request
- Unable to sendViaPost to url[https://homologacao.nfe.sefaz.rs.gov.br/ws/nfeStatusServico/nfeStatusServico2.asmx]
java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
sabem de algo?
abraços!
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