Dúvida IReport + Java

Pessoal tou tentando rodar um relatório mas num tou conseguindo…

Ja tentei os diversos exeplos do google e nada…

Eu 100% inesperiente no assunto.

Segue abaixo o código:

Interface JRDataSource

[code]import net.sf.jasperreports.engine.JRField;

public interface JRDataSource{

public Object getFieldValue(JRField jrFiels);

public boolean next();

}
[/code]

ClienteJRDataSource

[code]import java.util.Iterator;
import java.util.Vector;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

public class ClienteJRDataSource implements JRDataSource {

private Iterator<Cliente> iterator;

private Cliente cursor;

public ClienteJRDataSource(Vector<Cliente> cliente) {
	super();
	iterator = cliente.iterator();
}

public boolean next() throws JRException {
	boolean retorno = iterator.hasNext();
	if(retorno){
		cursor=iterator.next();
	}
	return retorno;
}

public Object getFieldValue(JRField nome) throws JRException {
	Cliente cliente = cursor;
	if (nome.getName().equals("NOME")) {
		return cliente.getNome();
	}
	if (nome.getName().equals("CODIGO")) {
		return cliente.getCodigoControle();
	}
	if (nome.getName().equals("CPF")) {
		return cliente.getCodigo();
	}
	return null;
}

}
[/code]

ClienteJRDatSourceFactory

[code]import java.util.Vector;

import net.sf.jasperreports.engine.JRDataSource;

public class ClienteJRDataSourceFactory {

private static JRDataSource data;

public static JRDataSource createDatasource() {
	if (data == null) {
		Cliente c=new Cliente();
		c=new Cliente("Maria Chiquinha","123.456.789-01","A001");
		Vector<Cliente> cliente=new Vector<Cliente>();
		cliente.add(c);
		c=new Cliente("João Paulo", "111.111.111-11", "A002");
		cliente.add(c);
		c=new Cliente("José da Silva", "222.222.222-22", "A003");
		cliente.add(c);
		data = new ClienteJRDataSource(cliente);
	}
	return data;
}

}
[/code]

Principal

[code]import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;

public class Gerarelatorio {
public static void gerarRelatorio(JRDataSource source) throws JRException {

	Map map = new HashMap();
	JasperFillManager.fillReportToFile("Teste.jasper", map, source);
	JasperViewer.viewReport("Teste.jrprint", false);

}

public static void main(String[] args) {

	try {
		Gerarelatorio.gerarRelatorio(ClienteJRDataSourceFactory
				.createDatasource());
	} catch (JRException e) {
		e.printStackTrace();
	}

}

}

[/code]

Testei outros tb… mas nada…

Quero adicionar uma collection em um relatório… na verdade é uma tabela…

vc tem que colocar o diretorio do seu .jasper

ou seja…se ele estiver dentro do seu source vc tem que fazer
\Teste.jasper

Entendeu?

O .jasper e as classes estão no mesmo diretorio… Na pasta raiz do projeto…

Dá esse erro:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \Teste.jasper
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:81)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:462)
at Gerarelatorio.gerarRelatorio(Gerarelatorio.java:13)
at Gerarelatorio.main(Gerarelatorio.java:21)
Caused by: java.io.FileNotFoundException: \Teste.jasper
… 4 more

Copiei todas os .jar do ireport e ccolei na lib do meu projeto… adicionei no claspath e agora dá outro erro:

Exception in thread "main" java.lang.IllegalArgumentException: When using array of Objects as the value of SCHEMA_SOURCE property , no two Schemas should share the same targetNamespace. at org.apache.xerces.impl.xs.XMLSchemaLoader.processJAXPSchemaSource(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1745) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:168) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150) at Gerarelatorio.main(Gerarelatorio.java:31)

Olá marthian_2, conseguiu resolver o seu problema?

Estou tentando executar o mesmo exemplo que vc utilizou, mas qdo mando compilar o relatório no iReport, me dá a mensagem de erro que o campo NOME não existe, aconteceu isso com vc tb?

[]s
Bruno