Der XML -Code läuft ordnungsgemäß, aber Junit fällt mit NoclassDeffound fehl
-
22-08-2019 - |
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()); } }
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.