我使用以下格式的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
根据文档“ @”用于替代,而:则用于共同转让。 有人可以提供任何有关如何完成此操作的见解。
答案 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;
}