44.2. cxf-codegen-plugin

概要

WSDL ドキュメントから JAX-WS 準拠の Java コードを生成します

概要

基本例

以下の POM の抜粋は、myService.wsdl WSDL ファイルを処理する Maven cxf-codegen-plugin の設定方法の簡単な例を示しています。

<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <version>3.3.6.fuse-7_11_1-00015-redhat-00002</version>
  <executions>
    <execution>
      <id>generate-sources</id>
      <phase>generate-sources</phase>
      <configuration>
        <sourceRoot>target/generated/src/main/java</sourceRoot>
        <wsdlOptions>
          <wsdlOption>
            <wsdl>src/main/resources/wsdl/myService.wsdl</wsdl>
          </wsdlOption>
        </wsdlOptions>
      </configuration>
      <goals>
        <goal>wsdl2java</goal>
      </goals>
    </execution>
  </executions>
</plugin>

基本の設定設定

前の例では、次の設定をカスタマイズできます

configuration/sourceRoot
生成された Java ファイルが保存されるディレクトリーを指定します。デフォルトは target/generated-sources/cxf です。
configuration/wsdlOptions/wsdlOption/wsdl
WSDL ファイルの場所を指定します。

説明

wsdl2java タスクは WSDL ドキュメントを取得し、サービスを実装する完全なアノテーションが付けられた Java コードを生成します。WSDL ドキュメントには有効な portType 要素が必要ですが、binding 要素または service 要素を含める必要はありません。オプションの引数を使用して、生成されたコードをカスタマイズできます。

WSDL オプション

プラグインを設定するには、1 つ以上の wsdlOptions 要素が必要です。wsdlOptions 要素の wsdl 子要素が必要で、プラグインによって処理される WSDL ドキュメントを指定します。wsdl 要素に加えて、wsdlOptions 要素は WSDL ドキュメントの処理方法をカスタマイズできるさまざまな子要素を取ることができます。

複数の wsdlOptions 要素をプラグイン設定に追加できます。各要素は、処理用に単一の WSDL ドキュメントを設定します。

デフォルトのオプション

defaultOptions 要素はオプションの要素です。これは、指定されたすべての WSDL ドキュメントで使用されるオプションを設定するために使用できます。

重要

wsdlOptions 要素でオプションが複製する場合、wsdlOptions 要素の値が優先されます。

コード生成オプションの指定

汎用コード生成オプション (Apache CXF wsdl2java コマンドラインツールでサポートされるスイッチに対応) を指定するには、extraargs 要素を wsdlOption 要素の子として追加できます。たとえば、以下のように -impl オプションと -verbose オプションを追加できます。

...
<configuration>
  <sourceRoot>target/generated/src/main/java</sourceRoot>
  <wsdlOptions>
    <wsdlOption>
      <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
      <!-- you can set the options of wsdl2java command by using the <extraargs> -->
      <extraargs>
        <extraarg>-impl</extraarg>
        <extraarg>-verbose</extraarg>
      </extraargs>
    </wsdlOption>
  </wsdlOptions>
</configuration>
...

スイッチが引数を取る場合、後続の extraarg 要素を使用してそれらを指定できます。たとえば、jibx データバインディングを指定するには、以下のようにプラグインを設定します。

...
<configuration>
  <sourceRoot>target/generated/src/main/java</sourceRoot>
  <wsdlOptions>
    <wsdlOption>
      <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
      <extraargs>
        <extraarg>-databinding</extraarg>
        <extraarg>jibx</extraarg>
      </extraargs>
    </wsdlOption>
  </wsdlOptions>
</configuration>
...

バインディングファイルの指定

1 つまたは複数の JAX-WS バインディングファイルの場所を指定するには、bindingFiles 要素を wsdlOption の子要素として追加します。以下に例を示します。

...
<configuration>
  <wsdlOptions>
    <wsdlOption>
      <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
      <bindingFiles>
        <bindingFile>${basedir}/src/main/resources/wsdl/async_binding.xml</bindingFile>
      </bindingFiles>
    </wsdlOption>
  </wsdlOptions>
</configuration>
...

特定の WSDL サービスのコードの生成

コードが生成される WSDL サービスの名前を指定するには、serviceName 要素を wsdlOption の子要素として追加できます (デフォルトでは WSDL ドキュメントのすべてのサービスのコードが生成されます)。以下に例を示します。

...
<configuration>
  <wsdlOptions>
    <wsdlOption>
      <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
      <serviceName>MyWSDLService</serviceName>
    </wsdlOption>
  </wsdlOptions>
</configuration>
...

複数の WSDL ファイルのコード生成

複数の WSDL ファイルのコードを生成するには、WSDL ファイルの追加 wsdlOption 要素を挿入するだけです。すべての WSDL ファイルに適用される共通のオプションを指定する場合は、以下のように共通のオプションを defaultOptions 要素に配置します。

<configuration>
  <defaultOptions>
      <bindingFiles>
          <bindingFile>${basedir}/src/main/jaxb/bindings.xml</bindingFile>
      </bindingFiles>
      <noAddressBinding>true</noAddressBinding>
  </defaultOptions>
  <wsdlOptions>
      <wsdlOption>
          <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
          <serviceName>MyWSDLService</serviceName>
      </wsdlOption>
      <wsdlOption>
          <wsdl>${basedir}/src/main/resources/wsdl/myOtherService.wsdl</wsdl>
          <serviceName>MyOtherWSDLService</serviceName>
      </wsdlOption>
  </wsdlOptions>
</configuration>

ワイルドカードマッチングを使用して複数の WSDL ファイルを指定することもできます。この場合、wsdlRoot 要素を使用して WSDL ファイルが含まれるディレクトリーを指定し、include 要素を使用して必要な WSDL ファイルを選択します。その際、* 文字を使用したワイルドカードがサポートされます。たとえば、src/main/resources/wsdl ルートディレクトリーから Service.wsdl で終わるすべての WSDL ファイルを選択するには、プラグインを以下のように設定します。

<configuration>
  <defaultOptions>
      <bindingFiles>
          <bindingFile>${basedir}/src/main/jaxb/bindings.xml</bindingFile>
      </bindingFiles>
      <noAddressBinding>true</noAddressBinding>
  </defaultOptions>
  <wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
  <includes>
      <include>*Service.wsdl</include>
  </includes>
</configuration>

Maven リポジトリーからの WSDL のダウンロード

Maven リポジトリーから WSDL ファイルを直接ダウンロードするには、wsdlArtifact 要素を wsdlOption 要素の子要素として追加し、以下のように Maven アーティファクトの変数を指定します。

...
<configuration>
  <wsdlOptions>
    <wsdlOption>
      <wsdlArtifact>
        <groupId>org.apache.pizza</groupId>
        <artifactId>PizzaService</artifactId>
        <version>1.0.0</version>
      </wsdlArtifact>
    </wsdlOption>
  </wsdlOptions>
</configuration>
...

エンコーディング

(JAXB 2.2 が必要です) 生成された Java ファイルに使用される文字エンコーディング (Charset) を指定するには、以下のように encoding 要素を configuration 要素の子要素として追加します。

...
<configuration>
  <wsdlOptions>
    <wsdlOption>
      <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
    </wsdlOption>
  </wsdlOptions>
  <encoding>UTF-8</encoding>
</configuration>
...

別のプロセスのフォーク

fork 要素を configuration 要素の子として追加することで、コード生成用に別の JVM をフォークするように codegen プラグインを設定できます。fork 要素は、次のいずれかの値に設定できます。

once
単一の新しい JVM をフォークして、codegen プラグインの設定で指定されたすべての WSDL ファイルを処理します。
always
新しい JVM をフォークして、codegen プラグインの設定で指定された各 WSDL ファイルを処理します。
false
(デフォルト) フォークを無効にします。

codegen プラグインが別の JVM をフォークするよう設定される場合 (つまり、fork オプションが false 以外の値に設定された場合)、additionalJvmArgs 要素を使用してフォークされた JVM に追加の JVM 引数を指定できます。たとえば、以下のフラグメントでは、codegen プラグインを 1 つの JVM をフォークするよう設定します。これは、ローカルファイルシステムからの XML スキーマへのアクセスだけに制限されます (javax.xml.accessExternalSchema システムプロパティーを設定して)。

...
<configuration>
  <wsdlOptions>
    <wsdlOption>
      <wsdl>${basedir}/src/main/resources/wsdl/myService.wsdl</wsdl>
    </wsdlOption>
  </wsdlOptions>
  <fork>once</fork>
  <additionalJvmArgs>-Djavax.xml.accessExternalSchema=jar:file,file</additionalJvmArgs>
</configuration>
...

オプションの参照

コード生成プロセスの管理に使用するオプションは、以下の表で確認してください。

オプション解釈

-fe|-frontend frontend

コードジェネレーターが使用するフロントエンドを指定します。設定可能な値は jaxwsjaxws21、および cxf です。JAX-WS 2.1 準拠のコードを生成するために、jaxws21 フロントエンドが使用されます。jaxws フロントエンドの代わりに任意で使用できる cxf フロントエンドは、Service クラスの追加のコンストラクターを提供します。このコンストラクターを使用すると、サービスを設定するためのバスインスタンスを簡単に指定できます。デフォルトは jaxws です。

-db|-databinding databinding

コードジェネレーターが使用するデータバインディングを指定します。設定可能な値は jaxbxmlbeanssdo (sdo-static および sdo-dynamic)、ならびに jibx です。デフォルトは jaxb です。

-wv wsdlVersion

ツールで必要となる WSDL バージョンを指定します。デフォルトは 1.1 です。[a]

-p wsdlNamespace=PackageName

生成されたコードに使用するパッケージ名を 0 個以上、指定します。オプションで、WSDL 名前空間からパッケージ名へのマッピングを指定します。

-b bindingName

1 つ以上の JAXWS または JAXB バインディングファイルを指定します。バインディングファイルごとに、それぞれ -b フラグを使用します。

