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 :

multiple namespaces package xjb file [JAXB]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut multiple namespaces package xjb file
    Bonjour

    J'ai un fichier xsd qui importe 158 autre xsd.
    parmis ces xsd il y a xhtml.xsd qui lui-même importe xml.xsd (xml:lang)

    J'utilise XJC 2.2 pour générer les classes java.
    mais j'obtient des conflits.

    l'attribut lang est définit dans deux fichiers une de mes xsd et l'autre dans xml.xsd
    les éléments code et adresse qui sont définis dans une de mes xsd et dans xhtml.xsd.

    le compile avec maven
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <configuration>
        <packageName>fr.fhir</packageName>
        <sources>
          <source>${basedir}/src/main/resources/fhir-codegen-xsd/fhir-all.xsd</source>
        </sources>
        <clearOutputDir>true</clearOutputDir>
        <outputDirectory>${basedir}/src/main/java/</outputDirectory>
        <bindingDirectory>${basedir}/src/main/xjb/</bindingDirectory>
        <bindingFiles>
          <!--<bindingFile>lang.xjb</bindingFile>-->
          <bindingFile>global.xjb</bindingFile>
        </bindingFiles>
    </configuration>
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <jaxb:bindings
    	schemaLocation="../resources/fhir-codegen-xsd/fhir-all.xsd"
    	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    	jaxb:version="2.0">
    	<jaxb:bindings>
    		<jaxb:globalBindings typesafeEnumMaxMembers="2000" />
    	</jaxb:bindings>
    </jaxb:bindings>

    J'ai essayé d'ajouter un fichier xjb pour lang
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <jaxb:bindings 
    	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    	xmlns:xs="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
     
    <!-- 	schemaLocation="../resources/fhir-codegen-xsd/fhir-all.xsd" -->
    <!-- 	schemaLocation="../resources/fhir-codegen-xsd/fhir-xhtml.xsd" -->
    	<jaxb:bindings
    		node="//xs:attribute[@ref='xml:lang']">
    		<jaxb:property name="xmlLang" />
    	</jaxb:bindings>
    </jaxb:bindings>

    mais quelque soit la valeur de shema location la racine ou xhtml ça ne fonctionne pas.
    avec all.xsd il indique que [CODEonline]//xs:attribute[@ref='xml:lang'][/CODEonline] ne matche rien.
    avec xhtml.xsd il indique que xhtml.xsd ne fait pas partit de la compilation alors qu'il est importé par all.xsd

    J'ai modifié xhtml.xsd pour ajouter
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		<xs:attribute ref="xml:lang">
    			<xs:annotation>
    				<xs:appinfo>
    					<jaxb:property name="xmlLang" />
    				</xs:appinfo>
    			</xs:annotation>
    		</xs:attribute>

    pour les éléments Code et Adress j'ai le même conflit que pour l'attribut
    Mais là rien à faire impossible de trouver une solution
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	<xs:element name="code">
    		<xs:annotation>
    			<xs:appinfo>
    					<jaxb:property name="htmlCode" />
    				</xs:appinfo>
    		</xs:annotation>
    		<xs:complexType mixed="true">
    la compilation indique que ce mapping ne peut être appliqué.

    Mais je pense que ce n'est pas la bonne approche.
    ce que je voudrais, et je pense que ça résoudrait tout c'est que all.xsd targetNamespace="http://hl7.org/fhir" produise des classes dans org.hl7.fhir
    et que xhtml.xsd targetNamespace="http://www.w3.org/1999/xhtml" produise dans org.w3c.xhtml

    j'ai pensé ajouter
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	<xs:annotation>
    		<xs:appinfo>
    			<jaxb:globalBindings>
    				<xjc:simple />
    			</jaxb:globalBindings>
    			<jaxb:schemaBindings>
    				<jaxb:package name="com.custom.package" />
    			</jaxb:schemaBindings>
    		</xs:appinfo>
    	</xs:annotation>
    dans le fichier xhtml.xsd ou mettre ce genre de chose dans un fichier xjb
    mais ça entre en conflit avec globalBindings typesafeEnumMaxMembers

    Comment faire pour que les classes soit générées dans un package différent en fonction du namespace ?

    A+JYT

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    J'ai fini par trouver la solution.

    pour ce qui est de l'appel à xjc via maven j'ai changé de plugin (mais c'est marginal)
    Code xml : 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
    34
    35
    36
    37
          <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.14.0</version>
            <executions>
              <execution>
                <id>process-fhir-codegen-xsd</id>
                <phase>process-sources</phase>
                <goals>
                  <goal>generate</goal>
                </goals>
                <configuration>
                  <schemaDirectory>${basedir}/src/main/resources/fhir-codegen-xsd/</schemaDirectory>
                  <schemaIncludes>
                    <include>fhir-all.xsd</include>
                  </schemaIncludes>
                  <bindingDirectory>${basedir}/src/main/xjb/</bindingDirectory>
                  <bindingIncludes>
                    <include>global.xjb</include>
                  </bindingIncludes>
                  <generateDirectory>${basedir}/src/main/java/</generateDirectory>
                  <extension>true</extension>
                  <cleanPackageDirectories>true</cleanPackageDirectories>
                  <args>
                    <arg>-Xfluent-api</arg>
                  </args>
                  <plugins>
                    <plugin>
                      <groupId>net.java.dev.jaxb2-commons</groupId>
                      <artifactId>jaxb-fluent-api</artifactId>
                      <version>2.1.8</version>
                    </plugin>
                  </plugins>
                </configuration>
              </execution>
            </executions>
          </plugin>

    Le problème était en réalité que le chemin des xsd dans le fichier xjb sont relatif à ce dernier (et non au paramètre de lancement).

    J'ai donc réuni dans un seul fichier xjb tous mes binding.
    la première chose est le mapping namespace<->package (je n'avais pas bien compris la syntaxe et je le faisais via le fichier xsd et non le namespace)
    la seconde est de définir pour le fichier xhtml.xsd le nommage de la propriété xml:lang dans les deux éléments ou elle apparaît.
    Code xml : 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
    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
      <jaxb:bindings scd="x-schema::fhir" xmlns:fhir="http://hl7.org/fhir">
        <jaxb:schemaBindings>
          <jaxb:package name="org.hl7.fhir" />
        </jaxb:schemaBindings>
        <jaxb:bindings>
          <jaxb:globalBindings typesafeEnumMaxMembers="2000" />
        </jaxb:bindings>
      </jaxb:bindings>
      <jaxb:bindings scd="x-schema::xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml" >
        <jaxb:schemaBindings>
          <jaxb:package name="org.w3c.xhtml" />
        </jaxb:schemaBindings>
      </jaxb:bindings>
      <jaxb:bindings schemaLocation="../resources/fhir-codegen-xsd/fhir-xhtml.xsd" node="/xs:schema">
        <jaxb:bindings node="//xs:attributeGroup[@name='i18n']/xs:attribute[@ref='xml:lang']">
          <jaxb:property name="xmlLang"/>
        </jaxb:bindings>
        <jaxb:bindings node="//xs:element[@name='bdo']/xs:complexType/xs:complexContent/xs:extension/xs:attribute[@ref='xml:lang']">
          <jaxb:property name="xmlLang"/>
        </jaxb:bindings>
      </jaxb:bindings>
    </jaxb:bindings>

    Comme je le pensais le fait d'avoir deux package (un pour fhir et un pour xhtml) je n'ai plus de problèmes avec les éléments code et adress qui sont définis dans les deux packages.

    Je vous joint le projet en entier
    Il télécharge sur le site de la norme les définitions xml de FHIR
    Il dézippe, génère les classes et créé un jar.

    A+JYT
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Package Latex File
    Par menakikou dans le forum Mise en forme
    Réponses: 3
    Dernier message: 13/08/2009, 11h53
  2. [Upload] Upload multiple files
    Par aymanov dans le forum Langage
    Réponses: 17
    Dernier message: 22/12/2008, 09h38
  3. [Assembly/NameSpace] Quel est l'équivalent du package Java ?
    Par zayro dans le forum Framework .NET
    Réponses: 5
    Dernier message: 21/02/2006, 17h00
  4. Package UTL.FILE
    Par djoule6 dans le forum Oracle
    Réponses: 13
    Dernier message: 21/10/2005, 15h42
  5. Input File multiples
    Par odelayen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 21/02/2005, 14h46

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