41.2.2. データ型
概要
これらは低レベルのオブジェクトであるため、プロバイダーの実装では、高レベルのコンシューマー API と同じ JAXB 生成タイプを使用できません。プロバイダーの実装は、次のタイプのオブジェクトで機能します。
ソースオブジェクトの使用
プロバイダー実装は、javax.xml.transform.Source インターフェイスから派生したオブジェクトを受け入れて返すことができます。ソースオブジェクトは、XML ドキュメントを保持する低レベルのオブジェクトです。各 Source 実装は、保存された XML ドキュメントにアクセスしてその内容を操作するメソッドを提供します。次のオブジェクトは、ソースインターフェイスを実装します。
DOMSource
-
XML メッセージを Document Object Model (DOM) ツリーとして保持します。XML メッセージは、
getNode()
メソッドを使用してアクセスされるNode
オブジェクトのセットとして保存されます。ノードは、setNode()
メソッドを使用して更新または DOM ツリーに追加できます。 SAXSource
-
XML メッセージを Simple API for XML (SAX) オブジェクトとして保持します。SAX オブジェクトには、未加工のデータを保持する
InputSource
オブジェクトと、未加工のデータを解析するXMLReader
オブジェクトが含まれます。 StreamSource
- XML メッセージをデータストリームとして保持します。データストリームは、他のデータストリームと同じように操作できます。
汎用 Source オブジェクトを使用するように Provider オブジェクトを作成する場合、Apache CXF はメッセージを SAXSource
オブジェクトとして返します。
この動作は、エンドポイントの source-preferred-format
プロパティーを使用して変更できます。Apache CXF ランタイムの設定についての情報は、パートIV「Web サービスエンドポイントの設定」 を参照してください。
Source オブジェクトを使用する場合、開発者は、必要なすべてのバインディング固有のラッパーがメッセージに追加されるようにする責任があります。たとえば、SOAP メッセージを期待するサービスと対話する場合、開発者は、必要な SOAP エンベロープが送信要求に追加され、SOAP エンベロープの内容が正しいことを確認する必要があります。
SOAPMessage オブジェクトの使用
以下の条件が満たされる場合、Provider 実装は javax.xml.soap.SOAPMessage
オブジェクトを使用できます。
- プロバイダーの実装は SOAP バインディングを使用しています
- プロバイダーの実装はメッセージモードを使用しています
SOAPMessage
オブジェクトは SOAP メッセージを保持します。これらには、1 つの SOAPPart
オブジェクトと 0 個以上の AttachmentPart
オブジェクトが含まれています。SOAPPart
オブジェクトには、SOAP メッセージの SOAP 固有部分が含まれます。これには、SOAP エンベロープ、SOAP ヘッダー、および SOAP メッセージボディーが含まれます。AttachmentPart
オブジェクトには、アタッチメントとして渡されるバイナリーデータが含まれます。
DataSource オブジェクトの使用
プロバイダーの実装では、次の条件が当てはまる場合に、javax.activation.DataSource インターフェイスを実装するオブジェクトを使用できます。
- 実装は HTTP バインディングを使用しています
- 実装はメッセージモードを使用しています
DataSource オブジェクトは、URL、ファイル、バイト配列など、さまざまなソースからの MIME タイプのデータを操作するためのメカニズムを提供します。