-sn serviceName

コードが生成される WSDL サービスの名前を指定します。デフォルトでは、WSDL ドキュメント内のすべてのサービスのコードが生成されます。

-reserveClass classname

-autoNameResolution と共に使用して、クラス生成時に使用 しない wsdl-to-java のクラス名を定義します。クラスが複数ある場合は、このオプションを複数回使用します。

-catalog catalogUrl

インポートされたスキーマと WSDL ドキュメントの解決に使用する XML カタログの URL を指定します。

-d 出力ディレクトリー

生成されたコードファイルを書き込むディレクトリーを指定します。

-compile

生成された Java ファイルをコンパイルします。

-classdir complile-class-dir

コンパイルされたクラスファイルが書き込まれるディレクトリーを指定します。

-clientjar jar-file-name

すべてのクライアントクラスと WSDL を含む JAR ファイルを生成します。このオプションが指定されている場合、wsdlLocation の指定は機能しません。

-client

クライアントメインラインの開始点コードを生成します。

-server

サーバーメインラインの開始点コードを生成します。

-impl

実装オブジェクトの開始点コードを生成します。

-all

すべての開始点コード (型、サービスプロキシー、サービスインターフェイス、サーバーメインライン、クライアントメインライン、実装オブジェクト、および Ant build.xml ファイル) を生成します。

-ant

Ant build.xml ファイルを生成します。

-autoNameResolution

バインディングのカスタマイズを使用せずに、名前の競合を自動的に解決します。

-defaultValues=DefaultValueProvider

生成されたクライアントと実装のデフォルト値を入力するようにツールに指示します。オプションで、デフォルト値の生成に使用されるクラス名を指定することもできます。デフォルトでは、RandomValueProvider クラスが使用されます。

-nexclude schema-namespace=java-packagename

コードの生成時に、指定された WSDL スキーマの名前空間を無視します。このオプションは複数回指定できます。また、オプションで、除外された名前空間で記述されたタイプで使用される Java パッケージ名を指定します。

-exsh (true/false)

拡張 soap ヘッダーメッセージバインディングの処理を有効または無効にします。デフォルトは false です。

-noTypes

タイプの生成をオフにします。

-dns (true/false)

デフォルトの名前空間パッケージ名マッピングのロードを有効または無効にします。デフォルトは true です。

-dex (true/false)

デフォルトの除外名前空間マッピングのロードを有効または無効にします。デフォルトは true です。

-xjc引数

JAXB データバインディングが使用されているときに XJC に直接渡される引数のコンマ区切りリストを指定します。設定可能なすべての XJC 引数の一覧を取得するには、-xjc-X を使用します。

-noAddressBinding

JAX-WS 2.1 準拠のマッピングの代わりに、Apache CXF 独自の WS-Addressing タイプを使用するようにツールに指示します。

-validate [=all|basic|none]

コードを生成する前に、WSDL ドキュメントを検証するようにツールに指示します。

-keep

既存のファイルを上書きしないようにツールに指示します。

-wsdlLocation wsdlLocation

@WebService アノテーションの wsdlLocation プロパティーの値を指定します。

-v

ツールのバージョン番号を表示します。

-verbose|-V

コード生成プロセス中にコメントを表示します。

-quiet

コード生成プロセス中のコメントを非表示にします。

-allowElementReferences[=true], -aer[=true]

true の場合、JAX-WS 2.2 仕様のセクション 2.3.1.2(v) で指定されるルールを無視し、ラッパースタイルのマッピングの使用時に要素参照を許可しません。デフォルトは false です。

-asyncMethods[=method1,method2,…​]

クライアント側の非同期呼び出しを許可する、その後生成される Java クラスメソッドのリスト。JAX-WS バインディングファイルの enableAsyncMapping と同様です。

-bareMethods[=method1,method2,…​]

ラッパースタイル (下記を参照) を持つための、その後生成される Java クラスメソッドのリスト。JAX-WS バインディングファイルの enableWrapperStyle と同様です。

-mimeMethods[=method1,method2,…​]

mime:content マッピングを有効にするための、その後生成される Java クラスメソッドのリスト。JAX-WS バインディングファイルの enableMIMEContent と同様です。

-faultSerialVersionUID fault-serialVersionUID

障害例外の suid を生成する方法。設定可能な値は、NONETIMESTAMPFQCN、または特定の数値です。デフォルトは NONE です。

-encoding encoding

Java コードを生成するときに使用する Charset エンコーディングを指定します。

-exceptionSuper

wsdl:fault 要素から生成された障害 Bean のスーパークラス (デフォルトは java.lang.Exception)。

-seiSuper interfaceName

生成された SEI インターフェイスのベースインターフェイスを指定します。たとえば、このオプションを使用して、Java 7 AutoCloseable インターフェイスをスーパーインターフェイスとして追加できます。

-mark-generated

生成されたクラスに @Generated アノテーションを追加します。

[a] 現在、Apache CXF は、コードジェネレーターの WSDL1.1 のみをサポートします。