Dúvida com iReport

Boa tarde pessoal!

Estou começando a desenvolver em java, e tenho que desenvolver um sistema de faturas na empresa, ate ai tudo bem o problem é que não consigo passar um objeto com vários outros objetos para o ireport, e tambem não sei como recuperar essas informações no relatorio.

Por favor alguem pode me ajuda?

public class GeraFaturaController extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
protected void service(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {

	String codigoNotaFiscal = request.getParameter("codigo");
	String acao = request.getParameter("acao");

	if ("listar".equals(acao)) {

		HttpSession session = request.getSession();
		Cliente cliente = (Cliente) session.getAttribute("cliente");

		List<NotaFiscal> notas = new ArrayList<NotaFiscal>(cliente
				.getNotasFiscais());

		for (NotaFiscal fatura : notas) {
			if (fatura.getNotaDebitoLocacao().equals(codigoNotaFiscal)) {

				List<ItensNotaFiscal> itens = fatura.getListaItens();
				
				String pathJasper = getServletContext().getRealPath("/WEB-INF/classes/visao/")+"/";
				String path = getServletContext().getRealPath("/");
				

				Map<String, Object> parametros = new HashMap<String, Object>();

				// dados do cliente
				parametros.put("codigoCliente", cliente.getCodigo());
				parametros.put("nomeCliente", cliente.getNome());
				parametros.put("enderecoCliente", cliente.getEndereco());
				parametros.put("municipioCliente", cliente.getMunicipio());
				parametros.put("pcaPagamentoCliente", cliente.getPcaPagamento());
				parametros.put("inscricaoMunicipalCliente", cliente.getInscricaoMunicipal());
				parametros.put("inscricaoEstadualCliente", cliente.getInscricaoEstadual());
				parametros.put("cnpjCliente", cliente.getCnpj());

				// dados da filial
				parametros.put("codigoFilial", fatura.getFilial().getCodigo());
				parametros.put("nomeFilial", fatura.getFilial().getNome());
				parametros.put("cnpjFilial", fatura.getFilial().getCnpj());
				parametros.put("enderecoFilial", fatura.getFilial().getEndereco());
				parametros.put("estadoFilial", fatura.getFilial().getEstado());
				parametros.put("inscricaoEstadualFilial", fatura.getFilial().getInscricaoEstadual());
				parametros.put("nscricaoMunicipalFilial", fatura.getFilial().getInscricaoMunicipal());
				parametros.put("municipioFilial", fatura.getFilial().getMunicipio());
				parametros.put("telefoneFilial", fatura.getFilial().getTelefone());
				parametros.put("cepFilial", fatura.getFilial().getCep());

				parametros.put("contrato", fatura.getContrato());
				parametros.put("dataPedidoLocacaoFinal", fatura.getDataPedidoLocacaoFinal());
				parametros.put("dataPedidoLocacaoInicial", fatura.getDataPedidoLocacaoInicial());
				parametros.put("dataVencimento", fatura.getDataVencimento());
				parametros.put("descricaoContrato", fatura.getDescricaoContrato());
				parametros.put("mensagem", fatura.getMensagem());
				parametros.put("notaDebitoLocacao", fatura.getNotaDebitoLocacao());
				parametros.put("valorPorExtenso", fatura.getValorPorExtenso());
				
									
				try {

									
					JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "RelatorioFaturateste.jasper", parametros);
					JasperManager.printReportToPdfFile(impressao, path + "/RelatorioFaturateste.pdf");
					response.sendRedirect("RelatorioFaturateste.pdf");

					getServletContext().getRequestDispatcher(
							"/FaturasController")
							.forward(request, response);

				} catch (Exception e) {
					response.setContentType("text/html");
					PrintWriter pw = response.getWriter();
					pw.write("Problemas ao gerar o PDF, por favor entrar em contato com a ESTUB.");
					pw.flush();

					e.printStackTrace();
				}

			}

		}
	}
}

Gostaria de saber onde estou errando!!!

Da uma olhada nesse topico