Foro de elhacker.net

Programación => 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:

Código:
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
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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" >
  3. <property name="ireport.zoom" value="1.0"/>
  4. <property name="ireport.x" value="0"/>
  5. <property name="ireport.y" value="0"/>
  6. <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
  7. <defaultValueExpression><![CDATA["C:\\Juanan\\Proyecto\\Aplicación\\Cliente\\src\\cliente\\"]]></defaultValueExpression>
  8. </parameter>
  9. <parameter name="FECHA_SERVICIO" class="java.sql.Date">
  10. <defaultValueExpression><![CDATA[]]></defaultValueExpression>
  11. </parameter>
  12. <queryString>
  13. <![CDATA[SELECT * FROM PEDIDO WHERE FECHA_SERVICIO = $P{FECHA_SERVICIO} ORDER BY ID_RUTA;]]>
  14. </queryString>
  15. <field name="id_empleado" class="java.lang.Integer"/>
  16. <field name="id_barrio" class="java.lang.Integer"/>
  17. <field name="fecha_servicio" class="java.sql.Date"/>
  18. <field name="total_importe" class="java.math.BigDecimal"/>
  19. <field name="id_pedido" class="java.lang.Long"/>
  20. <field name="id_cliente" class="java.lang.Integer"/>
  21. <field name="id_ruta" class="java.lang.Integer"/>
  22. <background>
  23. <band splitType="Stretch"/>
  24. </background>
  25. <title>
  26. <band height="79" splitType="Stretch">
  27. <frame>
  28. <reportElement mode="Opaque" x="0" y="16" width="555" height="44" backcolor="#FF0033" />
  29. <textField>
  30. <reportElement x="65" y="13" width="100" height="20" forecolor="#000000" />
  31. <textElement>
  32. <font size="14" isBold="true"/>
  33. </textElement>
  34. <textFieldExpression><![CDATA[$F{id_ruta}]]></textFieldExpression>
  35. </textField>
  36. <staticText>
  37. <reportElement x="15" y="13" width="50" height="20" />
  38. <textElement>
  39. <font size="14" isBold="true"/>
  40. </textElement>
  41. <text><![CDATA[RUTA :]]></text>
  42. </staticText>
  43. <textField>
  44. <reportElement x="328" y="13" width="213" height="20" />
  45. <textElement>
  46. <font size="14" isBold="true"/>
  47. </textElement>
  48. <textFieldExpression><![CDATA[$F{fecha_servicio}]]></textFieldExpression>
  49. </textField>
  50. <staticText>
  51. <reportElement x="176" y="13" width="131" height="20" />
  52. <textElement>
  53. <font size="14" isBold="true"/>
  54. </textElement>
  55. <text><![CDATA[FECHA SERVICIO :]]></text>
  56. </staticText>
  57. </frame>
  58. </band>
  59. </title>
  60. <detail>
  61. <band height="414" splitType="Stretch">
  62. <subreport>
  63. <reportElement x="0" y="314" width="200" height="100" />
  64. <subreportParameter name="ID_PEDIDO">
  65. <subreportParameterExpression><![CDATA[$F{id_cliente}]]></subreportParameterExpression>
  66. </subreportParameter>
  67. <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
  68. <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubinformePedidos.jasper"]]></subreportExpression>
  69. </subreport>
  70. <subreport>
  71. <reportElement x="0" y="53" width="200" height="100" />
  72. <subreportParameter name="ID_CLIENTE">
  73. <subreportParameterExpression><![CDATA[$F{id_cliente}]]></subreportParameterExpression>
  74. </subreportParameter>
  75. <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
  76. <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubinformeCliente.jasper"]]></subreportExpression>
  77. </subreport>
  78. <staticText>
  79. <reportElement x="0" y="2" width="100" height="20" />
  80. <text><![CDATA[id_empleado]]></text>
  81. </staticText>
  82. <textField>
  83. <reportElement x="100" y="2" width="100" height="20" />
  84. <textFieldExpression><![CDATA[$F{id_empleado}]]></textFieldExpression>
  85. </textField>
  86. <staticText>
  87. <reportElement x="0" y="22" width="100" height="20" />
  88. <text><![CDATA[id_barrio]]></text>
  89. </staticText>
  90. <textField>
  91. <reportElement x="100" y="22" width="100" height="20" />
  92. <textFieldExpression><![CDATA[$F{id_barrio}]]></textFieldExpression>
  93. </textField>
  94. <staticText>
  95. <reportElement x="0" y="203" width="100" height="20" />
  96. <textElement>
  97. <font size="14" isBold="true"/>
  98. </textElement>
  99. <text><![CDATA[total_importe]]></text>
  100. </staticText>
  101. <textField>
  102. <reportElement x="100" y="203" width="100" height="20" forecolor="#FF3366" />
  103. <textElement>
  104. <font size="14"/>
  105. </textElement>
  106. <textFieldExpression><![CDATA[$F{total_importe}]]></textFieldExpression>
  107. </textField>
  108. </band>
  109. </detail>
  110. </jasperReport>
  111.  


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

Código
  1. private void imprimirRutas(String mensajeEntrada){
  2.        //Primero he de averiguar la fecha de la ruta
  3.        int indicePrimero = mensajeEntrada.indexOf("$");
  4.        String fechaServicio = mensajeEntrada.substring(indicePrimero+1, mensajeEntrada.length());
  5.        //Ruta del archivo jasper
  6.        String path = "./InformeRutas.jasper";
  7.        JasperReport reporte;      
  8.        try{
  9.            reporte = JasperCompileManager.compileReport("./src/servidor/InformeRutas.jrxml");
  10.            //Cargo parámetros en una tabla hash
  11.            Map parametros = new HashMap();
  12.            parametros.put("FECHA_SERVICIO", fechaServicio);
  13.            //Genero el informe en memoria
  14.            JasperPrint print =
  15.                    JasperFillManager.fillReport(reporte,parametros,conn);
  16.            //Exporto el informe a PDF
  17.            JasperExportManager.exportReportToPdfFile(print,"informe.pdf");
  18.            //Abro el archivo pdf generado
  19.          File direccion = new File("informe.pdf");
  20.          Desktop.getDesktop().open(direccion);
  21.  
  22.        }catch(Exception e){
  23.            System.out.println("Error al producir informe: "+e);
  24.        }
  25.    }
  26.  


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
  1. <field name="id_empleado" class="java.lang.Integer"/>
  2. <field name="id_barrio" class="java.lang.Integer"/>
  3. <field name="fecha_servicio" class="java.sql.Date"/>
  4. <field name="total_importe" class="java.math.BigDecimal"/>
  5. <field name="id_pedido" class="java.lang.Long"/>
  6. <field name="id_cliente" class="java.lang.Integer"/>
  7. <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