处理带附件的文档

Business Integration Connect 提供了“附件”数据处理程序来处理 Business Integration Connect 到 InterChange Server 和 InterChange Server 之间发送的文档。 “附件”数据处理程序使用 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 传输包络中包装的文档转换为其业务对象表示,调用实体实例化“附件”数据处理程序,传递给文档(在它的传输包络中)。然后,“附件”数据处理程序采取下列步骤:

  1. 装载在数据处理程序的子元对象中定义的 content-type 映射。

    Content-type 映射是在子元对象的 ContentTypeMap_x 配置特性中定义的。子元对象是包含了“附件”数据处理程序配置信息的业务对象。此业务对象中的属性将内容类型与 content-type 映射相关联。 要了解更多信息,请参阅创建附件子元对象

  2. 检查文档,查看其是否包装在 XML 传输包络中。
  3. 设置产生的有效负载业务对象并将该业务对象返回给调用实体。

处理不在传输包络中的文档

如果“附件”数据处理程序确定文档包含在 XML 传输“包络”中,则不必从这个封包结构中抽取有效负载数据。因此,数据处理程序使用 PayloadDataHandlerMimeType 配置特性(在它的子元对象中定义)来获取 MIME 类型,该类型确认出缺省的有效负载数据处理程序来实例化文档有效负载。这个数据处理程序将有效负载数据转换为与其对应的有效负载业务对象并将产生的效负载业务对象返回给其调用实体。

处理传输封包中的文档

如果“附件”数据处理程序确定文档包含在 XML 传输“包络”中,则必须在处理程序处理文档之前从这个包络结构中抽取出有效负载和所有附件。因此,数据处理程序采取以下步骤来处理和转换文档:

  1. 从传输包络抽取有效负载和所有附件并对有效负载数据进行解码。

    有效负载包含在 <payload> XML 标记中。每个附件包含在 <attachment> XML 标记中。

  2. 搜索与有效负载相匹配的内容类型的 content-type 映射。

    使用匹配的 content-type 映射中的指定的 MIME 类型创建数据处理程序的实例。这个数据处理程序将有效负载数据转换为与其对应的有效负载业务对象并将产生的业务对象返回给“附件”数据处理程序。

  3. 为有效负载创建内容信息业务对象。

    检查有效负载业务对象定义的业务对象级特定于应用程序的信息,并确定内容信息业务对象的名称,该对象的属性名由 cw_mo_bcg_content_info 标记所指定。创建该内容信息业务对象的实例并设置有效负载的内容类型和编码的值。

  4. 为有效负载创建附件容器业务对象。

    检查有效负载业务对象的业务对象级的特定于应用程序的信息,并确定附件容器业务对象的名称,该对象的属性名由 cw_mo_bcg_attachment 标记指定。创建附件容器业务对象的实例,并将其保存在有效负载业务对象相应的属性中。

    如果 cw_mo_bcg_attachment 标记不存在(或为空),则认为文档不包含任何附件。因此,不需要采取进一步的处理步骤。“附件”数据处理程序返回经过转换的有效负载业务对象。

  5. 为附件容器创建缺省的附件业务对象。

    检查附件容器业务对象的业务对象级特定于应用程序的信息,并确定缺省附件业务对象的名称,该对象的属性名由 cw_mo_bcg_default_attribute 标记所指定。创建缺省附件业务对象的实例,并将其保存在附件容器业务对象相应的属性中。

  6. 通过搜索与附件相匹配的内容类型的 content-type 映射来确定是否需要将附件转换为业务对象。

    获取来自附件的内容类型和字符集编码,并检查 content-type 映射中是否有相应的项。

将业务对象转换为文档

在 Business Integration Connect 按来自 InterChange Server 中的文档之前,ICS 兼容组件必须确定是否在 XML 传输包络中包装有效负载和所有附件的业务对象表示。InterChange Server 将业务对象发送到相应的 ICS 兼容组件,用该组件处理实际的转换。可以配置这个 ICS 兼容组件(WebSphere Business Integration 适配器或“包装器”数据处理程序)来调用“附件”数据处理程序以处理有效负载和所有附件业务对象到相应的有效负载和附件的转换,这跟 XML 传输封包的创建一样。

