2016-07-08 8 views
0

Ich versuche, so etwas wie die folgenden:Können Sie in Mule null in eine Aufrufkomponente übergeben?

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

Die flowVars über null sein kann. Wenn das der Fall ist, scheint es mir nicht möglich zu sein, sie in die Aufrufkomponente zu übergeben. Ist etwas falsch mit dem, was ich oben getan habe, oder ist es wahr, dass Sie nicht Null in eine Aufrufkomponente übergeben können?

Antwort

1

Mit der aktuellen Mule-Implementierung können Sie NULL-Werte NICHT übergeben, um die Komponente aufzurufen. Wenn mule die Komponente "invoke" ausführt, verwendet es intern die folgende Methode, um die Argumente zu transformieren. Die folgende Methode ist in InvokerMessageProcessor Klasse vorhanden. Hier ist "arg" der Wert, den Sie übergeben, und "type" ist die Klasse, der Sie einen Wert zuweisen möchten. Wenn die Anweisung arg.getClass() ausgeführt wird, wird NullPointerException angezeigt, da der Argumentwert null ist. Diese Methode muss gepatcht werden, um nach Null zu suchen und NullPinterException zu vermeiden.

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; 
} 
Verwandte Themen