2017-06-22 112 views
1

我已经定义处理我的应用程序的资源束的弹簧豆如下:骡dataweave调用弹簧豆

<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:变换消息,我无法弄清楚如何做到这一点。我试图用一个全球性的功能,但我没有得到如何访问我的“renewMobileEngagementApiMessages”对象引用,然后调用“的getMessage”的方法。

任何帮助将是伟大的。提前致谢!

+0

你为什么不能定义这个贯通性占位https://docs.mulesoft.com/mule-user-guide/v/3.8/configuring-properties#properties-files,然后使用$ {访问属性之一.. } dataweave之外或作为'p('propName')'在dataweave中? –

+0

因为我需要国际化。我有一个每种语言的属性文件,我使用spring资源包访问它们。 –

回答

0

只是把一个flowVar消息或有效载荷与MEL的dataweave组件之前和访问有效载荷/ flowVar在dataweave。

这里是我加载载荷我的Spring bean一个例子之前,我访问我的dataweave:

<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> 
+0

谢谢但是这正是我想避免的解决方案。我需要做这在多个地方的时候很多的,这是不实际的把我翻译成每次瓦尔。 –

0

您可以在流量变量属性存储dataweave组件之前和dataweave称之为flowVars使用flowVars.variableName

0

可以很容易地与操作者访问任何系统或弹簧特性的 'p()'

实施例:

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

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