(私はすでにそれをグーグルで検索してここで検索しましたが、答えが見つかりませんでした。おそらく間違ったキーワードを使用しています...)
簡単にするために、2 つのスキーマがあります。
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>
どちらも同じ targetNamespaceとTFooという名前の complexType を持っています。
a.xsd の生成されたクラス名をTFooからTFooAに変更する外部バインディングがあります。
a-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 A .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が 2 回定義されていることはわかっています。そのため、競合を解決するための外部バインディングがあります。
オブス。両方のスキーマは架空のものであり、問題を例示するために書かれています。実際の (多くの) スキーマはサードパーティによって提供されており、変更することはできません。
これがある種の xjc 制限 (ここにはリストされていません) なのか、まったく機能しないのか、誰か教えてもらえますか? それともバグ?
前もって感謝します。