【问题标题】:Migrating Mule 3.6 to Mule 3.7 NullPointerException calling method with null payload将 Mule 3.6 迁移到 Mule 3.7 NullPointerException 调用方法,负载为空
【发布时间】:2016-06-21 09:36:40
【问题描述】:

我正在将我的 mule 项目从 3.6 版迁移到 3.7 版。在 3.6 版中,我能够使用调用程序调用将有效负载作为参数传递的方法。

现在在 3.7 版中,如果我这样做,我会得到 NullPointerException,当有效负载为 null,在类 InvokerMessageProcessor,第 272 行,执行以下测试时:

if (!(type.isAssignableFrom(arg.getClass()))) 

因为当payload为nullarg就是null

这是一个错误吗?

【问题讨论】:

    标签: mule mule-el


    【解决方案1】:

    事实上,Mule 处理 emptinessnull 值的方式发生了变化,从 Mule 3.6+ 到 3.7+,这就是过去在 Mule 中的验证方式3.6.x 用于不同类型的处理器和组件:

    • MEL(骡子表达语言):Payload == null:假

    • MEL:Payload is NullPayload:真

    • MEL:Payload is org.mule.transport.NullPayload:真

    • Groovy:Payload instanceof org.mule.transport.NullPayload:是的

    • Groovy:Payload == null:假

      现在,在 Mule 3.7.x 中:

    • MEL:Payload == null:真

    • MEL:Payload is NullPayload:假

    • MEL:Payload is org.mule.transport.NullPayload:假

    • Groovy:Payload instanceof org.mule.transport.NullPayload:是的

    • Groovy:Payload == null:假

    【讨论】:

    • 我知道发生了变化,但我想知道 MuleSoft 是否必须更正他们的代码,因为它在类 InvokerMessageProcessor 中发生了 NullPointerException
    • 不,这不会发生,我提供给你的答案是我直接从 Mulesoft 支持那里得到的,因为我之前遇到过同样的情况,对他们来说,这是对功能的改进。
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多