スタンドアロン モードで実行されている Mule ESB 3.3.0 アプリ内には、Maven に依存する jar として含まれている Groovy コードを呼び出すトランスフォーマーがあります。私のグルーヴィーなコードでは、次のように newInstance() 静的メソッドを持つ Java オブジェクトを呼び出しています。
TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null)
Groovy で強化された Class.newInstance() メソッドを呼び出そうとしていると思われるため、Groovy でエラーが発生しています。これは、Mule スタンドアロンの外部で実行している場合には発生しません (テストの説明については、以下の更新を参照してください)。Groovy メソッドではなく Java メソッドを呼び出すにはどうすればよいですか?
これが私のスタックトレースのスニペットです。その呼びかけを見ることができますDefaultGroovyMethods.newInstance()
。javax.xml.transform.TransformerFactory.newInstance(String, ClassLoader)
しかし、代わりにメソッドを呼び出したいです。どのように?
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: javax.xml.transform.TransformerFactory(java.lang.String, null)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1459)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1375)
at org.codehaus.groovy.runtime.InvokerHelper.invokeConstructorOf(InvokerHelper.java:824)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.newInstance(DefaultGroovyMethods.java:18025)
更新: ランタイム環境に関する詳細情報。Groovy コードは jar ファイルとしてパッケージ化され、Mule ESB アプリケーションから呼び出されます。Mule 3.3.0 には groovy-all-1.8.6.jar が同梱されています。
更新 2: さらにいくつかのテストを行い、Groovy クラスを jar ファイルにコンパイルして、スタンドアロンの Java プログラムから呼び出しましたが、この問題は発生しませんでした。これは、Mule 3.3.0 スタンドアロン環境から実行されている問題であると私は信じています。この投稿にミュールタグを追加しています。Mule の専門家が何が起こっているのか教えてくれることを願っています。