(我已經GOOGLE了它,在這裏做了搜索,發現沒有答案,也許我使用了錯誤的關鍵字...)JAXB/XJC外部約束力重命名與多XSD編譯
要使它簡單,我有兩個模式:
a.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://foo.bar/something"
targetNamespace="http://foo.bar/something"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:complexType name="TFoo">
<xs:attribute name="version" type="xs:string" />
</xs:complexType>
</xs:schema>
b.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://foo.bar/something"
targetNamespace="http://foo.bar/something"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:complexType name="TFoo">
<xs:attribute name="version" type="xs:string" />
<xs:attribute name="dateTime" type="xs:dateTime" />
</xs:complexType>
</xs:schema>
兩者都有相同的目標名稱空間和名爲TFoo的complexType。
我有一個外部結合到從TFoo改變a.xsd的生成的類名稱,以TFooA:
一個-binding.xml:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
version="2.1">
<jxb:bindings schemaLocation="a.xsd">
<jxb:bindings node="//xs:complexType[@name='TFoo']">
<jxb:class name="TFooA"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
其如果我編譯a.xsd單獨工作:
$ xjc -b a-binding.xml a.xsd
parsing a schema...
compiling a schema...
bar/foo/something/ObjectFactory.java
bar/foo/something/TFooA.java
bar/foo/something/package-info.java
(看我是如何得到TFoo 一個的.java)
但是,如果我嘗試一次編譯兩種模式中,我得到:
$ xjc -b a-binding.xml a.xsd b.xsd
parsing a schema...
[ERROR] 'TFoo' is already defined
line 13 of file:/home/scherrer/tmp/PL_008f/b.xsd
[ERROR] (related to above error) the first definition appears here
line 9 of file:/home/scherrer/tmp/PL_008f/a.xsd
Failed to parse a schema.
我知道TFoo定義了兩次,這就是爲什麼我有外部綁定來解決衝突。
Obs。這兩種模式都是虛構的,是爲了舉例說明問題,而真正的模式(很多)是由第三方提供的,我不能改變它們。
任何人都可以告訴我,如果這是某種xjc限制(它沒有列出here)或根本不應該工作嗎?或者也許是一個錯誤?
在此先感謝。
總之,無法將這兩個模式編譯在一起,因爲此組合無效。 – lexicore