【发布时间】:2016-09-21 15:37:18
【问题描述】:
我正在尝试使用 WSO2 ESB 4.9 中的 Amazonsns 连接器发布 json 消息。我能够成功发布一个简单的字符串消息,但是当我将消息结构设置为 json 以便将不同的消息发送到不同的平台并尝试将 json 作为消息的值发送时,它将不起作用。我正在使用一个看起来几乎与文档示例完全相同的简单事务。我的交易:
content-type: application/json;charset=UTF-8
{
"region":"us-west-2",
"accessKeyId":"MyAccessKey",
"secretAccessKey":"MySecretAccessKey",
"version":"",
"messageStructure":"json",
"subject":"Test",
"message": {"default":"mess","email":"message"},
"targetArn":"arn:aws:sns:us-west-2:977102061874:endpoint/APNS_SANDBOX/mobile_iOS_Sandbox/34ed4324e6-1119-67sd-b7dd-f413c88e4e25",
"topicArn":""
}
我的结果是发送消息时出现意外错误。
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,73]Message: Illegal character: <d>
我的服务也是这样的例子:
<amazonsns.init>
<region>{$ctx:region}</region>
<accessKeyId>{$ctx:accessKeyId}</accessKeyId>
<secretAccessKey>{$ctx:secretAccessKey}</secretAccessKey>
<version>{$ctx:version}</version>
</amazonsns.init>
<amazonsns.publish>
<message>{$ctx:message}</message>
<subject>{$ctx:subject}</subject>
<messageStructure>{$ctx:messageStructure}</messageStructure>
<topicArn>{$ctx:topicArn}</topicArn>
<targetArn>{$ctx:targetArn}</targetArn>
</amazonsns.publish>
我没想到会有很大的成功,但只是开始尝试不同的事情......我尝试了 xml 编码 json 消息并在“&”上得到相同的消息。使用线路日志,我发现发送到亚马逊的成功消息的内容类型是 application/x-www-form-urlencoded,所以我还尝试了 url 编码并在“%”上获得相同的消息。
我的想法已经不多了。我仔细检查了连接器文档以确保我没有遗漏任何内容。它确实说您可以将 JSON 事务用于 Publish 并提供示例事务,但是它没有讨论您需要设置以使其工作的任何特殊/不同之处。有什么我想念的吗?
更新:可以看到它正在使用 Builder 的 application/x-www-form-urlencoded,它在 json 上绊倒了。尝试将 messageType 和 ContentType 属性设置为 application/json。 JSON 生成器已启用。似乎连接器想将其作为 application/x-www-form-urlencoded 发送出去,是不是我没有正确设置来告诉连接器这是 JSON?
更新:连接器附带的发布模板将消息类型设置为 applicaiton/x-www-form-urlencoded,这会覆盖我在代理服务中所做的任何设置。将查看更改连接器中的模板以使用不同的消息类型和/或允许我在代理中动态设置它,然后再试一次。
乔
【问题讨论】: