首页 > 解决方案 > 如何在 mule dataweave 中外部化重复的 SOAP 响应属性?

问题描述

我正在 Dataweave 中构建一个 SOAP 响应。响应的某些组件(ESBHeader)在多个流中重复。我还需要为每个请求设置状态代码和消息。

我需要一种通用/通用的方式将这些重复的行加载到一个通用的 dwl 文件中以进行代码优化。我该怎么做?

flow1 的示例响应 Message1

{
        ns1#ResponseMsg1: {
            ns0#ESBHeader: {
                ns0#InitialContext @(CreationTime: flowVars.req.ResponseMsg1.ESBHeader.InitialContext.@CreationTime, TrackingID: flowVars.req.ResponseMsg1.ESBHeader.InitialContext.@TrackingID): {
                    ns0#Actor @(Component: flowVars.req.ResponseMsg1.ESBHeader.InitialContext.Actor.@Component , Operation: flowVars.req.ResponseMsg1.ESBHeader.InitialContext.Actor.@Operation): null
                },
                ns0#MessageContext  : {
                    ns0#Actor @(Component: flowVars.req.ResponseMsg1.ESBHeader.MessageContext.Actor.@Component  , Operation: flowVars.req.ResponseMsg1.ESBHeader.MessageContext.Actor.@Operation): null
                },
                ns0#Status: {
                    ns0#Code: "Success",
                    ns0#Message: ""
                }
            },
            ns1#var1: flowVars.var1
        }
    }

flow2 的示例响应 Message2

{
        ns1#ResponseMsg2: {
            ns0#ESBHeader: {
                ns0#InitialContext @(CreationTime: flowVars.req.ResponseMsg2.ESBHeader.InitialContext.@CreationTime, TrackingID: flowVars.req.ResponseMsg2.ESBHeader.InitialContext.@TrackingID): {
                    ns0#Actor @(Component: flowVars.req.ResponseMsg2.ESBHeader.InitialContext.Actor.@Component , Operation: flowVars.req.ResponseMsg2.ESBHeader.InitialContext.Actor.@Operation): null
                },
                ns0#MessageContext  : {
                    ns0#Actor @(Component: flowVars.req.ResponseMsg2.ESBHeader.MessageContext.Actor.@Component  , Operation: flowVars.req.ResponseMsg2.ESBHeader.MessageContext.Actor.@Operation): null
                },
                ns0#Status: {
                    ns0#Code: "Failure",
                    ns0#Message: ""
                }
            },
            ns1#var1: flowVars.var1,
            ns1#var2: flowVars.x.var2
        }
    }

非常感谢任何指针。

非常感谢。

标签: soapmuleintegrationdataweavesoapheader

解决方案


如果您使用 Mule 4,很容易创建和导入DataWeave 模块

在 Mule 3 中有一个类似的方法,但它并不真正受支持,您可能会遇到一些问题。从您的脚本来看,它看起来像 Mule 3。这篇文解释了该方法。


推荐阅读