Boa noite,
Alguém está tendo problemas na consulta de NFe de homologação do Paraná.
Estou tendo erro na consulta do Status de Serviço. Descobri que estão retornando o XML sem a tag <?xml>
O problema é que quando o AXIS2 vai tentar gerar o evelope de retorno dá um erro no XML.
Segue o código de chamada:
NfeStatusServico2Stub.NfeCabecMsg nfeCabecMsg = new NfeStatusServico2Stub.NfeCabecMsg();
nfeCabecMsg.setCUF("41");
nfeCabecMsg.setVersaoDados("2.00");
NfeStatusServico2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeStatusServico2Stub.NfeCabecMsgE();
nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);
NfeStatusServico2Stub.NfeDadosMsg nfeDadosMsg = new NfeStatusServico2Stub.NfeDadosMsg();
OMElement ome = AXIOMUtil.stringToOM(xmlIn);
nfeDadosMsg.setExtraElement(ome);
NfeStatusServico2Stub stub = new NfeStatusServico2Stub("https://homologacao.nfe2.fazenda.pr.gov.br/nfe/NFeStatusServico2");
NfeStatusServico2Stub.NfeStatusServicoNF2Result result = stub.nfeStatusServicoNF2(nfeDadosMsg, nfeCabecMsgE);
OMElement omeResult = result.getExtraElement();
String xmlOut = omeResult.toStringWithConsume();
Suprimi os try-catch
O erro está dando exatamente no NfeStatusServico2Stub.NfeStatusServicoNF2Result result = stub.nfeStatusServicoNF2(nfeDadosMsg, nfeCabecMsgE):
org.apache.axiom.soap.SOAPProcessingException: SOAP Envelope can not have children other than SOAP Header and Body
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.checkChild(SOAPEnvelopeImpl.java:104)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.addChild(SOAPEnvelopeImpl.java:118)
at org.apache.axiom.om.impl.llom.OMNodeImpl.<init>(OMNodeImpl.java:74)
at org.apache.axiom.om.impl.llom.OMElementImpl.<init>(OMElementImpl.java:106)
at org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory.createOMElement(OMLinkedListImplFactory.java:96)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:431)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:273)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java:234)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
at org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:676)
at org.apache.axiom.om.impl.llom.OMElementImpl.getFirstOMChild(OMElementImpl.java:693)
at org.apache.axiom.om.impl.llom.OMElementImpl.getFirstElement(OMElementImpl.java:991)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.getHeader(SOAPEnvelopeImpl.java:88)
at org.apache.axis2.engine.AxisEngine.checkMustUnderstand(AxisEngine.java:69)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:163)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:364)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at br.com.elucid.wstrade.nfe.statusservico.wsdl.NfeStatusServico2Stub.nfeStatusServicoNF2(NfeStatusServico2Stub.java:156)
at br.com.elucid.wstrade.nfe.statusservico.StatusServicoServlet.exec(StatusServicoServlet.java:181)
at br.com.elucid.wstrade.nfe.statusservico.StatusServicoServlet.getStatusGeral(StatusServicoServlet.java:219)
at br.com.elucid.wstrade.nfe.statusservico.StatusServicoServlet.doPost(StatusServicoServlet.java:64)
at br.com.elucid.wstrade.nfe.statusservico.StatusServicoServlet.doGet(StatusServicoServlet.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
O método nfeStatusServicoNF2 foi gerado pelo wsdl2java com AXIS2
public NfeStatusServicoNF2Result nfeStatusServicoNF2(NfeDadosMsg nfeDadosMsg0, NfeCabecMsgE nfeCabecMsg1) throws java.rmi.RemoteException {
org.apache.axis2.context.MessageContext _messageContext = null;
try {
org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[0].getName());
_operationClient.getOptions().setAction("http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2");
_operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true);
addPropertyToOperationClient(_operationClient, org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR, "&");
_messageContext = new org.apache.axis2.context.MessageContext();
org.apache.axiom.soap.SOAPEnvelope env = null;
env = toEnvelope(getFactory(_operationClient.getOptions().getSoapVersionURI()),
nfeDadosMsg0, optimizeContent(new javax.xml.namespace.QName(
"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2",
"nfeStatusServicoNF2")));
env.build();
if (nfeCabecMsg1 != null) {
org.apache.axiom.om.OMElement omElementnfeCabecMsg1 = toOM(nfeCabecMsg1,
optimizeContent(new javax.xml.namespace.QName(
"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2",
"nfeStatusServicoNF2")));
addHeader(omElementnfeCabecMsg1, env);
}
_serviceClient.addHeadersToEnvelope(env);
_messageContext.setEnvelope(env);
_operationClient.addMessageContext(_messageContext);
_operationClient.execute(true);
org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient
.getMessageContext(org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE);
org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope();
java.lang.Object object = fromOM(_returnEnv.getBody().getFirstElement(),
NfeStatusServicoNF2Result.class, getEnvelopeNamespaces(_returnEnv));
return (NfeStatusServicoNF2Result) object;
} catch (org.apache.axis2.AxisFault f) {
org.apache.axiom.om.OMElement faultElt = f.getDetail();
if (faultElt != null) {
if (faultExceptionNameMap.containsKey(faultElt.getQName())) {
try {
java.lang.String exceptionClassName = (java.lang.String) faultExceptionClassNameMap.get(faultElt.getQName());
java.lang.Class exceptionClass = java.lang.Class.forName(exceptionClassName);
java.lang.Exception ex = (java.lang.Exception) exceptionClass.newInstance();
java.lang.String messageClassName = (java.lang.String) faultMessageMap.get(faultElt.getQName());
java.lang.Class messageClass = java.lang.Class.forName(messageClassName);
java.lang.Object messageObject = fromOM(faultElt, messageClass, null);
java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage", new java.lang.Class[] { messageClass });
m.invoke(ex, new java.lang.Object[] { messageObject });
throw new java.rmi.RemoteException(ex.getMessage(), ex);
} catch (java.lang.ClassCastException e) {
throw f;
} catch (java.lang.ClassNotFoundException e) {
throw f;
} catch (java.lang.NoSuchMethodException e) {
throw f;
} catch (java.lang.reflect.InvocationTargetException e) {
throw f;
} catch (java.lang.IllegalAccessException e) {
throw f;
} catch (java.lang.InstantiationException e) {throw f;}
} else {throw f;}
} else {throw f;}
} finally {_messageContext.getTransportOut().getSender().cleanup(_messageContext);}
}
XML retornado pelo SEFAZ do Paraná:
<env:Envelope xmlns:env='http://www.w3.org/2003/05/soap-envelope'>
<env:Header xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<nfeCabecMsg xmlns='http://www.portalfiscal.inf.br/nfe'>
<cUF>41</cUF>
<versaoDados>2.00</versaoDados>
</nfeCabecMsg>
</env:Header>
<env:Body xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<nfeStatusServicoNF2Result xmlns='http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2'>
<retConsStatServ versao='2.00' xmlns='http://www.portalfiscal.inf.br/nfe'>
<tpAmb>2</tpAmb>
<verAplic>PR-v2_2_3"</verAplic>
<cStat>107"</cStat>
<xMotivo>Serviço em Operação</xMotivo>
<cUF>41"</cUF>"
<dhRecbto>2011-05-12T22:10:14</dhRecbto>
<tMed>1</tMed>
</retConsStatServ>
</nfeStatusServicoNF2Result>
</env:Body>
</env:Envelope>"
Só como exemplo, segue o XML retornado de SP
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
<cUF>35</cUF>
<versaoDados>2.00</versaoDados>
</nfeCabecMsg>
</soap:Header>
<soap:Body>
<nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
<retConsStatServ versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
<tpAmb>2</tpAmb>
<verAplic>SP_NFE_PL_006h</verAplic>
<cStat>107</cStat>
<xMotivo>Serviço em Operação</xMotivo>
<cUF>35</cUF>
<dhRecbto>2011-05-13T15:24:40</dhRecbto>
<tMed>1</tMed>
</retConsStatServ>
</nfeStatusServicoNF2Result>
</soap:Body>
</soap:Envelope>
Alguém sabe como contornar a falta da tag <?xml>?
Obrigado,
Fernando Hirata Alexandre