はじめに
http://blogs.yahoo.co.jp/dk521123/34445295.htmlの続きで、以下の関連記事でWSDLファイルからコマンドで自動生成したが、めんどいのでAntで生成できるようにするWebサービス
http://blogs.yahoo.co.jp/dk521123/31984636.html
サンプル
ファイル構成
SampleService(Project) +- lib +- src(src配下に自動生成したファイルが出力される) +- WebContent | + META-INF | + HelloWorld.wsdl + build.xml
build.xml
* 「!★!」部分は、以下の関連記事のように、AXIS2_HOMEが設定されている用http://blogs.yahoo.co.jp/dk521123/31944955.html
* 実行するとsrc配下に自動生成したファイルが出力される
<?xml version="1.0" encoding="UTF-8"?> <project basedir="." default="w2j.service" name="SampleService"> <property environment="env"/> <!-- !★! AXIS2_HOMEが設定されている場合は下記を使用してもいい --> <!-- property name="axis2.home" value="${env.AXIS2_HOME}"/ --> <property name="axis2.home" value="C:\axis2-1.6.2"/> <property name="input.wsdl" value="${basedir}/WebContent/META-INF/HelloWorld.wsdl"/> <property name="output.path" value="${basedir}"/> <path id="axis2.classpath"> <fileset dir="${axis2.home}"> <include name="lib/*.jar"/> </fileset> </path> <!-- Server code output --> <target name="w2j.service" description="Server code output from WSDL"> <echo message="Server code output from WSDL ${input.wsdl}"/> <java classname="org.apache.axis2.wsdl.WSDL2Java" dir="." fork="yes"> <classpath refid="axis2.classpath"/> <arg line="-uri ${input.wsdl}"/> <arg line="-s"/> <arg line="-ss"/> <arg line="-sd"/> <arg line="-ssi"/> <arg line="-p com.sample.service"/> <arg line="-ns2p ">http://helloworld.webservice.moodykettle.com=com.sample.service"/> <arg line="-o ${output.path}"/> </java> </target> </project>
HelloWorld.wsdl
* 今回、使用するWSDLファイルhttps://code.google.com/p/java-sample-programs/source/browse/trunk/WebService/WebContent/wsdl/HelloWorld.wsdl?r=15
* 以下の関連記事のWSDLファイルと同じなので、今回は具体的なファイル内容は省略。http://blogs.yahoo.co.jp/dk521123/34445295.html
動作確認
* Eclipseを使って、実際に動かしてみる
[0] 前提条件:環境設定
* 以下の環境を揃えておく。 + JDK + Eclipse + Tomcat + Axis2 * 以下を参考に環境を設定しておくhttp://blogs.yahoo.co.jp/dk521123/31944955.html
* また、立ち上がったWebサービスの動作確認のため、SOAP UIでサービスに対して、呼び出すhttp://blogs.yahoo.co.jp/dk521123/32212829.html
[1] Eclipseを使ってプロジェクトを作成する
[1-1] Eclipse を立ち上げて、[File]-[New]-[Project]-[Web]-[Dynamic Web Project]を選択し「Next」ボタンを押下 [1-2] 以下を行って、「Finish」ボタンを押下 * Project Name を入力(例「SampleService」) * Dynamic Web module version で「2.5」を選択(Axis2を使うには「2.5」) [1-3] 上記の「ファイル構成」を参考にWSDLファイル と build.xmlファイルを配置する [1-4] [1-3]で配置したbuild.xmlファイルを右クリックし、[Run As]-[Ant Build]を選択 【Console画面】 Buildfile: C:\workspace\SampleService\build.xml w2j.server: [echo] Server code output from WSDL C:\Develop\workspace\SampleService/WebContent/META-INF/HelloWorld.wsdl [java] Retrieving document at 'C:\Develop\workspace\SampleService/WebContent/META-INF/HelloWorld.wsdl'. [java] log4j:WARN No appenders could be found for logger (org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder). [java] log4j:WARN Please initialize the log4j system properly. BUILD SUCCESSFUL Total time: 2 seconds → 以下のように、src配下に自動生成したファイルが出力されるはず。 SampleService(Project) +- lib +- src(★注目★) | + ExtensionMapper.java | + HelloWorldServiceMessageReceiverInOut.java | + HelloWorldServiceSkeleton.java(!!ここを実装する必要がある!!) | + HelloWorldServiceSkeletonInterface.java | + SayHello.java | + SayHelloResponse.java +- WebContent | + META-INF | + HelloWorld.wsdl + build.xml
[2] ソースを修正する
[2-1] 自動生成の「HelloWorldServiceSkeleton.java」を修正する
HelloWorldServiceSkeleton.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.service; /** * HelloWorldServiceSkeleton java skeleton for the axisService */ public class HelloWorldServiceSkeleton implements HelloWorldServiceSkeletonInterface { /** * Auto generated method signature * * @param sayHello0 * @return sayHelloResponse1 */ public com.sample.service.SayHelloResponse sayHello( com.sample.service.SayHello sayHello0) { // 自分で追加したコード/ここから SayHelloResponse response = new SayHelloResponse(); response.setSayHelloReturn("Hello, " + sayHello0.getName()); return response; // 自分で追加したコード/ここまで } }
[3] Webサービスを立ち上げる
[3-1] [2-1]で修正した「HelloWorldServiceSkeleton.java」を右クリックし、[Web Services]-[Create Web Service]を選択 [3-2] 以下のようになっているかどうかを確認し、[Finish]ボタン押下 * Server Runtime : Tomcat * Web Service Runtime : Apache Axis2 * Service Project : SampleService
[3] Webサービスを立ち上げる
[3-1] SOAP UIのbin配下にあるsoapui.batをダブルクリックで起動 (アップデートがあるって聞いたときはとりあえず「Ignore this update」ボタン押下で無視) [3-2] 左にある「Projects」を右クリックし、[New WSDL Project]を選択 [3-3] 以下を入力し「OK」ボタン押下する * Project Name : HelloWorldClient * Initil WSDL : http://localhost:8080/SampleService/services/HelloWorldServiceSkeleton?wsdl 前もって、ブラウザで以下のURLにアクセスし、WSDLファイルが表示されるか確認しておくといい。[http://localhost:8080/SampleService/services/HelloWorldServiceSkeleton?wsdl]
[3-4] sayHelloを開くとRequest1が表示されるので、ダブルクリックする => 右ペイン左側の「SOAP Request」にSOAPのHeaderとBodyが表示されるはず。 [3-5] 右ペイン左側の「SOAP Request」を以下の「SOAP Requestのサンプル」を参考に入力値を追記する (立ち上げたら「?」になっているので、今回はそこを「Mike」とした) 【SOAP Requestのサンプル】 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.sample.com" xmlns:xsd="">http://service.sample.com/xsd"> <soapenv:Header/> <soapenv:Body> <ser:sayHello> <!--Optional:--> <ser:sayHello0> <!--Optional:★ここを修正した★ --> <xsd:name>Mike</xsd:name> </ser:sayHello0> </ser:sayHello> </soapenv:Body> </soapenv:Envelope> [3-5] 右ペインの上に緑の>ボタンがあるので、それをクリックし、Webサービスにリクエストを送信する。 => 右ペイン右側の「SOAP Response」にSOAPのレスポンスが表示されるはず。 【SOAP Responseのサンプル】 <soapenv:Envelope xmlns:soapenv="">http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns:sayHelloResponse xmlns:ns="">http://service.sample.com"> <ns:return xsi:type="ax21:SayHelloResponse" xmlns:ax21="http://service.sample.com/xsd" xmlns:xsi="">http://www.w3.org/2001/XMLSchema-instance"> <ax21:sayHelloReturn>Hello, Mike</ax21:sayHelloReturn> </ns:return> </ns:sayHelloResponse> </soapenv:Body> </soapenv:Envelope>
参考文献
http://d.hatena.ne.jp/time_after_time/20110528/1306586175http://axis.apache.org/axis/ja/java/user-guide.html#Java2WSDLBuildingWSDLFromJava