IReport - Relatório com JRXmlDataSource retornando em branco

O erro parece ser simples, mas já está me custando alguns cabelos brancos…

Por questões de desempenho, decidi alterar nossa DANFE. Como gerei o relatório de NFS-e usando o jrxml sem problemas, considerei uma boa opção (até agora…).

Tive dois problemas, mas vou focar no mais critico: O relatório roda perfeitamente no IReport, mas é exibido em branco quando chamado pela aplicação.

Em modo debug, verifiquei que o xml é enviado corretamente. Estou usando a versão 3.5.2 (tentei atualizar para 3.7.3, mas tive ainda mais problemas com ‘cast’ de campos/nodes xml que até então eram apenas strings- java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl cannot be cast to java.lang.String - e optei por manter a versão antiga mesmo).

Esta é a versão resumida do código da chamada de relatório:

        JRXmlDataSource jRXmlDataSourceComXmlDaNotaEletronica;
        String caminhoFisicoDoRelatorioDanfeEmDisco;

        jRXmlDataSourceComXmlDaNotaEletronica = new JRXmlDataSource(getXmlDaNotaEletronica(nfeVO.getNfelSequencial()), "/NFe/infNFe");
        Map<String, Object> parametros = preencherParametros(nfeVO);

        JasperPrint relatorio = JasperFillManager.fillReport(caminhoFisicoDoRelatorioDanfeEmDisco, parametros, jRXmlDataSourceComXmlDaNotaEletronica);
        JasperViewer.viewReport(relatorio, false);

A variável caminhoFisicoDoRelatorioDanfeEmDisco é preenchida no construtor da classe, apenas declarei ai embaixo para melhor compreensão do código.

É um código demasiadamente simples para me causar tantos problemas… alguma idéia, para que eu não tenha de esperar ‘uma boa noite de sono’ para conseguir enxergar o problema? :lol:

Primeiro problema resolvido!

O XPath se atrapalha todo com namespace, havia me esquecido deste detalhe (sabia que era algo idiota, mas funcionar no IReport e dar problema na aplicação é sacanagem…).

Se alguém passar por problema semelhante, remova o namespace de seu xml e seja feliz!

Agora o segundo problema:

Os subdatasourcers para Duplicatas e Itens…

