【问题标题】:WSO2 Amazonsns connector issues publishing json messageWSO2 Amazonsns 连接器问题发布 json 消息
【发布时间】: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,这会覆盖我在代理服务中所做的任何设置。将查看更改连接器中的模板以使用不同的消息类型和/或允许我在代理中动态设置它,然后再试一次。

【问题讨论】:

    标签: json wso2 wso2esb


    【解决方案1】:

    我们为此问题创建了一个公共JIRA。请遵守。

    【讨论】:

      【解决方案2】:

      您需要为要发送的内容类型启用消息构建器。确保完成以下操作。

      1. 为每个内容类型启用相关的消息生成器。

      2. 确保 Content-Type 标头属性与消息一起解析。

      3. 确保您的 Json 格式正确。

      【讨论】:

      • 消息生成器已启用。 JSON 格式正确。我不确定如何验证您的第二点,以确保 Content-Type 标头与消息一起解析。我有一个内容类型 application/json 应要求,无论我做什么,亚马逊连接器最终都会在事务退出 esb 时使其成为 application/x-www-form-urlencoded。我已尝试设置 ContentType 和 messageType 的属性。我可以将 XFormURLEncodedFormatter 视为堆栈跟踪中的模块之一,因此看起来它正在使用该构建器构建输出消息并在 JSON 上绊倒,而不是使用 JSON 构建器。
      • 为 application/x-www-form-urlencoded 设置了一个消息生成器?
      • 我愿意。对于 application/x-www-form-urlencoded org.apache.synapse.commons.formatters.XFormURLEncodedFormatter 是格式化程序,而 org.apache.synapse.commons.builders.XFormURLEncodedBuilder 是构建器。对于 application/json org.apache.synapse.commons.json.JsonStreamFormatter 是格式化程序,org.apache.synapse.commons.json.JsonStreamBuilder 是构建器。
      • 在这种情况下,这可能是一个错误。
      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 2022-10-17
      • 2015-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      相关资源
      最近更新 更多