2017-11-06 16 views
0

私は、次のMEL機能を持っている:アップグレード後MEL機能の予期しない動作3.8.1

%var mySomething = createSomething("foo") 

これが正常に動作している:DWLファイルから呼び出されている

def createSomething(foo){ 
    if (org.springframework.util.StringUtils.isEmpty(foo)){ 
     return org.apache.commons.lang.StringUtils.remove(java.util.UUID.randomUUID().toString(), '-'); 
    } 
    if (foo.toString().length() <= 32){ 
     return foo; 
    } 
    String fooWithoutHyphens = org.apache.commons.lang.StringUtils.remove(foo.toString(), '-'); 
    if (fooWithoutHyphens.length() <= 32){ 
     return fooWithoutHyphens; 
    } 
    return foo.toString().substring(0, 32); 
} 

Muleランタイムで3.7.2。

しかしミュールランタイム3.8.1にアップグレードした後、私は次の例外受け取る:私は関数の第二引数として何を提供する場合、例えば、

com.mulesoft.weave.mule.exception.WeaveExecutionException: Exception while executing: 
Unknown 
Not enough arguments (1) for function with parameters (foo, 

fooWithoutHyphens).. 
    at com.mulesoft.weave.mule.exception.WeaveExecutionException$.apply(WeaveExecutionException.scala:12) 
    at com.mulesoft.weave.mule.WeaveMessageProcessor.execute(WeaveMessageProcessor.scala:121) 
    at com.mulesoft.weave.mule.WeaveMessageProcessor.process(WeaveMessageProcessor.scala:67) 
    at com.mulesoft.weave.mule.WeaveMessageProcessor$$FastClassByCGLIB$$216b1542.invoke(<generated>) 

%var mySomething = createSomething("foo", 0) 

例外は発生しませんが、機能が期待通りに機能しないことがわかります。

この動作の理由とその修正方法を教えてください。

UPDATE:以下の一部の場合:

String fooWithoutHyphens = org.apache.commons.lang.StringUtils.remove(foo.toString(), '-'); 
if (fooWithoutHyphens.length() <= 32){ 
    return fooWithoutHyphens; 
} 

を削除するかに置き換えられます。

if (org.apache.commons.lang.StringUtils.remove(foo.toString(), '-').length() <= 32){ 
     return org.apache.commons.lang.StringUtils.remove(foo.toString(), '-'); 
    } 

例外がスローされません。宣言された文字列fooWithoutHyphensが引数として扱われるようになったようですが、その理由はわかりません。

+0

奇妙なことに、例外として、あなたの関数を 'createSomething(foo、fooWithoutHyphens)'として定義しましたが、別の定義が他の場所に存在しないと確信していますか? –

+0

@Pierre B.当初は同じことをしましたが、私は他の出来事を見つけることができませんでした。私は再び確認します。 –

+0

@Pierre B.これはこの機能です。私の質問の更新部分を見てください。 –

答えて

1

公式の文書は、グローバルMEL関数の使用に関して簡潔であり、どこにもString fooWithoutHyphens = ...のような変数宣言は言及されていません。関連するドキュメントは、3.8のMEL DocsおよびDataWeave docsにあります。

あなたの例がMule 3.7で動作したとしても、それが文書化されていないと考えて、それ以降のバージョンで動作することを保証するものではありません。私は、あなたの周りの仕事があなたの例で使用される良い方法かもしれないと思う、またはグローバルMEL関数を使用してより複雑な変換が必要な場合は、最善の方法ではないかもしれません。

関連する問題