Java não chama SubReport

Galera, preciso de uma ajuda para chamar um SubRelatório. Consigo chamar o mesmo quando executo pelo iReport, mas não consigo pelo Java, o relatório principal é exibido mas o Sub não …

[code]try {

FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
	
InputStream reportStream = context.getExternalContext().
		getResourceAsStream("/Relatorios_Jasper/Professor_Turma.jasper");
	
InputStream subreportStream = context.getExternalContext().
		getResourceAsStream("/Relatorios_Jasper/Professor_Turma_turmas.jasper");
		
Usuario sessao = new Usuario();
HttpSession sessioon = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
		
sessao = (Usuario) sessioon.getAttribute("usuario");
		
Conexao conex = new Conexao();
Connection conn = conex.getConnection();
		
Map parametro = new HashMap();
		
parametro.put("usuario", sessao.getNome().toUpperCase());
parametro.put("REPORT_CONNECTION",  conn);
parametro.put("SUBREPORT_DIR", subreportStream.toString());
		
try {
		
	ServletOutputStream servletOutputStream = response.getOutputStream();
		
				
	JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,parametro,conn);
					
	servletOutputStream.flush();
	servletOutputStream.close();
			
	} catch (JRException e) {
		e.printStackTrace();
			
	}catch (IOException e) {
	e.printStackTrace();
			
}finally{
	context.responseComplete();
}

[/code]
}

Boa noite.
Eu utilizo assim quando uso um subRelatorio.

HashMap hm = new HashMap();
hm.put("pathSubRel",getDiretorioReal("/relatorio/listaalunosubreport0.jasper"));
hm.put("ano", "LISTA DE ALUNOS - " + ano);
JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(lista);
try {
	return JasperFillManager.fillReport(getInputStream("/relatorio/listaaluno.jasper"), hm,fonteDados);

} catch (JRException ex) {
}

Para encontra o diretorio onde esta os arquivos .jasper

private String getDiretorioReal(String diretorio) {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getRealPath(diretorio);
}

Vou tentar dessa forma e posto aqui de novo …
vlw

Bom dia.
conforme exemplo, o sub-relatório passa por parâmetro.
Assim esta funcionando.

Bão, fiz como sugeriu e o erro persistiu, porém por curiosidade mandei imprimir o diretório:

Se eu jogar no “Executar” ele abre o Arquivo, ou seja esta encontrando o relatório.
Então, será que pode ser erro no iReport ? Alguma config ?

Ficou assim:

[code]System.out.println(“Diretório: “+ getDiretorioReal(”/Relatorios_Jasper/Professor_Turma_turmas.jasper”));

		parametro.put("usuario", sessao.getNome().toUpperCase());
		parametro.put("REPORT_CONNECTION",  conn);
		parametro.put("SUBREPORT_DIR", getDiretorioReal("/Relatorios_Jasper/Professor_Turma_turmas.jasper"));//[/code]

Boa tarde.

No relatório principal, na parte do subrelatorio:
SubReportExpression: $P{pathSubRel}
Como este parâmetro é uma String, segue o valor do caminho do diretório do sub.
E com você esta passado os dados para este sub relatorio?