(最后问题tldr)
因此,我对Mule“转换消息”组件的任务是从LDAP目录服务中获取大量用户信息,并使用SOAP将其提供给旧的数据库端点。相当简单的改造。
主要!关于此操作是必须提供给端点的消息的大小。必须在单个消息中提供整个有效负载,否则服务将删除不属于有效负载的所有条目(没有明确的“删除”服务)。这是一个问题,因为目录中的用户数量大约为20,000,导致每条消息的大小为5MB左右。
我在Mule Studio中的流程目前适用于从LDAP组件返回的少量用户。从端点成功返回,我可以看到在旧环境中更新的数据。将此应用于更“生产实际”的加载时,Web服务使用者(SOAP)会出现奇怪的异常(意外的EOF /字符)。
所以我在中间插入了一个File组件来转发检查发送给Consumer的消息。消息确实在它完成之前被切断,这是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:Dataweave转换邮件的大小限制是否大约为3.38MB?
由以下原因引起的异常:com.ctc.wstx.exc.WstxEOFException:prolog中意外的EOF
PS:我在输入数据后找到了关于数据编辑流的文档,看看这是否有助于我的情况。否则,我正在考虑实施一种解决方法,在dataweave之外构造消息,然后将其传递给Consumer。
答案 0 :(得分:2)
您使用的是Mule版本3.8.3吗?尝试3.8.4,它修复了DataWeave中的一个错误,在某些情况下导致了字符串的截断。
答案 1 :(得分:0)
我们遇到了类似的问题,与您的问题一样。我们使用stax实现了流式传输。