为将带附件的有效负载业务对象转换为它的传输“包络”表示,调用实体实例化附件数据处理程序,将它传递给有效负载业务对象。 附件数据处理程序采取以下步骤:

  1. 装载在其配置子元对象中定义过的 content-type 映射。

    Content-type 映射是在子元对象的 ContentTypeMap_x 配置特性中定义的。子元对象是包含“附件”数据处理程序配置信息的业务对象。此业务对象中的属性将内容类型与 content-type 映射相关联。 要了解更多信息,请参阅创建附件子元对象

  2. 检查业务对象以确定是否创建 XML 传输包络。
  3. 设置 Business Integration Connect 产生的有效负载和任何附件,并将该文档返回给调用实体。

不使用传输封包创建文档

如果“附件”数据处理程序确定有效负载业务对象需要 XML 传输包络,则不必包装该包络结构中的有效负载数据。因此,数据处理程序使用缺省的有效负载数据处理程序来将有效负载业务对象转换为与它对应的有效负载文档。PayloadDataHandlerMimeType 配置特性(在“附件”数据处理程序的子元对象中定义的)包含 MIME 类型,该类型确定了缺省有效负载数据处理程序以实例化有效负载业务对象。这个数据处理程序接收有效负载业务对象;将其作为参数并将产生的有效负载文档返回给它的调用实体。

使用传输封包创建文档

如果“附件”数据处理程序确定有效负载业务对象确定需要 XML 传输包络,则必须该包络结构中包装有效负载和附件文档。因此,数据处理程序采取以下步骤来处理和转换业务对象:

  1. 获取的有效负载内容类型和字符集编码。

    在有效负载业务对象的业务对象级特定于应用程序的信息中的 cw_mo_bcg_content_info 标记指定了内容信息的属性名。该属性包含关于有效负载的内容类型和编码。

    注:
    如果内容信息属性不存在,使用缺省的数据处理程序(由 PayloadDataHandlerMimeType 配置特性中包含的 MIME 类型确定,在附件数据处理程序的子元对象中)来转换有效负载业务对象。
  2. 搜索与有效负载相匹配的内容类型的 content-type 映射。

    使用相匹配的 content-type 映射中指定的 MIME 类型创建有效负载数据处理程序实例。这个数据处理程序将有效负载业务对象转换为与其对应的有效负载文档,并将产生的文档返回给附件数据处理程序。根据有效负载数据处理程序返回的字符串,“附件”数据处理程序使用 Base64 来对字节进行编码并将结果存储到 XML 传输包络的 payload 标记中。

  3. 从有效负载业务对象中获取附件容器。

    附件容器驻留在有效业务对象的附件容器的属性中。有效负载业务对象的业务对象级特定于应用程序的信息包含了 cw_mo_bcg_attachment 标记,该标记确定附件容器的属性。 该属性包含了附件。

    如果 cw_mo_bcg_attachment 标记不存在(或为空),则认为该文档不包含任何附件。因此,不需要采取进一步的处理步骤。“附件”数据处理程序将经过转换的有效负载放在传输包络中返回。

  4. 对每个附件,确定将附件表示为业务对象还是仅表示为数据。

设置附件数据处理程序的环境

关于 Business Integration Connect——提供的“附件”数据处理程序的使用包含以下步骤:

部署附件数据处理程序

可在 Business Integration Connect 安装介质中找到附件数据处理程序和相关资源库文件,在 表 38 列出了其所在位置。

表 38. 附件数据处理程序各组件的位置
组件 位置
“附件”数据处理程序
Integration/WBI/WICS/Attachment/
 bcgwbiattachmentdh.jar
 
资源库文件
Integration/WBI/WICS/Attachment/
 MO_DataHandler_DefaultAttachmentConfig.in
 

根据 Web 服务器的文档,将文件部署到 Web 服务器。

指定附件数据处理程序的位置

