Mule ESB中entry-point-resolver的使用(7) Array Entry Point Resolver

   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方法被匹配執行

相關文章
相關標籤/搜索