【Axis2】【XML】Javaソースから WSDL を 自動生成 する

はじめに

 * WSDL を 作成する方法として、以下が考えられる。

 [1] 自分でTextEditorなどで、新規にWSDLファイルを作成する
 [2] ツール(例えば、EclipseWSDLエディタ)で作成する
 [3] Axis2(Java2WSDL)を使って、Javaソースを基にWSDLファイルを自動作成する

今回は、[3]の方法を試してみる。

Axis2(Java2WSDL)を使って、Javaソースを基にWSDLファイルを自動作成する

前提条件

 * 以下のように環境を設定しておく
http://blogs.yahoo.co.jp/dk521123/31944955.html

作成例

作成手順

$AXIS2_HOME
 + bin
    + java2wsdl.bat
    + src
       + com
          + HelloWorldBean.java
          + IHelloWorldService.java

サンプルソース「HelloWorldBean.java

package com;
 
/**
 * HelloWorldServiceサービス用データクラス
 */
public final class HelloWorldBean {
 
    /** メッセージ */
    private String message;
 
    /**
     * メッセージを取得
     * @return メッセージ
     */
    public String getMessage() {
        return this.message;
    }
 
    /**
     * メッセージを設定
     * @param message メッセージ
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

サンプルソース「IHelloWorldService.java

package com;

import com.HelloWorldBean;
 
/**
 * HelloWorldServiceインタフェース
 */
public interface IHelloWorldService {
 
    /**
     * HelloWorldServiceサービス
     * @param inputBean 要求メッセージ
     * @return 応答メッセージ
     */
    public HelloWorldBean sayHello(HelloWorldBean inputBean);
}

作成手順

 [1] コンパイルをする
~~~
javac -cp src src\com\IHelloWorldService.java
~~~

 [2] コンパイルしたclassファイルからWSDLファイルを生成する
~~~
java2wsdl -cp src -cn com.IHelloWorldService -sn HelloWorldService -of HelloWorld.wsdl
~~~

【オプションの説明】
 * -cp クラスパス
 * -cn インタフェースclassのフルパス
 * -sn サービス名
 * -of 出力ファイル名
 * 他のオプションについては、以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/33842530.html

出力結果

* これを手書きで書くのは大変だなー
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://com" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax21="http://com/xsd" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="">http://com">
    <wsdl:types>
        <xs:schema xmlns:ax22="http://com/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="">http://com">
            <xs:import namespace="">http://com/xsd"/>
            <xs:element name="sayHello">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="args0" nillable="true" type="ax22:HelloWorldBean"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="sayHelloResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="return" nillable="true" type="ax22:HelloWorldBean"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
        <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="">http://com/xsd">
            <xs:complexType name="HelloWorldBean">
                <xs:sequence>
                    <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="sayHelloRequest">
        <wsdl:part name="parameters" element="ns:sayHello"/>
    </wsdl:message>
    <wsdl:message name="sayHelloResponse">
        <wsdl:part name="parameters" element="ns:sayHelloResponse"/>
    </wsdl:message>
    <wsdl:portType name="HelloWorldServicePortType">
        <wsdl:operation name="sayHello">
            <wsdl:input message="ns:sayHelloRequest" wsaw:Action="urn:sayHello"/>
            <wsdl:output message="ns:sayHelloResponse" wsaw:Action="urn:sayHelloResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="HelloWorldServiceSoap11Binding" type="ns:HelloWorldServicePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="sayHello">
            <soap:operation soapAction="urn:sayHello" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="HelloWorldServiceSoap12Binding" type="ns:HelloWorldServicePortType">
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="sayHello">
            <soap12:operation soapAction="urn:sayHello" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="HelloWorldServiceHttpBinding" type="ns:HelloWorldServicePortType">
        <http:binding verb="POST"/>
        <wsdl:operation name="sayHello">
            <http:operation location="sayHello"/>
            <wsdl:input>
                <mime:content type="application/xml" part="parameters"/>
            </wsdl:input>
            <wsdl:output>
                <mime:content type="application/xml" part="parameters"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="HelloWorldService">
        <wsdl:port name="HelloWorldServiceHttpSoap11Endpoint" binding="ns:HelloWorldServiceSoap11Binding">
            <soap:address location="">http://localhost:8080/axis2/services/HelloWorldService"/>
        </wsdl:port>
        <wsdl:port name="HelloWorldServiceHttpSoap12Endpoint" binding="ns:HelloWorldServiceSoap12Binding">
            <soap12:address location="">http://localhost:8080/axis2/services/HelloWorldService"/>
        </wsdl:port>
        <wsdl:port name="HelloWorldServiceHttpEndpoint" binding="ns:HelloWorldServiceHttpBinding">
            <http:address location="">http://localhost:8080/axis2/services/HelloWorldService"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

参考文献

作成方法 [1]

http://d0ec7852ef61.seesaa.net/article/114453462.html

作成方法 [3]

http://www.h5k.me/h5kmemo/2010/02/web.html
http://www.atmarkit.co.jp/ait/articles/0301/23/news001_3.html
* Java2WSDLコマンド
https://www.samuraiz.co.jp/adobeproduct/jrun/docs/jr4/docs/html/Programmers_Guide/ws_wsdl4.html

関連記事

WSDL について ~知識編~

http://blogs.yahoo.co.jp/dk521123/31950737.html

Axis2 の自動生成のコマンドオプション - WSDL2Java / Java2WSDL -

http://blogs.yahoo.co.jp/dk521123/33842530.html