1

これを別の方法で尋ねる他の質問をいくつか見つけましたが、それらの質問に対する答えはどれも機能しません。彼らが参照しているサイトは死んでいるか、JAXB2 用ではありません。

私が必要としているのは、生成されたクラスのいくつかが共通のインターフェースから継承することです。それらはすべて.getName()メソッドを持っているからです。

if(o instanceof XXX)タイプごとに巨大なブロックを持たなければならないのではなく、ブロックにInterfaceキャストして を呼び出すことで、このコモンに対してテストするだけ.getName()です。

これが私のインターフェースです

package com.mycompany;

public interface Nameable
{
    public String getName();
}

そして、これが私の.xjbバインディングファイルに追加しているものです

<jxb:bindings version="2.1"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
          xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
          jxb:extensionBindingPrefixes="xjc inheritance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"

...

<jxb:bindings node="//xsd:element[@name='container']">
  <inheritance:implements>com.mycompany.Nameable</inheritance:implements>
</jxb:bindings>

生成されたクラスに何も追加していません。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "contents"
})
@XmlRootElement(name = "container")
public class Container implements Cloneable, CopyTo, Equals, HashCode, MergeFrom, ToString
{
   ...
}

このインターフェイスをリストに追加するための魔法の呪文は何ですか?

4

2 に答える 2

2
<jxb:bindings node="//xsd:element[@name='container']">
  <inheritance:implements>com.mycompany.Nameable</inheritance:implements>
</jxb:bindings>

のように見える必要がある

<jxb:bindings node="//xsd:element[@name='container']">
  <jxb:class/>
  <inheritance:implements>com.mycompany.Nameable</inheritance:implements>
</jxb:bindings>

不足しているスタンザを追加すると、期待どおりに機能し始めました

于 2011-11-03T20:39:05.923 に答える
0

要素の複合型をカスタマイズする必要があると思います。インターフェイスを実装するのはこの型なので、customization/ を配置するのに適した場所implementsです。

于 2011-12-02T07:12:32.010 に答える