55.10. RFC 的 XML 序列化
SAP 请求和响应对象支持 XML 序列化格式,使这些对象能够序列化到 XML 文档。
55.10.1. XML 命名空间 复制链接链接已复制到粘贴板!
存储库中的每个 RFC 为构成 Request 和 Response 对象的序列化形式的元素定义特定的 XML 命名空间。此命名空间 URL 的形式如下:
http://sap.fusesource.org/rfc/<Repository Name>/<RFC Name>
RFC 命名空间 URL 有一个通用的 http://sap.fusesource.org/rfc 前缀,后跟定义 RFC 元数据的存储库名称。URL 中的最终组件是 RFC 本身的名称。
55.10.2. 请求和响应 XML 文档 复制链接链接已复制到粘贴板!
SAP 请求对象将序列化为 XML 文档,其中包含名为 Request 的文档的 root 元素,并由请求的 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 的 root 元素,并由响应的 RFC 的命名空间范围。
<?xml version="1.0" encoding="ASCII"?>
<BOOK_FLIGHT:Response
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:Response>
55.10.3. 结构字段 复制链接链接已复制到粘贴板!
参数列表或嵌套结构中的结构字段被序列化为元素。序列化结构的元素名称对应于所属参数列表中结构的字段名称、结构或表行条目。
<BOOK_FLIGHT:FLTINFO
xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT">
...
</BOOK_FLIGHT:FLTINFO>
请注意,RFC 命名空间中的 structure 元素的类型名称将对应于定义结构的记录元数据对象的名称,如下例所示:
<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 设置为 marshal 和 unmarshal 时,这种区别非常重要。
55.10.4. 表字段 复制链接链接已复制到粘贴板!
参数列表或嵌套结构中的表字段被序列化为元素。序列化结构的元素名称将对应于所属参数列表、结构或表行条目中的表字段名称。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 设置为 marshal 和 unmarshal 时,这种区别非常重要。
55.10.5. 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"/>
55.10.6. 日期和时间格式 复制链接链接已复制到粘贴板!
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"