はじめに
* Axis2でWebサービスを作成してたのだが、以下の制限があるっぽい。 + Integer/Longなどの数値が、Nullable設定できない なので、ほかの方法を模索してたところ、JAX-WS + Metro でできるっぽい。
作成方法 / サーバサイド編
(1) Metro の設定[1-1] Metro を以下の公式サイトからダウンロードする(今回は「metro-standalone-2.3.1.zip」)https://metro.java.net/
[1-2] [1]のファイルを任意の場所に、解凍する 必要なのは「metro/lib」内の以下のJARファイル(以下の[2-4]で使用する) * webservices-api.jar * webservices-extra-api.jar * webservices-extra.jar * webservices-rt.jar * webservices-tools.jar * webserviceutils.jar(2) サーバサイド の作成
[2-1] Eclipseを立ち上げて、[File]-[New]-[Dynamic Web Project]を選択 [2-2] New Dynamic Web Project設定画面において、[Project Name]に 任意のプロジェクト名(今回は「SampleService」)と入力する [2-3] New Dynamic Web Project設定画面において、「Dynamic web module version」を「2.5」に選択し 「Finish」ボタン押下 [2-4] 作成したプロジェクト内にある「[プロジェクト名(SampleService)]/WebContent/WEB-INF/lib」配下に 「metro/lib」内の以下のJARファイルをコピペする * webservices-api.jar * webservices-extra-api.jar * webservices-extra.jar * webservices-rt.jar * webservices-tools.jar * webserviceutils.jar [2-5] 作成したプロジェクト内にある「src」を右クリックし、[New]-[Class]を選択し、 任意のPackage と クラスを作成し、Webサービスのソースを書く(下記「サンプル」を参照のこと) 今回は、以下の通り。実装内容は下記の【サンプル】の「SampleWebService.java」を参照のこと。 * Package : com.sample.webservice * class : SampleWebService [2-6] 作成したプロジェクト内にある「[プロジェクト名(SampleService)]/WebContent/WEB-INF」配下に 「sun-jaxws.xml」を作成する ファイル内容は、下記の【サンプル】の「sun-jaxws.xml」を参照のこと。 [2-7] 作成したプロジェクト内にある「[プロジェクト名(SampleService)]/WebContent/WEB-INF」配下に 「web.xml」を修正する ファイル内容は、下記の【サンプル】の「web.xml」を参照のこと。(3) サーバ設定およびデプロイ
[3-1] Eclipseの[Winodow]-[Show View]-[Other...]-[Server]-[Servers]を選択し Serversビューを表示する [3-2] Serversビューを右クリックし、[New]-[Server]を選択する [3-3] 自分が使用したいTomcatのバージョン(今回はTomacat8)を選択し「Next」ボタン押下 [3-4] 上記「(2) サーバサイド の作成)」で作成したプロジェクト(今回は「SampleService」)が 右側にあるはずなので、そのプロジェクトを選択し、「Add]ボタン押下で「Finish」ボタン押下 [3-5] ServersビューにあるTomcatを右クリックし、「Start」を選択し、サーバをスタートさせる # 起動中に例外が発生しないかチェックしておくこと(4) 動作確認
[4-1] ブラウザを立ち上げて、以下のURLにアクセスするhttp://localhost:8080/SampleService/service/SampleWebService.ws
以下が表示され、アンカー「[http://localhost:8080/SampleService/service/SampleWebService.ws?wsdl]」を押下しWSDLファイルが表示されたら、ひとまずはOK!
Webサービス エンドポイント 情報 サービス名: {http://webservice.sample.com/}SampleWebServiceService ポート名: {http://webservice.sample.com/}SampleWebServicePort アドレス: http://localhost:8080/SampleService/service/SampleWebService.ws WSDL: http://localhost:8080/SampleService/service/SampleWebService.ws?wsdl 実装クラス: com.sample.webservice.SampleWebService
主なフォルダ/ファイル構成
【任意のプロジェクト名(今回は「SampleService」)】 + src | + com.sample.webservice | + SampleWebService.java + WebContent + WEB-INF + sun-jaxws.xml + web.xml + lib + webservices-api.jar + webservices-extra-api.jar + webservices-extra.jar + webservices-rt.jar + webservices-tools.jar + webserviceutils.jar
サンプル
SampleWebService.java
package com.sample.webservice; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.bind.annotation.XmlElement; @WebService(name = "SampleWebService") public class SampleWebService { @WebMethod public String sayYourAge( @XmlElement(required = true, nillable = false) @WebParam(name = "name") String name, @XmlElement(required = false, nillable = true) @WebParam(name = "age") Long age){ return name + "'s age is " + age + "."; } }
sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?> <endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"> <endpoint implementation="com.sample.webservice.SampleWebService" name="SampleWebService" url-pattern="/service/SampleWebService.ws" /> </endpoints>
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>SampleService</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> </listener> <servlet> <servlet-name>wsservlet</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>wsservlet</servlet-name> <url-pattern>*.ws</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>
参考文献
http://d.hatena.ne.jp/gsh-kz/20120307/1331138113http://kenichiro22.hatenablog.com/entry/20101015/1287130478
http://d.hatena.ne.jp/chronos_devel/20100602/1275997262
http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=Java%A4%C7SOAP
関連記事
Webサービス / Metro
Webサービス / Metro [1] ~入門編 / サーバサイドの構築 ~http://blogs.yahoo.co.jp/dk521123/36139336.html
Webサービス / Metro [2] ~入門編 / クライアントサイドの構築 ~
http://blogs.yahoo.co.jp/dk521123/36140561.html
Webサービス / Metro [3] ~基本編 / オブジェクトのやり取り ~
http://blogs.yahoo.co.jp/dk521123/36141584.html
Webサービス / Metro [4] ~基本編 / セッション管理 ~
http://blogs.yahoo.co.jp/dk521123/36140574.html