JAXB + NFe

7 respostas
V

Galera,

Quando achei que esta tudo resolvido encontrei mais um capitulo na novela NFe 2.0.

Para não ter que mexer em toda minha estrutura do sistema. Eu já tenho uma String que é o meu XML Assinado.
Através do JAXB peguei os XSD’s fornecidos pela sefaz e gerei as minhas classes em cima do XSD.

O jeito mais facil e correto, pelo ao menos eu acho, seria eu instanciar as classes geradas pelo JAXB e usar os set’s com os meus dados. Pergunta, como que eu assino esse objeto? Se tiver jeito é claro, nunca fiz isso usando objeto.

Um possivel ajuste técnico é pegar a minha string que contem o XML montado e assinado e converter em Objeto.
So que esta dando o seguinte erro

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"enviNFe"). Expected elements are <{http://www.w3.org/2000/09/xmldsig#}Signature>,<{http://www.portalfiscal.inf.br/nfe}enviNFe>
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1049)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)
        at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:136)
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:183)
        at br.com.ces.xml.action.MontaXML.transformaXMLAssinadoEmObjeto(MontaXML.java:206)
        at br.com.ces.wsdl.Recepcao.enviarXmlNFe(Recepcao.java:50)
        at br.com.ces.controle.ControleEnviarNFe.enviarNotaFiscalEletronica(ControleEnviarNFe.java:54)
        at br.com.ces.junit.EnvioJUnitTest.enviarNFeCompleto(EnvioJUnitTest.java:39)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
        at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
        at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:420)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:911)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:768)

abaixo o pedaço do meu código que uso para fazer a conversão

File arquivo = new File("c:\\temp\\arquivo.xml");
JAXBContext jc = JAXBContext.newInstance("br.com.xsd.versao20.enviNFe");
Unmarshaller u = jc.createUnmarshaller();
TEnviNFe po = (TEnviNFe) u.unmarshal(new FileInputStream(arquivo));

E agora o que devo fazer???

7 Respostas

J

Vc consegui resolver esta questão? comigo está acontecendo a mesma coisa, porem no momento de consultar o status do serviço.

sefaz-sp retorna que está tudo certo, porem quando vai preencher o objeto dá um erro muito parecido com o seu.

Obs: já fiz de contigencia e n deu este erro

V

Entao,
. O projeto esta parado, visto que temos ate dezembro. Em dezembro eu retomo o projeto.

Caso vc consiga alguma coisa, posta no forum.

Att

Y

Galera, estou com um problema bem parecido:

javax.xml.bind.UnmarshalException: unexpected element (uri:"(<a href="http://www.portalfiscal.inf.br/nfe">http://www.portalfiscal.inf.br/nfe</a>)NFe", local:“nfeProc”). Expected elements are <{<a href="http://www.portalfiscal.inf.br/nfe">http://www.portalfiscal.inf.br/nfe</a>}NFe>,<{<a href="http://www.w3.org/2000/09/xmldsig#">http://www.w3.org/2000/09/xmldsig#</a>}Signature>

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source)

at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source)

at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)

at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)

at br.com.viaexpress.danfe.importar.XMLtoTNFe.load(XMLtoTNFe.java:26)

at br.com.viaexpress.danfe.utils.GerarDanfes.gerarTNFe(GerarDanfes.java:70)

at br.com.viaexpress.danfe.utils.GerarDanfes.gerarDANFE(GerarDanfes.java:112)

at br.com.viaexpress.danfe.utils.GerarDanfes.run(GerarDanfes.java:325)

Não estou conseguindo entender o porque do erro.

Se alguém puder ajudar, agradeço.

Ah, se alguém tiver algum xml que voltou ok do governo e puder postar pra q eu possa fazer os testes jah ajudaria.

J

Usa a annotetion @xmlRootElement(name=“enviNFe”), as vezes ele não pede ai dá o erro que vc relatou

Y

Amigos, desculpem mas estou aprendendo a mexer com xml na marra, e pra ajudar numa implementação da NF-e.

Onde eu coloco essa annotation? Em cima de qual classe ?

/**

  • NF-e que volta do governo
**/

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = TNfeProc, propOrder = {

nFe,

protNFe

})

public class TNfeProc {
@XmlElement(name = "NFe", required = true)
protected TNFe nFe;
@XmlElement(required = true)
protected TProtNFe protNFe;
@XmlAttribute(required = true)
protected String versao;

}

/**

  • NF-e gerada pelo sistema
**/

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = TNFe, propOrder = {

infNFe,

signature

})

public class TNFe {
@XmlElement(required = true)
protected TNFe.InfNFe infNFe;
@XmlElement(name = "Signature", namespace = "http://www.w3.org/2000/09/xmldsig#", required = true)
protected SignatureType signature;

}

Vlw

Y

Vlw pela dica! Funcionou.

/**

  • NF-e que volta do governo
**/

@javax.xml.bind.annotation.XmlRootElement(name=nfeProc)

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = TNfeProc, propOrder = {

nFe,

protNFe

})

public class TNfeProc {
@XmlElement(name = NFe, required = true)

protected TNFe nFe;

@XmlElement(required = true)

protected TProtNFe protNFe;

@XmlAttribute(required = true)

protected String versao;

}

R

galera, estou tendo problema semelhante ao do Yank Veyron:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.portalfiscal.inf.br/nfe", local:"nfeProc"). Expected elements are (none)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:631)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:236)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:231)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1038)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:467)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:448)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
	at jaxb_test.C1.main(C1.java:26)

tentei seguir a solução dele inserindo @javax.xml.bind.annotation.XmlRootElement(name=“nfeProc”) na classe TNFeProc como segue:

@javax.xml.bind.annotation.XmlRootElement(name="nfeProc")	
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TNfeProc", propOrder = {
    "nFe",
    "protNFe"
})
public class TNfeProc {
       ...
}

mas continua dando o mesmo erro…
segue o código (o erro ocorre na linha 7)

public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			File file = new File("C:\\Files\\NFEXML.xml");
			JAXBContext context = JAXBContext.newInstance("br.inf.portalfiscal.nfe");
			Unmarshaller un = context.createUnmarshaller();			
			TNfeProc nfe = (TNfeProc) un.unmarshal(file);
			
		}
		catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}

não estou sabendo como resolver esse erro. Se alguem puder dar uma dica, ajudaria muito :smiley:

valeu!!

ps: os esquemas XSD q estou usando são da pasta PL_006g obtida em http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=/fwLvLUSmU8=

Criado 22 de julho de 2010
Ultima resposta 15 de jul. de 2011
Respostas 7
Participantes 4