Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: Pantera80 en 15 Diciembre 2014, 11:57 AM

Título: [Resuelto] Problema con iReport
Publicado por: Pantera80 en 15 Diciembre 2014, 11:57 AM
Hola a todos. Resulta que he creado un informe con iReport. Para ello he utilizado el plugin
de Netbeans. Con este informe accedo a una base de datos que he creado en PostgreSQL.

El problema es que me sale el siguiente error, se agradece cualquier tipo de ayuda:


Error al producir informe: net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_ruta.getValue())); //$JR_EXPR_ID=10$
                       <--------------------------------------------------------------->
2. Cannot cast from Date to String
               value = (java.lang.String)(((java.sql.Date)field_fecha_servicio.getValue())); //$JR_EXPR_ID=11$
                       <------------------------------------------------------------------>
3. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_empleado.getValue())); //$JR_EXPR_ID=18$
                       <------------------------------------------------------------------->
4. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_barrio.getValue())); //$JR_EXPR_ID=19$
                       <----------------------------------------------------------------->
5. Cannot cast from BigDecimal to String
               value = (java.lang.String)(((java.math.BigDecimal)field_total_importe.getValue())); //$JR_EXPR_ID=20$
                       <------------------------------------------------------------------------>
6. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_ruta.getOldValue())); //$JR_EXPR_ID=10$
                       <------------------------------------------------------------------>
7. Cannot cast from Date to String
               value = (java.lang.String)(((java.sql.Date)field_fecha_servicio.getOldValue())); //$JR_EXPR_ID=11$
                       <--------------------------------------------------------------------->
8. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_empleado.getOldValue())); //$JR_EXPR_ID=18$
                       <---------------------------------------------------------------------->
9. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_barrio.getOldValue())); //$JR_EXPR_ID=19$
                       <-------------------------------------------------------------------->
10. Cannot cast from BigDecimal to String
               value = (java.lang.String)(((java.math.BigDecimal)field_total_importe.getOldValue())); //$JR_EXPR_ID=20$
                       <--------------------------------------------------------------------------->
11. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_ruta.getValue())); //$JR_EXPR_ID=10$
                       <--------------------------------------------------------------->
12. Cannot cast from Date to String
               value = (java.lang.String)(((java.sql.Date)field_fecha_servicio.getValue())); //$JR_EXPR_ID=11$
                       <------------------------------------------------------------------>
13. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_empleado.getValue())); //$JR_EXPR_ID=18$
                       <------------------------------------------------------------------->
14. Cannot cast from Integer to String
               value = (java.lang.String)(((java.lang.Integer)field_id_barrio.getValue())); //$JR_EXPR_ID=19$
                       <----------------------------------------------------------------->
15. Cannot cast from BigDecimal to String
               value = (java.lang.String)(((java.math.BigDecimal)field_total_importe.getValue())); //$JR_EXPR_ID=20$
                       <------------------------------------------------------------------------>
15 errors




