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

Format d'échange (XML, JSON...) Java Discussion :

Erreur de Parse suite à Erreur POI [SAX]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut Erreur de Parse suite à Erreur POI
    Bonjour à tous.

    Je suis en train de construire un document XML à partir d'un fichier Excel.
    Le but de la manip est de permettre à mon soft d'aller chercher ses données dans un Excel Workbook en plus d'un "traditionnel" fichier XML.
    Il faut reconnaître que pour l'utilisateur Lambda, c'est quand même nettement plus parlant et facile à utiliser.


    Donc, dans un premier temps, je crée un String qui contient toutes mes balises XML, à partir du fichier Excel, et ensuite, j'envoie ce String à mon parser XML (SAX).

    Le problème c'est que je viens de tomber sur un fichier Excel avec lequel ça ne marche pas ! (mais ça marche avec d'autres fichier Excel).
    Si je récupère ma chaine XML et que je la colle dans un fichier XML, alors je peux l'ouvrir sans problème dans mon soft !!!

    Voici les erreurs que j'obtiens en laissant faire la machine toute seule. Si quelqu'un y comprend quelque chose.

    Citation Envoyé par à priori pendant la lecture du fichier XLS
    [WARNING] Unknown Ptg 3c (60)
    [WARNING] Unknown Ptg 3c (60)
    [WARNING] Unknown Ptg 3c (60)

    Citation Envoyé par ma console
    [Fatal Error] :1090:85: Invalid byte 1 of 1-byte UTF-8 sequence.
    org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.myFirm.mySoft.io.mySoftXMLReader.readXML(mySoftXMLReader.java:209)
    at com.myFirm.mySoft.io.mySoftXMLReader.readFile(mySoftXMLReader.java:151)
    at com.myFirm.mySoft.mySoftModel.readFromTFR(mySoftModel.java:765)
    at com.myFirm.mySoft.mySoftModel.read(mySoftModel.java:596)
    at com.myFirm.mySoft.mySoftModel.<init>(mySoftModel.java:473)readXML: org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence.

    at com.myFirm.mySoft.mySoftProgram.fileOpen(mySoftProgram.java:1226)
    at com.myFirm.mySoft.mySoftProgram.chooseFile(mySoftProgram.java:526)
    at com.myFirm.mySoft.mySoftProgram.<init>(mySoftProgram.java:310)
    at com.myFirm.mySoft.mySoftProgram.main(mySoftProgram.java:1835)
    java.lang.NullPointerException
    at com.myFirm.mySoft.io.mySoftXMLReader.readXML(mySoftXMLReader.java:219)
    at com.myFirm.mySoft.io.mySoftXMLReader.readFile(mySoftXMLReader.java:151)
    at com.myFirm.mySoft.mySoftModel.readFromTFR(mySoftModel.java:765)
    at com.myFirm.mySoft.mySoftModel.read(mySoftModel.java:596)
    at com.myFirm.mySoft.mySoftModel.<init>(mySoftModel.java:473)
    at com.myFirm.mySoft.mySoftProgram.fileOpen(mySoftProgram.java:1226)
    at com.myFirm.mySoft.mySoftProgram.chooseFile(mySoftProgram.java:526)
    at com.myFirm.mySoft.mySoftProgram.<init>(mySoftProgram.java:310)
    at com.myFirm.mySoft.mySoftProgram.main(mySoftProgram.java:1835)
    Et voici le code correspondant, pour mySoftXMLReader
    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
    public void readXML(String inputXML) throws ProtocolException, IOException {
    		inTree = false;
    		inDeclarations = false;
     
    		try {
    			SAXParserFactory p = SAXParserFactory.newInstance();
    			p.setValidating(false);
    			SAXParser parser = p.newSAXParser();
    			XMLReader reader = parser.getXMLReader();
    			reader.setContentHandler(this);
     
    			ByteArrayInputStream xmlByteArrayInputStream = new ByteArrayInputStream(inputXML.getBytes());
    			InputSource xmlInputSource = new InputSource(xmlByteArrayInputStream);
     
    			System.out.println("mySoftXMLReader.readXML.xmlString "+inputXML);
     
    			reader.parse(xmlInputSource); // here the stream is parsed.
    		} catch (ParserConfigurationException e) {
    			D.p("readXML: " + e);
    			e.printStackTrace();
    			D.p("readXML: throwing IOException");
    			throw new IOException();
    		} catch (SAXException e) {
    			D.p("readXML: " + e);
    //			e.getException().printStackTrace();
    			e.printStackTrace();
    			throw (ProtocolException) e.getException();
    		} catch (OutOfMemoryError e) {
    			D.pd2("readXML: " + e);
    			HandleMemory.showMessage(parent);
    			readTFR_cancel();	// throws ProtocolException
    		}
    	}
    Les 3 warnings apparaissent juste avant l'affichage du flux XML, et les erreurs commencent à la ligne reader.parse(xmlInputSource); de ce fichier.

    Bref, avec un flux XML valide, je pense que lel soucis vient de ces 3 warning, et du Invalid byte 1 of 1-byte UTF-8 sequence.

    Pour les warnings, j'ai trouvé une explication sur le net qui justifie l'erreur un #REF dans mes cellules, mais il n'y en a pas. Si quelqu'un a une autrer explication.
    j'ai rien trouvé de vraiment concret sur Invalid byte 1 of 1-byte UTF-8 sequence.

    Par avance, merci pour votre aide.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Bonjour,

    Tu sembles avoir un problème d'encodage de caractères.

    Au départ, tes données sont stockées dans une String Java, c'est à dire en UTF-16 (un ou deux char java représentent un seul caractère).

    Par la suite, tu convertis la String en octets via en utilisant le CharSet par défaut de ton ordinateur, probablement iso-8859-1.

    Tu passes ensuite ces octets au parser XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reader.parse(xmlInputSource)
    qui va essayer de déterminer comment sont représentés les caractères dans la suite d'octets.

    Comme tu n'as sans doute pas d'instruction <?xml version="1.0" encoding="iso-8859-1"?> au début de tes données, le parser doit basculer dans le mode par défaut d'XML, UTF-8, où les caractères sont représentés par un octet (les caractères ASCII) ou plusieurs octets (tous les autres, donc les caractères accentués du français).

    Essaie de remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inputXML.getBytes("UTF-8")
    pour convertir ta String Java en suite d'octets UTF-8.

    Si tu n'es pas à l'aise avec UTF-8, UTF-16 ou iso-8859-1, consultes
    http://java.sun.com/j2se/1.4.2/docs/...t/Charset.html.

    Cordialement.

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut Une fois de plus, Développez aura été efficace.
    OK, Excellent !

    Merci beaucoup pour ton aide, ça marche à merveille.

    En effet, je n'ai pas d'instruction <?xml version="1.0" encoding="iso-8859-1"?> , mais en revanche j'ai celle-ci : <?xml version="1.0" encoding="UTF-8"?> . Si j'ai bien compris, la précision sur l'encodage, dans ce cas, n'est que très peu utile.

    Encore merci pour ton aide.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Erreur de parse bizarre...
    Par TommyWeb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/02/2006, 23h54
  2. [Oracle] Erreur ORA-00900 suite à certaines requêtes
    Par osmoze dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/01/2006, 17h43
  3. [servlet][xml] Erreur de parsing
    Par james2001 dans le forum Servlets/JSP
    Réponses: 26
    Dernier message: 03/11/2005, 07h08
  4. Réponses: 13
    Dernier message: 14/10/2005, 11h01
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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