消息的业务协议决定了文档格式。业务协议会影响您在规划后端系统集成时必须制定的许多决策。 业务协议的选择决定了必须使用的封装方法,它反过来会影响可使用的消息传输协议。
要获取业务协议的全面描述,请参阅中心配置指南。 本部分描述了针对以下各业务协议的集成信息:
WebSphere Partner Gateway 使中心社区的成员可以使用以下 Web Service:
您必须向社区参与者提供 WebSphere Partner Gateway 生成的公共 WSDL。值得注意的是,社区参与者调用 Web Service 的 URL 是上载该 Web service 时指定的公共 URL。WebSphere Partner Gateway 充当一个代理。它接收来自参与者的 SOAP 消息并确定对应的专用 Web service。然后,它使用相同的 SOAP 消息调用专用 Web service(由社区管理者提供)。接着将社区管理者返回的响应返回给参与者。
值得注意的是,多个合作伙伴可提供同一个 Web Service 接口。WebSphere Partner Gateway 使社区管理者通过在上载 Web service 时在控制台中指定的 Web service URL 使用这个 Web service。另外,社区管理者必须提供 URL 参数来标识“接收方合作伙伴”。请参阅中心配置指南获取更详细的信息。WebSphere Partner Gateway 充当一个代理。它接收来自社区管理者的 SOAP 消息并确定对应的Web service 和“接收方合作伙伴”。然后,它使用相同的 SOAP 消息调用合作伙伴提供的 Web service。 接着将合作伙伴返回的响应消息返回给社区管理者。
请参阅中心配置指南以获取更多信息,包括如何为 Web service 设置文档流定义。
您可以在社区参与者之间收发 cXML 文档。当 WebSphere Partner Gateway 接收到来自社区参与者的 cXML 文档时,在把该文档发送到社区管理者的后端系统前,会对该文档进行验证和转换(如果指定的话)。注意转换不能用来同步 cXML 消息。在同步交换中,后端系统生成一个响应,WebSphere Partner Gateway 将该响应返回给社区参与者(如果适用于消息)。
需要发送 cXML 文档的社区管理者的后端系统可以执行以下两个操作之一:
请参阅中心配置指南以获取更多信息,包括如何为 cXML 设置文档流定义。
WebSphere Partner Gateway 通过增值网络(VAN)以及因特网接收来自参与者的 EDI 文档。从 VAN 发送或接收的 EDI 文档使用 FTP 脚本传输。FTP 脚本也可用于通过因特网发送文档或接收文档。请参阅中心配置指南以获取有关 FTP 脚本传输的信息。
采用 EDI 包络进出中心的 EDI 文档称为交换。 交换包含一些单独的 EDI 事务或事务组。
如果 EDI 交换将通过中心(未被解包)传递,您可在中心和社区管理者之间创建一个连接。
然而,如果 EDI 交换将被解包,那么创建交互和连接的过程不同于其他的业务协议。交换必须是已解包的,并且是已处理的单个事务。通常将事务转换为另一种形式,这取决于从 Data Interchange Services 客户机导入的转换映射。如果将 EDI 事务转换为 XML 或面向记录的数据(ROD)文档,则可以将这些文档发送给社区管理者或参与者。如果将事务转换为其他 EDI 格式,则在将这些事务发送到社区管理者或参与者之前,首先要对它们进行封包。
后端应用程序可以发送以下文档类型:
WebSphere Partner Gateway 解包并转换单独的 EDI 事务。如果该事务被转换成 EDI,则将它们封包并路由到参与者。后端应用程序可以使用“无”或“后端”封装,通过各种传输来发送该交换,如表 13中所定义的。
图 6显示了由三个解包的事务组成的 X12 交换。该事务被转换成 EDIFACT 格式,然后进行封包,并发送到参与者。
每一个事务都有一个相关的转换映射,其中指定了如何转换事务。如果使用映射链来创建该映射,则该事务可以被转换为单个事务或多个事务。
如果该事务被转换成 XML 或 ROD 文档,则它按照该事务的参与者连接中所配置的那样进行路由。
图 7显示了一个 EDI X12 交换被解包后转换为 XML 文档,然后发送到参与者。
如果使用映射链来创建该映射,该事务可以被转换为单个文档或多个文档。
WebSphere Partner Gateway 将该文档转换为 EDI 事务,进行封包,然后发送给参与者。后端应用程序可以使用“无”或“后端集成”封装,可通过各种传输来发送该文档,如表 13中所定义的。
图 8显示了被转换为 X12 事务并封包的 XML 文档。
一个文档可被转换成多个事务(如果使用映射链来创建映射),而该事务又可以被封包成不同的交换。
图 9显示了被转换成三个 X12 事务的 XML 文档。其中的两个事务被封包在一起。另一个被单独封包。
如果该文档被转换成另一种 XML 或 ROD 文档,它将按照该文档参与者连接中所配置的那样进行路由。
WebSphere Partner Gateway 分离并转换该文档。如果该文档被转换成 EDI 事务,WebSphere Partner Gateway 将封包该事务,并把它发送给参与者。如果批处理标识被分配给 XML 或 ROD 文档,则 WebSphere Partner Gateway 会试图把 EDI 事务发送到一个包络(作为一个批处理)。后端应用程序可以使用“无”或“后端集成”封装,并可通过各种传输来发送该文档,如表 13中所定义的。
图 10显示了如何将成一组 XML 文档拆分成各个单独的 XML 文档。这些 XML 文档被转换成 X12 事务,然后对该事务进行封包。
图 10显示了文档如何被拆分,以及转换的事务如何被封包在一起。要使文档能被拆分,您必须为用作文档发送目标配置一个分离器处理程序(在本例中,是 XML 分离器处理程序)。要使本示例有效,XML 分离器处理程序必须有设置为“开”(缺省值)的 BCG_BATCHDOCS 选项。BCG_BATCHDOCS 将批处理标识分配给 XML 文档,这样,所产生的事务会放入同一个包络中。请参阅中心配置指南以获取有关 XML 分离器处理程序和 BCG_BATCHDOCS 属性的信息。
如果该文档被转换为其他 XML 文档或其他 ROD 文档,它们将按照文档的参与者连接中所配置的那样进行路由。
WebSphere Partner Gateway 将该文件分成多个单独交换。然后将交换解包成单独的事务并进行转换。如果该文档被转换成 EDI 事务,则 WebSphere Partner Gateway 会对该事务进行封包,然后发送给参与者。后端应用程序可以使用“无”或“后端集成”封装,通过各种传输来发送该文档,如表 13中所定义的。
如果该文档被转换为 XML 或 ROD 文档,它们将按照文档的参与者连接中所配置的那样进行路由。
参与者可以发送以下文档类型:
WebSphere Partner Gateway 解包单个 EDI 事务并对这些事务进行转换。如果事务被转换成 EDI,就将它们进行封包并路由到后端应用程序。后端应用程序可以使用“无”或“后端集成”封装,然后通过各种传输来发送该事务,如表 14中所定义的。
如果该事务被转换为 XML 或 ROD 文档,它们将按照事务的参与者连接中所配置的那样进行路由。
WebSphere Partner Gateway 将该文档转换为 EDI 事务,进行封包,然后路由到后端应用程序。可使用“无”或“后端集成”封装。
如果该文档被转换成另一种 XML 文档或另一种 ROD 文档,它将按照该文档的参与者连接中所配置的那样进行路由。
WebSphere Partner Gateway 分离并转换这些文档。如果该文档被转换成 EDI 事务,则 WebSphere Partner Gateway 将对该事务进行封包,然后发送到后端应用程序。如果批处理标识被分配给 XML 或 ROD 文档,则 WebSphere Partner Gateway 会试图把 EDI 事务发送到一个包络(作为一个批处理)。可使用“无”或“后端集成”封装。
如果该文档被转换为其他 XML 文档或其他 ROD 文档,它们将按照文档的参与者连接中所配置的那样进行路由。
WebSphere Partner Gateway 将该文件拆分成多个单独的交换。然后会将交换解包成单个事务并转换它们。如果该文档被转换成 EDI 事务,则 WebSphere Partner Gateway 将对该事务进行封包,然后发送到后端应用程序。可使用“无”或“后端集成”封装。
如果该文档被转换为 XML 或 ROD 文档,它们将按照文档的参与者连接中所配置的那样进行路由。
功能确认指定所接收的 EDI 交换。功能确认总是在传递之前封包。
对于由 WebSphere Partner Gateway 接收的交换
对于由 WebSphere Partner Gateway 生成的交换
WebSphere Partner Gateway 为您发送或接收符合 RosettaNet 1.1 和 2.0 标准的文档提供支持。当一个参与者将一条 RosettaNet 消息发送到中心时,参与者连接的目标方必须已经指定后端集成。中心将消息的有效内容转换为 RNSC 格式,并将该消息发送到后端系统。由于使用了后端集成封装,因此中心为该消息添加了传输级头。这些消息是通过 HTTP 或JMS 传输协议发送的。传输级头保留了元信息(它们不属于 PIP),使得 WebSphere Partner Gateway 可以正确地路由消息。
类似地,当社区管理者后端系统向中心发送一条 RNSC 消息时,参与者连接的源必须指定了后端集成封装,而后端系统必须提供传输级头。
例如,假设一个应用程序希望使用 RosettaNet 通过 HTTP 向社区参与者发送消息。该应用程序提供了 RosettaNet 服务内容并添加了传输级头。该头标识出由哪个社区参与者处理该请求、发送哪个 PIP、PIP 版本以及其它信息。 该消息能让 WebSphere Partner Gateway 向社区参与者发送正确的 PIP 。
您可以在中心配置指南中找到关于设置 RosettaNet 支持和配置 PIP 的信息。
WebSphere Partner Gateway 与社区参与者代表社区管理者后端应用程序执行 RNIF PIP 进程。因此,WebSphere Partner Gateway 提供了 事件通知,作为向后端应用程序通知有关 RNIF PIP 过程执行的各个方面的机制。例如,如果 WebSphere Partner Gateway 无法向参与者发送 PIP,则事件通知允许 WebSphere Partner Gateway 通知应用程序。 然后该应用程序可以处理故障。
事件通知消息是一个 XML 文档,它含有有关发生在 WebSphere Partner Gateway 或应用程序内的事件的信息。这些消息的结构与其它任何 WebSphere Partner Gateway 所收发消息的结构一样;也就是说它们有一个传输级头,以及有效内容。可以将 WebSphere Partner Gateway 配置成发送(或不发送)事件通知消息,因为这些消息是可选的。
表 2 总结了 WebSphere Partner Gateway 可以发送到后端系统的事件通知消息。
事件条件 | 事件通知消息 |
---|---|
WebSphere Partner Gateway 向社区参与者传递一个 RosettaNet 文档,并接收一个“接收确认”。 |
事件 100 |
WebSphere Partner Gateway 通过生成 0A1 消息并将其传递给社区参与者来取消 PIP。 |
事件 800 |
WebSphere Partner Gateway 收到来自社区参与者的“接收确认”异常或常规异常。 |
事件 900 |
如果将 WebSphere Partner Gateway 配置成使用“排除列表管理”来发送消息,则它可以向目的地应用程序发送 0A1 消息,因为它可以处理任何其他 PIP。请参阅管理员指南中的"管理排除列表"。
应用程序可以向 WebSphere Partner Gateway 发送一个事件通知消息来取消 RosettaNet PIP。
事件通知消息有标准的传输级头,并带有被设置为 XMLEvent 的 x-aux-process-type 字段。但是,消息的有效内容有特定的结构,如 图 11 中所示的样本 XML 模式。
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace= "http://www.ibm.com/websphere/bcg/2003/v1.0/xmleventnotification" xmlns:evntf= "http://www.ibm.com/websphere/bcg/2003/v1.0/xmleventnotification" elementFormDefault="qualified">
<!-- EventNotification version 1.0 document element --> <xsd:element name="EventNotification"> <xsd:complexType> <xsd:all> <xsd:element ref="evntf:StatusCode"/> <xsd:element ref="evntf:StatusMessage"/> <xsd:element ref="evntf:EventMessageID"/> <xsd:element ref="evntf:BusinessObjectID"/> <xsd:element ref="evntf:GlobalMessageID"/> <xsd:element ref="evntf:Timestamp"/> </xsd:all> </xsd:complexType> </xsd:element>
<!-- StatusCode element --> <xsd:element name="StatusCode"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="100"/> <xsd:enumeration value="800"/> <xsd:enumeration value="900"/> <xsd:enumeration value="901"/> <xsd:enumeration value="902"/> <xsd:enumeration value="903"/> <xsd:enumeration value="904"/> </xsd:restriction> </xsd:simpleType> </xsd:element>
<!-- StatusMessage element --> <xsd:element name="StatusMessage"> <xsd:simpleType> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:element>
<!-- EventMessageID element --> <xsd:element name="EventMessageID"> <xsd:simpleType> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:element>
<!-- BusinessObjectID element --> <xsd:element name="BusinessObjectID"> <xsd:simpleType> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:element>
<!-- GlobalMessageID element --> <xsd:element name="GlobalMessageID"> <xsd:simpleType> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:element>
<!-- Timestamp element --> <xsd:element name="Timestamp"> <xsd:simpleType> <xsd:restriction base="xsd:dateTime"/> </xsd:simpleType> </xsd:element> </xsd:schema>
表 3 描述在事件有效内容里的各个字段。
图 12 显示了 使用 HTTP 协议发送事件通知消息的示例。
POST /builderURL HTTP/1.1 Content-Type: application/xml Content-length: 250 x-aux-sender-id: 000000001 x-aux-receiver-id: 000000002 x-aux-third-party-bus-id: 000000003 x-aux-create-datetime: 2002-10-28T23:05:02Z x-aux-protocol: XMLEvent x-aux-protocol-version: 1.0 x-aux-process-type: XMLEvent x-aux-process-version: 1.0 x-aux-payload-root-tag: evntf:EventNotification x-aux-msg-id: 98732 x-aux-system-msg-id: 12345 x-aux-production: Production x-aux-process-instance-id: 3456 x-aux-event-status-code: 100 x-aux-transport-retry-count: 0
<?xml version="1.0" encoding="UTF-8"?> <evntf:EventNotification xmlns:evntf= "http://www.ibm.com/websphere/bcg/2003/v1.0/xmleventnotification"> <evntf:StatusCode>100</evntf:StatusCode> <evntf:StatusMessage>The message was delivered</evntf:StatusMessage> <evntf:EventMessageID>12345</evntf:EventMessageID> <evntf:BusinessObjectID>34234</evntf:BusinessObjectID> <evntf:GlobalMessageID>98732</evntf:GlobalMessageID> <evntf:Timestamp>2001-01-31T13:20:00Z</evntf:Timestamp> </evntf:EventNotification>