在我的Mule ESB 3.3.0應用程序中,以獨立模式運行,我有一個轉換器調用Groovy代碼,作爲依賴Maven的jar包。在我的Groovy代碼,我打電話,有一個的newInstance()靜態方法的Java對象,就像這樣:當在Mule中運行編譯的Groovy代碼時,不能調用Java newInstance()而不是Groovy的調用ESB
TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null)
這導致在Groovy錯誤,因爲我認爲它試圖調用的Groovy增強Class.newInstance( ) 方法。在Mule獨立運行時不會發生這種情況(請參閱下面的更新以瞭解測試的描述)。我怎樣才能讓它調用Java方法而不是Groovy呢?
這是我的堆棧跟蹤的一個片段。你可以看到它的呼叫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。
UPDATE2: 我做了一些進一步的測試,並將一個Groovy類編譯成一個jar文件,並從獨立的Java程序中調用它,但沒有遇到此問題。這讓我相信這是一個從Mule 3.3.0獨立環境運行的問題。我正在爲這篇文章添加一個mule標籤。希望騾子專家能告訴我發生了什麼事。
什麼版本的groovy? –
請參閱上面的更新。它在Grole 1.8.0中隨附的Mule 3.3.0中運行。 – Jeff