WebSphere Partner Gateway 提供了“附件”数据处理程序来处理在 WebSphere Partner Gateway 到 InterChange Server 之间发送的文档。 “附件”数据处理程序在XML 传输包络(具有或没有附件)中在其经序列化的格式与其业务对象表示之间转换文档。当出现下列情形之一时,应当将“附件”数据处理程序配置成有效内容数据处理程序:
如果将该标志设置为“是”,则 WebSphere Partner Gateway 总是将文档包装在 XML 传输包络中,而不管它是否包含附件。将 Backend Integration 封装的标志设置为“是”,作为概要文件的“B2B 能力”页面的一部分。 要了解更多信息,请参阅有效内容。
如果文档包含附件,则 WebSphere Partner Gateway 将会将其包装在 XML 传输包络中。在任何文档流中,都有一个有效内容,并可能有多个附件。 如果,正在发送或接收包含附件的文档,有效内容业务对象需要包含附件信息。
从 WebSphere Business Integration 适配器中调用“附件”数据处理程序。
当该适配器接收 XML 传输包络中的文档时,它调用“附件”数据处理程序将该文档转换为相应的业务对象表示。例如,图 22 所示 Adapter for JMS 调用“附件”数据处理程序来将文档的串行化格式转换为其业务对象表示。 相反,当适配器接收 XML 传输包络中文档的业务对象表示时,它调用“附件”数据处理程序将该业务对象结构转换为与其相对应的文档格式。例如,图 23 所示 Adapter for JMS 调用“附件”数据处理程序将文档的业务对象表示转换为文档的串行化格式。
本部分提供了下列关于附件数据处理程序的信息:
“附件”数据处理程序可以解释 XML 传输包络的结构并处理所包含的数据和相应的业务对象表示间的转换,如下所示:
在 WebSphere Partner Gateway 将文档发送到 InterChange Server 之前,它必须确定是否将内容包装在 XML 传输包络中。如果 WebSphere Partner Gateway 创建传输包络,则有效内容和任何附件都是采用 Base64 编码的。WebSphere Partner Gateway 然后根据相应的传输级头将 XML 传输包络发送到相应的适配器。可以配置该适配器以调用“附件”数据处理程序来处理从以 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 标记指定的。如果该标记存在,则数据处理程序创建附件的内容信息业务对象并设置附件内容类型和编码的值。
最后,“附件”数据处理程序使用附件业务对象填充附件容器业务对象。
在 WebSphere Partner Gateway 接收来自 InterChange Server 的文档之前,适配器必须确定是否在 XML 传输包络中包装有效内容和所有附件的业务对象表示。InterChange Server 将业务对象发送到处理实际转换的相应的数据处理程序。可以配置该数据处理程序以调用“附件”数据处理程序,来处理有效内容和所有附件业务对象到相应的有效内容和附件的转换,并创建 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 对字节进行编码。然后将结果存储到附件标记中。
要使用 WebSphere Partner Connect 提供的“附件”数据处理程序,请执行以下步骤:
您可以为“附件”数据处理程序选择使用缺省模式或使用一种可使您在后端集成封装中传递 contentId 的模式(wbipackaging_v1.1_ns.xsd)。
要使用 wbipackaging_v1.1_ns.xsd 模式,请配置 bcg.properties 文件的 wbipackaging_version 属性。(在管理员指南中描述了 bcg.properties 文件。)该属性被指定为:
wbipackaging_version=1.n
其中 n 是 0 或 1。该属性的缺省值为 1.0。
“附件”数据处理程序的元对象具有 wbipackaging_version 属性,它的值可以为 1.0 或 1.1。如果您指定为 1.1,则“附件”数据处理程序会解析并生成包含该附件 contentId 的 XML 消息。
编码业务对象使用 contentId 属性来要指定附件的内容标识。当“附件数据处理程序”从业务对象生成 XML 时,它会使用该属性来创建附件的 contentId 标记。当“附件数据处理程序”从 XML 生成业务对象时,它会使用在 XML 消息的 contentId 标记中指定的值设置该属性。
可以在 WebSphere Partner Gateway 安装介质中找到“附件”数据处理程序和相关的存储库文件,在表 35列出了它的位置。
根据 Web 服务器的文档,将文件部署到 Web 服务器。
WebSphere InterChange Server 需要知道“附件”数据处理程序的位置,以便在运行时装入该程序。要指定附件数据处理程序的位置,请遵循以下步骤:
要配置“附件”数据处理程序,必须创建子元对象以提供“附件”数据处理程序所需的类名和配置特性。要创建这个元对象,需创建一个业务对象定义,该定义中包含了表 36 中所列的属性。使用 WebSphere Business Integration 工具集中的业务对象设计器来创建该业务对象定义。
子元对象提供“附件”数据处理程序所需的类名和配置特性。 在业务对象设计器工具中,创建包含您期望接收的各种附件和有效内容的 MIME 类型的子元对象。
表 36 中显示了子元对象的属性。在图 15 中显示了“附件”数据处理程序的子元对象的一个示例。
属性名 | 描述 |
---|---|
ClassName |
类名(必需),它指向下面这个数据处理程序类: com.ibm.bcg.DataHandlers.AttachmentDataHandler |
ContentTypeMap_x |
您期望在 XML 包装器中的接收有效内容和各类附件的 content-type 映射。 要了解更多信息,请参阅 content-type 映射。 |
PayloadDataHandlerMimeType | MIME 类型用于确定缺省的数据处理程序,该程序处理没有相关附件的有效内容。 |
wbipackaging_version | 该属性的值可以是 1.0 或 1.1。如果您指定为 1.1,则“附件”数据处理程序会解析并生成包含该附件 contentId 的 XML 消息。 |
content-type 映射确定“附件”数据处理程序调用的数据处理程序,以转换格式为相关内容类型的信息。例如,如果有效内容的内容类型是 application/xml,则“附件”数据处理程序搜索 content-type 映射,该映射的 ContentType 属性包含值 application/xml。如果没有发现相匹配的内容类型,则数据处理程序认为不应该将相关的附件转换为业务对象。
您将为这些内容类型中的每个创建 content-type 映射,表 38 列出了属性级特定于应用程序的信息。
当在子元对象中创建表示 content-type 映射属性时,牢记以下规定:
ContentTypeMap_x
其中 x 是一个整数,它唯一标识业务对象定义中 content-type 映射。
表 37 中列出了可以包含该属性缺省值的标记。
标记名称 | 描述 | 是否必需? |
---|---|---|
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 |
WebSphere Partner Gateway 提供以下 InterChange Server 存储库输入文件,它包含一个“附件”数据处理程序的样本子元对象:
ProductDir/Integration/WBI/WICS/Attachment/
MO_DataHandler_DefaultAttachmentConfigV1.0.in
ProductDir/Integration/WBI/WICS/Attachment/
MO_DataHandler_DefaultAttachmentConfigV1.1.in
其中,ProductDir 是 WebSphere Partner Gateway 产品的安装目录。该存储库文件定义了一个“附件”数据处理程序,它的相关子元对象是 MO_DataHandler_DefaultAttachmentConfig。图 15 显示了附件数据处理程序的样本子元对象。该元对象定义了两个 content-type 映射:ContentTypeMap_1 和 ContentTypeMap_2。
MO_DataHandler_DefaultAttachmentConfigV1.1.in 包含其他属性:
[Attribute] Name = WBIPackaging_Version Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = true DefaultValue = 1.0 IsRequiredServerBound = false [End]
WebSphere Business Integration Adapter(例如 Adapter for JMS)使用MO_DataHandler_Default 元对象将来确定它可使用的数据处理程序。在该元对象中添加对附件数据处理程序的引用。
对于 MO_DataHandler_Default 元对象,您可以进行以下修改:
这个属性的属性类型是附件数据处理程序的子元对象的业务对象定义(请参阅创建附件子元对象)。
这些属性的属性类型将是关联数据处理程序的子元对象。
例如,假设您有“附件”数据处理程序,如图 15中所配置那样。图 16 显示了 MO_DataHandler_Default 元对象,该对象具有将 wbic_attachment MIME 类型与附件数据处理程序的实例相关联的属性,这一处理程序是由 MO_DataHandler_DefaultAttachmentConfig 子元对象配置的。这个顶级数据处理程序元对象还将文档 MIME 类型(text/xml)与 XML 数据处理程序的子元对象相关联。
对于您需要支持的每种唯一的受支持内容类型组合,主要向相应的顶级数据处理元对象中添加属性这一过程,该对象的属性名是与附件数据处理实例相关联的 MIME 类型,该对象的类型是相关联子元对象的名称。另外,还要确保经过配置的 MIME 类型(及其子元对象)存在于顶级元对象中。
如果发送或接收包裹在 XML 传输包络中的文档,有效内容业务对象需要包含附件信息。在任何文档流中,都有一个有效内容,并可能有多个附件。 附件数据处理程序期望该附件信息成为与附件业务对象关联的业务对象里。 因此,必须创建业务对象定义以表示该信息。业务对象定义是 InterChange Server 使用的信息格式。可以使用“业务对象设计器”工具创建业务对象定义。
图 17 显示了包装在 XML 传输包络中有效内容的业务对象结构。
如图 17 所示,所有附件包含在附件容器业务对象中。如果有附件,则有效内容业务对象具有与附件容器业务对象对应的属性。
通过采取以下步骤来确保您的业务对象结构包含附件所需的业务对象:
下面几部分逐一描述了这些步骤。
为存储相关有效内容或附件的内容类型和编码,要创建内容信息业务对象。 为创建内容信息业务对象定义,创建表 39 所示的属性。
属性 | 属性类型 | 描述 | 是关键属性吗? |
---|---|---|---|
contentType | 字符串 |
相关有效内容或附件的内容类型 |
是 |
编码 | 字符串 | 相关有效内容或附件的字符编码 | 否 |
在图 17 中,contentInfo_BusObj 业务对象定义包含了附件内容类型和编码的属性。这些属性都有特定于应用程序的属性级信息以指定相关协议头的名称。例如,x-aux-sender-id 属性具有如下特定于应用程序的信息设置:
name=x-aux-sender-id
可以选择您想要的任何名字来确定内容信息业务对象定义。附件业务对象的特定于应用程序的信息确定这是否为“内容类型编码“业务对象类型。图 17 显示了名为 contentType_BusObj 的内容类型编码业务对象定义的样本。
对于没有转换为业务对象的附件数据,创建缺省的附件业务对象。 这个业务对象有助于包含来自传输封包的 base64 编码数据。
为创建缺省的附件业务对象定义,采取以下步骤:
这个 cw_mo_bcg_content_info 标记有如下格式:
cw_mo_bcg_content_info=contentInfoAttr
其中 contentInfoAttr 是包含附件容器业务对象的属性名。
属性 | 属性类型 | 描述 | 是关键属性吗? |
---|---|---|---|
附件 | 字符串 |
附件数据的部分。
注: 这个属性是业务对象定义的关键属性。 |
是 |
用于保存内容信息的属性 |
业务对象 |
一个可选的属性,用于保存内容信息业务对象,该对象提供了附件数据的内容类型和编码。这个属性应当有单一的基数。
注: 如果这个属性不存在,则附件数据处理程序不在业务对象中设置附件数据。
要了解关于内容信息业务对象格式的更多信息,请参阅表示内容信息。 |
否 |
在图 17 中,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 编码业务对象的属性名。
在 图 17 中,有效内容文档有一个附件,由 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 是包含缺省附件业务对象的属性名。
在图 17 中,attachContainer_BusObj 业务对象定义表示附件容器。这个附件容器业务对象定义有以下属性:
wbic_type=Attachment
attachment1_BusObj 业务对象定义表示这个附件。
cw_mo_bcg_default_attribute=defaultAttach
有效内容业务对象定义表示文档中的信息。它包含信息各部分的属性,这些信息是您正在 WebSphere Partner Gateway 和 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 动态业务对象。有关更多信息,请参阅如何在传输协议支持下创建业务对象定义的章节。