289.8. RFC 的 XML Serialization
概述
SAP 请求和响应对象支持 XML 序列化格式,使这些对象能够被序列化和 XML 文档。
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 本身的名称。
请求和响应 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 响应对象将按照名为 Response 的文档根元素序列化为 XML 文档,并归响应 RFC 的命名空间的范围进行序列化。
<?xml version="1.0" encoding="ASCII"?> <BOOK_FLIGHT:Response xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"> ... </BOOK_FLIGHT:Response>
结构字段
参数列表中的结构字段或嵌套结构被序列化为元素。serialized 结构的元素名称对应于其所驻留的参数列表、结构或表行条目中结构的字段名称。
<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 到 marshal 和 unmarshal 将出现在 第 289.12 节 “示例 3:处理 SAP 的请求” 中时,这种区别将很重要。
表字段
参数列表中的表字段或嵌套结构被序列化为元素。serialized 结构的元素名称将与所驻留的参数列表、结构或表行条目中的表的字段名称对应。table 元素将包含一系列行元素,用于保存表行条目的序列化值。
<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>
在指定 JAXB bean 到 marshal 和 unmarshal 将出现在 第 289.12 节 “示例 3:处理 SAP 的请求” 中时,这种区别将很重要。
元素字段
参数列表中的元素字段或嵌套结构在带参数列表或结构的元素上被序列化为属性。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"
时间字段只会按小时、分钟、第二个、millisecond 和 timezone 组件集进行序列化:
DEPTIME="1970-01-01T16:00:00.000-0500"