WebSphere InterChange Server 需要知道“附件”数据处理程序的位置,以便它在运行时装入该程序。要指定附件数据处理程序的位置,请遵循以下步骤:

  1. 编辑 ICS 启动脚本 start_server.bat,该脚本位于 InterChange Server 产品目录的 bin 子目录下(在 InterChange Server 所在的机器上)。
  2. 对于该文件中的 CLASSPATH 变量,添加附件数据处理程序的 JAR 文件:

    将附件数据处理程序的 JAR 文件 bcgwbiattachmentdh.jar 添加到 ICS 启动脚本所包含的 JAR 文件列表中。

配置附件数据处理程序

遵循以下步骤配置“附件”数据处理程序来创建 配置业务对象:

注:
您还必须为附件数据处理程序创建与附件相关的业务对象定义。要了解更多信息,请参阅创建与附件关联的业务对象定义

创建附件子元对象

要配置“附件”数据处理程序,必须创建子元对象以提供“附件”数据处理程序所需的类名和配置特性。要创建这个元对象,需创建一个业务对象定义,该定义中包含了表 39 中所列的属性。使用 WebSphere Business Integration 工具集中的业务对象设计器来创建该业务对象定义。

子元对象提供“附件”数据处理程序所需的类名和配置特性。 在业务对象设计器工具中,创建包含您期望接收的各种附件和有效负载的 MIME 类型的子元对象。

表 39 中显示了子元对象的属性。在图 6 中显示了“附件”数据处理程序的子元对象的一个示例。

注:
本章显示的样本业务对象包括 WebSphere InterChange Server 需要的而附件数据处理程序不使用的标准属性(例如 ObjectEventId)。

表 39. 配置附件子元对象中特性
属性名 描述
ClassName

类名(必需),它指向下面这个数据处理程序类:

com.ibm.bcg.DataHandlers.AttachmentDataHandler
 
ContentTypeMap_x

您期望在 XML 包装器中的接收有效负载和个类附件的 content-type 映射。

要了解更多信息,请参阅 content-type 映射

PayloadDataHandlerMimeType MIME 类型用于确定缺省的数据处理程序,该程序处理有相关附件的有效负载。

请注意:
要赋值给表 39 中的属性,请设置属性的缺省值。例如,如果“附件”数据处理程序要为自己缺省的数据处理程序使用 XML 数据处理程序,则将 PayloadDataHandlerMimeType 属性的缺省值设置成 text/xml

content-type 映射

content-type 映射确定“附件”数据处理程序调用的数据处理程序来将格式信息转换为相关的内容类型。例如,如果有效负载的内容类型是 application/xml,则“附件”数据处理程序搜索 content-type 映射,该映射的 ContentType 属性包含值 application/xml。如果没有发现相匹配的内容类型,则数据处理程序认为应该将相关的附件转换为业务对象。

您将为这些内容类型中的每个创建 content-type 映射,表 41 列出了属性级特定于应用程序的信息。

当在子元对象中创建表示 content-type 映射属性时,牢记以下规定:

content-type 映射还可以用于指定编码的字符集,以及是否应该将附件转换成业务对象。 有关子元对象属性和示例的描述,请参阅创建附件子元对象

例如,假定在文档中包含有如下内容:


表 41. 样本 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_1ContentTypeMap_2

图 6. 附件数据处理程序的样本子元对象


更新顶级数据处理程序元对象

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_DataHandlerMO_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. 有效负载业务对象到附件业务对象间的联系


图 8 所示,所有附件包含在附件容器业务对象中。如果有附件,则有效负载业务对象具有与附件容器业务对象的属性

通过采取以下步骤来确保您的业务对象结构包含附件所需的业务对象:

  1. 创建业务对象定义以保存“后端集成”打包所需的 content-type 编码属性。
  2. 为每类附件创建业务对象定义。
  3. 为附件容器业务对象创建业务对象定义。
  4. 为有效负载业务对象修改业务对象定义。

下面几节中逐一描述了这些步骤。

表示内容信息

为存储相关有效负载或附件的内容类型和编码,要创建内容信息业务对象。 为创建内容信息业务对象定义,创建表 43 所示的属性。

表 43. 内容信息业务对象的属性
属性 属性类型 描述 是关键属性吗?
contentType 字符串

相关有效负载或附件的内容类型

编码 字符串 相关有效负载或附件的字符编码

