Bonjour à tous,
Je suis nouveau dans le monde des schémas xsd et je suis actuellement
confronté à un problème.
J'ai deux schémas xsd. Et j'utilises jaxb pour générer mes classes java et
ant pour automatiser le tout.
Voici le premier (schema1.xsd)
j'ai positionné une propriété (jaxb.package.name) qui lorsque j'utilise
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 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="jaxbSchema1" type="jaxbSchema1Type"/> <xsd:complexType name="jaxbSchema1Type"> <xsd:all> <xsd:element name="element1" type="elementType1" minOccurs="0" maxOccurs="1"/> <xsd:element name="element2" type="elementType2" minOccurs="0" maxOccurs="1"/> </xsd:all> <xsd:attribute name="targetType" type="xsd:string" /> </xsd:complexType> <xsd:complexType name="elementType1"> <xsd:attribute name="longName1" type="xsd:long" use="required" /> <xsd:attribute name="longName2" type="xsd:long" use="required" /> <xsd:attribute name="longName3" type="xsd:long"/> </xsd:complexType> <xsd:complexType name="elementType2"> <xsd:attribute name="stringName1" type="xsd:string"/> <xsd:attribute name="stringName1" type="xsd:string"/> <xsd:attribute name="stringName1" type="xsd:string"/> </xsd:complexType> </xsd:schema>
jaxb me crée mes classes java dans le package que j'ai défini.
Et voici le deuxième (schema2.xsd)
Là aussi j'ai défini la propriété jaxb.package.name (package1) pour qu'il
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:include schemaLocation="C:/.../schema1.xsd"/> <xsd:element name="element" type="elementType"/> <xsd:complexType name="elementType"> <xsd:sequence> <xsd:element name="complexElement" type="jaxbSchema1Type" minOccurs="0" maxOccurs="unbounded"/> ... (d'autres élements mais pas pertinent pour mon pb) </xsd:sequence> </xsd:complexType> .... </xsd:schema>
me crée mes classes dans un package (différent de celui du schema1.xsd)
Dans le 2ème schéma je fais appel au premier avec l'élément include.
J'ai essayé de mettre un chemin absolue (C:/..../schema1.xsd) mais j'ai
cette erreur lors de la génération des classes java:
[xjc] [ERROR] Unable to parse "C:/../..schema1"
J'ai aussi essayé un chemin relatif car schema1.xsd est dans un jar qui est dans mon classpath mais là aussi erreur:
[xjc] [WARNING] src-include.0: Failed to read included schema document
'chemin_relatif/schema1.xsd'.
[xjc] line 2 of schema2.xsd
[xjc] [ERROR] src-resolve: Cannot resolve the name 'jaxbSchema1Type' to a(n) type definition component.
[xjc] line 6 of schema2.xsd
La seule façon que cela fonctionne est de mettre les deux schemas dans le même répertoire et que le schemaLocation de l'élément include de
schema2.xsd est cette valeur:
schemaLocation="schema1.xsd"
Comment faire pour lui donner un chemin relatif ?
Voici la façon dont je génére mes classes:
Je lance ant pour qu'il me génere mes classes jaxb java correspondant au schema1.xsd Tout se fait correctement et j'ai mon arborescence de classes dans le package que je lui ai spécifié.
ex: package1 (répertoire)
impl (répertoire)
JaxbSchema1Impl$Unmarshaller.class
JaxbSchema1Impl.class
JaxbSchema1TypeImpl$Unmarshaller.class
JaxbSchema1TypeImpl.class
ElementType1Impl$Unmarshaller.class
ElementType1Impl.class
ElementType2Impl$Unmarshaller.class
ElementType2Impl.class
JaxbSchema1.class (interface)
JaxbSchema1Type.class (interface)
ElementType1.class (interface)
ElementType2.class (interface)
ObjectFactory.class
de même pour le schema2.xsd sauf qu'il me regénère toutes les classes jaxb java correspondant au schema1.xsd et tout ça dans le package défini pour le schema2.xsd
J'aimerai que seules les classes du schema2.xsd soient générées et qu'elles utilisent les classes du schema1.xsd. Comment faire ?
merci de votre aide
Nicoch
Partager