Ho il seguente documento semplice XSD (foo.xsd
):JAXB XJC - Risultati di valutazione XPath nel nodo di destinazione vuoto?
<?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>
e vorrei accennare al compilatore XJC JAXB che l'elemento "Altezza" dovrebbe utilizzare un tipo di sicurezza di classe enum utilizzando un file di attacchi esterni, in questo modo (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>
Ma quando ho eseguito il comando "xjc -b foo.xjb foo.xsd
" ottengo il seguente errore:
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'espressione XPath mi sta bene, quindi immagino ci sia qualche sottile problema relativo ai namespace XML? Ho provato alcune combinazioni di utilizzo (o non) di uno spazio dei nomi predefinito, targetNamespace, ecc. Ma sempre lo stesso errore. Si noti che xjc
genera da solo l'origine Java per il file XSD, senza il file di bind esterno, come previsto. Allo stesso modo, l'utilizzo delle definizioni di binding incorporato nel file XSD funziona come previsto.
Nota che sto usando la versione Java "1.6.0_26" e la versione xjc "JAXB 2.1.10 in JDK 6" su Mac OS 10.6.8.
Qualcuno può spiegare come raggiungere questo obiettivo senza modificare l'XSD originale?
Ha! Grazie per il paio di occhi in più; questo è quello che ottengo per scrivere XML a mano, suppongo =) – maerics
Bounty proveniente non appena il sistema mi consente ... – maerics
Aveva lo stesso problema, tuttavia il mio problema era che xsd non era nemmeno stato dichiarato come spazio dei nomi. DOH. –