簡體   English   中英

JAXB XJC - XPath評估結果是空目標節點?

[英]JAXB XJC - XPath evaluation results in empty target node?

我有以下簡單的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編譯器提示,“Height”元素應該使用類型安全的枚舉類,使用外部綁定文件,如下所示( 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的情況下實現這一目標嗎?

嘿,當你看到問題時,你會踢自己:

在foo.xsd中,你有這個:

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

在foo.xjb中,你有這個:

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

注意“w3”與“w3c”。 這兩個屬性需要完全匹配,然后您的XPath才能工作(否則xjb中引用的命名空間與XSD中引用的XSD命名空間不同。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM