は、私は次のような単純なXSDドキュメント(foo.xsd
)持っている:JAXB XJC - XPath評価の結果、空のターゲットノードになりますか?
<?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コンパイラへのヒントしたいのですがそう(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>
しかし、私は、コマンドを実行する "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
は、外部バインディングファイルなしで、XSDファイルのJavaソースを期待通りに生成することに注意してください。同様に、XSDファイルに埋め込みバインディング定義を使用すると、期待どおりに動作します。
Mac OS 10.6.8では、Javaバージョン「1.6.0_26」とxjcバージョン「JDK 6ではJAXB 2.1.10」を使用しています。
オリジナルのXSDを変更せずにこの目標を達成する方法を説明できる人はいますか?
Ha!余分な目をつけてくれてありがとう。それは私が手でXMLを書くために得たものだと思う。) – maerics
システムが私にできるだけ早くBountyが来る... – maerics
しかし、私の問題はxsdが名前空間として宣言されていないという問題だった。 DOH。 –