38.3.1 Webサービス実装クラスを作成する

Webサービスの処理を記述したWebサービス実装クラスを作成します。ここでは,受け取った要求メッセージの内容を計算して,応答メッセージを返すWebサービス実装クラスを作成します。

Webサービス実装クラスの作成例を次に示します。

package com.sample;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Action;
import javax.xml.ws.FaultAction;

@WebService(name = "AddNumbers", targetNamespace = "http://sample.com/")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
interface AddNumbers {

   @Action(input = "http://sample.com/input",
           output = "http://sample.com/output")
   public int add(int number1, int number2) throws AddNumbersFault;

   public int add2(int number1, int number2) throws AddNumbersFault;

   @Action(input = "http://sample.com/input3",
           output = "http://sample.com/output3",
           fault = {@FaultAction(className = AddNumbersFault.class, value = "http://sample.com/fault3")})
   public int add3(int number1, int number2) throws AddNumbersFault;
}

作成したAddNumbers.javaは,UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥ディレクトリに保存します。

次に,SEIを実装したWebサービスの本体を作成します。ここでは,受け取った要求メッセージの内容を計算して応答メッセージとして返すWebサービス実装クラスcom.sample.AddNumbersImplを作成します。

Webサービスの本体の作成例を次に示します。

package com.sample;

import javax.jws.WebService;
import javax.xml.ws.soap.Addressing;

@Addressing
@WebService(endpointInterface = "com.sample.AddNumbers")
public class AddNumbersImpl implements AddNumbers {

   public int add(int number1, int number2) throws AddNumbersFault {
       return impl(number1, number2);
   }

   public int add2(int number1, int number2) throws AddNumbersFault {
       return impl(number1, number2);
   }

   public int add3(int number1, int number2) throws AddNumbersFault {
       return impl(number1, number2);
   }

   int impl(int number1, int number2) throws AddNumbersFault {
       if (number1 < 0 || number2 < 0) {
           throw new AddNumbersFault("Negative numbers can't be added!",
                                     "Numbers: " + number1 + ", " + number2);
       }
       return number1 + number2;
   }
}

作成したAddNumbersImpl.javaは,UTF-8形式で,c:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥ディレクトリに保存します。

また,com.sample.AddNumbersImplクラスでスローしている例外クラスcom.sample.AddNumbersFaultを作成します。

例外クラスの作成例を次に示します。

package com.sample;

public class AddNumbersFault extends Exception {

   String detail;

   public AddNumbersFault(String message, String detail) {
       super(message);
       this.detail = detail;
   }

   public String getDetail() {
       return detail;
   }
}

作成したAddNumbersFault.javaは,UTF-8形式でc:¥temp¥jaxws¥works¥addressing¥server¥src¥com¥sample¥ディレクトリに保存します。