Frage

Ich aktualisiere meine Umgebung von Eclipse 3.3.1 und Java 1.4 auf Eclipse 3.4.1 und Java 1.5. Meine Unit -Tests sind in Junit 3.

Eclipse Java Version 1.5.0__17

Stand Alone Env Version 1.5.0__12 oder 1.5.0-17, beide arbeiten.

Ich habe eine Methode in einer Klasse, die eine XML -Datei auf die Festplatte schreibt. Es nennt TransformerFactory tf = [javax.xml.transform.] TransformerFactory.NewinStance (); Wenn ich den Code außerhalb von Eclipse ausführe, läuft er gut. Wenn ich den Code in jungit in eclipse ausführe, bekomme ich die Stapelspur unten. Die fehlende Klasse befindet sich im RT.Jar von Java 1.4 und nicht in Java 5, aber sollte das nicht von mir abstrahiert werden?

Wie kann ich den Testpass machen?

Ich erhalte den gleichen Fehler, wenn ich den Code in Eclipse aus einer Anwendung ausführe.

java.lang.NoClassDefFoundError: org/apache/xalan/processor/TransformerFactoryImpl
 at weblogic.xml.jaxp.RegistryTransformerFactory.(RegistryTransformerFactory.java:62)
 at weblogic.xml.jaxp.RegistrySAXTransformerFactory.(RegistrySAXTransformerFactory.java:12)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
 at java.lang.Class.newInstance0(Class.java:350)
 at java.lang.Class.newInstance(Class.java:303)
 at javax.xml.transform.FactoryFinder.newInstance(FactoryFinder.java:100)
 at javax.xml.transform.FactoryFinder.findJarServiceProvider(FactoryFinder.java:278)
 at javax.xml.transform.FactoryFinder.find(FactoryFinder.java:185)
 at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:103)
 at com.bellsouth.snt.cnmp.sso.netcool.NetcoolAccessThread.writeXmlFile(NetcoolAccessThread.java:278)
 at com.bellsouth.snt.cnmp.sso.netcool.NetcoolAccessThreadTest.testWriteXmlFile(NetcoolAccessThreadTest.java:83)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at junit.framework.TestCase.runTest(TestCase.java:164)
 at junit.framework.TestCase.runBare(TestCase.java:130)
 at junit.framework.TestResult$1.protect(TestResult.java:106)
 at junit.framework.TestResult.runProtected(TestResult.java:124)
 at junit.framework.TestResult.run(TestResult.java:109)
 at junit.framework.TestCase.run(TestCase.java:120)
 at junit.framework.TestSuite.runTest(TestSuite.java:230)
 at junit.framework.TestSuite.run(TestSuite.java:225)
 at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

aktualisierenIch habe noch einige Nachforschungen im Darm der Stapelspur durchgeführt. Die Arbeitsversionen (außerhalb von Eclipse) geben eine Instanz von com.sun.org.apache.xalan.internal.xsltc.Trax.TransformerFactoryImpl zurück, der der Name der Fallback Impl -Klasse in javax.xml.transform.transformerfactory.Newinstance () ist

    public static TransformerFactory newInstance()
        throws TransformerFactoryConfigurationError {
        try {
            return (TransformerFactory) FactoryFinder.find(
            /* The default property name according to the JAXP spec */
            "javax.xml.transform.TransformerFactory",
            /* The fallback implementation class name, XSLTC */
            "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
        } catch (FactoryFinder.ConfigurationError e) {
            throw new TransformerFactoryConfigurationError(
                e.getException(),
                e.getMessage());
        }
    }
War es hilfreich?

Lösung 2

Ich habe die folgende Zeile hinzugefügt, um das Unittest einzurichten

    System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");

Ich habe herausgefunden, was ich mit ein bisschen RTFM machen sollte.http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/transformerfactory.html#newinstance ()

Andere Tipps

Sie können prüfen, ob Sie mit derselben Java -Version ausgeführt werden, wenn Sie in Eclipse ausgeführt werden, wie beim Außenbereich (in Eclipse: Ausführen als -> Konfiguration ausführen ... -> JRE -Registerkarte).

Fügen Sie das Xalan -Glas dem Klassenpfad hinzu.

Siehe auch hier Wenn Sie Weblogic verwenden. Sie müssen das Glas in Shared/LiB einsetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top