Bonjour à tous,
J'ai actuellement le problème suivant lorsque j'exécute mon programme java sous Aix.
Mon prog est sensé parser un fichier XML pour standardiser ses informations. Lorsque mon prog tourne sous Window (mon poste de dev), rien d'anormal, les valeurs des tags sont bien retrouvées et standardisée.
Seulement lorsque ce même programme est installé sous AIX, certaines valeurs de tag ne sont pas "retrouvée" alors qu'elle sont présente dans le fichier XML en entrée... je ne comprends pas comment un prog peut ainsi zapper des valeurs d'un OS à un autre sachant que la machine virtuelle java est de la même version !
Pour un peu plus de compréhension, voici un bon de mon fichier XML en entrée :
Et suite à la standardisation des mes champs, voici le XML que j'obtiens en sortie sous Unix :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <attribs> <attrib name="toto">119</attrib> <attrib name="tata">108</attrib> <attrib name="tutu">10</attrib> <attrib name="titi">1</attrib> <attrib name="tete">121</attrib> </attribs>
La valeur d'un des tag est manquante, alors que sous window, le xml de sortie reste bien le même qu'en entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <attribs> <attrib name="toto"></attrib> <attrib name="tata">108</attrib> <attrib name="tutu">10</attrib> <attrib name="titi">1</attrib> <attrib name="tete">121</attrib> </attribs>
Mon parser fonctionne comme tout parser digne de ce nom, en appellant les méthodes startElement, characters et endElement selon le type de balise qu'il rencontre.
Après avoir mis quelques traces dans mon programme pour comparer l'exécution entre window et unix, je m'apercoit que pour l'attribut "toto", le parser n'appelle pas la méthode "character" sous unix, alors que sous window oui. C'est pourquoi finalement la valeur n'est pas reprise dans le xml de sortie.
Si certains d'entre vous on compris mes explications, ma question est donc de comprendre pourquoi sous unix, le parser ne détecte pas qu'il se trouve dans un tag "attrib" et n'appelle pas la méthode character associée... alors que sous window tout se déroule normalement ?
Certains d'entre vous ont peut etre déjà eu une différence de parsing sous window / unix ?
Voici vite fais quelques bout de code de mon parser :
Le fichier xml en entrée est en binaire, d'ou le fait que mon parser utiliser un byteScanner (maison).
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 scanner = new NplByteScanner(new FileInputStream(theFile), getConfig()); handler.startDocument(); // --- Roll up on all tag element while (true) { scanner.nextElement(true); if (scanner.sgmlElement.qName == null) break; if (scanner.isEOF()) { handler.endDocument(); break; } if (scanner.pcdata.length > 0 && !(new String(scanner.pcdata)).trim().equalsIgnoreCase("") ) handler.characters(scanner.pcdata, 0, scanner.pcdata.length); if (scanner.sgmlElement.state == NplElement.TAG_STARTING) handler.startElement(scanner.sgmlElement.qName, scanner.sgmlElement.attributes); if (scanner.sgmlElement.state == NplElement.TAG_ENDING) handler.endElement(scanner.sgmlElement.qName); }//end-while
Merci à ceux qui se pencheront sur mon problème.
Partager