【问题标题】:Using p() function in Transform Message in Mule Plugin在 Mule 插件的转换消息中使用 p() 函数
【发布时间】:2021-02-22 13:08:48
【问题描述】:

我在我的 Project-A 中添加了一个 mule 插件作为依赖项,在 mule-plugin 中我定义了一个转换消息,其中我使用 p('property_name') 引用插件中定义的属性文件中的值.但它抛出了一个错误。是否可以在 mule 插件中定义 p() 并将 mule 插件添加为项目中的依赖项并期望它可以正常工作。如果没有,是否有任何解决方法?

【问题讨论】:

  • 嗨阿梅尔。您是否使用 XML SDK 来构建插件?使用具有默认值的全局连接属性而不是在插件中放置具有属性的文件怎么样?
  • 或者您是否将应用程序打包为插件以在另一个应用程序中重用配置?
  • 我正在将一个应用程序打包为插件,以便在另一个应用程序中重用配置

标签: mule dataweave anypoint-studio mule4


【解决方案1】:

您可以尝试以下 dataweave 构造来检索转换中的属性值:

%dw 2.0
output application/java
---
{
  myPropValue: Mule::p("my.property.name")
}

【讨论】:

  • 我有一个 mule-plugin 插件里面有一个转换消息,在那个转换消息中我使用 p('property_name'),这个 'property_name' 在 mule 的属性文件中定义-插入。现在我将此 mule-plugin 添加为我的 Project-A 的依赖项。现在,当我在调试项目-A 时控制进入 mule-plugin 的流程时,p('property_name') 被解析为 null。
  • 您可以尝试在项目-A 中定义属性值,看看它是否按预期解析?如果它正确解析,则需要进一步分析以了解为什么没有从插件加载该属性。一个问题:是否可以让用户通过连接器或在操作级别设置此属性?
【解决方案2】:

不要在转换 (DataWeave) 操作中使用属性,而是在调用转换之前使用属性占位符语法(即"${property.name}")为属性设置一个变量。

即使这样可行,您也应该重新考虑应用程序的设计。使用插件中定义的属性可能会与应用程序定义的属性冲突。

【讨论】:

    【解决方案3】:

    有趣的事情 - 甚至 Mule 也是一种“解释”方法 - 它在处理内容后立即静态地执行。

    查看您的日志,了解应用程序是如何加载和实例化的——您会看到模块、流程和插件以某种顺序加载。它主要是基于 Mule 模块的字母顺序。

    如果模块 A 使用在模块 B 中定义的属性 - 它将为空,因为加载 A 时 B 尚不存在,因此根本没有属性。

    简而言之 - 如果顺序不适合您,请查看已加载的模块并重命名 XML 文件。

    https://simpleflatservice.com/mule4/Properties.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多