2

我有一个使用 Http Client Adapter 的 json 响应,它具有以下格式

{
  "?xml": {
    "@version":"1.0",
    "@encoding":"utf-8"
  },
  ArrayOfBusinessTypeAPI {
    "@xmlns:xsd":"http://www.w3.org/2001/XMLSchema",
    "@xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance",
     ...
  }
}

我需要一些关于如何在事件定义中定义以下元素的信息。

1.?xml

2.@版本

3.@xmlns:xsd

根据文档,“@”用于替换, : 用于共同分配。有人可以提供有关如何做到这一点的任何见解。

4

1 回答 1

1

我假设您的意思是在 yaml 映射器编解码器中,在这种情况下,您可以简单地引用键,这应该可以工作:

mapFrom:
  - payload.xml: "payload.?xml"
  - payload.version: "payload.@version.myField2"
  - payload.xmlns_xsd: "payload.@xmlns:xsd"

如果您询问如何在 EPL 中声明事件以处理此响应,则无需在事件定义中使用确切的命名方案。你可以有:

event Response {
    string xml;
    string version;
    string xmlns_xsd;
}

然后在两个字段之间使用映射器编解码器映射,如下所示:

mapFrom:
  - payload.xml: "payload.?xml"
  - payload.version: "payload.@version.myField2"
  - payload.xmlns_xsd: "payload.@xmlns:xsd"

编辑

因此,停止事件解析的第一件事是您的响应不是有效的 JSON。“ArrayOfBusinessTypeAPI {”行需要是“”ArrayOfBusinessTypeAPI“:{”。您只能使用映射器编解码器来解析 JSON。

这不起作用的第二个原因是内容类型设置为 text/html。JSON 编解码器是否将 filterOnContentType 设置为 true?如果是这样,它不会转换此消息。

但是,如果 JSON 有效并由 JSON 编解码器处理,则可以正确映射事件,如下所示:

mapFrom:
 - payload.id: metadata.requestId
 - payload.xml: "payload.?xml"
 - payload.version: "payload.xml.@version"
 - payload.xsd: "payload.ArrayOfBusinessTypeAPI.@xmlns:xsd"
 - payload.xsi: "payload.ArrayOfBusinessTypeAPI.@xmlns:xsi"
 - payload.encoding: "payload.xml.@encoding"

映射到一个事件:

event Resp {
    dictionary<string, string> xml;
    string version;
    string xsd;
}
于 2019-05-21T12:58:49.073 回答