12

私は、20 以上の異なる Web サービスを含むかなり大規模な WS プロジェクトに取り組んでいます。これらの Web サービスは、互いに独立していますが、かなりの数の共通タイプを共有しています。プロキシ クラスを生成するために、ビルド スクリプトでwsimportを Ant ターゲットとして使用しています。

問題: WS (および対応する WSDL) の数が増えるにつれて、プロキシ クラスのビルド時間がかなり急上昇していることに気付きました。さらに調査 (およびプロファイリング) を行った結果、ビルド時間のかなりの部分が wsimport によって共通の型を繰り返し生成することに費やされていることがわかりました。これらのプロキシ クラスとその共通型の生成、コンパイル、およびパッケージ化には、約 15 ~ 20 分かかります。これは私たちにとって問題であり、ビルド時間を短縮する方法を探しています。

質問: 共通タイプを 1 回だけ生成する方法はありますか? グーグルで見つけたいくつかの解決策を調べました。1 つは、WSDL を解析して 1 つの WSDL に結合するWSDL アキュムレータを作成することで、wsimport が 1 回だけ呼び出されるようにしました。別の 1 つはエピソード ファイルの使用をほのめかしていましたが、さらに調査した結果、そのアプローチの使用には問題があることがわかりました。

注: 古い同様の質問を見たことがありますが、どれも回答がありませんでした。

wsimport 複数の生成された wsdl

別々の WSDL ファイルが同じオブジェクト クラスを参照していることを wsimport に伝えるにはどうすればよいですか?

4

1 に答える 1

1

まず第一に、Apache cxf を使用してそのビルドを行います。これは、複数の WSDL を同時に処理でき、はるかに最新であるためです。それははるかに効率的で、より良いクラスを生成します。第二に、WSDL ファイルが大幅に変更されない限り、心配する必要はありません。代わりに、それらを別のアーティファクトに入れて一度ビルドしてから、それらを独自のアーティファクトとしてプロジェクトにインポートします。そのアーカイブで生成されない唯一のものは、エンドポイントをテストするためのテスト コードです。ビルドに関しては、私が使用して大成功を収めた Maven プラグイン構成を以下に貼り付けます。

      <plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${apache.cxf.version}</version>
    <executions>
      <execution>
        <id>generate-sources</id>
        <phase>generate-sources</phase>
        <configuration>
          <sourceRoot>${project.build.directory}/generated-sources/</sourceRoot>
          <defaultOptions>
            <catalog>${wsdlDir}/jax-ws-catalog.xml</catalog>
            <bindingFiles>
              <bindingFile>${wsdlDir}/jaxb-bindings.xml</bindingFile>
              <bindingFile>${wsdlDir}/jaxws-bindings.xml</bindingFile>
            </bindingFiles>
            <noAddressBinding>true</noAddressBinding>
            <extraargs>
              <extraarg>-client</extraarg>
              <extraarg>-xjc-Xbug671</extraarg>-->
              <extraarg>-xjc-mark-generated</extraarg>
            </extraargs>
          </defaultOptions>
          <wsdlOptions>
            <wsdlOption>
              <wsdl>${wsdlDir}/cis.wsdl</wsdl>
            </wsdlOption>
          </wsdlOptions>
        </configuration>
        <goals>
          <goal>wsdl2java</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>org.apache.cxf.xjcplugins</groupId>
        <artifactId>cxf-xjc-bug671</artifactId>
        <version>${apache.cxf.xjc.version}</version>
      </dependency>
    </dependencies>
  </plugin>

これは 1 つの WSDL のみから生成するように設定されていますが、より多くの WSDL を簡単に追加でき、私は他の状況でそうしました。

于 2013-02-19T23:39:55.823 に答える