mule 3 XPR 到 dataweave 2.0 迁移
mule 3 XPR to dataweave 2.0 migration
就我而言,我正在从 Mule 3 迁移到 Mule 4。
在 Mule 4 中,不支持 xpr 文件 进行 xml 转换。
所以我将 xpr 文件转换为 dataweave 2.0。
大部分逻辑都解决了,但我不知道如何更新 DTOSteps 值和 DTOCoverage。@FullTermAmt = fullTermAmts。
骡子 3 XPR:https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr
我的 Mule 4 应用程序:https://github.com/Manikandan99/XPR_conversion/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 应用程序中定义了所有变量。
Whosebug 不允许我 post 多行代码,所以我提供了 github 链接。请通过它。
请帮我解决一下
我根据 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>
我的数据编织 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 迁移到 dataweave 有所帮助。
就我而言,我正在从 Mule 3 迁移到 Mule 4。
在 Mule 4 中,不支持 xpr 文件 进行 xml 转换。
所以我将 xpr 文件转换为 dataweave 2.0。
大部分逻辑都解决了,但我不知道如何更新 DTOSteps 值和 DTOCoverage。@FullTermAmt = fullTermAmts。
骡子 3 XPR:https://github.com/Manikandan99/XPR_conversion/blob/master/responseCISGExposure.xpr
我的 Mule 4 应用程序:https://github.com/Manikandan99/XPR_conversion/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 应用程序中定义了所有变量。
Whosebug 不允许我 post 多行代码,所以我提供了 github 链接。请通过它。
请帮我解决一下
我根据 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>
我的数据编织 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 迁移到 dataweave 有所帮助。