Mulesoft Dataweave,LDAP到SOAP大型邮件截断特定大小。大小限制?

时间:2017-04-12 04:14:54

标签: java soap ldap mule dataweave

(最后问题tldr)

因此,我对Mule“转换消息”组件的任务是从LDAP目录服务中获取大量用户信息,并使用SOAP将其提供给旧的数据库端点。相当简单的改造。

主要!关于此操作是必须提供给端点的消息的大小。必须在单个消息中提供整个有效负载,否则服务将删除不属于有效负载的所有条目(没有明确的“删除”服务)。这是一个问题,因为目录中的用户数量大约为20,000,导致每条消息的大小为5MB左右。

我在Mule Studio中的流程目前适用于从LDAP组件返回的少量用户。从端点成功返回,我可以看到在旧环境中更新的数据。将此应用于更“生产实际”的加载时,Web服务使用者(SOAP)会出现奇怪的异常(意外的EOF /字符)。

message flow

所以我在中间插入了一个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。

2 个答案:

答案 0 :(得分:2)

您使用的是Mule版本3.8.3吗?尝试3.8.4,它修复了DataWeave中的一个错误,在某些情况下导致了字符串的截断。

答案 1 :(得分:0)

我们遇到了类似的问题,与您的问题一样。我们使用stax实现了流式传输。