我正在尝试使用WSO2 ESB 4.9中的Amazonsns连接器发布json消息。我能够成功发布一个简单的字符串消息但是当我将messagestructure设置为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>
我没想到会取得多大成功但只是开始尝试不同的东西......我尝试对json消息进行xml编码并在'&amp;'上获得相同的消息。使用有线日志我发现进入亚马逊的成功消息的内容类型是application / x-www-form-urlencoded,所以我也尝试了url编码并在'%'上获得相同的消息。
我的想法已经不多了。我仔细检查了连接器文档,以确保我没有错过任何东西。它确实说你可以使用JSON事务进行发布并提供一个示例事务但是它不讨论为了使这项工作你需要设置的特殊/不同的东西。有什么我想念的吗?
更新:可以看到它正在使用Builder for application / x-www-form-urlencoded,它在json上磕磕绊绊。尝试将messageType和ContentType属性设置为application / json。 JSON Builder已启用。它似乎连接器想要将它作为application / x-www-form-urlencoded发送出来,是否有一些我没有正确设置告诉连接器这是JSON?
更新:连接器附带的发布模板将messagetype设置为applicaiton / x-www-form-urlencoded,它覆盖了我在代理服务中进行的任何设置。要查看更改连接器中的模板以使用不同的消息类型和/或允许我动态地在代理中设置它,然后将再次尝试。
乔
答案 0 :(得分:1)
我们为此问题创建了一个公开JIRA。请关注。
答案 1 :(得分:0)
您需要为要发送的内容类型启用邮件构建器。确保完成以下操作。
为每种内容类型启用“相关邮件”构建器。
&LT; messageBuilder contentType =&#34; application / json&#34; 类=&#34; org.apache.synapse.commons.json.JsonStreamBuilder&#34; /&GT;
确保使用消息解析Content-Type标头属性。