mam następujący prosty dokument XSD (foo.xsd
):JAXB XJC - ocena XPath skutkuje pustym węzłem docelowym?
<?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>
I chciałbym schować do kompilatora XJC JAXB, że „wysokość” element powinien użyć typu bezpiecznej klasy enum przez stosując wiązania plików zewnętrznych, tak jak (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>
Ale kiedy uruchomić komendę "xjc -b foo.xjb foo.xsd
" pojawia się następujący błąd:
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.
Wyrażenie XPath wygląda dobrze dla mnie, więc zgaduję, że istnieje pewien subtelny problem związany z obszarami nazw XML? Próbowałem kilka kombinacji użycia (lub nie) domyślnego obszaru nazw, targetNamespace, itp., Ale zawsze ten sam błąd. Zauważ, że xjc
generuje samo źródło Java dla pliku XSD, bez zewnętrznego pliku powiązań, zgodnie z oczekiwaniami. Podobnie, używanie osadzonych definicji powiązań w pliku XSD działa zgodnie z oczekiwaniami.
Należy pamiętać, że używam wersji Java "1.6.0_26" i wersji xjc "JAXB 2.1.10 w JDK 6" na Mac OS 10.6.8.
Czy ktoś może wyjaśnić, jak osiągnąć ten cel, bez modyfikowania oryginalnego XSD?
Ha! Dzięki za dodatkową parę oczu; to jest to, co otrzymuję za pisanie XML ręcznie, jak sądzę =) – maerics
Bounty przychodzi, gdy tylko system pozwala mi ... – maerics
Miałem ten sam problem, jednak moim problemem było to, że xsd nie został nawet zadeklarowany jako przestrzeń nazw. DOH. –