使用 XSD 有效负载创建侦听器映射
本页介绍以下内容:
- 如何使用 XML 架构定义 (XSD) 文件创建侦听器映射。提供一个示例 XSD 文件,帮助您开始使用 XSD 有效负载创建侦听器映射。
- 如何创建使用侦听器事件并将 XML 标签值写入变量的触发器。
概况
当需要使用 XML 架构解析侦听器收到的 XML 消息时,将使用 XSD 侦听器映射。
仅当相应的侦听器定义为接受 XSD 时,才可以选择 XSD 有效负载类型。有关更多信息,请参见侦听器 XSD 格式。
XSD 限制
开始创建侦听器映射之前,确保已检查 XSD 限制。
假设
假设下述条件成立:
- 熟悉 XML 架构定义语言。
- 知道如何使用工作台并创建触发器。
- 节点上定义了一个带有 XSD 有效负载的侦听器。有关更多信息,请单击侦听器 XSD 格式。
- 如果 XML 架构具有导入语句,则可以从工作台访问所有引用的 XSD。
下载示例 XSD 文件
下载此示例文件,并注意其存储的文件夹。
示例文件
该文件如下所示:
具有 XSD 有效负载的侦听器的示例
下面显示了已完成的 Listener(侦听器)窗口,其中 TCP 为侦听器类型,XSD 为有效负载格式。
侦听器得到保存并且在节点上可用后,即可创建侦听器映射。
在侦听器映射中呈现 XSD
以下内容将引导您创建侦听器映射,以处理将写入变量中的 XML 数据。在说明中,将引用示例 XSD 文件。
- 在工作台左侧窗格中,展开要将侦听器映射添加到的节点。
- 展开 Enterprise(企业),右键单击 Listener Maps(侦听器映射)图标以显示其弹出菜单,然后单击 New(新建)。
随即显示默认 Listener Map(侦听器映射)窗口。 - 在 Name(名称)字段中,键入侦听器映射的唯一名称。
- 使用 Listener Type(侦听器类型)向下箭头,可筛选 Listener Name(侦听器名称)列表中按类型显示的侦听器。例如,列表可包括 TCP、JMS 或 XSD。
- 选择 Listener Name(侦听器名称)向下箭头以显示先前定义的侦听器的列表,然后选择支持 XSD 有效负载的相应侦听器。
更改侦听器映射窗口的 From Enterprise(自企业)部分以适应 XSD 格式。
第 1 步:指定 XSD 文件的位置
当指定 XSD File(XSD 文件)文本字段的值时,应考虑以下因素:
- 如果 XSD 位于 Web 服务器上,请在 XSD File(XSD 文件)字段中键入以 http(s) 开头的 URL。
- 如果 XSD 文件在本地文件系统上可用,并且知道文件的位置和名称,则可以在 XSD File(XSD 文件)字段中键入完整路径和名称。例如,C:/path/xsdfilename.xsd。
- 如果您不清楚文件的确切位置,请选择 Browse(浏览)按钮。这将打开文件选择器对话框,帮助您导航至 XSD 文件。找到您的 XSD 文件并选中它。用名称填充 XSD File(XSD 文件)字段。
在 XSD File(XSD 文件)字段中添加值后,选择 Query(查询)按钮。
假设 XSD 有效且包含至少一个元素,Root Element(根元素)参数将填充以 XSD 文件中找到的元素。
第 2 步:显示 XSD 元素结构
使用 Root Element(根元素)向下箭头,然后从列表中选择相应的元素。
XSD 结构显示在侦听器映射窗口的 From Enterprise(自企业)部分的底部。
XSD 结构如下所示:
- 嵌套在其他 XSD 元素中的 XSD 元素(例如,属于复杂类型的元素)将在其父元素下方缩进显示。
- 静态属性在其所属元素的下方缩进,并以斜体显示。
- 数组由 Type(类型)列中的 Table(表)关键字标识。
数组处理
在示例 XSD 中,book(书籍)元素具有 maxOccurs="unbounded",其表示可能存在书籍数组。因此,在 'From Enterprise'(自企业)部分中,book(书籍)元素将标识为 TABLE(表)类型。Rows In:(行数:)字段可用于指定数组的深度。此项代表可以处理并发送给侦听器触发器的最大行数。
第 3 步:将 XML 标签映射到逻辑变量
要自动生成具有正确计数(对于数组)和数据类型的逻辑变量,请选择 Map Parm(映射参数)按钮。
映射变量随即自动添加至侦听器映射 Input(输入)选项卡和 XSD 元素结构 Variable(变量)列。建议使用 Map Parms(映射参数)按钮以确保 XML 架构变量类型和数据类型之间的最佳映射。还要注意,所有定义书籍的元素的 Count(计数)已设置为 Rows In(行数)参数中指定的数字。
在此例中,假设最多 3 本书,请将 Rows In(行数)字段的值更改为 3,然后选择 Map Parms(映射参数)。所有定义书籍的输入变量将其 Count(计数)设置为 Rows In(行数)参数中指定的数字。Rows In(行数)参数中指定的数组大小应基于触发器开发者要在触发器中处理的最大行数。
如果映射类型为 time(时间)的 XML 架构标签,请手动将与 XML 元素相关联的变量调整为 STRING(字符串)而不是 TIMESTAMP(时间戳),否则在侦听器处理 XML 时,映射将导致错误。
或者,可手动创建逻辑变量,然后将其映射到 'From Enterprise'(自企业)部分的 XML 标签。
参数描述
下面提供了侦听器映射的 From Enterprise(自企业)部分底部的列的更多详细信息。
列名 | 描述 |
---|---|
Parameter(参数) | 必需。选择根元素后自动填充(来自 Root Element(根元素)参数)。 XSD 元素可标识为 Structures(结构)或在复杂时标识为 Tables(表)。 当事务服务器将元素标识为 Table(表)时,它实际上为数组,从中可以指定最大的数组大小(参见下面的 Value(值)描述)。 属于结构或表的元素在其父标签下缩进。 |
Type(类型) | 必需。Type(类型)列显示参数的数据类型。除非 XSD 元素复杂,否则类型为 XSD 类型。 |
Parm Type(参数类型) | 必需。涉及传入或传出元素。对于此侦听器映射,Parm Type(参数类型)始终为 In。 |
Variable(变量) | 可选。此项是与 XML 标签相关联的映射变量的名称。 映射变量从 Listener Map(侦听器映射)窗口的 Input(输入)选项卡中定义的变量列表中进行选择。您可以在选择 Variable(变量)列时手动添加每个输入变量,也可以选择 Map Parms(映射参数)以自动生成一种或多种变量。 ![]() |
Value /
Rows In(值/ 行数) |
可选。当使用 maxOccurs="unbounded" 定义 XML 架构元素时,仅当参数类型设置为 TABLE(表)时,才显示输入字段。![]() 默认值为 1,其效果与定义为结构的效果相同。 值必须为正整数。 如果选择 Map Parms(映射参数)按钮以生成映射变量,与表元素相关联的映射变量将自动使用 Rows In(行数)中指定的值更新其计数。 |
完成侦听器映射后,单击 Save(保存)。
侦听器映射的名称随机添加至 Listener Maps(侦听器映射)选项卡。
下一步是创建触发器,该触发器可以将 XML 标签值写入变量中。
创建使用侦听器事件的触发器
本节将介绍如何创建使用侦听器事件的触发器。侦听器事件提供了一种基于接收自企业系统的消息来生成事件的方法。
请执行以下步骤:
- 从相应的项目选项卡的底部单击 New(新建)。
在此例中,将在 Canvas Editor(画布编辑器)模式下打开 New Trigger(新触发器)窗口。 - 在 Name(名称)框中,键入触发器的名称。
- 使用 Trigger Event Type(触发器事件类型)中的向下箭头,然后选择 Listener(侦听器)。
更改 New Trigger(新建触发器)窗口以适应侦听器事件。 - 从 Listener Map Definition(侦听器映射定义)下拉列表中,选择刚刚创建的侦听器映射。
下一步是添加动作。 - 在 New Trigger(新建触发器)窗口的左侧窗格中,找到 Set(设置)动作,然后将该动作拖至画布区域。
- 双击 Set(设置)动作以显示其参数。
- 使用 Set(设置)动作,展开 Event Variables(事件变量)下的变量。由于 books(书籍)被定义为 3 个元素的数组,因此事件变量显示为 3 个元素的数组。
请注意事件变量 book_nbrRows,其包含侦听器在 XML 中接收到的元素的确切数量。 - 针对 book(书籍)标签,按照以下步骤完成 Set(设置)动作:
- 根据需要,对其他事件变量重复 Set(设置)动作:book_genre、book_id、book_price、book_pub_date、book_title 和 book_review。
假设侦听器接收的 XML 包含以下信息:
<?xml version="1.0" encoding="UTF-8"?> <books xmlns="urn:books" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <book id="F-132" > <author>author</author> <title>Future</title> <genre>fiction</genre> <price>23.99</price> <pub_date>2009-07-02</pub_date> <review> None </review> </book> <book id="N-335" > <author>writer</author> <title>Romance</title> <genre>novel</genre> <price>11.78</price> <pub_date>2003-05-05</pub_date> <review> None </review> </book> <book id="D-321" > <author>scribe</author> <title>Dream</title> <genre>fantasy</genre> <price>32.99</price> <pub_date>2010-08-02</pub_date> <review> None </review> </book> </books> |
然后,写入 bookInfo 变量的值是:
XSD 将 book(书籍)元素定义为 minOccurs="0"。由此可以发送不含任何 book(书籍)元素的 XML。在这种情况下,尝试在 Set(设置)动作中使用 'book_price[ ]' 事件变量将导致 -5111(事件变量不存在)错误。book_nbrRows 的值将设置为 0。在继续访问与 book(书籍)元素相关联的事件变量之前,可以使用 If 动作测试 book_nbrRows 变量的值。