![]()
![]()
![]()
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;
}
}
|