Array entry point resolver匹配entry point是查找參數類型爲數組類型的component方法,也要求Mule Message的payload類型是數組類型。java
例如,咱們能夠在流程中手動設置Mule Message的payload類型爲String[] json
<set-payload value="#[new String[]{'Test1','Test2'}]" doc:name="Set Payload"></set-payload>
在TestComponent中定義參數類型爲String[]類型的方法 數組
public void ArrayEntryPointResolverMethod1(String[] args) { logger.info("ArrayEntryPointResolverMethod1 is executed!"); logger.info("This first argument is:" + args[0]); logger.info("This second argument is:" + args[1]); }
啓動程序,能夠看到ArrayEntryPointResolverMethod1方法被匹配執行code
Array Entry Point Resolver匹配的Payload類型是Object數組,數組裏的元素不須要是同一類型,例以下面的Payload中一個元素是Integer類型,一個是String類型 component
咱們再在TestComponent定義一個參數類型爲Object[]的方法 orm
public void ArrayEntryPointResolverMethod2(Object[] args) { logger.info("ArrayEntryPointResolverMethod2 is executed!"); logger.info("This first argument is:" + args[0].toString()); logger.info("This second argument is:" + args[1].toString()); }
啓動程序,能夠看到ArrayEntryPointResolverMethod1方法沒有被匹配,ArrayEntryPointResolverMethod2方法被匹配執行xml
上面兩個例子都是使用set-payload控件設置Mule Message的Payload爲String[]或者Object[]類型的值,咱們也能夠在自定義的Transformer中定義。假設咱們傳入的請求Body是如下Json形式get
{ "operand1": 25, "operand2": 17 }
咱們再在流程中添加一個TestTransformer對這個json報文進行處理,將其轉換爲一個Integer數組,傳給Mule Message做爲Payload數據。io
TestTransformer相關代碼以下form
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { String messageStr = null; try { messageStr = message.getPayloadAsString(); JsonObject jsonObj = JsonObject.readFrom(messageStr); List<Integer> operandList = new ArrayList<Integer>(); operandList.add(jsonObj.getInt("operand1", 0)); operandList.add(jsonObj.getInt("operand2", 0)); Integer[] operandArray = operandList.toArray(new Integer[operandList.size()]); return operandArray; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
從新啓動項目,能夠看到仍然是ArrayEntryPointResolverMethod2方法被匹配執行