2013-05-29 125 views
2

我有一堆xsd其中某些模式導入其他模式。因此,每當我調用(Ant任務或命令行工具)導入其他文件的某些xsd文件時,我傳遞一個綁定文件以確保導入的類不會再次生成(因爲它們已經生成爲「upstread」模式)。該解決方案在this SO post (answer by Blaise Doughan)中描述。JAXB :: xjc 2.2無法識別簡單類型的綁定

儘管此方法適用於xsd:complexType類型,但它似乎不適用於xsd:simpleType類型。這是一個縮小的例子來證明這一點。假設我們有兩個死簡單架構一個導入其他:

a.xsd ---import--> b.xsd 

文件是:

a.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema targetNamespace="http://example.a" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:import namespace="http://example.b" 
       schemaLocation="b.xsd"/> 

</xs:schema> 

b.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema targetNamespace="http://example.b" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:b="http://example.b" 
      elementFormDefault="qualified"> 

    <xs:simpleType name="ResourceType"> 
     <xs:restriction base="xs:string"> 
     <xs:enumeration value="alpha"/> 
     <xs:enumeration value="beta"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:complexType name="ResourceType2"> 
     <xs:sequence> 
      <xs:element name="a" type="xs:integer"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

所以基本上a.xsd什麼也不做,只有進口b.xsd。當一個人在a.xsd調用XJC如下:

xjc -d output -p example.a -npa a.xsd 

你:對導入的架構產生

output/ 
└── example 
    └── a 
     ├── ObjectFactory.java 
     ├── ResourceType2.java 
     └── ResourceType.java 

所以文件。因爲我們不希望出現這種情況,我們定義了以下綁定文件傳遞下去:

進口-bindings.xml

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 

    <jxb:bindings schemaLocation="b.xsd"> 
     <jxb:bindings node="//xs:simpleType[@name='ResourceType']"> 
      <jxb:class ref="example.b.ResourceType"/> 
     </jxb:bindings> 
     <jxb:bindings node="//xs:complexType[@name='ResourceType2']"> 
      <jxb:class ref="example.b.ResourceType2"/> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

無論其,當我們在a.xsd再次XJC調用,採用如下-b選項:

xjc -d output -p a.example a.xsd -b imported-bindings.xml 

我們看到在輸出迪以下教區長:

output/ 
└── example 
    └── a 
     ├── ObjectFactory.java 
     └── ResourceType.java 

也就是說,代爲xsd:複雜類型 「ResourceType2」 確實抑制,但XJC說幹就幹,爲進口XSD生成代碼:簡單類型 「的ResourceType」。有任何想法嗎?

UPDATE 我還沒有得到這個,除非使用自動生成的插曲文件

+0

https:// stackoverflow。com/questions/15656803/class-reuse-with-jaxb-bindings-dont-honor-simpletypes爲我工作得很好。 –

回答

-1

JAXB 2.2.x的版本僅支持我想一個解決辦法工作。