2017-04-12 81 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實現了流媒體。