Menu Close

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-790049-redhat-00001</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 プラグインを設定できます。フォーク要素は、以下の値のいずれかに設定できます。

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 クラスの追加のコンストラクターを提供します。このコンストラクターを使用すると、サービスを設定するための Bus インスタンスを指定できるようになります。デフォルトは jaxws です。

-db|-databinding databinding

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

-wv wsdlVersion

ツールによって想定される WSDL バージョンを指定します。デフォルトは 1.1 です。[a]

-p wsdlNamespace=PackageName

生成されるコードに使用するパッケージ名を指定します (指定しないことも可能)。必要に応じて、WSDL namespace からパッケージ名へのマッピングを指定します。

-b bindingName

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

-sn serviceName

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

-reserveClass classname

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

-catalog catalogUrl

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

-d output-directory

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

-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 スキーマ namespace を無視します。このオプションは複数回指定できます。また、任意で、除外 namespace に記載されている型によって使用される Java パッケージ名を指定します。

-exsh (true/false)

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

-noTypes

型の生成をオフにします。

-dns (true/false)

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

-dex (true/false)

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

-xjcargs

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 はコードジェネレーターに対する WSDL 1.1 サポートのみを提供します。