Business Integration Connect 提供了“附件”数据处理程序来处理 Business Integration Connect 到 InterChange Server 和 InterChange Server 之间发送的文档。 “附件”数据处理程序使用 XML 传输封包(带或不带附件)在支持的串行化格式和其业务对象表现之间进行转换。当出现下列情形之一时,应当将“附件”数据处理程序配置成有效负载数据处理程序:
当该标志设置为“是”,Business Integration Connect 总是将文档包装在 XML 传输包络中,不管它是否包含附件。将 Backend Integration 打包的标志设置为“是”是概要文件的“B2B 功能”屏幕的一部分。 要了解更多信息,请参阅有效负载。
当文档包含附件时,Business Integration Connect 将其包装在 XML 传输包络中。在任何文档流中,都有一个有效负载,并可能有多个附件。 如果发送或接收包含附件的文档,有效负载业务对象需要包含附件信息。
下列任何一个环境都可调用“附件”数据处理程序:
如果 Business Integration Connect 和 V4.2.2 之前 InterChange Server 参与事件通知(Business Integration Connect 发起该请求),则 WebSphere Business Integration Connect Servlet(一个访问客户机)将文档发送到“服务器访问”,它调用“包装器”数据处理程序将文档转换为其业务对象表示。如果在 XML 传输包络中包装这个文档,则“包装器”数据处理程序调用“附件”数据处理程序以将文档的串行化格式(在它的 XML 传输包络中)转换成相应的业务对象。
不管调用实体是适配器还是“服务器访问”,当调用实体接收 XML 传输包络中的文档时,调用实体调用“附件”数据处理程序来将这个文档转换为与其相对应的业务对象表示。 例如,图 20 所示 Adapter for JMS 调用“附件”数据处理程序来将文档的串行化格式转换为其业务对象表示。 相反,当调用实体接收 XML 传输包络中文档的业务对象表示时,调用实体调用“附件”数据处理程序将这个业务对象结构转换为与其相对应的文档格式。例如,图 21 所示 Adapter for JMS 调用“附件”数据处理程序将文档的业务对象表示转换为文档的串行化格式。
本节提供了下列关于附件数据处理程序的信息:
“附件”数据处理程序可以解释这个 XML 传输包络的结构并处理包含的数据和相应的业务对象表示间的转换,如下所示:
在 Business Integration Connect 将文档发送到 InterChange Server 之前,它必须确定是否将内容包装在 XML 传输包络中。如果 Business Integration Connect 创建传输包络,则有效负载和任何附件都是 Base64 编码。Business Integration Connect 然后根据相应的传输级头将 XML 传输包络发送到相应的 ICS 兼容组件。可以配置这个 ICS 兼容组件(WebSphere Business Integration 适配器或“包装器”数据处理程序)来调用“附件”数据处理程序,以处理将有效负载和任何 XML 打包文档中的附件转换成相应业务对象表示。
为将 XML 传输包络中包装的文档转换为其业务对象表示,调用实体实例化“附件”数据处理程序,传递给文档(在它的传输包络中)。然后,“附件”数据处理程序采取下列步骤:
Content-type 映射是在子元对象的 ContentTypeMap_x 配置特性中定义的。子元对象是包含了“附件”数据处理程序配置信息的业务对象。此业务对象中的属性将内容类型与 content-type 映射相关联。 要了解更多信息,请参阅创建附件子元对象。
文档仅包含有效负载,“附件”数据处理程序必须将该有效负载转换为与其相对应的业务对象表示。 要了解更多信息,请参阅处理不在传输包络中的文档。
文档包含一个有效负载并可能有一些附件。 因此,“附件”数据处理程序需要将有效负载和“所有”附件转换为与它们相关联的业务对象表示。要了解更多信息,请参阅处理传输封包中的文档。
如果“附件”数据处理程序确定文档未包含在 XML 传输“包络”中,则不必从这个封包结构中抽取有效负载数据。因此,数据处理程序使用 PayloadDataHandlerMimeType 配置特性(在它的子元对象中定义)来获取 MIME 类型,该类型确认出缺省的有效负载数据处理程序来实例化文档有效负载。这个数据处理程序将有效负载数据转换为与其对应的有效负载业务对象并将产生的效负载业务对象返回给其调用实体。
如果“附件”数据处理程序确定文档包含在 XML 传输“包络”中,则必须在处理程序处理文档之前从这个包络结构中抽取出有效负载和所有附件。因此,数据处理程序采取以下步骤来处理和转换文档:
有效负载包含在 <payload> XML 标记中。每个附件包含在 <attachment> XML 标记中。
使用匹配的 content-type 映射中的指定的 MIME 类型创建数据处理程序的实例。这个数据处理程序将有效负载数据转换为与其对应的有效负载业务对象并将产生的业务对象返回给“附件”数据处理程序。
检查有效负载业务对象定义的业务对象级特定于应用程序的信息,并确定内容信息业务对象的名称,该对象的属性名由 cw_mo_bcg_content_info 标记所指定。创建该内容信息业务对象的实例并设置有效负载的内容类型和编码的值。
检查有效负载业务对象的业务对象级的特定于应用程序的信息,并确定附件容器业务对象的名称,该对象的属性名由 cw_mo_bcg_attachment 标记指定。创建附件容器业务对象的实例,并将其保存在有效负载业务对象相应的属性中。
如果 cw_mo_bcg_attachment 标记不存在(或为空),则认为文档不包含任何附件。因此,不需要采取进一步的处理步骤。“附件”数据处理程序返回经过转换的有效负载业务对象。
检查附件容器业务对象的业务对象级特定于应用程序的信息,并确定缺省附件业务对象的名称,该对象的属性名由 cw_mo_bcg_default_attribute 标记所指定。创建缺省附件业务对象的实例,并将其保存在附件容器业务对象相应的属性中。
获取来自附件的内容类型和字符集编码,并检查 content-type 映射中是否有相应的项。
因此,数据处理程序创建缺省附件业务对象的实例,设置其内容信息业务对象中的内容类型和编码的值,并在 attachment 属性中设置 base64 编码附件数据(作为字符串)。
然后,附件数据处理程序使用缺省的附件业务对象填充附件容器业务对象。
然后,附件数据处理程序使用缺省附件业务对象填充附件容器业务对象。
然后,附件数据处理程序检查附件业务对象定义的业务对象级特定应用程序的信息,并确定内容信息业务对象的名称,该对象的属性名是由 cw_mo_bcg_content_info 标记指定的。如果该标记存在,则数据处理程序创建附件的内容信息业务对象并设置附件内容类型和编码的值。
最后,“附件”数据处理程序使用附件业务对象填充附件容器业务对象。
在 Business Integration Connect 按来自 InterChange Server 中的文档之前,ICS 兼容组件必须确定是否在 XML 传输包络中包装有效负载和所有附件的业务对象表示。InterChange Server 将业务对象发送到相应的 ICS 兼容组件,用该组件处理实际的转换。可以配置这个 ICS 兼容组件(WebSphere Business Integration 适配器或“包装器”数据处理程序)来调用“附件”数据处理程序以处理有效负载和所有附件业务对象到相应的有效负载和附件的转换,这跟 XML 传输封包的创建一样。
为将带附件的有效负载业务对象转换为它的传输“包络”表示,调用实体实例化附件数据处理程序,将它传递给有效负载业务对象。 附件数据处理程序采取以下步骤:
Content-type 映射是在子元对象的 ContentTypeMap_x 配置特性中定义的。子元对象是包含“附件”数据处理程序配置信息的业务对象。此业务对象中的属性将内容类型与 content-type 映射相关联。 要了解更多信息,请参阅创建附件子元对象。
文档仅包含有效负载,“附件”数据处理程序必须根据与其相关联的业务对象表示创建有效负载。 数据处理程序不必为文档创建传输包络。要了解更多信息,请参阅不使用传输封包创建文档。
文档包含一个有效负载并可能有一些附件。 因此,附件数据管理程序需要将有效负载业务对象表示转换为有效负载和任一附件并将其包装在传输“包络”中。要了解更多信息,请参阅使用传输封包创建文档。
如果“附件”数据处理程序确定有效负载业务对象不需要 XML 传输包络,则不必包装该包络结构中的有效负载数据。因此,数据处理程序使用缺省的有效负载数据处理程序来将有效负载业务对象转换为与它对应的有效负载文档。PayloadDataHandlerMimeType 配置特性(在“附件”数据处理程序的子元对象中定义的)包含 MIME 类型,该类型确定了缺省有效负载数据处理程序以实例化有效负载业务对象。这个数据处理程序接收有效负载业务对象;将其作为参数并将产生的有效负载文档返回给它的调用实体。
如果“附件”数据处理程序确定有效负载业务对象确定需要 XML 传输包络,则必须该包络结构中包装有效负载和附件文档。因此,数据处理程序采取以下步骤来处理和转换业务对象:
在有效负载业务对象的业务对象级特定于应用程序的信息中的 cw_mo_bcg_content_info 标记指定了内容信息的属性名。该属性包含关于有效负载的内容类型和编码。
使用相匹配的 content-type 映射中指定的 MIME 类型创建有效负载数据处理程序实例。这个数据处理程序将有效负载业务对象转换为与其对应的有效负载文档,并将产生的文档返回给附件数据处理程序。根据有效负载数据处理程序返回的字符串,“附件”数据处理程序使用 Base64 来对字节进行编码并将结果存储到 XML 传输包络的 payload 标记中。
附件容器驻留在有效业务对象的附件容器的属性中。有效负载业务对象的业务对象级特定于应用程序的信息包含了 cw_mo_bcg_attachment 标记,该标记确定附件容器的属性。 该属性包含了附件。
如果 cw_mo_bcg_attachment 标记不存在(或为空),则认为该文档不包含任何附件。因此,不需要采取进一步的处理步骤。“附件”数据处理程序将经过转换的有效负载放在传输包络中返回。
附件数据处理程序采取以下步骤来处理附件业务对象:
附件业务对象的业务对象级特定于应用程序的信息包含 cw_mo_bcg_content_info 标记,该标记确定内容信息属性。 该属性包含附件的内容类型和编码。 “附件”数据处理程序将该内容信息存储到文档的附件标记。
使用相匹配的 content-type 映射中的 MIME 类型创建数据处理程序的实例。这个数据处理程序将附件业务对象转换为与其对应的附件文档并将产生的文档(作为字符串)返回给“附件”数据处理程序。
“附件”数据处理程序从返回的字符串(使用字符集,如果出现)中获得字节,并使用 Base64 对字节进行编码。然后将结果存储到附件标记中。
关于 Business Integration Connect——提供的“附件”数据处理程序的使用包含以下步骤:
可在 Business Integration Connect
安装介质中找到附件数据处理程序和相关资源库文件,在 表 38 列出了其所在位置。
组件 | 位置 |
---|---|
“附件”数据处理程序 |
Integration/WBI/WICS/Attachment/ bcgwbiattachmentdh.jar |
资源库文件 |
Integration/WBI/WICS/Attachment/ MO_DataHandler_DefaultAttachmentConfig.in |
根据 Web 服务器的文档,将文件部署到 Web 服务器。
WebSphere InterChange Server 需要知道“附件”数据处理程序的位置,以便它在运行时装入该程序。要指定附件数据处理程序的位置,请遵循以下步骤:
将附件数据处理程序的 JAR 文件 bcgwbiattachmentdh.jar 添加到 ICS 启动脚本所包含的 JAR 文件列表中。
要配置“附件”数据处理程序,必须创建子元对象以提供“附件”数据处理程序所需的类名和配置特性。要创建这个元对象,需创建一个业务对象定义,该定义中包含了表 39 中所列的属性。使用 WebSphere Business Integration 工具集中的业务对象设计器来创建该业务对象定义。
子元对象提供“附件”数据处理程序所需的类名和配置特性。 在业务对象设计器工具中,创建包含您期望接收的各种附件和有效负载的 MIME 类型的子元对象。
如表 39 中显示了子元对象的属性。在图 6 中显示了“附件”数据处理程序的子元对象的一个示例。
属性名 | 描述 |
---|---|
ClassName |
类名(必需),它指向下面这个数据处理程序类: com.ibm.bcg.DataHandlers.AttachmentDataHandler |
ContentTypeMap_x |
您期望在 XML 包装器中的接收有效负载和个类附件的 content-type 映射。
要了解更多信息,请参阅 content-type 映射。
|
PayloadDataHandlerMimeType | MIME 类型用于确定缺省的数据处理程序,该程序处理没有相关附件的有效负载。 |
content-type 映射确定“附件”数据处理程序调用的数据处理程序来将格式信息转换为相关的内容类型。例如,如果有效负载的内容类型是 application/xml,则“附件”数据处理程序搜索 content-type 映射,该映射的 ContentType 属性包含值 application/xml。如果没有发现相匹配的内容类型,则数据处理程序认为不应该将相关的附件转换为业务对象。
您将为这些内容类型中的每个创建 content-type 映射,表 41 列出了属性级特定于应用程序的信息。
当在子元对象中创建表示 content-type 映射属性时,牢记以下规定:
ContentTypeMap_x
其中 x 是一个整数,它唯一标识业务对象定义中 content-type 映射。
表 40 中列出了可以包含该属性缺省值的标记。
表 40. content-type 映射属性缺省值的有效标记
标记名称 | 描述 | 是否必需? |
---|---|---|
ContentType |
在传输包络中出现的实际的内容类型(例如,text/xml)。 | 是 |
MimeType |
MIME 类型,用于确定数据处理程序以将相关的内容类型转换为业务对象。如果没有指定 MimeType,则数据处理程序使用 ContentType 的值来实例化数据处理程序。 | 否 |
CharSet |
字符集名称(例如,UTF-8),附件数据处理程序用它来将字节转换成字符串或将字符串转换成字节。
如果没有指定 CharSet, 则“附件”数据处理程序执行下列操作:
| 否 |
ConvertAttachment |
布尔值,用于指出是否应该将附件转换为业务对象。缺省值是 false。 | 否 |
content-type 映射还可以用于指定编码的字符集,以及是否应该将附件转换成业务对象。 有关子元对象属性和示例的描述,请参阅创建附件子元对象。
例如,假定在文档中包含有如下内容:
内容类型 | 属性名 | 缺省值 |
---|---|---|
text/xml | ContentType_1 | ContentType=text/xml;MimeType=myxml; CharSet=UTF-8;ConvertAttachment=false; |
application/xml | ContentType_2 | ContentType=application/xml; MimeType=mynewxml;CharSet=UTF-16; ConvertAttachment=true; |
application/octet-stream | ContentType_3 | ContentType=application/octet-stream; MimeType=myoctet |
Business Integration Connect 提供了以下 InterChange Server 资源库输入文件,它包含一个“附件”数据处理程序的样本子元对象:
ProductDir/Integration/WBI/WICS/Attachment/ MO_DataHandler_DefaultAttachmentConfig
其中,ProductDir 是 Business Integration Connect 产品的安装目录。这个资源库文件定义了一个单个的“附件”数据处理程序,该程序的 MIME 类型是 wbic_attachment,并且该程序相关的子元对象是 MO_DataHandler_DefaultAttachmentConfig。图 6 显示了附件数据处理程序的样本子元对象。该元对象定义了两个 content-type 映射:ContentTypeMap_1 和 ContentTypeMap_2。
WebSphere Business Integration Adapter(例如 Adapter for JMS)使用 MO_DataHandler_Default 元对象将来确定它可使用的数据处理程序。WebSphere Server Access 使用 MO_Server_DataHandler 元对象也是出于同样的目的。在这些元对象中的某个添加附件数据处理程序的引用。
为了将文档包含的 MIME 类型与提供这些 MIME 类型支持的数据处理程序相关联,ICS 兼容组件引用顶级数据处理程序元对象。表 42 总结了顶级元对象名称,这取决于需要访问数据处理程序的组件。
表 42. InterChange Server 顶级数据处理程序元对象
WebSphere Business Integration 组件 | ICS 兼容组件 | 顶级
数据处理程序员对象 |
---|---|---|
适配器 | Adapter for XML, Adapter for HTTP, Adapter for JMS | MO_DataHandler_Default |
使用“服务器访问”的访问客户机
| Connect Servlet | MO_Server_DataHandler |
对于 MO_Server_DataHandler 或 MO_DataHandler_Default 元对象,进行以下修改:
这个属性的属性类型是附件数据处理程序的子元对象的业务对象定义(请参阅创建附件子元对象)。
这些属性的属性类型将是关联数据处理程序的子元对象。
例如,假设您有“附件”数据处理程序,如同图 6中所配置。图 7 显示了 MO_DataHandler_Default 元对象,该对象具有将 wbic_attachment MIME 类型与附件数据处理程序的实例相关联的属性,这一处理程序是由 MO_DataHandler_DefaultAttachmentConfig 子元对象配置的。这个顶级数据处理程序元对象还将文档 MIME 类型(text/xml)与 XML 数据处理程序的子元对象相关联。
图 7. 将 wbic_attachment MIME 类型与附件数据处理程序相关联
对于您需要支持的每种唯一的受支持内容类型组合,主要向相应的顶级数据处理元对象中添加属性这一过程,该对象的属性名是与附件数据处理实例相关联的 MIME 类型,该对象的类型是相关联子元对象的名称。另外,还要确保经过配置的 MIME 类型(及其子元对象)存在于顶级元对象中。
如果发送或接收包裹在 XML 传输包络中的文档,有效负载业务对象需要包含附件信息。在任何一个文档流中,都有一个有效负载,并可能有多个附件。 附件数据处理程序期望该附件信息成为与附件业务对象关联的业务对象里。 因此,必须创建业务对象定义以表示该信息。业务对象定义是 InterChange Server 使用的信息格式。可以使用“业务对象设计器”工具创建业务对象定义。
图 8 显示了包装在 XML 传输包络中有效负载的业务对象结构。
如图 8 所示,所有附件包含在附件容器业务对象中。如果有附件,则有效负载业务对象具有与附件容器业务对象的属性
通过采取以下步骤来确保您的业务对象结构包含附件所需的业务对象:
下面几节中逐一描述了这些步骤。
为存储相关有效负载或附件的内容类型和编码,要创建内容信息业务对象。
为创建内容信息业务对象定义,创建表 43 所示的属性。
属性 | 属性类型 | 描述 | 是关键属性吗? |
---|---|---|---|
contentType | 字符串 |
相关有效负载或附件的内容类型
| 是 |
编码 | 字符串 | 相关有效负载或附件的字符编码 | 否 |
在图 8 中,contentInfo_BusObj 业务对象定义包含了附件内容类型和编码的属性。这些属性都有特定于应用程序的属性级信息以指定相关协议头的名称。例如,x-aux-sender-id 属性具有如下特定于应用程序的信息设置:
name=x-aux-sender-id
可以选择您想要的任何名字来确定内容信息业务对象定义。附件业务对象的特定于应用程序的信息确定这是否为“内容类型编码“业务对象类型。图 8 显示了名为 contentType_BusObj 的内容类型编码业务对象定义的样本。
对于没有转换为业务对象的附件数据,创建缺省的附件业务对象。 这个业务对象有助于包含来自传输封包的 base64 编码数据。
为创建缺省的附件业务对象定义,采取以下步骤:
这个 cw_mo_bcg_content_info 标记有如下格式:
cw_mo_bcg_content_info=contentInfoAttr
其中 contentInfoAttr 是包含附件容器业务对象的属性名。
属性 | 属性类型 | 描述 | 是关键属性吗? |
---|---|---|---|
附件 | 字符串 |
附件数据的部分。
| 是 |
用于保存内容信息的属性
| 业务对象 |
一个可选的属性,用于保存内容信息业务对象,该对象提供内容类型和编码给附件数据。这个属性应当有唯一的基数。
要了解关于内容信息业务对象的格式的更多信息,请参阅表示内容信息。 | 否 |
在图 8 中,defaultAttach_BusObj 业务对象定义包含附件数据部分的属性,包括内容信息业务对象以保存它的内容类型和编码。这个缺省附件业务对象表示的附件数据的部分有 content-type 编码,由 contentType_attach 属性表示。因此,缺省附件业务对象定义在它的业务对象级的特定应用程序信息中包含以下标记:
cw_mo_bcg_content_info=contentType_attach
对于转换为业务对象的文档中的每种附件,必须创建一个单个的 附件业务对象定义。 附件业务对象定义表示文档附件中的实际数据。为创建附件业务对象定义,请采取以下步骤:
属性类型可能包括字符串(针对简单数据部分)或业务对象定义(针对复杂数据)。
这个属性的属性类型是内容类型编码业务对象定义(请参阅表示内容信息)。
这个 cw_mo_bcg_content_info 标记有以下格式:
cw_mo_bcg_content_info=contentTypeEncodingAttr
其中 contentTypeEncodingAttr 就是包含 content-type 编码业务对象的属性名。
在 图 8 中,有效负载文档有一个属性,由 attachment1_BusObj 业务对象定义表示。这个附件有 content-type 编码,由 contentTypeEncoding 属性表示。因此,附件业务对象定义在它的特定于应用程序的业务对象级信息中包含以下标记:
cw_mo_bcg_content_info=contentTypeEncoding
附件容器包含传输封包中的所有文档附件。为表示 InterChange Server 附件容器,要创建附件容器业务对象。 附件容器业务对象中的每个属性都表示一个附件。
为创建附件容器业务对象定义,请采取以下步骤:
这些属性中的每个属性类型与附件业务对象关联(请参阅表示附件)。 每个属性应当有多个基数。
wbic_type 标记的格式如下:
wbic_type=Attachment
这个属性的属性类型是缺省附件业务对象(请参阅表示附件数据)。 这是附件容器业务对象的关键属性。 这个属性不需要在特定应用程序信息中的 wbic_type 标记。
这个 cw_mo_bcg_default_attribute 标记有如下格式:
cw_mo_bcg_content_info=defaultAttachmentAttr
其中 defaultAttachmentAttr 是包含缺省附件业务对象的属性名。
在图 8 中,attachContainer_BusObj 业务对象定义表示附件容器。这个附件容器业务对象定义有以下属性:
wbic_type=Attachment
attachment1_BusObj 业务对象定义表示这个附件。
cw_mo_bcg_default_attribute=defaultAttach
有效负载业务对象定义表示文档中的信息。它包含用于各部分信息的属性,这些信息是在 Business Integration Connect 和 InterChange Server 之间传输信息。 关于有效负载业务对象定义的创建信息,请参阅用于文档的业务对象。
如果,正在发送或接收包含附件的文档,有效负载业务对象需要包含附件信息。 在任何文档流中,都有一个有效负载,并可能有多个附件。 如果文档的有效负载包含附件,则必须按以下方式修改有效负载业务对象定义:
如果实际的有效负载数据存储在单独的有效负载业务对象定义中,则您会发现更容易使用有效负载。在这种情况下,顶级有效负载业务对象包含有效负载数据的属性,该属性的属性类型是实际有效负载数据的业务对象定义。
这个属性的属性类型是附件容器业务对象定义(请参阅表示附件容器)。 这个属性应当有单个的基数。
cw_mo_bcg_attachment 标记的格式如下:
cw_mo_bcg_attachment=attachContainerAttr
其中 attachContainerAttr 是包含附件容器业务对象的属性名。
这个 cw_mo_bcg_content_info 标记有如下格式:
cw_mo_bcg_attachment=contentInfoAttr
其中 contentInfoAttr 是包含内容信息业务对象的属性名。 要了解关于内容信息业务对象格式的更多信息,请参阅表示内容信息。
例如,如果正在使用 JMS 传输协议,则有效负载业务对象定义必须包含 JMS 动态业务对象。有关更多信息,请参阅如何在传输协议支持下创建业务对象定义的章节。