Bonjour à tous,
Je cherche à obtenir une génération automatique de classes java à partir d'un fichier xsd fourni par le client.
Pour cela j'utilise jaxb par l'intermédiaire de maven (plugin maven-jaxb-plugin-1.1.0.jar).
En lançant mon ordre de génération (goal jaxb:generate), j'obtiens le message d'erreur suivant :
----------------------------------------------------------------------
D:\project>maven
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
build:start:
jar:buildphr:
clean:clean:
[delete] Deleting directory D:\project\target
clean:
jaxb:prepare-filesystem:
[mkdir] Created dir: D:\project\target\java
jaxb:generate:
[xjc] Consider using <depends>/<produces> so that XJC won't do unnecessary c
ompilation
[xjc] Compiling file:/D:/project/src/xsd/file.xsd and other
s
[xjc] [ERROR] [ERROR] rcase-Recurse.2: There is not a complete functional ma
pping between the particles.
[xjc] [ERROR] line 16 of file.xsd
[xjc] [ERROR]
[xjc] [ERROR] [ERROR] derivation-ok-restriction.5.4.2: Error for type '#Anon
Type_HEADERSIS_1553_COMMANDE'. The particle of the type is not a valid restrict
ion of the particle of the base.
[xjc] [ERROR] line 16 of file.xsd
[xjc] [ERROR]
[xjc] failure in the XJC task. Use the Ant -verbose switch for more details
BUILD FAILED
File...... C:\Documents and Settings\user\.maven\cache\maven-jaxb-plugin-1.1
.0\plugin.jelly
Element... xjc
Line...... 24
Column.... 44
unable to parse the schema. Error messages should have been provided
Total time: 2 seconds
Finished at: Thu Aug 10 10:53:33 CEST 2006
----------------------------------------------------------------------
La section du fichier file.xsd concernée est la suivante :
<xs:element name="SIS_1553_COMMANDE">
<xs:annotation>
<xs:documentation>Cette interface décrit les commandes 1553 hors chiffreur / déchiffreur.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="HEADER">
<xs:complexType> ---------------------------------------------------> ligne 16
<xs:complexContent>
<xs:restriction base="HEADER">
<xs:sequence>
<xs:element name="SATELLITE" type="SATELLITE"/>
<xs:element name="CONFIDENTIALITY" type="CONFIDENTIALITY"/>
<xs:element name="PROVIDER" type="PROVIDER"/>
<xs:element name="SCHEMA_REF">
<xs:complexType>
<xs:sequence>
<xs:element name="NAME">
<xs:simpleType>
<xs:restriction base="SCHEMA_NAME">
<xs:enumeration value="file.xsd"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="VERSION">
<xs:simpleType>
<xs:restriction base="SCHEMA_VERSION">
<xs:enumeration value="1.1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="IF_REF" type="IF_REF"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="SPECIFIC_HEADER" type="SPECIFIC_HEADER_SIS_Type"/>
<xs:element name="DATA">
<xs:complexType>
...
----------------------------------------------------------------------
Apparemment mon fichier xsd est valide (j'ai utilisé le plugin d'eclipse web tools platform pour cette validation).
Mes questions :
J'ai l'impression qu'on utilise l'élément complexe HEADER de façon récursive... on le défini
et on l'utilise à l'intérieur de sa propre définition : est-ce possible?
Si c'est le cas, y a t'il une autre erreur?
sinon existe t'il un outil mavenisable équivalent de jaxb pour vérifier que ce n'est pas un problème lié à jaxb? Je précise
qu'en retirant ce bloc, tout marche et j'ai aussi fait fonctionner jaxb avec d'autres xsd... sans problème.
Pour moi la récursivité est foireuse (mais comme ça n'est pas moi qui ait écrit le .xsd dont je ne suis pas expert d'ailleurs...)
Merci à tous pour vos réponses!!! A+








Répondre avec citation
Partager