2017-04-12 53 views
0

Mulesoft Dataweave,LDAP to SOAP大消息以特定大小截断。大小限制?

因此,我对Mule“Transform Message”组件的任务是从LDAP Directory Service获取一堆用户信息,并使用SOAP将它提供给旧数据库端点。相当简单的变换东西。

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

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

message flow

所以我在中间插着文件组件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流的文档打字后,会看到,如果这能帮助我的情况。否则,我正在考虑实施一种解决方法,在数据织物之外构建消息,然后将消息传递给消费者。

+0

为什么不使用自定义java变压器? – Priyanshu

+0

我的意思是肯定的,我可以定义我自己的类来做转换和消息,但它有点失败了通过Mule集成的目的不是吗? – SpartanVXL

回答

2

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

+0

将运行时切换到3.8.4可解决问题。有效载荷不再被截断。 – SpartanVXL

0

我们有一个类似的问题,与您的大小相同。我们使用stax实现了流媒体。