Menu Close

41.2. サービスプロバイダーでの XML の使用

概要

Provider インターフェースは低レベル JAX-WS API で、未加工の XMLとしてメッセージと直接連携するサービスプロバイダーを実装できます。メッセージは、Provider インターフェースを実装するオブジェクトに渡される前に JAXB オブジェクトにパッケージ化されることはありません。

41.2.1. メッセージングモード

概要

Provider インターフェースを実装するオブジェクトには 2 つの メッセージングモード があります。

メッセージングモードの指定により、実装に渡されるメッセージングの詳細レベルが決定されます。

メッセージモード

メッセージモード の使用時には、Provider 実装は完全なメッセージと共に機能します。完全なメッセージには、バインディング固有のヘッダーおよびラッパーが含まれます。たとえば、SOAP バインディングを使用する Provider 実装は、完全に指定された SOAP メッセージとしてリクエストを受け取ります。実装から返されるすべての応答は、完全に指定された SOAP メッセージである必要があります。

Provider 実装がメッセージモードを使用するように指定するには、例41.9「メッセージモードを使用する Provider 実装の指定」に示すように、値 java.xml.ws.Service.Mode.MESSAGE を javax.xml.ws.ServiceMode アノテーションの値として提供します。

例41.9 メッセージモードを使用する Provider 実装の指定

@WebServiceProvider
@ServiceMode(value=Service.Mode.MESSAGE)
public class stockQuoteProvider implements Provider<SOAPMessage>
{
  ...
}

ペイロードモード

ペイロードモード では、Provider 実装はメッセージのペイロードとのみ動作します。たとえば、ペイロードモードで動作している Provider 実装は、SOAP メッセージのボディーとのみ動作します。バインディングレイヤーは、バインディングレベルのラッパーおよびヘッダーを処理します。

Apache CXF XML バインディングなどの特別なラッパーを使用しないバインディングを操作する場合は、ペイロードモードとメッセージモードで同じ結果が得られます。

Provider 実装がペイロードモードを使用するように指定するには、例41.10「ペイロードモードを使用する Provider 実装の指定」に示すように、値 java.xml.ws.Service.Mode.PAYLOAD を javax.xml.ws.ServiceMode アノテーションの値として提供します。

例41.10 ペイロードモードを使用する Provider 実装の指定

@WebServiceProvider
@ServiceMode(value=Service.Mode.PAYLOAD)
public class stockQuoteProvider implements Provider<DOMSource>
{
  ...
}

@ServiceMode アノテーションの値を指定しない場合、Provider 実装はペイロードモードを使用します。