「JBoss」JAX-WS な Web サービスを作成する
JBoss AS ( わけあってバージョンは 5.1.0.GA ) で JAX-WS な Web サービスを作成してみたのでメモを残しておきます。
Eclipse なりを使ってやってもいいんですが、今回は男らしくコマンドでやります。
0.JBoss なり必要なものをインストールする
今回は以下の環境を対象とします。
[ 環境情報 ]
Windows 7 SP1
JBoss AS 5.1.0.GA ( jdk6 の方 )
Java SE 6 Update 34
※ JBoss AS のダウンロード先。
・JBoss Community - Browse /JBoss/JBoss-5.1.0.GA at SourceForge.net
http://sourceforge.net/projects/jboss/files/JBoss/JBoss-5.1.0.GA/
必要な環境変数を設定しておく。
set JBOSS_HOME=C:\devspace\jboss\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_34 set PATH=%JAVA_HOME%\bin;%JBOSS_HOME%\bin;%PATH%
※ JBoss AS、Java のインストールは先は適宜読み替えてください。
1. サーバ側
1-1. サーバ側アプリケーションの作成
与えられたパラメータを返すだけの簡単なクラスとしました。
■ Echo.java
package echo; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class Echo { @WebMethod public String echo(String param) { return param; } }
コンパイルしておきます。
javac -cp . echo\Echo.java
上記 Echo クラスを web.xml に設定します。
■ web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>JBossWSTest</display-name> <servlet> <description></description> <display-name>Echo</display-name> <servlet-name>Echo</servlet-name> <servlet-class>echo.Echo</servlet-class> </servlet> <servlet-mapping> <servlet-name>Echo</servlet-name> <url-pattern>/Echo</url-pattern> </servlet-mapping> </web-app>
1-2. .war ファイルにパッケージング
アプリケーション名は「JBossWSTest」としました。とりあえず何でもいいんですが JBossWSTest ディレクトリを作成してそこに Echo クラス、web.xml、EchoService.wsdl を配置します。
├─JBossWSTest │ │ │ └─WEB-INF │ │ web.xml │ │ │ ├─classes │ │ └─echo │ │ Echo.class │ │ │ └─lib
(JBossWSTest に移動して ) jar コマンドで .war ファイルにパッケージングします。
jar cvf JBossWSTest.war . マニフェストが追加されました。 WEB-INF/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) WEB-INF/classes/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) WEB-INF/classes/echo/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) WEB-INF/classes/echo/Echo.class を追加中です。(入 = 376) (出 = 261)(30% 収縮 WEB-INF/lib/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) WEB-INF/web.xml を追加中です。(入 = 641) (出 = 288)(55% 収縮されました)
1-3. デプロイ
%JBOSS_HOME%\server\default\deploy に JBossWSTest.war を配置して、run.bat で JBoss AS を起動する。
特に例外とか発生せずに「Started in 20s:286ms」と出て、http://127.0.0.1:8080/JBossWSTest/Echo?wsdl で WSDL の内容が見れれば OK かと思います。
念のため WSDL の内容を。
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://echo/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="EchoService" targetNamespace="http://echo/"> <types> <xs:schema xmlns:tns="http://echo/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://echo/" version="1.0"> <xs:element name="echo" type="tns:echo"/> <xs:element name="echoResponse" type="tns:echoResponse"/> <xs:complexType name="echo"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="echoResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </types> <message name="Echo_echoResponse"> <part element="tns:echoResponse" name="echoResponse"/> </message> <message name="Echo_echo"> <part element="tns:echo" name="echo"/> </message> <portType name="Echo"> <operation name="echo" parameterOrder="echo"> <input message="tns:Echo_echo"/> <output message="tns:Echo_echoResponse"/> </operation> </portType> <binding name="EchoBinding" type="tns:Echo"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="echo"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="EchoService"> <port binding="tns:EchoBinding" name="EchoPort"> <soap:address location="http://127.0.0.1:8080/JBossWSTest/Echo"/> </port> </service> </definitions>
2. クライアント側
2-1. wsconsume.bat 使って WSDL ファイルからコードの生成
クライアント側は wsconsume.bat 使って WSDL ファイルからコードの生成します。
C:\Users\atsushi\Desktop\work\java\jbosswsclient>wsconsume.bat -k http://127.0.0.1:8080/JBossEcho?wsdl parsing WSDL... generating code... echo\Echo.java echo\EchoResponse.java echo\EchoService.java echo\Echo_Type.java echo\ObjectFactory.java echo\package-info.java compiling code...
2-2. 生成したコードを使ってクライアントアプリケーションの作成
WSDL から生成したコードを使ってクライアントアプリケーションを作成します。
■ Client.java ( echo\Echo.java とかと同じディレクトリに作成しましょう )
package echo; public class Client { public static void main(String[] args) { EchoService es = new EchoService(); Echo echo = es.getEchoPort(); System.out.println(echo.echo("HOGE")); } }
コンパイルして、実行してみる。
javac -cp . echo\Client.java java -cp . echo.Client HOGE
うまく呼び出せてそうですね。
ちょっと長くなりましたが、以上になります。