【问题标题】:mule dataweave invoking a spring beanmule dataweave 调用 spring bean
【发布时间】:2017-11-26 05:54:12
【问题描述】:

我定义了一个 spring bean 来处理我的应用程序的资源包,如下所示:

<spring:bean id="renewMobileEngagementApiMessages" class="org.springframework.context.support.ResourceBundleMessageSource">
    <spring:property name="basename" value="messages/renew-mobile-engagement-api-messages"></spring:property>
    <spring:property name="defaultEncoding" value="UTF-8"></spring:property>
    <spring:property name="fallbackToSystemLocale" value="false"></spring:property>
</spring:bean>

在我的应用程序中,我可以在变量或记录器对象中访问它,例如使用以下 MEL 命令:

#[app.registry.renewMobileEngagementApiMessages.getMessage('error.clic_unavailable.description', null, sessionVars.REQUESTED_LOCALE)]

它按预期正确返回我的属性,直到这里没有问题。

问题是现在我需要在 dw:transform-message 中访问我的属性,但我不知道该怎么做。我尝试使用全局函数,但不知道如何访问我的“renewMobileEngagementApiMessages”对象引用然后调用“getMessage”方法。

任何帮助都会很棒。提前致谢!

【问题讨论】:

  • 为什么不能通过属性占位符docs.mulesoft.com/mule-user-guide/v/3.8/… 定义它,然后在dataweave 外部使用${..} 或在dataweave 内部使用p('propName') 访问属性?
  • 因为我需要国际化。我对每种语言都有一个属性文件,我使用 spring 资源包访问它们。

标签: mule resourcebundle anypoint-studio dataweave


【解决方案1】:

只需将消息放入带有 MEL 的 dataweave 组件之前的 flowVar 或有效负载中,然后访问您的 dataweave 中的有效负载/flowVar。

这是一个示例,在我访问我的 dataweave 之前,我将 spring bean 加载到有效负载中:

<mule>
    <spring:beans>
        <spring:bean id="foo" name="foo" class="java.lang.String">
            <spring:constructor-arg value="this is foo." />
        </spring:bean>
    </spring:beans>

    <flow name="test-flow">
        <set-payload value="#[app.registry.foo]" doc:name="Set Payload"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload>
<![CDATA[%dw 1.0
%output application/xml
---
{
    foo: payload
}]]>
</dw:set-payload>
        </dw:transform-message>
    </flow>
</mule>

【讨论】:

  • 谢谢,但这正是我想要避免的解决方案。我需要在多个地方多次执行此操作,每次都将我的翻译放入 vars 是不切实际的。
【解决方案2】:

您可以将属性存储在 dataweave 组件之前的流变量中,并使用flowVars.variableNamedataweave 中调用此flowVars

【讨论】:

    【解决方案3】:

    您可以使用运算符“p()”轻松访问任何系统或 Spring 属性

    例子:

    %dw 1.0
    %output application/json
    ---
    {
        mulehome: p('mule.home')
    }
    

    【讨论】:

      【解决方案4】:

      您可以在 DataWeave 处理您的转换时引用服务器中存在的任何属性(系统或 Spring),为此请使用 p('prop_name') 函数。

      【讨论】:

        猜你喜欢
        • 2016-01-12
        • 1970-01-01
        • 2016-01-21
        • 2020-04-13
        • 1970-01-01
        • 2016-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多