JavaでのSOAP通信の簡易実装ガイド(javax.xml.soap)

Java


スポンサーリンク

javax.xml.soapパッケージの概要

javax.xml.soap パッケージは、JavaでSOAP(Simple Object Access Protocol)メッセージを操作するための標準ライブラリです。このパッケージには、SOAPメッセージの作成、送信、受信をサポートするクラスが含まれており、SOAPベースのWebサービスと通信する際に使用されます。主なクラスとインターフェースには以下が含まれます:

  • SOAPMessage: SOAPメッセージの作成、編集、送信を行うためのクラスです。
  • SOAPPart: SOAPメッセージの部分(エンベロープ、ヘッダー、ボディ)を操作するためのクラスです。
  • SOAPEnvelope: SOAPメッセージのエンベロープ部分を管理するクラスです。
  • SOAPHeader: SOAPメッセージのヘッダー部分を操作するためのクラスです。
  • SOAPBody: SOAPメッセージのボディ部分を操作するためのクラスです。
  • SOAPConnection: SOAPメッセージを送信するためのクラスです。
  • SOAPConnectionFactory: SOAPConnectionインスタンスを作成するためのファクトリクラスです。

SOAP通信の実装手順

1. SOAPクライアントの作成

SOAPクライアントは、SOAPメッセージを作成し、Webサービスに送信してレスポンスを受け取るためのプログラムです。以下のコード例では、Javaのjavax.xml.soapパッケージを使用して、SOAPメッセージの作成と送信を行います。

1.1必要な依存関係

Java SE標準ライブラリにはjavax.xml.soapパッケージが含まれているため、特別な外部ライブラリの追加は不要です。

1.2SOAPリクエストの送信

以下は、SOAPリクエストを作成し、指定されたWebサービスのエンドポイントに送信するサンプルコードです。

import javax.xml.soap.*;

public class SoapClient {

    public static void main(String[] args) {
        try {
            // SOAPメッセージのファクトリを作成
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            // WebサービスのエンドポイントURL
            String url = "http://localhost:8080/yourWebServiceEndpoint";

            // SOAPメッセージを作成
            SOAPMessage soapRequest = createSOAPRequest();

            // WebサービスにSOAPメッセージを送信
            SOAPMessage soapResponse = soapConnection.call(soapRequest, url);

            // レスポンスメッセージの内容を表示
            System.out.println("Response SOAP Message:");
            soapResponse.writeTo(System.out);

            // 接続を閉じる
            soapConnection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static SOAPMessage createSOAPRequest() throws SOAPException {
        // SOAPメッセージのファクトリを作成
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();

        // SOAPパートを取得
        SOAPPart soapPart = soapMessage.getSOAPPart();

        // SOAPエンベロープを取得
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("example", "http://example.com/");

        // SOAPボディを取得
        SOAPBody soapBody = envelope.getBody();
        SOAPBodyElement soapBodyElement = soapBody.addChildElement("GetUserRequest", "example");
        soapBodyElement.addChildElement("userId").addTextNode("123");

        // メッセージを保存
        soapMessage.saveChanges();

        // メッセージを表示(デバッグ用)
        System.out.println("Request SOAP Message:");
        soapMessage.writeTo(System.out);
        System.out.println();

        return soapMessage;
    }
}

説明

  1. SOAPConnectionFactorySOAPConnection の生成: SOAPConnectionFactoryからSOAPConnectionインスタンスを取得し、SOAPメッセージの送信を行います。
  2. SOAPメッセージの作成: MessageFactoryを使用して新しいSOAPメッセージを作成し、エンベロープ、ヘッダー、ボディを設定します。
  3. SOAPメッセージの送信: SOAPConnectionを使用して、作成したSOAPメッセージをWebサービスのエンドポイントに送信します。
  4. レスポンスの取得と表示: Webサービスからのレスポンスを取得し、コンソールに出力します。

2. SOAP Webサービスの実装

SOAP Webサービスは、SOAPメッセージを受信して処理し、レスポンスを返すサーバーサイドのプログラムです。Javaでは、JAX-WS(Java API for XML Web Services)を使用してSOAP Webサービスを実装できます。

2.1SOAP Webサービスの定義と実装

以下は、簡単なSOAP Webサービスの定義と実装例です。

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface UserService {
    @WebMethod
    User getUser(String userId);
}

class UserServiceImpl implements UserService {
    @Override
    public User getUser(String userId) {
        // ダミーのユーザー情報を返す
        return new User("John Doe", "john.doe@example.com");
    }
}

class User {
    private String name;
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    // GetterとSetter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

2.2.SOAP Webサービスの公開

Webサービスを公開するために、Endpointクラスを使用します。

import javax.xml.ws.Endpoint;

public class SoapServer {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/yourWebServiceEndpoint", new UserServiceImpl());
        System.out.println("SOAP Web Service is published!");
    }
}

説明

  1. UserService インターフェース: Webサービスの操作(メソッド)を定義します。ここでは、getUserメソッドを定義しています。
  2. UserServiceImpl クラス: Webサービスの実装クラスです。UserServiceインターフェースを実装し、getUserメソッドを実際に処理します。
  3. User クラス: Webサービスが返すデータ型です。ここでは、ユーザー情報を格納するためのシンプルなクラスです。
  4. SoapServer クラス: Webサービスを指定されたURLで公開します。Endpoint.publishメソッドを使用して、UserServiceImplのインスタンスを公開します。

まとめ

このガイドでは、JavaでのSOAP通信の基本的な実装方法について説明しました。javax.xml.soapパッケージを使用してSOAPメッセージを作成し、送信するクライアントのコードと、JAX-WSを用いてSOAP Webサービスを実装するサーバーサイドのコードを紹介しました。これにより、SOAPを用いたWebサービスの通信の基本的な流れを理解し、自分のプロジェクトに応じてカスタマイズするための基礎を得ることができます。


スポンサーリンク

Java
99blog

コメント

タイトルとURLをコピーしました