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:
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:
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:
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:
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:
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:
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