我尝试了解 Mulesoft Dataweave 2.0 中的归约函数。
预期结果:
{
"dev": "1",
"test": "2",
"uat": "3",
"prod": "4"
}
Run Code Online (Sandbox Code Playgroud)
我的数据编织代码:
%dw 2.0
var invar = [
{"id": "1", "name": "dev"},
{"id": "2", "name": "test"},
{"id": "3", "name": "uat"},
{"id": "4", "name": "prod"}
]
output application/json
---
// invar reduce() ??? requirment: it must be done with reduce function.
Run Code Online (Sandbox Code Playgroud)
谢谢
当我用“”替换所有有效负载 env 和 xmlns 时,我看到类似“当文档没有根时尝试写入 END_DOCUMENT”的错误。
它抛出错误:
Message : "Trying to write END_DOCUMENT when document has no root (ie. trying to output empty document, while writing Xml.
Trace:
at main (Unknown)" evaluating expression: "payload.replaceAll("env:","").replaceAll("xmlns=\"http://decisionresearch.com/RateMaker\"","")".
Element : map_requestFlow/processors/0 @ map_request:map_request.xml:13 (Set Payload)
Element DSL : <set-payload value="#[payload.replaceAll("env:","").replaceAll("xmlns=\"http://decisionresearch.com/RateMaker\"","")]" doc:name="Set Payload" doc:id="7db57e88-dbd4-4a09-ba05-ea37fb9586fc"></set-payload>
Error type : MULE:EXPRESSION
FlowStack : at map_requestFlow(map_requestFlow/processors/0 @ map_request:map_request.xml:13 (Set Payload))
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
Run Code Online (Sandbox Code Playgroud)
骡子流:
<flow name="map_requestFlow" doc:id="21d0d652-3766-47ed-95aa-a451f62c5776" >
<http:listener doc:name="Listener" doc:id="7312114b-2857-40b3-98cd-f52b628b3a28" config-ref="HTTP_Listener_config" path="/map"/>
<set-payload …Run Code Online (Sandbox Code Playgroud) 我使用m子安全属性在属性文件中有一个加密值,例如:
password = !#$#%%%f (encrypted)
Run Code Online (Sandbox Code Playgroud)
我想基于请求中传递的输入参数,动态地使用dataweave中的p函数获取未加密的值
我使用这种语法获得加密的值
Mule::p(vars.password)
Run Code Online (Sandbox Code Playgroud)
我如何在此之上使用secure ::语法解密值
{
password: Mule::p('secure::vars.password')
}
Run Code Online (Sandbox Code Playgroud)
有人可以在Mule 4中告诉正确的方法吗
我想了解 mule 中默认标头的概念。我想从 mule 中调用 get api 调用[代码是用 java 编写的],并且我在标头中发送了一个令牌,但是我在默认标头中设置了令牌在 http 请求配置中。
<http:default-headers >
<http:default-header key="testing" value="#[vars.authorizationHeader]" />
</http:default-headers>
Run Code Online (Sandbox Code Playgroud)
我的 Java 代码能否从属性中读取此标头?
请求 Json 如下所示:-
{
"eNumber": 8506493,
"details": [
{
"id":12345,
"name": xyz123
}
]
}
Run Code Online (Sandbox Code Playgroud)
作为要求的一部分,我需要检查“id”或“name”字段必须存在的“details”数组。如果存在“id”字段,则“name”是非强制性的。如果存在“name”字段,则“id”是非强制性的。如果不满足则抛出错误。
我尝试了几个选项,使用过滤细节数组并检查验证组件中过滤数组的大小。它似乎工作不顺利。如果有人有更好的解决方案。请在这里分享。
我最近意识到在 DW 2.0 中使用类泛型表示法来表示多态类型。
下面的例子
%dw 2.0
output application/dw
fun id1(a) = a
fun id2(a: Any) = a
fun id3<T>(a: T) = a
var id4 = <T>(a: T) -> a
---
{
"d1": id1,
"d2": id2,
"d3": id3,
"d4": id4,
r1: id1(10),
r2: id2(10),
r3: id3(10),
r4: id4(10)
}
Run Code Online (Sandbox Code Playgroud)
说明这些函数的签名和语义是相同的。
这就引出了一个问题,如果有的话,这些定义之间有什么区别?你会推荐哪一个?
最后,确认我的假设,即 DW 2.0 借用了在 OO 语言中发现的这种类似泛型的语法来支持显式多态类型。
注意:我确实使用application/dw过以便在从 Anypoint Studio 运行预览时查看函数的信号
蒂亚!
inputArray = ["cat", "bat", "mat"]
configuredArray = ["dog", "elephant", "fox", "cat"]
Run Code Online (Sandbox Code Playgroud)
inputArray和configuredArray是可变长度的字符串数组。
如果 中的任何一个元素inputArray存在,configuredArray我想设置一个 bloolean 标志。我该怎么写Dataweave 2.0?提前致谢。
我有 50,000 多个 json 对象埋在嵌套数组中。我想把它们拉出来,这样它们就可以在单个数组中。而且这些嵌套数组是相当随机的,没有模式。例如
[ [ [ [ [ {"a":1 } ], [ {"b":2 } ] ], [[{"c":3 }]] ] ], [{"d":4 }] ]
必须转换为
[{"a":1},{"b":2},{"c":3},{"d":4}]
使用 Dataweave 2.0
使用过展平,但看起来它的功能不正确。
我需要解压缩文件。目前,这是在 Mule 3.x 中用 Java 代码完成的,但需要在 Mule 4 中解压文件,我们如何在 Mule 4 中实现这一点?
尝试在 Mule 4 中使用相同的 Mule 3 Java 代码,但 Mule 4 不支持某些方法/函数。有任何代码片段/建议吗?
我正在尝试在 mule 中调用一个 java 函数。我将有效负载转换为对象并将其传递到函数中。创建的 Java 对象的名称是req。方法 validate 接受一个 Java Object Of type Example
public HashMap<String, String> validate(Example req) {.......}
Run Code Online (Sandbox Code Playgroud)
示例类如下所示:
Class Example{
String key1;
String key2;
String key3;
}
Run Code Online (Sandbox Code Playgroud)
XML 配置如下所示:
<java:new constructor="Example(java.lang.String,java.lang.String,java.lang.String)" doc:name="New Example" doc:id="6a1d5c8c-a1f0-446e-ab49-99a21fbbf4b9" class="Entities.Example" target="req">
<java:args ><![CDATA[#[{key1 :payload.key1,key2: payload.key2, key3:payload.key3}]]]></java:args>
</java:new>
<java:invoke doc:name="Invoke" doc:id="dd5f6534-06c8-4f4d-b3aa-c634a629898e" class="Implementations.ValidationServiceImpl" instance="#[vars.validator]" method="validate(Entities.Example)">
<java:args ><![CDATA[#[vars.req]]]></java:args>
</java:invoke>
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它不作为一个整体传递 java 对象。