2016-07-08 8 views
0

私は次のような何かをしようとしています:Muleのinvokeコンポーネントにnullを渡すことはできますか?

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

上記flowVarsがnullの場合もあります。それらが存在する場合、私はそれらをinvokeコンポーネントに渡すことができないようです。私が上でやっていることに何か間違っているのですか?それとも、invokeコンポーネントにnullを渡すことができないのですか?

答えて

1

現在のMule実装では、null値を渡してコンポーネントを呼び出すことはできません。 muleが "invoke"コンポーネントを実行すると、内部的に以下のメソッドを使用して引数を変換します。以下のメソッドは、InvokerMessageProcessorクラスにあります。ここで、 "arg"は渡す値で、 "type"は値を代入するクラスです。 arg.getClass()ステートメントが実行されると、arg値がnullであるため、NullPointerExceptionが表示されます。このメソッドは、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; 
} 
関連する問題