Mulesoft Dataweave,LDAP to SOAP大消息以特定大小截断。大小限制?
因此,我对Mule“Transform Message”组件的任务是从LDAP Directory Service获取一堆用户信息,并使用SOAP将它提供给旧数据库端点。相当简单的变换东西。
主要!关于此操作是必须提供给端点的消息的大小。整个有效负载必须在单个消息中提供,否则该服务将删除不是有效负载一部分的所有条目(没有明确的“删除”服务)。这是一个问题,因为目录中的用户数量大约为20,000,导致每条消息的大小都是5MB左右。
我在Mule Studio中的流程目前适用于LDAP组件返回的用户数量较少。从端点成功返回,我可以看到在旧环境中更新的数据。当将其应用于更符合“生产逼真”的负载时,Web服务使用者(SOAP)会出现奇怪的异常(意外的EOF /字符)。
所以我在中间插着文件组件dumpcheck正被发送给消费者的信息。这条消息在它完成之前确实被切断了,这是EOF的来源。
这是Dataweave中的转换脚本。
%output application/xml
%namespace ns0 test.namespace.com
---
{
ns0#updateContact: {
ns0#ContactType: "Primary",
ns0#ContactDetails: {
(payload map {
(ns0#ContactDetailElem: {
ns0#personID: $.personID,
ns0#contactDetail: $.desc
}) when $.personID != null
})
}
}
}
期望的输出低于并成功发生在较小的有效载荷下。
<?xml version='1.0' encoding='windows-1252'?>
<ns0:updateContact xmlns:ns0="test.namespace.com">
<ns0:ContactType>Primary</ns0:ContactType>
<ns0:ContactDetails>
<../>
<ns0:ContactDetailElem>
<ns0:personID>{Integer}</ns0:personID>
<ns0:contactDetail>{String.detail}</ns0:contactDetail>
</ns0:ContactDetailElem>
<../>
</ns0:ContactDetails>
</ns0:updateContact>
在大载荷将发生以下情况在文件
<?xml version='1.0' encoding='windows-1252'?>
<ns0:updateContact xmlns:ns0="test.namespace.com">
<ns0:ContactType>Primary</ns0:ContactType>
<ns0:ContactDetails>
<../>
<ns0:ContactDetailElem>
<ns0:personID>{Integer}</ns0:personID>
<ns0:contactDetail>{String.detail}</ns0:contactDetail>
</ns0:ContactDeta
它看起来像一个错字,但看起来是什么样子被削减的消息时,它可以完成之前结束。文件大小始终停止在3,553,099个字符。当然这会导致流失,因为xml是无效的。
然后问题是Dataweave转换器可以创建的消息大小有限制吗?如果不是合法的错误,而是配置问题,我会在哪里找到这个设置?我看了一下,但找不到遇到此类问题的人。
TL; DR:Do Dataweave变换消息的大小限制在3.38MB左右?
异常造成的:com.ctc.wstx.exc.WstxEOFException:在序言意外结束
PS:我发现在dataweave流的文档打字后,会看到,如果这能帮助我的情况。否则,我正在考虑实施一种解决方法,在数据织物之外构建消息,然后将消息传递给消费者。
为什么不使用自定义java变压器? – Priyanshu
我的意思是肯定的,我可以定义我自己的类来做转换和消息,但它有点失败了通过Mule集成的目的不是吗? – SpartanVXL