在我的 Mule ESB 3.3.0 应用程序中,以独立模式运行,我有一个调用 Groovy 代码的转换器,该代码作为 maven 相关 jar 包含在内。在我的 groovy 代码中,我正在调用一个具有 newInstance() 静态方法的 Java 对象,如下所示:
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专家能告诉我发生了什么。