Erro ao compilar JasperReport em tempo de execução

E ai galera, estou desenvolvendo uma pequena aplicação em java com o propósito de gerar folhas de frequência para o órgão publico onde trabalho . Tenho uma vasta experiência em programação na linguagem PHP mas ainda estou engatinhando no mundo Java, rs. Gostaria que me ajudassem no seguinte problema com que me deparei.

Tenho um modelo de relatório que representará a frequência com os campos para serem assinados pelo funcionário, até ai tudo bem, o problema é que, dependendo do dia da semana, esses campos apareceram ou não na frequência. Explicando melhor, nas data correspondente ao dias úteis da semana aparecerão os campos para informar a hora de entrada e saída e assinatura do funcionário, e nas datas correspondentes ao final de semana aparecerão apenas os nomes SÁBADO e DOMINGO.

Estou usando o NetBeans 7 e o iReport 4.5.1, com o Java 1.7

Já pesquisei muito sobre compilação em tempo real do arquivo *.jrxml, estudei o arquivo gerado pelo iReport, identifiquei os elementos que devo inserir e seus atributos. Segue trecho de código com a alteração no arquivo jrxml e a compilação do mesmo:

        File xmlFile = new File("frequencias/modelo.jrxml");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(xmlFile);
        Element dE = doc.getDocumentElement();
        NodeList detailist = dE.getElementsByTagName("detail");
        Element detail = (Element) detailist.item(0);
        NodeList bandlist = detail.getElementsByTagName("band");
        Element band = (Element) bandlist.item(0);
        
        Element linha = doc.createElement("line");        
        Element el = doc.createElement("reportElement");
        
        linha.appendChild(el);
        band.appendChild(linha);
        
        
        el.setAttribute("width", "1");
        el.setAttribute("height", "20");
        el.setAttribute("x", "90");
        el.setAttribute("y", "19");
        
        linha.appendChild(el);
        band.appendChild(linha);
        
        Map parameters = new HashMap();
        JasperDesign jasperDesign = JRXmlLoader.load("frequencias/modelo.jrxml");
        
        JasperReport jp = JasperCompileManager.compileReport(jasperDesign);

Porem quando executo o programa, o seguinte erro é gerado:

[color=red]Grave: Parse Error at line 2 column 438: cvc-complex-type.3.2.2: O atributo ‘uuid’ não pode aparecer no elemento ‘jasperReport’.
org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 438; cvc-complex-type.3.2.2: O atributo ‘uuid’ não pode aparecer no elemento ‘jasperReport’.[/color]

Este erro ocorre no momento da recompilação do jrxml.

Até o momento minhas pesquisas não foram suficientes para resolver o problema, então ficaria muito grato se vocês me ajudassem.

Desde já agradeço a atenção. :wink:

Tudo bem jezz?

Cara, essa exceção:

[quote] Grave: Parse Error at line 2 column 438: cvc-complex-type.3.2.2: O atributo ‘uuid’ não pode aparecer no elemento ‘jasperReport’.
org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 438; cvc-complex-type.3.2.2: O atributo ‘uuid’ não pode aparecer no elemento ‘jasperReport’. [/quote]

Parece estar relacionada à leitura do arquivo *.jrxml e não à sua compilação… quem está disparando esse erro não é a biblioteca de leitura do xml?

Verifique a linha em que o erro é disparado.

Blz daveiga,

Kara eu passei o fds todo batendo cabeça com isso e vi que estava lendo o arquivo xml, estava fazendo as modificações mas nãs estava salvando as mesmas. Usando o JDom consegui resolver isso.
Pesquisando em fóruns internacionais descobri também que esse erro era um problema de incompatibilidade de versões do compilador do iReport. Este atributo uuid só é gerado a partir do iReport 4.0.7 e por algum motivo que não sei o estava dando pau. Desinstalei esta versão e instalei a 4.0.1, tirei esse atributo dos elementos xml, resolvi alguns outros erros e pronto, deu certo.

Agora o problema é outro, rsrs.

Olha só como está o código agora:

        File xmlFile = new File("frequencias/modelo2.jrxml");
        SAXBuilder sb = new SAXBuilder(); 
        Document doc = sb.build(xmlFile);
        Element fq = doc.getRootElement();
        
        List detailist = fq.getChildren();
        Element detail = (Element) detailist.get(14);
        List bandlist = detail.getChildren();
        Element band = (Element) bandlist.get(0);
        
        Namespace ns = Namespace.getNamespace("http://jasperreports.sourceforge.net/jasperreports");
        Element linha = new Element("line",ns);
        band.addContent(linha);
                
        Element rp = new Element("reportElement",ns);        
        rp.setAttribute("width", "1");
        rp.setAttribute("height", "20");
        rp.setAttribute("x", "90");
        rp.setAttribute("y", "18");
                
        linha.addContent(rp);                  
        
        XMLOutputter xout = new XMLOutputter();
        FileWriter arquivo = new FileWriter(new File("frequencias/modelo.jrxml"));
        xout.output(doc,arquivo);
        
        JasperReport jp = JasperCompileManager.compileReport("frequencias/modelo.jrxml");

Aparece a seguinte mensagem de erro e não gera o arquivo .jasper:

[color=red]log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
log4j:WARN Please initialize the log4j system properly.[/color]

E ai? rsrs