新トップページへ | Tip

SOAPを使う

Update : 12/11/03.

SOAPのWebサービスの作り方のサンプルです。
ものすんごい簡単にいろんなことが出来るようになってるので、手軽にWebサービスを作成できます。

SOAP自体の説明は省略します(ぐぐればいっぱい出てくるから)。

もくじ

最もシンプルなWebサービスのサンプル
いろんなアノテーションをつけてみたサンプル


最もシンプルなWebサービスのサンプル

基本的にアノテーションで設定を記述しますが、その設定にはデフォルト値があり、必要最低限のものだけを使いWebサービスを作成した例です。

SoapStudy1.java
package alctail.ws;

import javax.jws.WebService;

import alctail.bean.ServiceInDto;
import alctail.bean.ServiceOutDto;

/** もっともシンプルなWebサービス */
@WebService
public class SoapStudy1 {

        public ServiceOutDto sayHello(ServiceInDto inDto) {
                ServiceOutDto resultBean = new ServiceOutDto();
                resultBean.setMsg("歪みねぇな1");
                return resultBean;
        }
}


ServiceInDto.java
package alctail.bean;

public class ServiceInDto {
        
        private String msg;

        public String getMsg() {
                return msg;
        }

        public void setMsg(String msg) {
                this.msg = msg;
        }
}


ServiceOutDto.java
package alctail.bean;

public class ServiceOutDto {
        
        private String msg;

        public String getMsg() {
                return msg;
        }

        public void setMsg(String msg) {
                this.msg = msg;
        }
}

上記のようなソースを作成し、デプロイを行います。Eclipseで作成している場合、「http://サーバーのアドレスとホスト名/プロジェクトのコンテキストルート/SoapStudy1/SoapStudy1?wsdl」でWSDLを取得できます。
soapUIみたいなクライアントソフトを使って、リクエストを投げ見れば稼働確認ができます。


いろんなアノテーションをつけてみたサンプル

付与するアノテーションで生成されるWSDLをデフォルト状態から変更可能です。

・@WebServiceアノテーションを使うと、クラスがもっているpublicメソッドすべてをサービスとして公開する。
 すべて公開したくない場合、公開しないメソッドに「@WebMethod(exclude=true)」を付与する
・@WebMethod(operationName="sayHello")を対象のメソッドに付与することで、WSDL上の名前(operation名)を変更できる
・@WebResult(name="returnName")を対象メソッドに付与すると、WSDL上の戻り値の名前を変更できる。
・メソッドの引数に「@WebParam(name="warosu")」をつけることで、WSDL上のタグ名を変更できる。
・戻り値がvoidの型のメソッドだったりと、戻り値がない場合@OneWayをつける。ただ、使用ケースが思いつかないので省略(非同期呼び出しのケースとしても呼び出しを開始しました的な戻り値を返すべきだし・・・)

・クラスに対し@Statelessなどをつけることで、EJBだけれども、それを直接Webサービスとして公開できる。・・・できるというだけで使いたかどうかは不明w

ServiceInDtoクラスとServiceOutDtoクラスは前回のサンプルと同じなため、省略します。

SoapStudy2.java
package alctail.ws;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

import alctail.bean.ServiceInDto;
import alctail.bean.ServiceOutDto;

/** 各種アノテーションを使用したWebサービス */
@WebService(name="YouseiTetugaku", portName="YouseiTetugakuNo3Shin")
public class SoapStudy2 {

        @WebMethod(operationName="sayYugaminee")
        @WebResult(name="tetugaku")
        public ServiceOutDto sayHello(@WebParam(name="warosu") ServiceInDto inDto) {
                System.out.println("arg : "+inDto.getMsg());
                ServiceOutDto resultBean = new ServiceOutDto();
                resultBean.setMsg("歪みねぇな2");
                return resultBean;
        }
}