2

xsd から Java クラスを作成するために maven-jaxb2-plugin を使用しています。xsd では、Status1 と Status2 の 2 つのステータスを定義しました。この 2 つのクラスには、多くの類似した変数があります。xsd を編集できないため、プロジェクトでクラス Status を作成し、生成されたクラスの変更を追加してこのクラスを拡張するオプションはありますか?

今:

Class Status1 {...}

Class Status2 {...}
  • これは maven-jaxb2-plugin によって生成されます

私が欲しいもの:

Class Status1 extends Status {...}

Class Status2 extends Status {...}
  • これは maven-jaxb2-plugin によって生成されます

Class Status {...}- 自分のクラス

これがバインディングでできることを願っていますが、方法がわかりません

アップデート:

この質問を達成するための 2 番目のオプションは、クラス Status1 に新しい変数を追加することです。これは可能ですか?

私が欲しいもの:

Class Status1 {... NewVariable newVariable ...}

Class Status2 {...}
  • これは maven-jaxb2-plugin によって生成されます
4

2 に答える 2

1

私はそれを見つけました:私はextendを使用します:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    jaxb:version="2.1" xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    jaxb:extensionBindingPrefixes="inheritance">
    <jaxb:bindings schemaLocation="mySchema.xsd">
        <jaxb:bindings node="xsd:complexType[@name='StatusType']">
            <inheritance:extends>my.package.Status1</inheritance:extends>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

JAXB2 プラグインでは、次を追加する必要があります。

                    <extension>true</extension>
                    <args>
                        <arg>-Xinheritance</arg>
                    </args>
                    <plugins>
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-basics</artifactId>
                            <version>0.6.4</version>
                        </plugin>
                    </plugins>
于 2012-11-05T09:12:00.800 に答える
0

質問の最初の部分については、Specifying Super Class of a JAXB-Generated Class を参照してください。

2 番目の部分については、jaxb-xjc を使用して追加のカスタム メソッドを生成するを参照してください。カスタムメソッドの追加についてです。ただし、カスタム フィールドの処理は似ているはずです。

于 2012-11-01T12:14:13.160 に答える