Bonjour à tous
J'essaie de parser mes schémas xml avec jaxb et je vais de bug en bug... Mon souci actuel est que j'ai 2 schémas que je regroupe sous le même namespace. Dans un 3ème, j'importe les 2 premiers et j'essaie d'utliser les types que j'ai définis dans chacun d'eux. Et c'est la que vient le problème: jaxb refuse d'utiliser les types de la 2ème importation!
Je vous montre un exemple qui illustre mon propos:
schema 'AA.xsd':
schema 'AB.xsd' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="A"> <xs:simpleType name="AAtype"> <xs:restriction base="xs:string"/> </xs:simpleType> </xs:schema>
schema 'B.xsd' qui importe et utilise les 2 premiers:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="A"> <xs:simpleType name="ABtype"> <xs:restriction base="xs:string"/> </xs:simpleType> </xs:schema>
Et donc ici, quand j'exécute la commande 'xjc B.xsd', il en ressort l'erreur suivante:
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 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="B" xmlns="B" xmlns:a="A"> <xs:import namespace="A" schemaLocation="AA.xsd"/> <xs:import namespace="A" schemaLocation="AB.xsd"/> <xs:complexType name="Batype"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="att" type="a:AAtype"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:element name="toto" type="Bbtype"/> <xs:complexType name="Bbtype"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="att" type="a:ABtype"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:element name="titi" type="Bbtype"/> </xs:schema>
Donc il ne voit pas le type défini dans le 2ème schéma importé. Je précise que si jamais j'inverse l'ordre des import de AA.xsd et AB.xsd, donc si je fais ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Cannot resolve the name 'a:ABtype' to a(n) 'type definition' component. line 16 of file:/tmp/try/essai/B.xsd
Cette fois ci le code d'erreur est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <xs:import namespace="A" schemaLocation="AB.xsd"/> <xs:import namespace="A" schemaLocation="AA.xsd"/>
Donc on voit bien qu'il n'effectue que la première importation des schémas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Cannot resolve the name 'a:AAtype' to a(n) 'simpleType definition' component. line 9 of file:/tmp/try/essai/B.xsd
Pourriez-vous m'expliquer pourquoi on ne peut pas importer et utiliser 2 schémas définissant des types dans le même namespace avec jaxb ? Ca m'embête beaucoup d'utiliser des namespaces différents à chaque fois, j'ai beaucoup de fichiers et mon architecture est déjà faite. En plus tout est valide avec l'éditeur oxygen, je ne comprend pas pourquoi jaxb pinaille
Merci d'avance à tous![]()
Partager