【问题标题】:Accessing server and mule context objects in Data weave在 Data weave 中访问服务器和 mule 上下文对象
【发布时间】:2017-07-21 02:37:32
【问题描述】:

我正在尝试访问 DW 中的服务器和 mule 版本信息,但是收到以下消息。

DWL 如下所示。如果我在下面犯了任何错误,请告诉我。我已经尝试了两种语法来访问它。

%dw 1.0
%output application/json
---
{
errorType : payload.errorType,
env: server['host'],
host: server['host'],
ip: server['ip'],
javaVersion: server['javaVersion'],
javaVendor: server['javaVendor'],
osName: server['osName'],
osVersion: server['osVersion'],
muleVersion: mule.version,
clusterId: mule.clusterId,
nodeId: mule.nodeId
}

Message               : Exception while executing: 
env: server['host'],
     ^
There is no variable named 'server'.
Payload               : {correlationId=046b6c7f-0b8a-43b9-b35d-6489e6daee91, message=This is the test message to test structured log, errorType=ERROR, applicationName=common wrappers - logging wrapper}
Payload Type          : java.util.HashMap
Element               : /wrapper-logger/processors/1 @ common-wrappers:wrapper-logger.xml:16 (Transform Message)
Element XML           : <dw:transform-message doc:name="Transform Message" metadata:id="38c29630-7d7c-48fc-a692-2407d0105cab">
                        <dw:input-payload doc:sample="sample_data\list_HashMap.dwl"></dw:input-payload>
                        <dw:set-payload>%dw 1.0%output application/json---{errorType : payload.errorType,env: server['host'],host: server['host'],ip: server['ip'],javaVersion: server['javaVersion'],javaVendor: server['javaVendor'],osName: server['osName'],osVersion: server['osVersion'],muleVersion: mule.version,clusterId: mule.clusterId,nodeId: mule.nodeId,applicationName : payload.applicationName,correlationId: payload.correlationId,correlationSequence: "To be decided",correlationGroupSize: 5,timeZone: server.timeZone,timeStamp: server.dateTime,muleFlow: "get-user-record",stackTrace: "A complete Stack Trace",message: payload.message}</dw:set-payload>
                        </dw:transform-message>
--------------------------------------------------------------------------------
Root Exception stack trace:
com.mulesoft.weave.mule.exception.WeaveExecutionException: Exception while executing: 
env: server['host'],
     ^
There is no variable named 'server'.
    at com.mulesoft.weave.mule.exception.WeaveExecutionException$.apply(WeaveExecutionException.scala:10)

【问题讨论】:

    标签: mule-component dataweave


    【解决方案1】:

    您可以定义一个全局函数来获取服务器详细信息并从 dataweave 调用它。

    <configuration doc:name="Configuration">
        <expression-language>
        <import class = "org.mule.util.NetworkUtils"/>
        <import class="java.lang.System" />
            <global-functions>
                def getServerDetails() { 
                String ip = NetworkUtils.getLocalHost().getHostAddress();
                String name = NetworkUtils.getLocalHost().getHostName();
                String osName = System.getProperty("os.name");
                String osVersion = System.getProperty("os.version");
                String javaVersion = System.getProperty("java.version");
                String javaVendor = System.getProperty("java.vendor");
                return [ip, name, osName, osVersion, javaVersion, javaVendor];
                }
            </global-functions>
        </expression-language>
    </configuration>
    

    从数据编织调用

    {
        ip: getServerDetails()[0],
        host: getServerDetails()[1],
        osName: getServerDetails()[2],
        osVersion: getServerDetails()[3],
        javaVersion: getServerDetails()[4],
        javaVendor: getServerDetails()[5]
    }
    

    【讨论】:

    • 谢谢阿贝。这将在日志组件中使用,因此将被大量使用。我可以在日志组件流启动时仅实例化一次吗?日志组件从 VM 队列中读取数据,处理每条消息,并将 VM 队列中的数据与元数据一起记录下来。它会处理很多消息,那么我们怎样才能使它的性能有效呢?我不能将这些类直接导入 DW 标头并使用它吗?再次感谢。
    • 我认为没有办法将 Java 类导入 dataweave,我试过了。你的意思是实例化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2013-12-31
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多