2011-08-31 8 views
11

は、私は次のような単純な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を変更せずにこの目標を達成する方法を説明できる人はいますか?

答えて

26

ふむ、あなたはあなたが問題見たときに自分自身をキックするつもりだ:foo.xsdで

を、あなたはこの持っている:foo.xjbで

xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

を、あなたはこれを持っている:

xmlns:xsd="http://www.w3c.org/2001/XMLSchema" 

「w3」と「w3c」の違いに注意してください。これらの2つの属性は正確に一致する必要があり、XPathが機能します(そうでなければ、xjbで参照される名前空間はXSDで参照されるXSD名前空間とは異なります)。

+0

Ha!余分な目をつけてくれてありがとう。それは私が手でXMLを書くために得たものだと思う。) – maerics

+0

システムが私にできるだけ早くBountyが来る... – maerics

+0

しかし、私の問題はxsdが名前空間として宣言されていないという問題だった。 DOH。 –

関連する問題