読者です 読者をやめる 読者になる 読者になる

見習いプログラミング日記

Java EE を中心に色々なことを考えてみます。目指せ本物のプログラマ。

MavenのJAX-WSプラグイン

まだまだエンタープライズな分野ではJAX-WSがシステム間連携に使われることが多い。wsdlからスタブを生成するMavenプラグインの使い方に関するメモ。

JAX-WS Mavenプラグイン

https://jax-ws-commons.java.net/jaxws-maven-plugin/JAX-WSの参照実装Metroの一部として提供されている。最新バージョンは2.3。

pom.xml の書き方

wsimport (wsdlからスタブコード生成) の例。設定可能なパラメータの一覧より、よく使う部分だけ以下に記載する。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.agetsuma</groupId>
    <artifactId>SOAPClient</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--  .wsdlの格納ディレクトリ。デフォルト ${basedir}/src/wsdl -->
                    <!--
                    <wsdlDirectory>src/main/wsdl</wsdlDirectory>
                    -->
                    <!-- 
                       スタブ生成対象のwsdlファイル名。wsdlDirectory配下のファイル名を指定。
                       定義がなかった場合はwsdlDirectory配下すべての.wsdlが対象
                     -->
                    <!--
                    <wsdlFiles>
                        <wsdlFile>HelloWorld.wsdl</wsdlFile>
                    </wsdlFiles>
                    -->
                    <!-- 
                        中間生成ファイルを保持するか。具体的にはスタブのソースコードのこと。
                        デフォルトはfalseで.classファイルのみ生成する。
                    -->
                    <keep>true</keep>
                    <vmArgs>
                        <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                    </vmArgs>
                </configuration>  
            </plugin>
        </plugins>
    </build>
</project>

このプラグインはデフォルトでフェーズgenerate-source (コンパイルする前) *1 に動くため、中間生成ファイルとして出力されるソースコードは破棄しても問題ないが、デバッグ目的で生成しておくと便利。

JDK8ではvmArgsの設定がないと例外が出て動かない。詳細についてはNetBeansのBug 241570や、このMavenプラグインのJIRA JAX_WS_COMMONS-129で紹介されている。

ビルド

いつも通りmvn packageでビルドできる。

mvm clean package

*1:Mavenフェーズ一覧についてはこちらを参照