我有一堆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 我還沒有得到這個,除非使用自動生成的插曲文件
https:// stackoverflow。com/questions/15656803/class-reuse-with-jaxb-bindings-dont-honor-simpletypes爲我工作得很好。 –