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 :

[Camel] Contrôler un XML par un XSD


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut [Camel] Contrôler un XML par un XSD
    Bonjour,

    je n'arrive pas à contrôler la structure d'un fichier xml par un fichier xsd. Pour cela j'utilise le composant camel "xslt".

    Je suis complètement perdu....

    Voici mon fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <!-- element_racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd" -->
    <element_racine xmlns:xsi="schema.xsd">
      <!--  <nombre>sdg</nombre>   -->
      <nombre>90</nombre>
      <nombre>80</nombre>
      <nombre>99</nombre>
    </element_racine>

    mon fichier xsd :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
     
    <xsd:simpleType name="entre50et100">
    <xsd:restriction base="xsd:positiveInteger">
      <xsd:minExclusive value="50"/>
      <xsd:maxExclusive value="100"/>
    </xsd:restriction>
    </xsd:simpleType>
     
    <xsd:element name="nombre" type="entre50et100"/>
     
    <xsd:element name="element_racine">
    <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="nombre" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
     
    </xsd:schema>

    ma route camel :

    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
        public void configure() {
     
            // error channel
        	errorHandler(deadLetterChannel("file:dead/?fileName=${date:now:yyyy-MM-dd}/${id}").useOriginalMessage());
     
        	// Incoming file
     
    		from("file:input/test.xml")
        		.log("Starting to process file")
        		.to("xslt:META-INF/XSDDocument/test.xsd")
        		.bean(Services.class, "check")
        		.to("direct:unknownIncoming");
     
        }
    }


    J'ai mis un point d'arrêt dans la méthode "check" de ma classe Services en me disant que si ça arrivait jusque là c'est que le fichier xml serait valide...

    Quand je lance le débug, j'ai un message d'erreur :

    "Failed to create route route1 at: >>> To[xslt:META-INF/XSDDocument/test.xsd] <<< in route: Route[[From[file:input/?noop=true&initia... because of Failed to resolve endpoint: xslt://META-INF/XSDDocument/test.xsd due to: Impossible de compiler la feuille de style


    Merci pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Par défaut
    Citation Envoyé par anakin59490 Voir le message
    Bonjour,

    je n'arrive pas à contrôler la structure d'un fichier xml par un fichier xsd. Pour cela j'utilise le composant camel "xslt".

    Je suis complètement perdu....

    Voici mon fichier xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0"?>
    <!-- element_racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd" -->
    <element_racine xmlns:xsi="schema.xsd">
      <!--  <nombre>sdg</nombre>   -->
      <nombre>90</nombre>
      <nombre>80</nombre>
      <nombre>99</nombre>
    </element_racine>

    mon fichier xsd :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
     
    <xsd:simpleType name="entre50et100">
    <xsd:restriction base="xsd:positiveInteger">
      <xsd:minExclusive value="50"/>
      <xsd:maxExclusive value="100"/>
    </xsd:restriction>
    </xsd:simpleType>
     
    <xsd:element name="nombre" type="entre50et100"/>
     
    <xsd:element name="element_racine">
    <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="nombre" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
     
    </xsd:schema>

    ma route camel :

    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
        public void configure() {
     
            // error channel
        	errorHandler(deadLetterChannel("file:dead/?fileName=${date:now:yyyy-MM-dd}/${id}").useOriginalMessage());
     
        	// Incoming file
     
    		from("file:input/test.xml")
        		.log("Starting to process file")
        		.to("xslt:META-INF/XSDDocument/test.xsd")
        		.bean(Services.class, "check")
        		.to("direct:unknownIncoming");
     
        }
    }


    J'ai mis un point d'arrêt dans la méthode "check" de ma classe Services en me disant que si ça arrivait jusque là c'est que le fichier xml serait valide...

    Quand je lance le débug, j'ai un message d'erreur :

    "Failed to create route route1 at: >>> To[xslt:META-INF/XSDDocument/test.xsd] <<< in route: Route[[From[file:input/?noop=true&initia... because of Failed to resolve endpoint: xslt://META-INF/XSDDocument/test.xsd due to: Impossible de compiler la feuille de style


    Merci pour votre aide


    J'ai trouvé !!

    Il faut utiliser le composant camel "validator:" et non "xslt:"

    Ce dernier sert uniquement à transformer le fichier xml selon le xsd. Ce qui est mon objectif final. Mais je dois d'abord contrôler sa syntaxe.

    Or je pensais que le composant "xslt:" pouvait faire les 2 : contrôler la syntaxe et le transformer....

    Voilà !

  3. #3
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    je ne connais pas camel, mais il est clair que tu as une erreur dans ton fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <element_racine xmlns:xsi="schema.xsd">
    A priori, l'URI de l'espace de noms xsi n'est pas schema.xsd
    mais bien plutôt http://www.w3.org/2001/XMLSchema-instance.

    Ainsi tu obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <element_racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
      <nombre>90</nombre>
      <nombre>80</nombre>
      <nombre>99</nombre>
    </element_racine>

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

Discussions similaires

  1. valider un fichier xml par un xsd
    Par TaymouWan dans le forum C#
    Réponses: 4
    Dernier message: 25/03/2009, 11h36
  2. Validation de XML par XSD sans MSXML
    Par XPierrot dans le forum Langage
    Réponses: 3
    Dernier message: 23/03/2006, 08h46
  3. [XSD][Java]Valider un XML par rapport a un XSD
    Par sikapoch dans le forum Valider
    Réponses: 11
    Dernier message: 08/11/2005, 15h21
  4. Réponses: 4
    Dernier message: 23/06/2005, 12h44
  5. Réponses: 3
    Dernier message: 27/01/2004, 16h15

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