如何在Mule ind insert中提取所有JSON值到DB

时间:2014-07-13 10:03:08

标签: json xpath mule mule-el

我的Mule流程中有一个REST服务: -

<flow name="restServiceFlow1" doc:name="restFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP"/>
        <jersey:resources doc:name="REST">
            <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/>
        </jersey:resources>
 </flow>

我有另一个流程,它将JSON请求从文件发送到该服务流并使用它: -

<flow name="restFlow2" doc:name="restFlow2">
 <file:inbound-endpoint path="E:\backup\test" responseTimeout="10000" doc:name="File" connector-ref="File_Global">
                        <file:filename-regex-filter pattern="aa.txt" caseSensitive="false"/>
 </file:inbound-endpoint>

        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <http:outbound-endpoint exchange-pattern="request-response" contentType="application/json" method="GET" address="http://localhost:8082/getData/insert/?id=#[payload.insertDataRequest[0].id]&amp;name=#[payload.insertDataRequest[0].name]&amp;age=#[payload.insertDataRequest[0].age]&amp;designation=#[payload.insertDataRequest[0].designation]" doc:name="HTTP"/>
     </flow>

现在我的JSON请求是: -

{
    "insertDataRequest": [
        {
            "id": "6",
            "name": "ddddd",
            "age": "55",
            "designation": "WQQQQQ"
        },
        {
            "id": "64",
            "name": "mmmm",
            "age": "545",
            "designation": "TTTTTTTTTT"
        }
    ]
}

现在,问题在于每当我将JSON请求作为文件放置时...只插入第一个数据..这只是

{
                "id": "6",
                "name": "ddddd",
                "age": "55",
                "designation": "WQQQQQ"
 }

正在插入数据库.. enter image description here

.... ....现在我希望所有数据都插入数据库......我怎样才能实现它? ..我每个人都需要获取所有数据吗?请帮助......

1 个答案:

答案 0 :(得分:4)

对每个块使用a来迭代insertDataRequest条目:

<flow name="restFlow2">
  <file:inbound-endpoint path="E:\backup\test" responseTimeout="10000" connector-ref="File_Global">
    <file:filename-regex-filter pattern="aa.txt" caseSensitive="false"/>
  </file:inbound-endpoint>

  <json:json-to-object-transformer returnClass="java.util.HashMap"/>

  <foreach collection="#[payload.insertDataRequest]">
    <http:outbound-endpoint exchange-pattern="request-response"
          contentType="application/json" method="GET"
          address="http://localhost:8082/getData/insert/?id=#[payload.id]&amp;name=#[payload.name]&amp;age=#[payload.age]&amp;designation=#[payload.designation]"/>
  </foreach>
</flow>

请注意,您使用GET而不是POST执行插入的事实并不尊重REST原则......