Como ler um lote em XML com o XStream?

2 respostas
J

Preciso ler um arquivo XML de lote de nota fiscal e retirar apenas o elemento NFe dele.

Preciso fazer isso para juntar o NFe com o protNFe para gerar o XML de envio para o destinatário da nota fiscal.

Como faço isso com o XStream?

2 Respostas

J

Adicionando mais informações....

Estou tentando:
XStream x = new XStream();
x.alias("enviNFe", TEnviNFe.class);

TEnviNFe lote = (TEnviNFe) x.fromXML(new BufferedReader(new FileReader(arq)));
System.out.println("ID do lote: " + lote.getIdLote());
Mas está dando esse erro:
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: NFe : NFe : NFe : NFe
---- Debugging information ----
message             : NFe : NFe
cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message       : NFe : NFe
class               : emissor.bean.nfe.consret.TEnviNFe
required-type       : emissor.bean.nfe.consret.TEnviNFe
path                : /enviNFe/NFe
line number         : 1
-------------------------------
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:63)
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76)
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:60)
        at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:137)
        at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
        at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
        at emissor.lib.LerLote.main(LerLote.java:51)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: NFe : NFe
        at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:86)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:96)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
        at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:52)
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.determineType(AbstractReflectionConverter.java:347)
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:208)
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:162)
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:82)
O XML é um arquivo de lote com apenas 1 nota fiscal:
<?xml version="1.0" encoding="UTF-8"?>
<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
    <idLote>000001</idLote>
    <NFe>
        <infNFe Id="NFe35101002767116000186550010000000011010848149" versao="2.00">
            ...
        </infNFe>
        <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">...</Signature>
    </NFe>
</enviNFe>
J

Mudando um pouco o assunto.

Como faço nesse meu código para pegar o nó inteiro (NFe) como uma String?

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
Document doc;
try {
    db = dbf.newDocumentBuilder();
    doc = db.parse(file);
    doc.getDocumentElement().normalize();

    System.out.println("RAIZ: " + doc.getDocumentElement().getNodeName());
    NodeList lista = doc.getElementsByTagName("NFe");
    
    for (int k = 0; k < lista.getLength(); k++) {
        Node nodeNfe = lista.item(k);
        // Quero pegar esse nó inteiro como um XML em texto
        System.out.println("NFe:\n" + nodeNfe.getNodeName());
        System.out.println("");
    }
} catch (ParserConfigurationException ex) {
    Logger.getLogger(LerLote.class.getName()).log(Level.SEVERE, null, ex);
} catch (SAXException ex) {
    Logger.getLogger(LerLote.class.getName()).log(Level.SEVERE, null, ex);
}

Com xstream eu não consigo colocar no objeto nem a pau!!

Criado 12 de novembro de 2010
Ultima resposta 12 de nov. de 2010
Respostas 2
Participantes 1