我正在尝试以下内容:
<invoke object-ref="importsManager" method="logImportError" methodArguments="#[flowVars['jobConfig']],#[flowVars.['importRecord']], #[exception], 'ERROR'" doc:name="Log Import Error"/>
上面的flowVars可能为null。如果是,我似乎无法将它们传递给调用组件。我上面做的是否有问题,或者你不能将null传递给调用组件是真的吗?
答案 0 :(得分:1)
使用当前的Mule实现,您将无法传递空值来调用组件。当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;
}