当前位置: 首页 > 知识库问答 >
问题:

骡子3 XPR到dataweave 2.0迁移

应翰飞
2023-03-14

在我的例子中,我正在从Mule 3迁移到Mule 4。

在Mule 4中,xml转换不支持xpr文件。

所以我把xpr文件转换成了dataweave 2.0。

大多数逻辑都已解决,但我不知道如何更新DTOSteps值和DTOCoverage.@FullTermAmt=完整TermAmts。

骡子 3 经验值: https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr

我的Mule 4应用:https://github . com/manikandan 99/XPR _转换/tree/master/xpr_validation

输入 xml 请求:https://github.com/Manikandan99/XPR_conversion/blob/master/xml_request.xml

预期输出xml响应:https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr

我已经定义了Mule 4应用程序中的所有变量。

Stackoverflow不允许我发布多行代码,所以我提供了github链接。请通过它。

请帮我解决一下。

共有1个答案

龙成仁
2023-03-14

我根据 xpr 文件逻辑更新了 mule 4 中的数据编织代码。

对于自动增量,我在dataweave 2.0中使用了AtomicInteger和内置的incrementAndGet()函数。

我在pom.xml中添加了一个依赖项:

<dependency>
<groupId>org.mule.module</groupId>
<artifactId>mule-java-module</artifactId>
<version>1.2.5</version>
<classifier>mule-plugin</classifier>
</dependency>

我的dataweave 2.0代码:

%dw 2.0
import java!java::util::concurrent::atomic::AtomicInteger
var processFlag = 0
var stepOrder = 1
var subStepOrder = 1
var subSubStepOrder = 1
var multiChar = "X"
var coverageCd = "LIAB"
var fullTermAmts = vars.CISGOutput.Premium.FinalLiabPrem.Exposure.LIAB
var startingValue = AtomicInteger::new(0)
var instartingValue = AtomicInteger::new(0)
output application/xml
fun soutincrement() = Java::invoke('java.util.concurrent.atomic.AtomicInteger', 'incrementAndGet()', startingValue, {})
fun sinincrement() = Java::invoke('java.util.concurrent.atomic.AtomicInteger', 'incrementAndGet()', instartingValue, {})
fun transformSteps(x, index)=
    x filterObject ($$ as String != "DTOSteps") ++
    {
                    DTOSteps: transformNewSteps()
                    
    }
fun transformNewSteps()=
    {
        DTOStep @(Order:soutincrement(), Name:"Base Premium", Operation:"=", Factor: vars.CISGOutput.Factors.LIAB.BasePrem, Value: vars.CISGOutput.Factors.LIAB.BasePrem): DTOSteps: transformChildSteps(),
        DTOStep @(Order:soutincrement(), Name:"Large Premium Discount Plan", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.LPDP, Value: vars.CISGOutput.Factors.LIAB.LPDP): null,
        DTOStep @(Order:soutincrement(), Name:"IRPM", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.IRPM, Value: vars.CISGOutput.Factors.LIAB.IRPM): null,
        DTOStep @(Order:soutincrement(), Name:"Term Factor", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.Term, Value: vars.CISGOutput.Factors.LIAB.Term): null
    }
fun transformChildSteps()=
    {
        DTOStep @(Order:sinincrement(), Name:"Exposure", Operation:"=", Factor: vars.CISGOutput.Factors.LIAB.Exposure, Value: vars.CISGOutput.Factors.LIAB.Exposure): null,
        DTOStep @(Order:sinincrement(), Name:"Base Rate", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.BaseRate, Value: vars.CISGOutput.Factors.LIAB.BaseRate): null,
        DTOStep @(Order:sinincrement(), Name:"Territory", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.Terr, Value: vars.CISGOutput.Factors.LIAB.Terr): null,
        DTOStep @(Order:sinincrement(), Name:"ILF", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.Limit, Value: vars.CISGOutput.Factors.LIAB.Limit): null,
        DTOStep @(Order:sinincrement(), Name:"Med Pay", Operation:multiChar, Factor: vars.CISGOutput.Factors.LIAB.MedPay, Value: vars.CISGOutput.Factors.LIAB.BasePrem): null                                   
    }

fun transformCoverage(x, index)=
    x match {
      case is Object -> x mapObject 
        if ($$ as String == "DTOCoverage" and $$.@CoverageCd == "LIAB")
            { 
                DTOCoverage @(( $$.@ - "FullTermAmt" ), FullTermAmt: fullTermAmts): 
                    transformSteps($, index)
            }
        else 
            (($$): transformCoverage($, index+1)) 
      else -> $
    }
---
transformCoverage(payload,1)

它的工作,但它没有优化好。

希望它对如何在 xpr 上迁移到数据编织有所帮助。

 类似资料:
  • 我是骡子和JMS的新手。只是试图弄清楚如何使用连接器添加JMSendpoint。是否提供了 Mule 提供的任何 JMS 实现,或者我是否需要使用外部 JMS 提供程序。

  • 我在部署接口时收到以下错误 组织.xml.sax.SAXParse异常: cvc-complex-type.2.4.a: 发现无效内容以元素 'sfdc:查询-single' 开头。“{”http://www.mulesoft.org/schema/mule/core“:注释、”http://www.mulesoft.org/schema/mule/core“:抽象消息处理器、”http://ww

  • 我在Mule中定义了以下YAML属性文件。 YAML属性文件 我知道要获得名称,我应该使用“#[p('table.customers.name')]。 我想知道的是,有没有任何方法可以通过传递.name来获取密钥,比如table。键或表。$。我的意思是,如果我通过customerID,我应该得到关键的“客户”。类似地,如果我传递orderDateMin,orderDate Max,它应该返回“or

  • 我必须从来自excel的输入数据做第一级标准化。【输入Excel】【1】。 现在输出应类似于[输出文件][2]。我曾尝试将MEL(将方法定义为全局配置)与Dataweave结合使用。在dataweave内部,我尝试调用上面定义的方法作为全局配置。由于生成的文件为空,因此此方法不起作用。有人能提出一个更好的方法或这个方法中的问题吗。下面是代码@Manik:

  • 如何在mule dataweave中编写嵌套循环 我有这样的代码, 但它给出的错误,我无法在此添加其他条件。我想在其他部分分配 $ 值

  • 我可以在Mule Esb中看到两个不同的对象-消息和有效负载。但我无法理解两者的实际特征。有人能帮我理解一下吗?。