Adjunto el código XML del informe:

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" >
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\Juanan\\Proyecto\\Aplicación\\Cliente\\src\\cliente\\"]]></defaultValueExpression>
</parameter>
<parameter name="FECHA_SERVICIO" class="java.sql.Date">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM PEDIDO WHERE FECHA_SERVICIO = $P{FECHA_SERVICIO} ORDER BY ID_RUTA;]]>
</queryString>
<field name="id_empleado" class="java.lang.Integer"/>
<field name="id_barrio" class="java.lang.Integer"/>
<field name="fecha_servicio" class="java.sql.Date"/>
<field name="total_importe" class="java.math.BigDecimal"/>
<field name="id_pedido" class="java.lang.Long"/>
<field name="id_cliente" class="java.lang.Integer"/>
<field name="id_ruta" class="java.lang.Integer"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch">
<frame>
<reportElement mode="Opaque" x="0" y="16" width="555" height="44" backcolor="#FF0033" />
<textField>
<reportElement x="65" y="13" width="100" height="20" forecolor="#000000" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{id_ruta}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="15" y="13" width="50" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[RUTA :]]></text>
</staticText>
<textField>
<reportElement x="328" y="13" width="213" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{fecha_servicio}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="176" y="13" width="131" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[FECHA SERVICIO :]]></text>
</staticText>
</frame>
</band>
</title>
<detail>
<band height="414" splitType="Stretch">
<subreport>
<reportElement x="0" y="314" width="200" height="100" />
<subreportParameter name="ID_PEDIDO">
<subreportParameterExpression><![CDATA[$F{id_cliente}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubinformePedidos.jasper"]]></subreportExpression>
</subreport>
<subreport>
<reportElement x="0" y="53" width="200" height="100" />
<subreportParameter name="ID_CLIENTE">
<subreportParameterExpression><![CDATA[$F{id_cliente}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubinformeCliente.jasper"]]></subreportExpression>
</subreport>
<staticText>
<reportElement x="0" y="2" width="100" height="20" />
<text><![CDATA[id_empleado]]></text>
</staticText>
<textField>
<reportElement x="100" y="2" width="100" height="20" />
<textFieldExpression><![CDATA[$F{id_empleado}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="22" width="100" height="20" />
<text><![CDATA[id_barrio]]></text>
</staticText>
<textField>
<reportElement x="100" y="22" width="100" height="20" />
<textFieldExpression><![CDATA[$F{id_barrio}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="203" width="100" height="20" />
<textElement>
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[total_importe]]></text>
</staticText>
<textField>
<reportElement x="100" y="203" width="100" height="20" forecolor="#FF3366" />
<textElement>
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{total_importe}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>



Y éste es el código Java desde donde invoco al informe:

Código (java) [Seleccionar]

private void imprimirRutas(String mensajeEntrada){
       //Primero he de averiguar la fecha de la ruta
       int indicePrimero = mensajeEntrada.indexOf("$");
       String fechaServicio = mensajeEntrada.substring(indicePrimero+1, mensajeEntrada.length());
       //Ruta del archivo jasper
       String path = "./InformeRutas.jasper";
       JasperReport reporte;      
       try{
           reporte = JasperCompileManager.compileReport("./src/servidor/InformeRutas.jrxml");
           //Cargo parámetros en una tabla hash
           Map parametros = new HashMap();
           parametros.put("FECHA_SERVICIO", fechaServicio);
           //Genero el informe en memoria
           JasperPrint print =
                   JasperFillManager.fillReport(reporte,parametros,conn);
           //Exporto el informe a PDF
           JasperExportManager.exportReportToPdfFile(print,"informe.pdf");
           //Abro el archivo pdf generado
         File direccion = new File("informe.pdf");
         Desktop.getDesktop().open(direccion);
           
       }catch(Exception e){
           System.out.println("Error al producir informe: "+e);
       }
   }
Título: Re: Problema con iReport
Publicado por: Eleкtro en 15 Diciembre 2014, 16:06 PM
No tengo ni idea de Java, pero el error es self-explanatory (se explica por si solo).

Debes convertir los DataTypes de esos valores a String antes de generar el reporte. El compiler solo te está diciendo la verdad, que no puede tratar un DataType de tipo "X" como si fuese de tipo String.

Supongo que es algo que podrás configurar en los miembros del objeto "reporte", o al instanciar la tabla hash, o en la configuración del xml:
Citar
Código (xml) [Seleccionar]
<field name="id_empleado" class="java.lang.Integer"/>
<field name="id_barrio" class="java.lang.Integer"/>
<field name="fecha_servicio" class="java.sql.Date"/>
<field name="total_importe" class="java.math.BigDecimal"/>
<field name="id_pedido" class="java.lang.Long"/>
<field name="id_cliente" class="java.lang.Integer"/>
<field name="id_ruta" class="java.lang.Integer"/>

De todas formas, ¿te has parado a preguntar donde debes preguntar?:
https://community.jaspersoft.com/answers

Saludos.
Título: Re: Problema con iReport
Publicado por: Pantera80 en 15 Diciembre 2014, 17:47 PM
Gracias por responder, Elektro.

He mirado en la dirección que me has puesto, y después de investigar he descubierto que el informe lo había realizado con la versión 5.5.0 de iReport, pero las librerías que he adjuntado a mi proyecto eran más antiguas, aquí estaba el error.

Un saludo