MuleSoft - 访问java组件中db查询中的数据

时间:2015-03-17 21:57:08

标签: java mule mule-component

使用MuleSoft进行一些数据转换。相对较新的Java语言本身。经过多次谷歌搜索,我想在这里问。

从11g Oracle数据库中提取数据。我有一个数据库查询被发送到MuleMessage。根据AnyPoint studio,db查询的输出是List。

我可以以事件的形式成功调用java组件。关于如何提取有效载荷的内容以查看数据的位丢失了。我真的想将这些值添加到另一个列表映射中以进行进一步处理。

这是我的数据库查询:

select name, country
from test_customer a, test_country b
where a.id = b.id

我想把捕获名称和国家/地区,并将其放入我的地图中。然后地图会进入地图列表。

package org.mule.transformers;
import org.mule.api.MuleEventContext;
import org.mule.api.MuleMessage;
import org.mule.api.lifecycle.Callable;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractMessageTransformer;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


public class myTransformer implements Callable{
@Override
    public Object onCall(MuleEventContext eventContext) throws Exception {

        MuleMessage message = eventContext.getMessage();
        Object payload = new Object();
        List<Map<String,String>> myList = new ArrayList<Map<String,String>>();  //list of maps
        Map<String,String> myMap = new HashMap<String,String>();    //map that holds

        String test;
        String test2;

        payload = message.getPayload();

        test = message.getInboundProperty("name");
        test2 = message.getInboundProperty("country");

        myMap.put(test, test2);

        myList.add(myMap);

        return myList;
    }
}

我想我只是不知道如何正确引用MuleMessage变量来提取这些数据。文档没有帮助,或者我刚刚读错了东西。

我是否必须使用MEL来执行此操作? 或者我可以使用一些java函数来完成这项工作吗?

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

查询结果(如果使用数据库连接器)位于有效内容中,而不是入站属性中。所以你是&#34;搜索&#34;结果出错了。

结果可能是List<Map<String,Object>>格式,因此您需要执行以下操作:

List<Map<String,Object>> results = (List<Map<String,Object>>) message.getPayload();

Map<String, Object> firstRow = results.get(0);

test = firstRow.get("name");
test2 = firstRow.get("country");

但是,您应该调试组件并检查有效负载的正确类型。

答案 1 :(得分:0)

db组件的输出将是ListOfMap对象。 在实现Callable接口的java类中 DB组件的输出可以通过以下方式访问 List<Map<String,Object>> results = (List<Map<String,Object>>) eventContext.getMessage().getPayload();

答案 2 :(得分:0)

尝试以下格式......

public void AnalyseArray(ArrayList<Integer> array) {
    // Do something
}
...
ArrayList<Integer> A = new ArrayList<Integer>();
AnalyseArray(A);