1

JAXBに提供されたXMLファイルに注釈を追加したい。

同じ属性名とデータ型でオブジェクトを作成するという要件がありますが、それらのJSONキーは異なります。

JSONのキー名は、提供されるアノテーションに基づいて異なります。これらのアノテーションは、たとえばGSONアノテーションです:@SerializedName( "必要なJSONのキー名")。

ここに投稿した質問からいくつかの入力を取得しようとしました

しかし、実際には解決策を得ることができませんでした。

誰か提案がありますか?

説明するためにいくつかのXMLスキーマを追加します。

<xsd:complexType name="RouteType">
 <xsd:attribute name="Pos" type="xsd:int" use="optional" default="1"/>
 <xsd:attribute name="Dir" type="DirType" use="required"/>
</xsd:complexType>

上記のスキーマで、属性Posに注釈を追加できますか?

4

1 に答える 1

2

JAXB コンパイラーが生成されたクラスに自動的にアノテーションを付ける方法を尋ねていると思います。注釈を追加するための JAXB プラグインがあります: http://confluence.highsource.org/display/J2B/Annotate+Plugin

generate-sources次のように、Maven ビルドのフェーズにフックできます。

<build>
    <!-- snip -->
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.8.2</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <schemaIncludes>
                            <include>path/to/your/schema.xsd</include>
                        </schemaIncludes>
                        <bindingIncludes>
                            <include>path/to/your/custom-bindings.xjb</include> <!-- if you choose to use a custom bindings file instead of inline annotations in the xsd -->
                        </bindingIncludes>
                        <forceRegenerate>true</forceRegenerate>
                        <extension>true</extension>
                        <episode>false</episode>
                        <args>
                            <arg>-Xannotate</arg>
                        </args>
                        <plugins>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics-annotate</artifactId>
                                <version>0.6.4</version>
                            </plugin>
                        </plugins>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

上記のプラグインが希望どおりに機能しない場合 (そうすべきだと思いますが、かなり柔軟に見えます)、独自の変更をロールバックすることはそれほど難しくありません (生成されたクラスにコピー コンストラクターを追加するために、以前にこれを行ったことがあります)。 )。

于 2013-03-22T13:42:07.033 に答える