[quote=evandromib]Bom dia Galera
Bom como eu prometi Resolvi o probleminha de 215 - Falha no schema XML que ocorre no SEFAZ do PR sem precisar mudar minha aplicação para SAX conforme postado pelo alves.Felipe neste topico
no meu codigo antigo fazia do seguinte modo
String nfeDadosMsg = arq_xml; // a variavel arq_xml é o XML "073012-160211-env-lot.xml" + as tag <nfeDadosMsg>
ByteArrayInputStream nfeDados = new ByteArrayInputStream(nfeDadosMsg.getBytes());
XMLStreamReader streamDados = XMLInputFactory.newInstance().createXMLStreamReader(source);
NfeRecepcao2Stub.NfeDadosMsg dado = NfeRecepcao2Stub.NfeDadosMsg.Factory.parse(streamDados);
String http = Endereco(Integer.parseInt(cod_uf), tpAmb);
NfeRecepcaoLote2Result result = new NfeRecepcao2Stub(http).nfeRecepcaoLote2(dado, cabE);
nessa rotina se perdia o atributo "xmlns=“http://www.portalfiscal.inf.br/nfe” da tag
neste trecho do codigo = ByteArrayInputStream nfeDados = new ByteArrayInputStream(nfeDadosMsg.getBytes());
para corrigir o codigo ficou assim
DocumentBuilderFactory factoryy = DocumentBuilderFactory.newInstance();
factoryy.setNamespaceAware(false);
DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
Document docs_uf = bf.newDocumentBuilder().parse(new InputSource(new StringReader(arq_xml)));
Source source = new DOMSource(docs_uf);
// ByteArrayInputStream nfeDados = new ByteArrayInputStream(nfeDadosMsg.getBytes());
XMLStreamReader streamDados = XMLInputFactory.newInstance().createXMLStreamReader(source);
NfeRecepcao2Stub.NfeDadosMsg dado = NfeRecepcao2Stub.NfeDadosMsg.Factory.parse(streamDados);
String http = Endereco(Integer.parseInt(cod_uf), tpAmb);
NfeRecepcaoLote2Result result = new NfeRecepcao2Stub(http).nfeRecepcaoLote2(dado, cabE);
criei um Document da String arq_xml e usei DOMSource ao inves de ByteArrayInputStream
e resolvi a questão da perda do namespace , transmitir a nota e consegui o retorno desejado ( 100 - Autorizado o uso da NF-e )
bom antes de terminar gostaria de agradecer principalmente a alves.Felipe , AGAraujo pela troca de informaçoes
espero q ajude a todos
abraço[/quote]
Estou tentando resolver o problema do erro: java.lang.RuntimeException: Message:org.apache.axis2.databinding.ADBException: Unexpected subelement NFe Cause: org.apache.axis2.databinding.ADBException: Unexpected subelement NFe. Olhando este post, tentei montar a função de transmissão conforme passado acima. Entretanto estou com o problema ainda. Provavelmente estou esquecendo de fazer algo. Segue abaixo o codigo que desenvolvi para realizar o envio de nfe para a SEFAZ do PR.
//Classe de transmissão da NFe
package recepcao;
import br.inf.portalfiscal.www.nfe.wsdl.nferecepcao2.NfeRecepcao2Stub;
import br.inf.portalfiscal.www.nfe.wsdl.nferecepcao2.NfeRecepcao2Stub.NfeCabecMsg;
import br.inf.portalfiscal.www.nfe.wsdl.nferecepcao2.NfeRecepcao2Stub.NfeRecepcaoLote2Result;
import java.io.*;
import java.net.URL;
import java.security.Security;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
public class NFeRecepcao
{
public static String lerXML(String fileXML) throws IOException
{
String linha = "";
StringBuilder xml = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(fileXML), "ISO8859-1"));
while ((linha = in.readLine()) != null) {
xml.append(linha);
}
in.close();
return xml.toString();
}
public String recepcao(String nfeDadosMsg, String vXML, String codEstado,
String http, String caminhoCertCliente, String senhaCertCliente,
String caminhoCasserts)
{
try
{
NfeCabecMsg nfeCabecMsg = new NfeCabecMsg();
/*Código do Estado(UF)*/
nfeCabecMsg.setCUF(codEstado);
/*Versão do XML*/
nfeCabecMsg.setVersaoDados(vXML);
NfeRecepcao2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeRecepcao2Stub.NfeCabecMsgE();
nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);
/*Informações do Certificado Digital*/
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.clearProperty("javax.net.ssl.keyStore");
System.clearProperty("javax.net.ssl.keyStorePassword");
System.clearProperty("javax.net.ssl.trustStore");
System.setProperty("javax.net.ssl.keyStore", caminhoCertCliente);
System.setProperty("javax.net.ssl.keyStorePassword", senhaCertCliente);
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", caminhoCasserts);
/*XML de Consulta*/
DocumentBuilderFactory factoryy = DocumentBuilderFactory.newInstance();
factoryy.setNamespaceAware(false);
DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
Document docs_uf = bf.newDocumentBuilder().parse(new InputSource(new StringReader(nfeDadosMsg)));
Source source = new DOMSource(docs_uf);
XMLStreamReader streamDados = XMLInputFactory.newInstance().createXMLStreamReader(source);
NfeRecepcao2Stub.NfeDadosMsg dado = NfeRecepcao2Stub.NfeDadosMsg.Factory.parse(streamDados);
URL url = new URL(http);
NfeRecepcaoLote2Result result = new NfeRecepcao2Stub(http).nfeRecepcaoLote2(dado, nfeCabecMsgE);
//XML de Retorno da SEFAZ
return result.getExtraElement().toString();
}
catch(Exception e)
{
throw new RuntimeException("Message:" + e.getMessage() + " Cause: " + e.getCause());
}
}
}
//Classe Main que testa a aplicação
package servicoparana;
import java.io.IOException;
import recepcao.NFeRecepcao;
public class ServicoParana {
public static void main(String[] args) throws IOException
{
String xmlEnvio = NFeRecepcao.lerXML("D:\\envio.xml");
NFeRecepcao nfe = new NFeRecepcao();
String resultado = nfe.recepcao(xmlEnvio, "2.00", "41", "https://homologacao.nfe2.fazenda.pr.gov.br/nfe/NFeRecepcao2?wsdl", "D:\\certificado.pfx", "senhaCert", "C:\\Dzyon\\NotaSoft\\JSSECACERTS");
System.out.println(resultado);
}
}
Estou utilizando o Axis2 para me comunicar com os webservices da SEFAZ.
Segue o erro que estou recebendo (erro conhecido neste post…hehe)
Agradeço muito pela ajuda, nem sei mais o que fazer para essa SEFAZ do PR funcionar…=/