IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Talend et iReport : Cannot cast from Double to String


Sujet :

Développement de jobs

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Talend et iReport : Cannot cast from Double to String
    Bonjour,

    J'ai posté ce message il y a quelques jours sur le forum iReport, je me permet de le poster ici dés fois que quelqu'un ait déjà eu le même problème.

    J'ai créée un rapport très simple avec iReport (v4.1.1), qui fonctionne très bien quand je l’exécute en "interactif" (ie quand je passe en preview dans iReport).
    Dans le rapport, j'ai une connection à une bdd MySQL, sur laquelle je fais un filtre, et un regroupement.
    J'ai sauvegardé ce fichier *.jrxml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?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_talend" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" 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"/>
    	<queryString language="SQL">
    		<![CDATA[SELECT
         table_chris.`idtable_chris` AS table_chris_idtable_chris,
         table_chris.`Vendeur` AS table_chris_Vendeur,
         table_chris.`Campagne` AS table_chris_Campagne,
         table_chris.`Montant` AS table_chris_Montant,
         table_chris.`LeadNumber` AS table_chris_LeadNumber,
         table_chris.`Date` AS table_chris_Date
    FROM
         `table_chris` table_chris
    WHERE
         Montant IS NOT NULL
    GROUP BY
         table_chris_Vendeur
    ORDER BY
         table_chris.`Montant` ASC]]>
    	</queryString>
    	<field name="table_chris_idtable_chris" class="java.lang.Integer"/>
    	<field name="table_chris_Vendeur" class="java.lang.String"/>
    	<field name="table_chris_Campagne" class="java.lang.String"/>
    	<field name="table_chris_Montant" class="java.lang.Double"/>
    	<field name="table_chris_LeadNumber" class="java.lang.String"/>
    	<field name="table_chris_Date" class="java.sql.Date"/>
    	<background>
    		<band splitType="Stretch"/>
    	</background>
    	<title>
    		<band height="79" splitType="Stretch"/>
    	</title>
    	<pageHeader>
    		<band height="35" splitType="Stretch"/>
    	</pageHeader>
    	<columnHeader>
    		<band height="22" splitType="Stretch">
    			<staticText>
    				<reportElement x="64" y="2" width="100" height="20"/>
    				<textElement/>
    				<text><![CDATA[table_chris_Vendeur]]></text>
    			</staticText>
    			<staticText>
    				<reportElement x="234" y="2" width="100" height="20"/>
    				<textElement/>
    				<text><![CDATA[table_chris_Montant]]></text>
    			</staticText>
    		</band>
    	</columnHeader>
    	<detail>
    		<band height="21" splitType="Stretch">
    			<textField>
    				<reportElement x="64" y="1" width="100" height="20"/>
    				<textElement/>
    				<textFieldExpression><![CDATA[$F{table_chris_Vendeur}]]></textFieldExpression>
    			</textField>
    			<textField>
    				<reportElement x="234" y="1" width="100" height="20"/>
    				<textElement/>
    				<textFieldExpression><![CDATA[$F{table_chris_Montant}]]></textFieldExpression>
    			</textField>
    		</band>
    	</detail>
    	<columnFooter>
    		<band height="45" splitType="Stretch"/>
    	</columnFooter>
    	<pageFooter>
    		<band height="54" splitType="Stretch"/>
    	</pageFooter>
    	<summary>
    		<band height="42" splitType="Stretch"/>
    	</summary>
    </jasperReport>
    Voilà le log iReport
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     *Compiling to file... C:\Users\apoisson\report_talend.jasper
    Compilation running time: 1*749! 
     *Filling report...
     *Locale: français (France)
     *Time zone: Default
    Report fill running time: 709! (pages generated: 1) 
     *Viewing with JasperReports Viewer
    Export running time: 6
    Ensuite j'ai ouvert TOS (v4.2.2), et j'ai créer ma connection à ma bdd, récupérer le schéma, et ajouter un lien avec un tJasperOuput.

    Lorsque j'éxecute mon job, voilà le message que je vois dans la console Talend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Exception in component tJasperOutput_1
    net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
    1. Cannot cast from Double to String
                    value = (java.lang.String)(((java.lang.Double)field_table_chris_Montant.getValue())); //$JR_EXPR_ID=9$
                            <-------------------------------------------------------------------------->
    2. Cannot cast from Double to String
                    value = (java.lang.String)(((java.lang.Double)field_table_chris_Montant.getOldValue())); //$JR_EXPR_ID=9$
                            <----------------------------------------------------------------------------->
    3. Cannot cast from Double to String
                    value = (java.lang.String)(((java.lang.Double)field_table_chris_Montant.getValue())); //$JR_EXPR_ID=9$
                            <-------------------------------------------------------------------------->
    3 errors
    	at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:191)
    	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215)
    	at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:131)
    	at bi_project.cree_rapport_0_1.cree_rapport.tMysqlInput_1Process(cree_rapport.java:797)
    	at bi_project.cree_rapport_0_1.cree_rapport.runJobInTOS(cree_rapport.java:1016)
    	at bi_project.cree_rapport_0_1.cree_rapport.main(cree_rapport.java:890)
    lorsque j'édite mes schémas dans Talend, les noms et les formats sont les mêmes, je ne comprend pas pourquoi quelqu'un (Talend ? iReport ?) cherche à faire un cast d'un double vers un string


    Merci pour votre aide. Je débute à la fois sur TOS, iReport et SQL, alors cette requête n'a rien d'urgent

  2. #2
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Salut,

    Je ne m'y connais pas en iReport mais l'erreur réside dans la valeur de la colonne "Montant" de ta table "table_chris",

    Je dirais qu'il y'a une erreur de conversion, tu pourrais checker les valeur dans ta table, et peut être vérifier le séparateur de décimales, parfois le passage d'une représentation avec des "virgules" vers une autre avec des "points" peut causer des problèmes de conversion.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    merci pour ta réponse.

    dans ma table, j'ai des données avec "." comme séparateur décimal

    j'ai mis un Tlog row, et les données que je vois dans la console sont également avec des . comme séparateur décimal.


    dans mon rapport iReport, les données que j'ai sont présentées avec le "." comme séparateur décimal.

    et sur mon ordi également, mes paramètres régionaux sont avec le "." comme séparateur décimal.


    Edit : pour info la bdd MySQL est crée via Talend, en utilisant un TMap, qui transfert un double lu dans un fichier positionnel vers ma bdd.

  4. #4
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Oui je vois,
    Donc apparemment ce ne sont pas les paramètres régionnaux !!

    Mais reste un truc bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = (java.lang.String)(((java.lang.Double)field_table_chris_Montant.getValue()));
    Je ne vois pas porquoi le code généré comporte un double cast ici ?? le premier vers double puis le second ( celui qui pose problème ) vers string !!
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    et oui c'est le truc que je pointais également.
    Est ce que c'est Talend ou iReport qui génère cette formule ?


    sinon, en attendant, je cherche des pistes, et j'ai remaqué que iReport ne se lance pas depuis talend.
    je pense que c'est lié au fait qu'il cherche l'exécutable, et qu'il ne le trouve pas car la variable __IREPORT_PATH__ n'est pas définie.

    J'ai crée une variable de contexte __IREPORT_PATH__ contenant le chemin, et de type directory, mais ça ne change rien.

    J'ai fait le bourrin et rentrer : "C:\Program Files\Jaspersoft\iReport-4.1.1\bin\iReport.exe"

    et là iReport se lance. (mais mon problème initial subsiste)

    Existe t il un endroit dans Talend où l'on peut éditer toutes ces variables ?
    faut il le faire depuis les var. d'env. windows ?

  6. #6
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Franchement aucune idée !!

    Reste un truc que moi j'aurais pû tanter si j'étais à ta place, c'est de générer le code JAVA de ton job Talend puis d'aller le mettre sur une application JAVA normale sur un IDE style Eclipse, et là tu pourrais bidouiller un peu ton code à ta guise jusqu'à ce que ça marche !!

    Là au moins si le code du cast est généré par Talend tu pourras le supprimer puis voir ce que ça donne.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Entre temps, je suis tombé la dessus :
    http://www.talendforge.org/forum/viewtopic.php?id=3672

    si mon niveau d'Anglais est bon, ça voudrait dire qu'à l'époque, le composant ne marchait qu'avec des fichiers textes, et pas avec des bdd.
    Si je dois repasser par des fichiers textes temporaires, ça complexifie trop pour ce que je souhaite faire.
    Je vais donc passer mon chemin.

    mais je vais quand même suivre ton conseil, aller sur Eclipse, et faire quelques bidouilles histoire de maitriser plus de choses sur Talend

    tu utilises quoi pour faire des rapports automatisés avec Talend ?

    la meilleure chose pour importer mon projet dans Eclipse, c'est de faire un export en jar file ?

  8. #8
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Presonnelement je ne fais pas de repoting avec Talend, je fais de la migration.

    Apart ça, pour exporter ta classe JAVA du Job, le mieux c'est de faire un clique droit sur le job puis de cliquer sur "exporter les job", ensuite dans les options tu coches tout , comme ça tu es sûr d'obtenir les classes java,les fichiers sources et même les jar requis.

    Bonne chance.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/12/2014, 10h34
  2. Erreur "Cannot cast from Object to int"
    Par FatmaFafa dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 11/08/2012, 18h33
  3. Cannot cast from int to Integer
    Par flotho dans le forum Jasper
    Réponses: 2
    Dernier message: 11/11/2009, 20h39
  4. Réponses: 3
    Dernier message: 29/01/2007, 13h39
  5. Réponses: 20
    Dernier message: 23/01/2007, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo