0

これは、問題の WSDL に関連付けられた XSD のスニペットです。

<complexType name="ValueMapEntry">
  <complexContent>
    <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
      <sequence>
        <choice maxOccurs="unbounded" minOccurs="0">
          <element ref="{namespace...}bi"/>
          <element ref="{namespace...}a"/>
          <element ref="{namespace...}s"/>
          <element ref="{namespace...}b"/>
          <element ref="{namespace...}t"/>
          <element ref="{namespace...}d"/>
          <element ref="{namespace...}dt"/>
          <element ref="{namespace...}dur"/>
          <element ref="{namespace...}de"/>
          <element ref="{namespace...}l"/>
          <element ref="{namespace...}f"/>
        </choice>
      </sequence>
      <attribute name="k" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
    </restriction>
  </complexContent>
</complexType>

したがって、同じ基本クラス (値と呼ばれる) を拡張する他の複合型のリストを含む複合型があります。

これで問題なく、クライアントの Java コードで生成されます.....

@XmlElements({
    @XmlElement(name = "de", namespace = "namespace...", type = ValueDecimal.class),
    @XmlElement(name = "l", namespace = "namespace...", type = ValueLong.class),
    @XmlElement(name = "d", namespace = "namespace...", type = ValueDate.class),
    @XmlElement(name = "dt", namespace = "namespace...", type = ValueDateTime.class),
    @XmlElement(name = "dur", namespace = "namespace...", type = ValueDuration.class),
    @XmlElement(name = "a", namespace = "namespace...", type = ValueAnySimpleType.class),
    @XmlElement(name = "f", namespace = "namespace...", type = ValueDouble.class),
    @XmlElement(name = "t", namespace = "namespace...", type = ValueTime.class),
    @XmlElement(name = "s", namespace = "namespace...", type = ValueString.class),
    @XmlElement(name = "b", namespace = "namespace...", type = ValueBoolean.class),
    @XmlElement(name = "bi", namespace = "namespace...", type = ValueBinary.class)
})
protected List<Value> biOrAOrSOrB.....;

ただし、サーバー側のクラスをリストではなく単一の項目に変更すると、WSDL に <choice maxOccurs="unbounded" minOccurs="0"> の代わりに <choice> が含まれるようになります。

次に、代わりにクライアント側で、可能なすべての選択オプションの変数を取得します

@XmlElement(namespace = "namespace...")
protected ValueBinary bi;

@XmlElement(namespace = "namespace...")
protected ValueAnySimpleType a;

@XmlElement(namespace = "namespace...")
protected ValueString s;

@XmlElement(namespace = "namespace...")
protected ValueBoolean b;

など、全体像をつかむことができます。xs:choice は選択リスト内の項目の 1 つしか許可しないため、生成されるこの 2 番目のコードのロットは正しくありません。まだ変数を 1 つだけ取得する必要があるからです。

最新の JAXB-RI と JAX-WS に更新しようとしましたが、違いはありませんでした。

私は愚かですか、それとも JAXB-RI のバグですか?

よろしくお願いします。オーウェン

4

1 に答える 1