289.8. RFC の XML シリアライゼーション
概要
SAP 要求および応答オブジェクトは、これらのオブジェクトを XML ドキュメントとの間でシリアル化できるようにする XML シリアル化形式をサポートしています。
XML 名前空間
リポジトリー内の各 RFC は、リクエストオブジェクトとレスポンスオブジェクトのシリアル化された形式を設定する要素に対して、特定の XML 名前空間を定義します。この名前空間 URL の形式は次のとおりです。
http://sap.fusesource.org/rfc/<Repository Name>/<RFC Name>
RFC 名前空間 URL には、共通の http://sap.fusesource.org/rfc 接頭辞があり、その後に RFC のメタデータが定義されているリポジトリーの名前が続きます。URL の最後のコンポーネントは、RFC 自体の名前です。
リクエストとレスポンスの XML ドキュメント
SAP リクエストオブジェクトは XML ドキュメントにシリアル化され、そのドキュメントのルート要素は Request という名前で、リクエストの RFC の名前空間によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Request
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:Request>SAP レスポンスオブジェクトは XML ドキュメントにシリアル化され、そのドキュメントのルート要素は Response という名前で、レスポンス応答の RFC の名前空間によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Response
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:Response>構造体フィールド
パラメーターリストまたはネストされた構造体の構造体フィールドは、要素としてシリアル化されます。シリアル化された構造体の要素名は、それが含まれるパラメーターリスト、構造体、またはテーブルの行エントリー内の構造体のフィールド名に対応します。
<BOOK_FLIGHT:FLTINFO
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:FLTINFO>次の例のように、RFC 名前空間の構造要素の型名は、構造を定義するレコードメタデータオブジェクトの名前に対応することに注意してください。
<xs:schema
targetNamespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:complexType name="FLTINFO_STRUCTURE”>
...
</xs:complexType>
...
</xs:schema>この区別は、「例 3: SAP からのリクエストの処理」 で見られるように、構造体のマーシャリングとアンマーシャリングを行う JAXB Bean を指定するときに重要になります。
テーブルフィールド
パラメーターリストまたはネストされた構造のテーブルフィールドは、要素としてシリアル化されます。シリアル化された構造体の要素名は、それが存在する外側のパラメーターリスト、構造体、またはテーブル行エントリー内のテーブルのフィールド名に対応します。テーブル要素には、テーブルの行エントリーのシリアル化された値を保持する一連の行要素が含まれます。
<BOOK_FLIGHT:CONNINFO
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
<row ... > ... </row>
...
<row ... > ... </row>
</BOOK_FLIGHT:CONNINFO>
RFC 名前空間の table 要素の型名は、_TABLE の接尾辞が付いたテーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応することに注意してください。次の例のように、RFC 名のテーブル行要素の型名は、テーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応します。
<xs:schema
targetNamespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:complextType name="CONNECTION_INFO_STRUCTURE_TABLE”>
<xs:sequence>
<xs:element
name="row”
minOccures="0”
maxOccurs="unbounded”
type="CONNECTION_INFO_STRUCTURE”/>
...
<xs:sequence>
</xs:sequence>
</xs:complexType>
<xs:complextType name="CONNECTION_INFO_STRUCTURE”>
...
</xs:complexType>
...
</xs:schema>この区別は、「例 3: SAP からのリクエストの処理」 で見られるように、構造体のマーシャリングとアンマーシャリングを行う JAXB Bean を指定するときに重要になります。
Elementary フィールド
パラメーターリストまたはネストされた構造体の Elementary フィールドは、囲んでいるパラメーターリストまたは構造体の要素の属性としてシリアル化されます。シリアル化されたフィールドの属性名は、次の例のように、それが存在する囲んでいるパラメーターリスト、構造体、またはテーブル行エントリー内のフィールドのフィールド名に対応します。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Request
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"
CUSTNAME="James Legrand"
PASSFORM="Mr"
PASSNAME="Travelin Joe"
PASSBIRTH="1990-03-17T00:00:00.000-0500"
FLIGHTDATE="2014-03-19T00:00:00.000-0400"
TRAVELAGENCYNUMBER="00000110"
DESTINATION_FROM="SFO"
DESTINATION_TO="FRA"/>日付と時刻の形式
日付と時刻のフィールドは、次の形式を使用して属性値にシリアル化されます。
yyyy-MM-dd'T'HH:mm:ss.SSSZ
日付フィールドは、年、月、日、およびタイムゾーンのコンポーネントセットのみでシリアル化されます。
DEPDATE="2014-03-19T00:00:00.000-0400"
時間フィールドは、時、分、秒、ミリ秒、およびタイムゾーンコンポーネントセットのみでシリアル化されます。
DEPTIME="1970-01-01T16:00:00.000-0500"