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;
}
}
説明
SOAPConnectionFactory
とSOAPConnection
の生成:SOAPConnectionFactory
からSOAPConnection
インスタンスを取得し、SOAPメッセージの送信を行います。- SOAPメッセージの作成:
MessageFactory
を使用して新しいSOAPメッセージを作成し、エンベロープ、ヘッダー、ボディを設定します。 - SOAPメッセージの送信:
SOAPConnection
を使用して、作成したSOAPメッセージをWebサービスのエンドポイントに送信します。 - レスポンスの取得と表示: 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!");
}
}
説明
UserService
インターフェース: Webサービスの操作(メソッド)を定義します。ここでは、getUser
メソッドを定義しています。UserServiceImpl
クラス: Webサービスの実装クラスです。UserService
インターフェースを実装し、getUser
メソッドを実際に処理します。User
クラス: Webサービスが返すデータ型です。ここでは、ユーザー情報を格納するためのシンプルなクラスです。SoapServer
クラス: Webサービスを指定されたURLで公開します。Endpoint.publish
メソッドを使用して、UserServiceImpl
のインスタンスを公開します。
まとめ
このガイドでは、JavaでのSOAP通信の基本的な実装方法について説明しました。javax.xml.soap
パッケージを使用してSOAPメッセージを作成し、送信するクライアントのコードと、JAX-WSを用いてSOAP Webサービスを実装するサーバーサイドのコードを紹介しました。これにより、SOAPを用いたWebサービスの通信の基本的な流れを理解し、自分のプロジェクトに応じてカスタマイズするための基礎を得ることができます。
コメント