【Axis2】WSDLから Webサービスを作成時に独自のパッケージ名に指定する

初めに

 * WSDLを自動生成する際に、以下の関連記事のように行った場合に、勝手にパッケージ名がしてされてしまうので
 自分好みのパッケージ名にする手順を記す。
http://blogs.yahoo.co.jp/dk521123/31984636.html

手順

[0] 事前設定

 * 以下の関連記事の「axis2 の設定」を行っておくこと
http://blogs.yahoo.co.jp/dk521123/31944955.html

[1] サーバ側スケルトンを生成

コマンド構文

wsdl2java.bat -uri [wsdlのアドレス] -s -ss -sd -ssi -p [変更後のpackage] -ns2p [変更前のnamespace]=[変更後のpackage] -o [出力先]

-uri ... WSDLドキュメントの場所(リモートURLでも、ローカルファイルのパスでも可)
-s  ... スケルトンの生成
-ss ... サーバー側コード生成
-sd ...  サーバ側service.xmlの生成
-o  ... 出力先を指定する。
-u  ... 生成時にソースを別にする
-p  ... 生成したコードに対して独自のpackage名を指定 ★ここ★
-ns2p  ... WSDLスキーマ内の特定の各namespaceに対して、独自のpackage名を指定 ★ここ★

詳細は下記の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/33842530.html

コマンドプロンプトで以下を実行。事前にXSDLファイル「HelloWorld.wsdl(下記【対象のWSDLファイル】)」を「C:\pg\axis2-1.6.2\bin」に保存しておく。
cd C:\pg\axis2-1.6.2\bin
wsdl2java.bat -uri HelloWorld.wsdl -u -s -ss -sd -ssi -p com.sample -ns2p http://helloworld.webservice.moodykettle.com=com.sample -o out

出力結果(スケルトン)

build.xml         :Ant用ファイル
srcフォルダ       :スケルトンコード(※)
resourcesフォルダ :WSDLファイルのコピー

※スケルトンコードの詳細
src
 + com
   + sample
      + ExtensionMapper.java
      + HelloWorldServiceMessageReceiverInOut.java
      + HelloWorldServiceSkeleton.java
      + HelloWorldServiceSkeletonInterface.java
      + SayHello.java
      + SayHelloResponse.java

[2] プロジェクトにスケルトンコードを追加

 [2-1] Eclipseで、「File]-[New]-[Java Project]でプロジェクトを追加(「HellowWorldServer」とする)
 [2-2] 追加したプロジェクト「HellowWorldServer」を右クリックし、[Import]-[General]-[File System]を選択
 [2-3] Browseボタン押下し、wsdl2javaコマンドより生成したファイルを追加(例の場合「C:\pg\axis2-1.6.2\bin\out」)
 [2-4] 「Select All」ボタンを押下し、全てを選択(build.xml含む)し、「Finish」ボタン押下

[3]スケルトン「XxxxSkeleton.java」を実装し、ビルドする

 [3-1] スケルトン「XxxxSkeleton.java」を実装する(下記「サンプル」を参照のこと)
 [3-2] パッケージ名「HellowWorldServer」を右クリックし、[Propaties]-[Java Build path]-[Libraries]-[Add External JARs]で「C:\pg\axis2-1.6.2\lib」配下のJarファイルを全て追加する
 [3-3] build.xmlを右クリックし、[Run As]-[Ant Build]を選択し、ターゲットを「jar.server」にして「OK」ボタン押下で、ビルドする
  →ビルドが正常に完了した場合、「HellowWorldServer\build\lib」にAARファイル「HelloWorldService.aar」が作成できている

サンプル

HelloWorldSkeleton.java

/**
 * HelloWorldServiceSkeleton.java
 *
 * This file was auto-generated from WSDL
 * by the Apache Axis2 version: 1.6.2  Built on : Apr 17, 2012 (05:33:49 IST)
 */
package com.sample;

/**
 *  HelloWorldServiceSkeleton java skeleton for the axisService
 */
public class HelloWorldServiceSkeleton implements
      HelloWorldServiceSkeletonInterface {

   /**
    * Auto generated method signature
    * 
    * @param sayHello0 
    * @return sayHelloResponse1 
    */
   public com.sample.SayHelloResponse sayHello(com.sample.SayHello sayHello0) {
      // 自分で追加したコード/ここから
      com.sample.SayHelloResponse response = new com.sample.SayHelloResponse();
      response.setSayHelloReturn("Hello, " + sayHello0.getName());
      return response;
      // 自分で追加したコード/ここまで
   }
}

[4]AARファイルをアップロードする

 [4-1] 以下からWARファイル(WAR Distribution)をダウンロードし、
    Tomcatの「【TOMCAT_HOME】/webapps」に置く
http://axis.apache.org/axis2/java/core/download.cgi
 [4-2] Tomcatサーバを立ち上げ、以下をブラウザで表示する
[http://localhost:8080/axis2/]
 [4-3] 「【TOMCAT_HOME】/webapps/axis2/WEB-INF/services」配下に
    [3-3]で作成したAARファイル「HelloWorldService.aar」を置く

[5]動作確認

 [5-1] 以下をブラウザで表示する
[http://localhost:8080/axis2/services/HelloWorldService/sayHello?name=Mike]
【出力結果】以下が表示されるはず

<ns1:sayHelloResponse xmlns:ns1="">http://helloworld.webservice.moodykettle.com">
<ns1:sayHelloReturn>Hello, Mike</ns1:sayHelloReturn>
</ns1:sayHelloResponse>

対象のWSDLファイル

HelloWorld.wsdl

https://code.google.com/p/java-sample-programs/source/browse/trunk/WebService/WebContent/wsdl/HelloWorld.wsdl?r=15
<wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://helloworld.webservice.moodykettle.com" xmlns:intf="http://helloworld.webservice.moodykettle.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="">http://helloworld.webservice.moodykettle.com">
  <wsdl:types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="">http://helloworld.webservice.moodykettle.com">
      <element name="sayHello">
        <complexType>
          <sequence>
            <element name="name" type="xsd:string" />
          </sequence>
        </complexType>
      </element>
      <element name="sayHelloResponse">
        <complexType>
          <sequence>
            <element name="sayHelloReturn" type="xsd:string" />
          </sequence>
        </complexType>
      </element>
    </schema>
  </wsdl:types>
  <wsdl:message name="sayHelloResponse">
    <wsdl:part element="impl:sayHelloResponse" name="parameters" />
  </wsdl:message>
  <wsdl:message name="sayHelloRequest">
    <wsdl:part element="impl:sayHello" name="parameters" />
  </wsdl:message>
  <wsdl:portType name="HelloWorld">
    <wsdl:operation name="sayHello">
      <wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest" />
      <wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="HelloWorldSoapBinding" type="impl:HelloWorld">
    <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="sayHello">
      <wsdlsoap:operation soapAction="" />
      <wsdl:input name="sayHelloRequest">
        <wsdlsoap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="sayHelloResponse">
        <wsdlsoap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="HelloWorldService">
    <wsdl:port binding="impl:HelloWorldSoapBinding" name="HelloWorld">
      <wsdlsoap:address location="http://localhost:8080/WebService/services/HelloWorld" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

スタブを作成する場合

wsdl2java.bat -uri HelloWorld.wsdl -s -p com.sample -ns2p http://helloworld.webservice.moodykettle.com=com.sample -o outclient

関連記事

WSDLから Webサービスを作成する

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

WebサービスSOAP リクエスト / レスポンスの文字列を取得するには

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