SOAPを使う
Update : 12/11/03.
SOAPのWebサービスの作り方のサンプルです。
ものすんごい簡単にいろんなことが出来るようになってるので、手軽にWebサービスを作成できます。
SOAP自体の説明は省略します(ぐぐればいっぱい出てくるから)。
もくじ
最もシンプルな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; } } |