2016-07-08 77 views
0

我試圖像下面這樣:你可以將null傳遞給Mule中的一個invoke組件嗎?

<invoke object-ref="importsManager" method="logImportError" methodArguments="#[flowVars['jobConfig']],#[flowVars.['importRecord']], #[exception], 'ERROR'" doc:name="Log Import Error"/> 

上述flowVars可以爲空。如果它們是,我似乎無法將它們傳遞到調用組件。上面我正在做什麼有什麼問題,或者確實無法將null傳遞給調用組件?

回答

1

使用當前的Mule實現,您將無法傳遞null值來調用組件。當mule執行「invoke」組件時,它在內部使用以下方法來轉換參數。下面的方法存在於InvokerMessageProcessor類中。在這裏,「arg」是你傳遞的值,「type」是你想要賦值的類。當執行arg.getClass()語句時,您會看到NullPointerException爲arg值爲null。必須修補此方法以檢查null並避免NullPinterException。

private Object transformArgument(Object arg, Class<?> type) throws TransformerException 
{ 
    if (!(type.isAssignableFrom(arg.getClass()))) 
    { 
     DataType<?> source = DataTypeFactory.create(arg.getClass()); 
     DataType<?> target = DataTypeFactory.create(type); 
     // Throws TransformerException if no suitable transformer is found 
     Transformer t = muleContext.getRegistry().lookupTransformer(source, target); 
     arg = t.transform(arg); 
    } 
    return arg; 
} 
相關問題