JAXB XJC - L'évaluation XPath aboutit à un noeud cible vide?
J'ai suivantes simple document XSD (foo.xsd
):
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:foo">
<xsd:element name="Person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Height">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Short"/>
<xsd:enumeration value="Average"/>
<xsd:enumeration value="Tall"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Et je voudrais faire allusion à la XJC JAXB compilateur que la "Hauteur" de l'élément doit utiliser un type de coffre-fort enum par la classe à l'aide d'un fichier de liaisons, comme (foo.xjb
):
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
jxb:version="2.0">
<jxb:bindings schemaLocation="foo.xsd">
<jxb:bindings node="//xsd:element[@name='Height']/xsd:simpleType">
<jxb:typesafeEnumClass name="Height" />
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Mais lorsque je lance la commande "xjc -b foo.xjb foo.xsd
" j'obtiens l'erreur suivante:
parsing a schema...
[ERROR] XPath evaluation of "//xsd:element[@name='Height']/xsd:simpleType" results in empty target node
line 6 of file:/Users/maerics/src/java/jaxb/foo.xjb
Failed to parse a schema.
L'expression XPath semble bien pour moi donc je suppose que il y a quelques subtiles problème lié à des espaces de noms XML? J'ai essayé quelques combinaisons de l'aide (ou non) d'un espace de noms par défaut, targetNamespace, etc. mais toujours la même erreur. Notez que xjc
génère source Java pour le fichier XSD par lui-même, sans l'externe fichier de liaisons, comme prévu. De même, l'aide d'embedded liaison définitions dans le fichier XSD fonctionne comme prévu.
Remarque que je suis à l'aide de Java version "1.6.0_26" et xjc version "JAXB 2.1.10 dans le JDK 6" sur Mac OS 10.6.8.
Quelqu'un peut m'expliquer comment atteindre cet objectif sans modifier l'original XSD?
source d'informationauteur maerics
Vous devez vous connecter pour publier un commentaire.
Heh, vous allez vous lancer quand vous voyez le problème:
Foo.xsd, vous avez ceci:
Foo.xjb, vous avez ceci:
Note "w3" ou "w3c". Ces deux caractéristiques doivent correspondre exactement, et puis votre XPath travailler (sinon l'espace de noms référencés dans votre xjb est distincte de la XSD espace de noms référencés dans votre XSD.)