9.14. エンドポイントプロバイダー

JAX-WS のサービスは一般的にネイティブの Java サービスエンドポイントインターフェース (SEI) を実装し、 おそらく WSDL ポートタイプから直接あるいはアノテーションを使うことによってマッピングされます。
Java SEI は、 XML ベースのメッセージで使用するため Java オブジェクトとその XML 表記間で行われる変換の詳細を隠す Java 中心の高レベルの抽出を提供します。 ただし、 XML メッセージレベルでサービスの動作が可能となる方が望ましい場合もあります。 この場合プロバイダーインターフェースは SEI に代替を提供し、 XML メッセージレベルでの動作を好むサービスによる実装が可能になります。
Provider ベースのサービスインスタンスの呼び出しメソッドはサービスに対して受け取られる各メッセージごとに呼びだされます。
@WebServiceProvider
@ServiceMode(value = Service.Mode.PAYLOAD)
public class ProviderBeanPayload implements Provider<Source>
{
   public Source invoke(Source req)
   {
      // Access the entire request PAYLOAD and return the response PAYLOAD
   }
}
注記、 Service.Mode.PAYLOAD はデフォルトとなり、 明示的に宣言される必要はありません。 また、 Service.Mode.MESSAGE を使って SOAP 全体にアクセスすることもできます (MESSAGE で Provider は SOAP ヘッダーも見ることができます)。