290.12. RFC 的 XML Serialization


概述

SAP 请求和响应对象支持 XML 序列化格式,使这些对象能够序列化为 XML 文档,并从 XML 文档进行序列化。

XML 命名空间

仓库中的每个 RFC 都定义了特定的 XML 命名空间,用于编写其 Request 和 Response 对象的序列化形式。此命名空间 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>

在指定 JAXB bean to marshal 和 unmarshal 时,这个区别非常重要,如 第 290.14.3 节 “示例 3:处理 SAP 的请求” 中看到。

表字段

参数列表或嵌套结构中的表字段被序列化为元素。序列化结构的元素名称对应于它所驻留的参数列表、结构或表行条目中表的字段名称。table 元素包含一系列用于存放表行条目的序列化值的行元素。

<BOOK_FLIGHT:CONNINFO
     xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
    <row ... > ... </row>
    ...
    <row ... > ... </row>
</BOOK_FLIGHT:CONNINFO>
注意

RFC 命名空间中的表元素的类型名称对应于记录元数据对象的名称,用于定义由 _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>

在指定 JAXB bean to marshal 和 unmarshal 时,这个区别非常重要,如 第 290.14.3 节 “示例 3:处理 SAP 的请求” 中看到。

Elementary 字段

参数列表或嵌套结构中的元素字段按照括起参数列表或结构的元素上的属性进行序列化。serialized 字段的属性名称对应于它所驻留的参数列表、结构或表行条目中字段的字段名称,如下例所示:

<?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"
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.