0

(私はすでにそれをグーグルで検索してここで検索しましたが、答えが見つかりませんでした。おそらく間違ったキーワードを使用しています...)

簡単にするために、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 制限 (ここにはリストされていません) なのか、まったく機能しないのか、誰か教えてもらえますか? それともバグ?

前もって感謝します。

4

2 に答える 2

-1

データバインディングの制限を見つけたと思います。代わりにデータ プロジェクションを試してください(開示: 私はそのプロジェクトに所属しています)。スキーマ b.xsd は、a.xsd の拡張のように見えます。b.xsd に適したプロジェクション インターフェイスを作成し、a.xsd または b.xsd のいずれかに適合する任意のドキュメントで使用できます。

于 2015-01-08T07:27:43.630 に答える