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 :

problème avec un fichier .XMI [JDOM]


Sujet :

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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut problème avec un fichier .XMI
    bonjour

    je travaille sur un fichier .xml qui est généré automatiquement par Magic Draw donc valide et qui correspondant à la description d'un WSDL diagramme.
    (fichier .XMI), dont voici la partie qui pose un problème (le fichier est volumineux donc je ne peux pas mettre sa totalité)


    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xmi:XMI xmi:version='2.1' xmlns:uml='http://schema.omg.org/spec/UML/2.3' 
    xmlns:xmi='http://schema.omg.org/spec/XMI/2.1' 
    xmlns:UML_Profile_for_Java='http://www.magicdraw.com/schemas/UML_Profile_for_Java.xmi'
     xmlns:statements='http://www.magicdraw.com/schemas/statements.xmi'
    xmlns:XML_Schema_Profile='http://www.magicdraw.com/schemas/XML_Schema_Profile.xmi' 
    xmlns:Validation_Profile='http://www.magicdraw.com/schemas/Validation_Profile.xmi' 
    xmlns:DSL_Customization='http://www.magicdraw.com/schemas/DSL_Customization.xmi' 
    xmlns:Traceability_customization='http://www.magicdraw.com/schemas/Traceability_customization.xmi' 
    xmlns:MagicDraw_Profile='http://www.magicdraw.com/schemas/MagicDraw_Profile.xmi' 
     xmlns:WSDL_Profile='http://www.magicdraw.com/schemas/WSDL_Profile.xmi' 
     xmlns:deployment='http://www.magicdraw.com/schemas/deployment.xmi' 
     xmlns:StandardProfileL2='http://schema.omg.org/spec/UML/2.3/StandardProfileL2.xmi' 
     xmlns:StandardProfileL3='http://schema.omg.org/spec/UML/2.3/StandardProfileL3.xmi'>

    donc pour le charger dans un XMLDocument j'utilise ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private static org.jdom.Document lectureFichier(String fileName)
    	throws JDOMException, IOException
    	{
    	SAXBuilder sxb = new SAXBuilder();
    	return sxb.build(new File(fileName));
    	}
    quand je l'exécute j'obtiens l'erreur suivante :

    org.jdom.IllegalNameException: The name "XML_Schema_Profile" is not legal for JDOM/XML Namespace prefixs: Namespace prefixes cannot begin with "xml" in any combination of case.

    at org.jdom.Namespace.getNamespace(Namespace.java:158)
    at org.jdom.input.SAXHandler.startPrefixMapping(SAXHandler.java:498)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startNamespaceMapping(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:847)
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:826)
    at exchange.XmlParser.lectureFichier(XmlParser.java:29)
    at exchange.XmlParser.xmltosting(XmlParser.java:38)
    at exchange.XmlParser.main(XmlParser.java:75)
    org.jdom.input.JDOMParseException: Error on line 1: Premature end of file.
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
    at exchange.XmlParser.readFromString(XmlParser.java:21)
    at exchange.XmlParser.stringtoxml(XmlParser.java:55)
    at exchange.XmlParser.main(XmlParser.java:75)
    Caused by: org.xml.sax.SAXParseException: Premature end of file.

    du coup, je n'arrive pas à le charger dans un xmlDocument et sachant que le fichier xml est valide et je ne peux pas changer dedans.

    j'apprécierai votre aide et votre participation volontaire pour trouver la solution.

    merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Le message d'erreur est assez clair : non, ce fichier n'est pas valide. Un préfixe namespace ne peut pas commencer par XML (sauf le préfixe "xml" officiel prédéfini.)

    Edit: en fait ce n'est pas à proprement parler invalide. Juste fortement déconseillé. Magic Draw ne devrait pas faire ça et JDOM ne devrait pas faire une erreur pour autant.
    C'est un bug JDOM.

    Solutions envisageables :
    - utiliser une autre API dans l'espoir qu'elle ne se plaigne pas, elle. (Après tout, Magic Draw semble utiliser une telle API.)

    - Implémenter ton propre SAXBuilder en étendant le SAXBuilder existant, mais où celui-ci reposerait sur un ContentHandler qui repère les préfixes qui commencent par "xml" et les remplace par des préfixes qui commencent par "xxx".
    Avec un peu de chance, ça marchera.

    - Prendre le code source de JDOM et le corriger pour qu'il accepte les préfixes commençant par "xml" (autre que "xml" lui-même.)

    - Je ne propose pas de corriger le document lui-même avant d'essayer de le charger, ça me semble un peu trop compliqué.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    d'abord merci thelvin pour votre participation, vous être toujours présent pour nous aider.

    j'aimerai savoir est ce que vous avez à l'esprit une API particulière qui pourra fonctionner dans mon cas ?

    sinon, pour la deuxième solution envisageable, est ce que vous pourriez m'aider pour étendre la classe SAXBuilder.
    il faut redéfinr (Override) quelle method exactement dans la classe ?

    merci beaucoup pour votre aide thelvin.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je crois que je préférerais maintenir ma propre version de JDOM en espérant un correctif, que faire ce bricolage, moi. Enfin...

    sinon, pour la deuxième solution envisageable, est ce que vous pourriez m'aider pour étendre la classe SAXBuilder.
    il faut redéfinr (Override) quelle method exactement dans la classe ?
    Méthode createContentHandler().

    Lui faire renvoyer un objet SAXHandlerFix, qui étend SAXHandler, en modifiant ses méthodes :

    - startPrefixMapping()
    - startElement()
    - endElement()

    Pour intercepter tous les préfixes qui commencent par "xml" et les remplacer par "xxx".
    (Une idée serait de remplacer le préfixe, puis l'appeler la méthode de la classe SAXHandler avec super)

    Attention, dans startElement() il faut s'occuper des éléments, mais peut-être aussi de leurs attributs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    entendu thelvin
    Cependant, je comprens ce que vous dites mais c'est pas exactement ce que je veux.
    en fait, si j'intercépte tous les préfixes "xml" et les remplacer par un "xxx" et puis j'appelle la classe supérieure c'est que j'ai modéfié mon document et au lieu d'avoir un "xml" j'aurai des préfixes "xxx" c'est qui a de conséquence directe un fichier de sortie (aprés sérialisation du xmlDocument résultatnt) non reconnu par Magic Draw. c'est pourquoi, je ne dois pas modifier mon fichier d'entrée.
    est ce que vous voyez le problème ?

    merci d'avance

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Heu, le prefixe n'a pas de signification en XML, il doit juste être unique. C'est le namespace qui a une signification.
    Mais c'est sûr que ça n'empêche pas certains logiciels de s'appuyer, à tord, sur le nom des préfixes plutôt que leurs valeurs.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Morbo Voir le message
    Heu, le prefixe n'a pas de signification en XML, il doit juste être unique. C'est le namespace qui a une signification.
    Mais c'est sûr que ça n'empêche pas certains logiciels de s'appuyer, à tord, sur le nom des préfixes plutôt que leurs valeurs.
    chinomura n'a pas tort, toutefois.

    Les préfixes sont définis principalement pour nommer les éléments et les attributs... Mais ils font aussi partie du contexte du document. Par exemple, quand on crée un nouveau type en XSD, on lui donne un nom.
    Il est possible de placer ce nom dans un namespace, en le préfixant avec un préfixe de namespace qui fait partie du scope.
    Le bricolage que je propose ne peut pas détecter ça, et donc pas le gérer, si ça arrive.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    bonsoir et merci pour votre participation à Thelvin et Morbo

    je me suis trompé la dernière fois en disant que le Magic Draw n'arrive plus à lire le fichier .xml quand je lui change le préfixe qui pose problème, à savoir "XML_Schema_Profile".
    En fait, j'ai essayé de changé manuellement tous les préfixes "XML_Schema_Profile" par "XXX_Schema_Profile" ainsi que l'attribut de namespace "XML_Schema_Profile" dans mon fichier de départ. le résultat, JDOM arrive à le déserialiser et le sérialiser et le fichier de sortie est reconnu par Magic Draw.
    Maintenant pour ne pas toucher au document de départ, commme thelvin m'a indiqué, il fallait modifier dans JDOM pour accepter les préfixes xml et c'est ce que moi j'ai fait en modifiant dans le code source du jdom.jar
    et maintenat j'arrive à désérialiser et le sérialiser sans besoin d'une modification préalable dans le fichier .xml d'entrée.

    merci bcp pour votre contribution

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

Discussions similaires

  1. Problème avec les fichiers en C++
    Par snatch321 dans le forum C++
    Réponses: 7
    Dernier message: 09/05/2006, 19h07
  2. Problème avec un fichier .BAT
    Par jbidou88 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 01/05/2006, 13h03
  3. Problème avec un fichier .BAT
    Par jbidou88 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/04/2006, 14h55
  4. Problème avec des fichiers
    Par Stany dans le forum C++
    Réponses: 7
    Dernier message: 17/10/2005, 16h53
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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