Innerhalb meiner Mule ESB 3.3.0-App, die im eigenständigen Modus läuft, habe ich einen Transformer, der Groovy-Code aufruft, der als Maven-Abhängigkeits-Jar enthalten ist. In meinem Groovy-Code rufe ich ein Java-Objekt auf, das eine newInstance() -Methode hat, wie folgt:
TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null)
Dies führt zu Fehlern in Groovy, weil ich denke, dass versucht wird, die Groovy-erweiterte Class.newInstance() -Methode aufzurufen. Dies tritt nicht auf, wenn es außerhalb von Mule eigenständig läuft (siehe Update unten für eine Beschreibung des Tests). Wie kann ich bewirken, dass die Java-Methode und nicht die Groovy-Methode aufgerufen wird?
Hier ist ein Ausschnitt aus meinem Stack-Trace. Man kann sehen, dass DefaultGroovyMethods.newInstance()
aufgerufen wird. Aber ich möchte die javax.xml.transform.TransformerFactory.newInstance(String, ClassLoader)
-Methode aufrufen. Wie?
groovy.lang.GroovyRuntimeException: Konstruktor für javax.xml.transform.TransformerFactory(java.lang.String, null) konnte nicht gefunden werden
bei groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1459)
bei groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1375)
bei org.codehaus.groovy.runtime.InvokerHelper.invokeConstructorOf(InvokerHelper.java:824)
bei org.codehaus.groovy.runtime.DefaultGroovyMethods.newInstance(DefaultGroovyMethods.java:18025)
UPDATE: Weitere Informationen zur Laufzeitumgebung. Der Groovy-Code ist als Jar-Datei verpackt und wird von einer Mule ESB-Anwendung aufgerufen. Mule 3.3.0 wird mit groovy-all-1.8.6.jar ausgeliefert.
UPDATE2: Ich habe einige weitere Tests durchgeführt und eine Groovy-Klasse in eine Jar-Datei kompiliert und sie von einem eigenständigen Java-Programm aus aufgerufen, ohne dass dieses Problem auftritt. Dies lässt mich glauben, dass es ein Problem ist, wenn es in der eigenständigen Umgebung von Mule 3.3.0 ausgeführt wird. Ich füge diesem Beitrag ein Mule-Tag hinzu. Hoffentlich kann mir ein Mule-Experte sagen, was hier vor sich geht.