3

パッケージレベルのアノテーション(XmlJavaTypeAdaptersタイプアダプター)を追加する必要があります。問題は、wsdl2javaを実行すると、そのパッケージのpackage-info.javaファイルが生成されることです。

独自のpackage-info.javaを追加しようとすると、「タイプpackage-ingoはすでに定義されています」というエラーが発生します。

package-info.javaにアノテーションを挿入する方法はありますか?多分他のアイデア?

ありがとう

4

4 に答える 4

5

いくつかの調査の後、私は外部マッピングファイルを使用しました。私と同じような問題を抱えているすべての人のために、私が見つけたものを以下に説明しました。

WSDLからソースコードを生成するために「cxf-codegen-plugin」を使用している場合、package-info.javaでソリューションを使用することはできません。これは、生成されたコードにすでにこのファイルが含まれている可能性があるためです。クラスは生成されるため、クラスにアノテーションを追加することもできません。唯一の解決策は、独自のマッパーを提供することです。

まず、カスタムマッパーを作成する必要があります。その後、xjbマッピングファイルを定義し、最後にpom.xmlに構成を追加する必要があります。ここで最初の2つのステップについて読むことができます。

外部マッピングファイルをcxf-codegen-pluginに追加するには、プラグイン定義の構成ノードに次のようなものを追加する必要があります。

<defaultOptions>
    <bindingFiles>
        <bindingFile>${basedir}/src/main/resources/mapping.xjb</bindingFile>
    </bindingFiles>
    <noAddressBinding>true</noAddressBinding>
</defaultOptions>

ここで説明されているように、xjcに追加のパラメーターを渡さないでください。これは、機能しないためです。

これが誰かに役立つことを願っています:)

于 2012-12-06T12:11:23.043 に答える
2

私はこれを試したことがありませんが、wsdl2javaコマンドに-xjc-npaフラグを追加してみることができます。理論的には、これはXJCにpackage-info.javaを生成せず、代わりにすべての名前空間などを必要な他のすべての要素に固定するように指示します。

于 2012-10-15T14:23:49.303 に答える
0

JAXBの「バインディング」は、WSDLにインラインで、または個別の外部バインディングファイルとして提供でき、JAXBは適切なアダプターと必要なパッケージレベルのアノテーションを生成します。例については、この質問を参照してください。

于 2012-10-15T12:07:51.840 に答える
0

生成されたコードにも注釈を追加する必要がありました。Javaクラスが生成された直後に、maven-replacer-pluginを使用してこれを実行しました。このソリューションを使用して、出てくるファイルを変更できます。

関連するpom.xmlビットは次のとおりです。

        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>replacer</artifactId>
            <version>${replacer.plugin.version}</version>
            <executions>
                <execution>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <filesToInclude>target/generated-sources/cxf/com/BLAH/client/api/v4/*.java</filesToInclude>
                <filesToExclude>target/generated-sources/cxf/com/BLAH/client/api/v4/ObjectFactory.java,
                    target/generated-sources/cxf/com/BLAH/client/api/v4/package-info.java,
                </filesToExclude>
                <replacements>
                    <replacement>
                        <!-- Add @XmlRootElement in front of public class Blah -->
                        <token>public class (\w*)</token>
                        <value>@XmlRootElement(name ="$1") ${line.separator}public class $1</value>
                    </replacement>
                    <replacement>
                        <!-- Add the import for the XmlRootElement annotation to the file -->
                        <token>import javax.xml.bind.annotation.XmlType;</token>
                        <value>import javax.xml.bind.annotation.XmlType;${line.separator}import javax.xml.bind.annotation.XmlRootElement;</value>
                    </replacement>
                </replacements>
            </configuration>
        </plugin>

お役に立てれば!

于 2013-11-01T14:10:43.797 に答える