9.5.1 Webサービスクライアントの実装クラスを作成する

Webサービスを利用するWebサービスクライアントの実装クラスを作成します。

Webサービスに対して1回の呼び出しをする,ディスパッチベースのWebサービスクライアントcom.sample.client.TestClientの作成例を次に示します。

なお,ディスパッチベースのWebサービスクライアントでは,SOAPバインディングのバージョンを明示する必要があるため,例ではSOAP 1.1/HTTPバインディングを指定しています。SOAP 1.2の場合は,SOAPBinding.SOAP11HTTP_BINDINGの部分をSOAPBinding.SOAP12HTTP_BINDINGに読み替えてください。

package com.sample.client;

import java.io.File;
import java.util.Iterator;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.ws.soap.SOAPBinding;
import javax.xml.soap.AttachmentPart;
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.Dispatch;
import javax.xml.ws.Service;

public class TestClient {
   public static void main( String[] args ) {
       // サービス生成
       QName port = new QName( "http://sample.com", "UserInfoPort" );
       Service service = Service.create(
           new QName("http://sample.com", "UserInfoService"));
       String serviceURL = "http://webhost:8085/dispatch_provider/UserInfoService";

       // サービスにポートを追加
       service.addPort( port, SOAPBinding.SOAP11HTTP_BINDING, serviceURL );

       // Dispatchオブジェクト生成
       Dispatch<SOAPMessage> dispatch = service.createDispatch(
           port, SOAPMessage.class, Service.Mode.MESSAGE );

       // 要求メッセージ
       SOAPMessage request = null;
       
       try{
           // 要求メッセージの生成
           request = MessageFactory.newInstance().createMessage();
           SOAPBody reqSoapBody = request.getSOAPBody();

           // 社員番号を設定
           SOAPBodyElement requestRoot= soapBody.addBodyElement(
               new QName("http://sample.com", "number"));
           SOAPElement soapElement = requestRoot.addChildElement(
               new QName("http://sample.com", "value"));
           soapElement.addTextNode( "1234" );

           // 添付ファイル(顔写真)を設定
           String filePath = "C:¥¥attachment.jpg";
           FileDataSource fds = new FileDataSource(filePath);
           AttachmentPart apPart =
               request.createAttachmentPart(new DataHandler(fds));
           request.addAttachmentPart(apPart);

           // SOAPメッセージの送受信
           SOAPMessage response = dispatch.invoke( request );

           // 応答メッセージからデータを取得
           SOAPBody resSoapBody = response.getSOAPBody();
           SOAPBodyElement resRoot =
               (SOAPBodyElement)resSoapBody.getChildElements().next();
           Iterator iterator = resRoot.getChildElements();
           String result =
               

((SOAPElement)iterator.next()).getFirstChild().getNodeValue();

           // 登録確認メッセージの表示
           System.out.println( "[RESULT] " + result );
       } catch( SOAPException e ) {
           e.printStackTrace();
     }
  }
}

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