2017-04-12 3 views
0

(最後に質問tldr)Mulesoft Dataweave、LDAPからSOAPへの大規模なメッセージは特定のサイズで切り捨てられます。サイズ制限?

私のMule "Transform Message"コンポーネントのタスクは、LDAPディレクトリサービスからユーザー情報を集め、SOAPを使用して古いデータベースエンドポイントに提供することです。かなり簡単な変換のもの。

メイン!この操作については、エンドポイントに提供する必要があるメッセージのサイズです。ペイロード全体を単一のメッセージで提供する必要があります。そうでなければ、サービスはペイロードの一部ではないすべてのエントリを削除します(明示的な「削除」サービスはありません)。これは、ディレクトリ内のユーザーの数が約2万であり、すべてのメッセージが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:Datawaveトランスフォームメッセージのサイズ制限は約3.38MBですか?

によって引き起こされる例外:com.ctc.wstx.exc.WstxEOFException:予期しないEOFプロローグに

PS:これができれば、私はこれを入力した後dataweaveストリーミングに関するドキュメントを見つけたが、表示されます私の状況を助けてください。さもなければ、私は、データウェイブの外側でメッセージを構築してそれをConsumerに渡すための回避策を実装することを検討しています。

+0

なぜカスタムJavaトランスを使用しないのですか? – Priyanshu

+0

私は確かに、私は自分のクラスを定義して変換とメッセージを行うことができますが、Mule経由で統合する目的はそれほど妥当ではありませんか? – SpartanVXL

答えて

2

Muleバージョン3.8.3を使用していますか? 3.8.4を試してみると、DataWeaveのバグが修正され、場合によっては文字列の区切りが発生しました。

+0

ランタイムを3.8.4に切り替えると、問題が解決されます。ペイロードはもう切り捨てられません。 – SpartanVXL

0

私たちには、あなたのサイズと同じ問題があります。サイズの問題です。 staxを使用してストリーミングを実装しました。