41.2. サービスプロバイダーでの XML の使用
概要
プロバイダーインターフェイスは、低レベルの JAX-WS API であり、メッセージを生の XML として直接処理するサービスプロバイダーを実装できます。メッセージは、プロバイダーインターフェイスを実装するオブジェクトに渡される前に JAXB オブジェクトにパッケージ化されません。
41.2.1. メッセージングモード
概要
プロバイダーインターフェイスを実装するオブジェクトには、2 つの メッセージングモード があります。
指定するメッセージングモードは、実装に渡されるメッセージングの詳細のレベルを決定します。
メッセージモード
メッセージモード を使用する場合、プロバイダーの実装は完全なメッセージで機能します。完全なメッセージには、バインディング固有のヘッダーとラッパーが含まれます。たとえば、SOAP バインディングを使用するプロバイダー実装は、完全に指定された SOAP メッセージとして要求を受信します。実装から返される応答は、完全に指定された SOAP メッセージである必要があります。
Provider 実装がメッセージモードを使用するように指定するには、例41.9「プロバイダー実装がメッセージモードを使用するように指定する」に示すように、値 java.xml.ws.Service.Mode.MESSAGE を javax.xml.ws.ServiceMode
アノテーションの値として提供します。
例41.9 プロバイダー実装がメッセージモードを使用するように指定する
@WebServiceProvider @ServiceMode(value=Service.Mode.MESSAGE) public class stockQuoteProvider implements Provider<SOAPMessage> { ... }
ペイロードモード
ペイロードモード では、プロバイダーの実装はメッセージのペイロードのみを処理します。たとえば、ペイロードモードで動作するプロバイダー実装は、SOAP メッセージの本文でのみ機能します。バインディングレイヤーは、バインディングレベルのラッパーとヘッダーを処理します。
Apache CXF XML バインディングなど、特別なラッパーを使用しないバインディングを使用する場合は、ペイロードモードとメッセージモードで同じ結果が得られます。
Provider 実装がペイロードモードを使用するように指定するには、例41.10「プロバイダー実装がペイロードモードを使用するように指定する」に示すように、値 java.xml.ws.Service.Mode.PAYLOAD を javax.xml.ws.ServiceMode
アノテーションの値として提供します。
例41.10 プロバイダー実装がペイロードモードを使用するように指定する
@WebServiceProvider @ServiceMode(value=Service.Mode.PAYLOAD) public class stockQuoteProvider implements Provider<DOMSource> { ... }
@ServiceMode
アノテーションの値を指定しない場合、Provider 実装はペイロードモードを使用します。