图 8 中,contentInfo_BusObj 业务对象定义包含了附件内容类型和编码的属性。这些属性都有特定于应用程序的属性级信息以指定相关协议头的名称。例如,x-aux-sender-id 属性具有如下特定于应用程序的信息设置:

name=x-aux-sender-id
 

可以选择您想要的任何名字来确定内容信息业务对象定义。附件业务对象的特定于应用程序的信息确定这是否为“内容类型编码“业务对象类型。图 8 显示了名为 contentType_BusObj 的内容类型编码业务对象定义的样本。

表示附件数据

对于没有转换为业务对象的附件数据,创建缺省的附件业务对象。 这个业务对象有助于包含来自传输封包的 base64 编码数据。

为创建缺省的附件业务对象定义,采取以下步骤:


表 44. 缺省附件业务对象的属性
属性 属性类型 描述 是关键属性吗?
附件 字符串

附件数据的部分。

注:
这个属性是业务对象定义的关键属性。

用于保存内容信息的属性

业务对象

一个可选的属性,用于保存内容信息业务对象,该对象提供内容类型和编码给附件数据。这个属性应当有唯一的基数。

注:
如果这个属性存在,则附件数据处理程序不在业务对象中设置附件数据。

要了解关于内容信息业务对象的格式的更多信息,请参阅表示内容信息

图 8 中,defaultAttach_BusObj 业务对象定义包含附件数据部分的属性,包括内容信息业务对象以保存它的内容类型和编码。这个缺省附件业务对象表示的附件数据的部分有 content-type 编码,由 contentType_attach 属性表示。因此,缺省附件业务对象定义在它的业务对象级的特定应用程序信息中包含以下标记:

cw_mo_bcg_content_info=contentType_attach
 

表示附件

对于转换为业务对象的文档中的每种附件,必须创建一个单个的 附件业务对象定义。 附件业务对象定义表示文档附件中的实际数据。为创建附件业务对象定义,请采取以下步骤:

  1. 为附件数据的每个部分创建属性。

    属性类型可能包括字符串(针对简单数据部分)或业务对象定义(针对复杂数据)。

  2. 如果附件需要 content-type 编码:

图 8 中,有效负载文档有一个属性,由 attachment1_BusObj 业务对象定义表示。这个附件有 content-type 编码,由 contentTypeEncoding 属性表示。因此,附件业务对象定义在它的特定于应用程序的业务对象级信息中包含以下标记:

cw_mo_bcg_content_info=contentTypeEncoding
 

表示附件容器

附件容器包含传输封包中的所有文档附件。为表示 InterChange Server 附件容器,要创建附件容器业务对象。 附件容器业务对象中的每个属性都表示一个附件。

为创建附件容器业务对象定义,请采取以下步骤:

  1. 为即将转换为业务对象的文档中的每个附件,添加一个属性。

    这些属性中的每个属性类型与附件业务对象关联(请参阅表示附件)。 每个属性应当有多个基数。

  2. 向每个属性的特定于应用程序的信息添加 wbic_type 标记。

    wbic_type 标记的格式如下:

    wbic_type=Attachment
     

    注:
    一个附件属性可以有多个基数。
  3. 如果有效负载包含将转换为业务对象的附件数据:

    请注意:
    如果不存在缺省附件属性,则附件数据处理程序能转换任何关联 content-type 映射的附件,也不能转换未转换为业务对象的附件。这些附件将在至业务对象表示的转换间丢失。

图 8 中,attachContainer_BusObj 业务对象定义表示附件容器。这个附件容器业务对象定义有以下属性:

修改有效负载业务对象定义

有效负载业务对象定义表示文档中的信息。它包含用于各部分信息的属性,这些信息是在 Business Integration Connect 和 InterChange Server 之间传输信息。 关于有效负载业务对象定义的创建信息,请参阅用于文档的业务对象

如果,正在发送或接收包含附件的文档,有效负载业务对象需要包含附件信息。 在任何文档流中,都有一个有效负载,并可能有多个附件。 如果文档的有效负载包含附件,则必须按以下方式修改有效负载业务对象定义:

Copyright IBM Corp. 1997, 2004