你可以将null传递给Mule中的一个invoke组件吗?

时间:2016-07-08 00:50:10

标签: mule

我正在尝试以下内容:

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

上面的flowVars可能为null。如果是,我似乎无法将它们传递给调用组件。我上面做的是否有问题,或者你不能将null传递给调用组件是真的吗?

1 个答案:

答案 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;
}