Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2011, 15h42   #1
Invité de passage
 
Homme Alexandre
Inscription : septembre 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Alexandre

Informations forums :
Inscription : septembre 2011
Messages : 13
Points : 3
Points : 3
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 :
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 :
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 :
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
_Tido_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 16h22   #2
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 16h55   #3
Invité de passage
 
Homme Alexandre
Inscription : septembre 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Alexandre

Informations forums :
Inscription : septembre 2011
Messages : 13
Points : 3
Points : 3
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.
_Tido_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 17h23   #4
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Oui je vois,
Donc apparemment ce ne sont pas les paramètres régionnaux !!

Mais reste un truc bizarre :

Code :
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 09h08   #5
Invité de passage
 
Homme Alexandre
Inscription : septembre 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Alexandre

Informations forums :
Inscription : septembre 2011
Messages : 13
Points : 3
Points : 3
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 ?
_Tido_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h10   #6
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h37   #7
Invité de passage
 
Homme Alexandre
Inscription : septembre 2011
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Alexandre

Informations forums :
Inscription : septembre 2011
Messages : 13
Points : 3
Points : 3
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 ?
_Tido_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 11h59   #8
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h02.


 
 
 
 
Partenaires

Hébergement Web