Red Hat Training

A Red Hat training course is available for Red Hat Fuse

140.6. RFC の XML シリアライゼーション

概要

SAP 要求および応答オブジェクトは XML シリアライゼーション形式をサポートします。これにより、これらのオブジェクトを XML ドキュメントとの間でシリアライズすることができます。

XML namespace

リポジトリーの各 RFC は、Request および Response オブジェクトのシリアル化形式を設定する要素の特定の XML ネームスペースを定義します。この名前空間 URL の形式は以下のようになります。
http://sap.fusesource.org/rfc/<Repository Name>/<RFC Name>
RFC 名前空間 URL には共通の http://sap.fusesource.org/rfc 接頭辞があり、その後に RFC のメタデータが定義されているリポジトリーの名前が続きます。URL の最後のコンポーネントは RFC 自体の名前です。

リクエストおよび応答 XML ドキュメント

SAP リクエストオブジェクトは、Request という名前のドキュメントのルート要素を使用して XML ドキュメントにシリアライズされ、リクエストの RFC の namespace によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Request
     xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
    ... 
</BOOK_FLIGHT:Request>
SAP 応答オブジェクトは、Response という名前のドキュメントのルート要素を使用して XML ドキュメントにシリアライズされ、応答の RFC の namespace によってスコープが設定されます。
<?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 namespace の構造要素のタイプ名は、以下の例のように、構造を定義するレコードメタデータの名前に対応していることに注意してください。
<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 を指定する場合に重要です。

テーブルフィールド

パラメーター一覧またはネストされた構造のテーブルフィールドは、要素としてシリアライズされます。シリアル化された構造の要素名は、存在するエンクロージングパラメーターリスト、構造、またはテーブル行エントリー内のテーブルのフィールド名に対応します。table 要素には、テーブルの行エントリーのシリアル化された値を保持する一連の row 要素が含まれます。
<BOOK_FLIGHT:CONNINFO
     xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
    <row ... > ... </row>
    ... 
    <row ... > ... </row>
</BOOK_FLIGHT:CONNINFO>
RFC namespace の table 要素の type 名は、_TABLE のテーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応していることに注意してください。RFC 名の table row 要素の type 名は、以下の例のようにテーブルの行構造を定義するレコードメタデータの名前に対応します。
<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 を指定する場合に重要です。

要素フィールド

パラメーターリストの要素一覧または入れ子構造のフィールドは、エンクロージングパラメーターリストまたは構造の要素で属性としてシリアライズされます。以下の例のように、シリアル化されたフィールドの属性名は、エンクロージングパラメーターリスト、構造、またはテーブル行エントリー内のフィールド名に対応します。
<?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"/>

日付と時刻の形式

date および Time フィールドは、以下の形式で属性値にシリアライズされます。
yyyy-MM-dd'T'HH:mm:ss.SSSZ
日付フィールドは、設定された年、月、日、およびタイムゾーンコンポーネントのみでシリアライズされます。
DEPDATE="2014-03-19T00:00:00.000-0400"
時間フィールドは、hour、minute、second、millisecond、および timezone コンポーネントセットでのみシリアライズされます。
DEPTIME="1970-01-01T16:00:00.000-0500"