Popular SubRelatorio com Ireport e JasperReports

Olá, estou tentando montar um relatório com DataSource em XML, mas os valores do subreport estão vindo como Null, minha classe que le os arquivos gerados pelo IReport está assim:

public static void main(String[] args) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse("test.xml");
    String recordPath = "/addressbook/category/person";
    String arquivoJasper = "relatorioXML.jasper";
    JRXmlDataSource xmlDataSource = new JRXmlDataSource(doc, recordPath);
    JasperPrint rel = JasperFillManager.fillReport(arquivoJasper,new HashMap(), xmlDataSource);
    JasperViewer.viewReport(rel, false);
}

Minhas configurações estão conforme as imagens abaixo, alguém já implementou esse tipo de relatório para dar um help?





Adicione a variável $P{SUBREPORT_DIR} e o seu respectivo valor ao Hashmap.

E como exatamente fazer isso?, sem querer abusar.

HashMap parametros = new HashMap();
parametros.put("SUBREPORT_DIR", "diretorio");
JasperPrint rel = JasperFillManager.fillReport(arquivoJasper,parametros, xmlDataSource);   

Todos os parâmetros que você definir no iReports, o JasperReports os buscará no HashMap que você passar como parâmetro para JasperFillManager.fillReport().

Criei essa variável porém não compila, e estranho que nem dá erro simplesmente não gera o .jasper

Você não tratou as exceções.
Coloque o seu código em um bloco try/catch e confira qual a exceção que está (se está) sendo lançada.

OK?

Não é no Java e sim Ireport que não esta gerando .jasper, alguma configuração errada ainda, pois se eu apago o subrelatorio ele gera o .jasper corretamente.

Se eu não me engano, o parâmetro $P{SUBREPORT_DIR} você não precisa definir no iReports, pois quando você adiciona um subrelatório, o próprio iReports se encarrega disso.

Experiento retirar esse parâmetro e ‘reincluir’ (apagar/incluir) o subrelatório novamente.
Verifique também se não falta nenhum parâmetro para o subrelatório.

OK?

Se eu não me engano, o parâmetro $P{SUBREPORT_DIR} você não precisa definir no iReports, pois quando você adiciona um subrelatório, o próprio iReports se encarrega disso.

Experiento retirar esse parâmetro e ‘reincluir’ (apagar/incluir) o subrelatório novamente.
Verifique também se não falta nenhum parâmetro para o subrelatório.

OK?

Se eu não me engano, o parâmetro $P{SUBREPORT_DIR} você não precisa definir no iReports, pois quando você adiciona um subrelatório, o próprio iReports se encarrega disso.

Experiento retirar esse parâmetro e ‘reincluir’ (apagar/incluir) o subrelatório novamente.
Verifique também se não falta nenhum parâmetro para o subrelatório.

OK?

Retirei a variável pelo Ireport, mas não traz os valores do sub ainda. estou anexando os arquivos.

Alguma sugestão, palpite?

Os valores ainda estão chegando como null no subrelatório.

Eu testei e o mesmo resultado: o sub-relatório vem vazio.
Se eu executo apenas o sub-relatório, os dados vem.

Veja se as configurações conferem:

1. Relatório
Query: /addressbook/category/person
Campos: LASTNAME, FIRSTNAME, ID, EMAIL

2. Sub-Relatório
Query: /addressbook/category/person[@id=$P{ID}]
Campos: EMAIL
Parâmetros: $P{ID}

Fonte de dados: arquivo XML denominada fonteXML

A parte do subrelatorio esta diferente não tem esse parametro e essa query, você conseguiu roda-lo com os resultados certos?

Eu refiz o sub-relatório.
O objetivo é trazer nele apenas os emails de CADA , por isso a query com o parâmetro $P{ID}.
Esse parâmetro eu configurei no relatório mestre para passar para o sub.
Anexei os fontes.

Segue uma referência para XPath (é uma SQL para XML).

www.w3schools.com/xpath

Valeu cara pela força, mas os fontes do subrelatório vieram iguais.

Valeu cara pela força, mas os fontes do subrelatório vieram iguais.

E agora causam essa Warning:

26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:19 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.
26/09/2007 12:50:20 net.sf.jasperreports.engine.query.JRXPathQueryExecuter <init>
WARNING: The supplied org.w3c.dom.Document object is null.

Anexei somente o fonte do sub-relatorio. Teste aí.