У меня есть следующий простой документ 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>
И я хотел бы намекнуть компилятору XJC JAXB, что элемент "Высота" должен использовать безопасный типПеречислите класс с помощью внешнего файла привязок, например, так:
1007
Но когда я запускаю команду "xjc -b foo.xjb foo.xsd
", я получаю следующую ошибку:
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.
Выражение XPath выглядит хорошо для меня, поэтому я предполагаю, что есть некоторая тонкая проблема, связанная с пространствами имен XML?Я пробовал несколько комбинаций использования (или нет) пространства имен по умолчанию, targetNamespace и т. Д., Но всегда одна и та же ошибка.Обратите внимание, что xjc
генерирует исходный код Java для файла XSD самостоятельно, как и ожидалось, без файла внешних привязок.Точно так же использование встроенных определений привязки в файле XSD работает должным образом.
Обратите внимание, что я использую версию Java "1.6.0_26" и версию xjc "JAXB 2.1.10 в JDK 6" в Mac OS 10.6.8.
Может кто-нибудь объяснить, как достичь этой цели без изменения исходного XSD?