简体   繁体   English

mule 3 XPR 到 dataweave 2.0 迁移

[英]mule 3 XPR to dataweave 2.0 migration

In my case, I'm doing a migration from Mule 3 to Mule 4.就我而言,我正在进行从 Mule 3 到 Mule 4 的迁移。

In Mule 4, xpr files are not supported for xml transformation.在 Mule 4 中,不支持 xpr 文件进行 xml 转换。

So I converted the xpr file to dataweave 2.0.所以我将 xpr 文件转换为 dataweave 2.0。

Most of the logic was solved,but i don't know how to updated the DTOSteps value and DTOCoverage.@FullTermAmt = fullTermAmts.大部分逻辑已解决,但我不知道如何更新 DTOSteps 值和 DTOCoverage。@FullTermAmt = fullTermAmts。

mule 3 XPR: https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr骡子 3 XPR: https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr

My Mule 4 Application: https://github.com/Manikandan99/XPR_conversion/tree/master/xpr_validation我的 Mule 4 应用程序: https://github.com/Manikandan99/XPR_conversion/tree/master/xpr_validation

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

Expected output xml response: https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr预期 output 883812976388 响应: https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr

I've defined all the variables in the Mule 4 application.我已经在 Mule 4 应用程序中定义了所有变量。

Stackoverflow not allow me to post many lines of code, so i provided the github links. Stackoverflow 不允许我发布多行代码,因此我提供了 github 链接。 please go through it.请go通过它。

Please help me to solve it.请帮我解决。

I updated the dataweave code in my mule 4 based on xpr file logic.我根据 xpr 文件逻辑更新了 mule 4 中的数据编织代码。

For auto increment, I've used the AtomicInteger and the inbuilt incrementAndGet() function in dataweave 2.0.对于自动增量,我在 dataweave 2.0 中使用了 AtomicInteger 和内置的 incrementAndGet() function。

I added a dependency to my pom.xml:我向我的 pom.xml 添加了一个依赖项:

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

My dataweave 2.0 code:我的数据编织 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)

Its work's but its not optimized well.它的工作,但没有优化好。

Hope it helpful for some how doing migration on xpr to dataweave.希望它对如何在 xpr 上迁移到 dataweave 有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM