无法调用Java newInstance()而不是Groovy';在Mule ESB中运行编译的Groovy代码时

无法调用Java newInstance()而不是Groovy';在Mule ESB中运行编译的Groovy代码时,groovy,mule,Groovy,Mule,在我的Mule ESB 3.3.0应用程序中,在独立模式下运行,我有一个调用Groovy代码的转换器,该代码作为依赖maven的jar包含。在groovy代码中,我调用了一个具有newInstance()静态方法的Java对象,如下所示: TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null) 这会在Groovy中导致错误,因为我认为它试图调用Groovy增强的Class.newInstance()

在我的Mule ESB 3.3.0应用程序中,在独立模式下运行,我有一个调用Groovy代码的转换器,该代码作为依赖maven的jar包含。在groovy代码中,我调用了一个具有newInstance()静态方法的Java对象,如下所示:

TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null)
这会在Groovy中导致错误,因为我认为它试图调用Groovy增强的Class.newInstance()方法。在Mule standalone外部运行时不会发生这种情况(有关测试的描述,请参阅下面的更新)。我如何让它调用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

更新2:
我做了一些进一步的测试,将Groovy类编译成一个jar文件,并从一个独立的Java程序调用它,但没有遇到这个问题。这使我相信这是一个运行于Mule 3.3.0独立环境的问题。我在这篇文章中添加了一个骡子标签。希望骡子专家能告诉我发生了什么

在Groovy用户邮件列表的帮助下,我们确定mule类路径上必须有另一个jar提供
javax.xml.transformer.transformer
类。我添加了以下示例代码:

Class klass = TransformerFactory.class; 
URL location = klass.getResource('/'+klass.getName().replace('.', '/')+".class"); 
果然!Mule正在添加他们自己的XMLAPI jar

TranformerFactory JAR: jar:file:/D:/java/mule/mule-standalone-3.3.0/lib/endorsed/xml-apis-1.3.04.jar!/javax/xml/transform/TransformerFactory.class
为什么要覆盖JDK Mule

我的工作是直接实例化Saxon TransformerFactory。这不是很优雅,但我唯一的选择

tFactory = new net.sf.saxon.TransformerFactoryImpl()

groovy的哪个版本?请参阅上面的更新。它在Mule 3.3.0中作为一个jar运行,Mule 3.3.0随Groovy 1.8.6一起提供。