解析具有xml属性的json响应的问题

时间:2019-05-21 06:41:21

标签: apama

我使用以下格式的Http客户端适配器收到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. @ version

3. @ xmlns:xsd

根据文档“ @”用于替代,而:则用于共同转让。 有人可以提供任何有关如何完成此操作的见解。

1 个答案:

答案 0 :(得分: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;
}