【问题标题】:Mule collection splitter with JSON带有 JSON 的 Mule 集合拆分器
【发布时间】:2012-10-01 20:36:44
【问题描述】:

我有一个类似于下面粘贴的 JSON。我正在尝试提取每个单独的记录并将其推送到队列中。我将如何提取 Mule 中的每条记录?我一直在尝试使用集合拆分器和 foreach 循环,但我不知道如何让它工作。

{
  "locations": {
    "record": [
      {
        "id": 8817,
        "loc": "NEW YORK CITY"
      },
      {
        "id": 2873,
        "loc": "UNITED STATES"
      },
      {
        "id": 1501,
        "loc": "NEW YORK STATE"
      }
    ]
  }
}

【问题讨论】:

    标签: arrays json mule splitter


    【解决方案1】:

    为此:

    1. 将 JSON 实体转换为 Java 结构的层次结构
    2. 提取record列表
    3. 拆分列表

    现在在 Mule XML 配置中:

    <json:json-to-object-transformer returnClass="java.util.Map" />
    <expression-transformer expression="#[payload.locations.record]" />
    <collection-splitter />
    <!-- TODO: dispatch to queue -->
    

    【讨论】:

    • 当我这样做时,我得到以下错误:Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token
    • 我已经使用您提供的 JSON 有效负载运行了这个配置,并确保它工作正常,所以在您的环境中一定有一些我不知道的东西。您是如何将 JSON 有效负载传递给 vm://json.in 的?
    • 在 REST 调用之后,我执行以下操作,然后您的流程开始运行:
    • 确定发送到vm://json.in的有效负载完全与您在上面显示的一样吗?从异常来看,它似乎以 JSON 数组而不是 JSON 对象开头,如上所示。另外,我不需要object-to-json-transformer。最后,您不需要使用带有 VM 端点的第二个流程,这只是我给出的一个示例,您可以在同一个流程中拥有所有内容。也许你在原来的问题中也能展示你的流程会很好。
    【解决方案2】:

    试试这个,而不是 Map put List。这对我来说很好。

    <json:json-to-object-transformer returnClass="java.util.List" />
    <expression-transformer expression="#[message.payload.locations.record]" />
    <collection-splitter />
    

    【讨论】:

      【解决方案3】:

      我正在添加一个 returnClass="java.util.Map" 有效的解决方案男人客户。

      在此流程中,我直接在拆分器中分配表达式,而不是使用表达式转换器。我正在使用 Any Point Studio 使其工作。

          <flow name="mule-splitterFlow2" doc:name="mule-splitterFlow2">
              <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="splitterjson"/>
              <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
              <splitter expression="#[message.payload.locations.record]" doc:name="Splitter">
              </splitter>
              <logger level="INFO" doc:name="Logger" message="#[message.payload]"/>
          </flow>

      【讨论】:

        猜你喜欢
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 2015-07-24
        • 2021-09-17
        • 1970-01-01
        相关资源
        最近更新 更多