Aparentemente tudo certo nas configurações (http://jasperforge.org/website/ireportwebsite/IR%20Website/ir_xml_datasources.html?header=project&target=ireport), mas as subconsultas não me trazem nada…

São dois componentes lista, configurados com os datasources ((net.sf.jasperreports.engine.data.JRXmlDataSource) $P{REPORT_DATA_SOURCE}).subDataSource("/NFe/infNFe/det") e ((net.sf.jasperreports.engine.data.JRXmlDataSource) $P{REPORT_DATA_SOURCE}).subDataSource("/NFe/infNFe/cobr/dup").

O xml utilizado no teste foi este:

  <?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
- <NFe>
- <infNFe Id="NFexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" versao="1.10">
- <ide>
  <cUF>51</cUF> 
  <cNF>000004060</cNF> 
  <natOp>VENDA DE MERCADORIA</natOp> 
  <indPag>1</indPag> 
  <mod>55</mod> 
  <serie>103</serie> 
  <nNF>2898</nNF> 
  <dEmi>2010-02-03</dEmi> 
  <dSaiEnt>2010-02-03</dSaiEnt> 
  <tpNF>1</tpNF> 
  <cMunFG>5108402</cMunFG> 
  <tpImp>1</tpImp> 
  <tpEmis>1</tpEmis> 
  <cDV>3</cDV> 
  <tpAmb>2</tpAmb> 
  <finNFe>1</finNFe> 
  <procEmi>0</procEmi> 
  <verProc>1.1002.01.0</verProc> 
  </ide>
 <emit>
  <CNPJ>01234567890123</CNPJ> 
  <xNome>EMPRESA</xNome> 
  <xFant>EMPRESA</xFant> 
  <enderEmit>
  <xLgr>RUA</xLgr> 
  <nro>112252</nro> 
  <xBairro>DISTRITO INDUSTRIAL</xBairro> 
  <cMun>5108402</cMun> 
  <xMun>VARZEA GRANDE</xMun> 
  <UF>MT</UF> 
  <CEP>78455000</CEP> 
  <cPais>1058</cPais> 
  <xPais>BRASIL</xPais> 
  <fone>6566666666</fone> 
  </enderEmit>
  <IE>012345678</IE> 
  </emit>
 <dest>
  <CPF>01234567891</CPF> 
  <xNome>AMANDA LIMA</xNome> 
  <enderDest>
  <xLgr>RUA A</xLgr> 
  <nro>1213</nro> 
  <xBairro>BAIRRO B</xBairro> 
  <cMun>5103403</cMun> 
  <xMun>CUIABA</xMun> 
  <UF>MT</UF> 
  <CEP>78074800</CEP> 
  <cPais>1058</cPais> 
  <xPais>BRASIL</xPais> 
  <fone>6536211814</fone> 
  </enderDest>
  <IE>ISENTO</IE> 
  </dest>
  <det nItem="1">
  <prod>
  <cProd>42</cProd> 
  <cEAN /> 
  <xProd>RODA DO GOL 1000</xProd> 
  <NCM>10025454</NCM> 
  <CFOP>5102</CFOP> 
  <uCom>PC</uCom> 
  <qCom>1.0200</qCom> 
  <vUnCom>150.0000</vUnCom> 
  <vProd>153.00</vProd> 
  <cEANTrib /> 
  <uTrib>PC</uTrib> 
  <qTrib>1.0200</qTrib> 
  <vUnTrib>150.0000</vUnTrib> 
  </prod>
  <imposto>
  <ICMS>
  <ICMS60>
  <orig>1</orig> 
  <CST>60</CST> 
  <vBCST>0.00</vBCST> 
  <vICMSST>18.24</vICMSST> 
  </ICMS60>
  </ICMS>
  <IPI>
  <cEnq>999</cEnq> 
  <IPITrib>
  <CST>99</CST> 
  <vBC>150.00</vBC> 
  <pIPI>5.00</pIPI> 
  <vIPI>7.65</vIPI> 
  </IPITrib>
  </IPI>
  <PIS>
  <PISAliq>
  <CST>01</CST> 
  <vBC>150.00</vBC> 
  <pPIS>1.65</pPIS> 
  <vPIS>2.52</vPIS> 
  </PISAliq>
  </PIS>
  <COFINS>
  <COFINSAliq>
  <CST>01</CST> 
  <vBC>150.00</vBC> 
  <pCOFINS>7.60</pCOFINS> 
  <vCOFINS>11.63</vCOFINS> 
  </COFINSAliq>
  </COFINS>
  </imposto>
  <infAdProd>PRODUTO SUJEITO A SUBSTITUICAO TRIBUTARIA * MARCA: CHEVROLET</infAdProd> 
  </det>
  <total>
  <ICMSTot>
  <vBC>155.00</vBC> 
  <vICMS>18.60</vICMS> 
  <vBCST>0.00</vBCST> 
  <vST>0.00</vST> 
  <vProd>153.00</vProd> 
  <vFrete>0.00</vFrete> 
  <vSeg>0.00</vSeg> 
  <vDesc>0.00</vDesc> 
  <vII>0.00</vII> 
  <vIPI>7.65</vIPI> 
  <vPIS>2.52</vPIS> 
  <vCOFINS>11.63</vCOFINS> 
  <vOutro>2.00</vOutro> 
  <vNF>162.65</vNF> 
  </ICMSTot>
  </total>
  <transp>
  <modFrete>1</modFrete> 
  <vol>
  <qVol>123</qVol> 
  <esp>asaaas</esp> 
  <marca>A</marca> 
  <nVol>afag</nVol> 
  <pesoL>161.000</pesoL> 
  <pesoB>13.000</pesoB> 
  </vol>
  </transp>
  <cobr>
  <dup>
  <nDup>5160000482 - 1</nDup> 
  <dVenc>2010-02-15</dVenc> 
  <vDup>162.65</vDup> 
  </dup>
  </cobr>
  <infAdic>
  <infCpl>Dados Procon: SECRET. ESTADO JUSTICA DEFESA DA CIDADANIA - AV. HISTORIADOR RUBENS DE MENDONCA, S/NR, Bairro: BAU Fone: 151 * Forma Pagamento: 10 * Vendedor: PROTO *</infCpl> 
  </infAdic>
  </infNFe>
  </NFe>

Creio que este seja até mais simples que o anterior, mas ao menos fica aqui como ‘log’ para quem mais tiver este tipo de problema… assim que encontrar algo, posto aqui… se alguém já souber a resposta… não seja tímido :lol:

Alguém? =/

[EDITED]

Acabei me esquecendo de postar a solução…

A diferença entre os xmls de NFS-e e NF-e (que realmente importam no momento), são que o NF-e tem um nível a mais para chegar aos itens (um pai a mais na hierarquia).

Eu havia entendido que todo o path deveria ser colocado na chamada do subDataSource, quando na verdade, apenas o nó agregador (det/dup) e seus respectiovos pais deveriam ser informados…

Assim, meus datasources ficaram como:

((net.sf.jasperreports.engine.data.JRXmlDataSource) $P{REPORT_DATA_SOURCE}).subDataSource(“infNFe/det”) e ((net.sf.jasperreports.engine.data.JRXmlDataSource) $P{REPORT_DATA_SOURCE}).subDataSource(“cobr/dup”).

Somente isso…

Olá a todos.

Estou com um problema para preencher o DANFE com os itens da NFe.

Não estou conseguindo pq a tag , no meu objeto NFe é um ArrayList.

Algém sabe como preencher os itens do DANFE ?

Parabens pela solucao, rodou certinho!!!

Muito obrigado!