プロバイダ実装クラスcom.sample.UserInfoImplを作成する例を次に示します。作成したcom.sample.UserInfoImplは,UTF-8形式でc:¥temp¥jaxws¥works¥dispatch_provider¥server¥src¥com¥sample¥ディレクトリに保存してください。
package com.sample;
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Provider;
@javax.xml.ws.WebServiceProvider(serviceName="UserInfoService")
@javax.xml.ws.ServiceMode(value=javax.xml.ws.Service.Mode.MESSAGE)
public class UserInfoImpl implements Provider<SOAPMessage>{
public SOAPMessage invoke( SOAPMessage request ){
// 応答メッセージ
SOAPMessage response = null;
// 添付ファイル(顔写真)
AttachmentPart attachment = null;
try {
// 要求メッセージからデータ取得
// 社員番号を取得
SOAPBody soapBody = request.getSOAPBody();
SOAPBodyElement reqRoot =
(SOAPBodyElement)soapBody.getChildElements().next();
Iterator number_iterator = reqRoot.getChildElements();
String number =
((SOAPElement)number_iterator.next()).getFirstChild().getNodeValue();
// 顔写真を取得
Iterator attachment_iterator = request.getAttachments();
while(attachment_iterator.hasNext()){
attachment = (AttachmentPart)attachment_iterator.next();
}
// 顔写真の登録処理など取得した添付ファイルに対して
// ほかに必要な処理があれば実装する
// 応答メッセージの生成
response = MessageFactory.newInstance().createMessage();
SOAPBody resSoapBody = response.getSOAPBody();
SOAPBodyElement resRoot = resSoapBody.addBodyElement(
new QName("http://sample.com", "result"));
SOAPElement soapElement = resRoot.addChildElement(
new QName("http://sample.com", "value"));
// 登録確認メッセージを設定
if(null == attachment){
soapElement.addTextNode("Failure(no image).");
} else {
soapElement.addTextNode("Success.");
}
} catch (SOAPException e) {
e.printStackTrace();
}
return response;
}
} |
SOAP 1.2の場合は,作成したプロバイダ実装クラスに対してjavax.xml.ws.BindingTypeアノテーションを付与してください。設定する値は,SOAP 1.2/HTTPバインディングを意味する"http://www.w3.org/2003/05/soap/bindings/HTTP/"にします。javax.xml.ws.BindingTypeアノテーションを付与する例を次に示します。
package com.sample;
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Provider;
@javax.xml.ws.BindingType("http://www.w3.org/2003/05/soap/bindings/HTTP/")
@javax.xml.ws.WebServiceProvider
@javax.xml.ws.ServiceMode(value=javax.xml.ws.Service.Mode.MESSAGE)
public class UserInfoImpl mplements Provider<SOAPMessage>{
public SOAPMessage invoke( SOAPMessage request ){
(以降はSOAP1.1の場合と同じ) |
なお,javax.xml.ws.BindingTypeアノテーションの値には,"http://www.w3.org/2003/05/soap/bindings/HTTP/"の代わりに定数値フィールドjavax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDINGを設定することもできます。定数値フィールドを設定した場合の例については,「5.3.1 Webサービス実装クラスを作成する」を参照してください。