【Java】【JAX-WS】 Webサービス / Metro [1] ~入門編 / サーバサイドの構築 ~

はじめに

 * Axis2Webサービスを作成してたのだが、以下の制限があるっぽい。

  + Integer/Longなどの数値が、Nullable設定できない

なので、ほかの方法を模索してたところ、JAX-WS + Metro でできるっぽい。

開発環境

 * Windows10
 * Java1.8
 * Eclipse Mars.2 Release (4.5.2)
 * Tomcat8.0.33
 * metro-2.3.1

作成方法 / サーバサイド編

(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://blogs.yahoo.co.jp/dk521123/36140561.html


関連記事

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
Webサービス / Metro [5] ~応用編 / あれこれ ~
http://blogs.yahoo.co.jp/dk521123/36238319.html
Webサービス / Metro [6] ~ SSL通信を行うには / Client側 ~
http://blogs.yahoo.co.jp/dk521123/36516080.html
Webサービス / Metro [7] ~ SOAPログを出力する ~
http://blogs.yahoo.co.jp/dk521123/36522384.html
Webサービス / Metro [8] ~ SSL通信を行う (2) / クライアントサイド ~
http://blogs.yahoo.co.jp/dk521123/36528991.html
Webサービス / Metro [9] ~ タイムアウトを設定する / クライアントサイド ~
http://blogs.yahoo.co.jp/dk521123/36559479.html
Webサービス / Metro [10] ~ WSDLファイルをクライアントのローカルに置く ~
https://blogs.yahoo.co.jp/dk521123/36872164.html
【トラブル】【JavaWebサービスでのクライアント側の例外について
https://blogs.yahoo.co.jp/dk521123/37114682.html

その他

負荷テスト・パフォーマンス計測 / JMeterWebサービス / SOAP 編 ~
https://blogs.yahoo.co.jp/dk521123/36908158.html
Javaで作ったWebサービスに対して、C#のクライアントアプリを作成する
https://blogs.yahoo.co.jp/dk521123/36863576.html