Java XML代码运行正常,但junit因NoClassDefFound而失败

Java XML代码运行正常,但junit因NoClassDefFound而失败,java,junit,eclipse-3.4,xsltc,Java,Junit,Eclipse 3.4,Xsltc,我正在将我的环境从Eclipse3.3.1和Java1.4升级到Eclipse3.4.1和Java1.5。 我的单元测试在JUnit3中 EclipseJava版本1.5.0\u17 独立环境版本1.5.0_uuuu12或1.5.0-17都可以工作 我在一个类上有一个将XML文件写入磁盘的方法。 它调用TransformerFactory tf=[javax.xml.transform.]TransformerFactory.newInstance(); 当我在eclipse之外运行代码时,它运

我正在将我的环境从Eclipse3.3.1和Java1.4升级到Eclipse3.4.1和Java1.5。 我的单元测试在JUnit3中

EclipseJava版本1.5.0\u17

独立环境版本1.5.0_uuuu12或1.5.0-17都可以工作

我在一个类上有一个将XML文件写入磁盘的方法。 它调用TransformerFactory tf=[javax.xml.transform.]TransformerFactory.newInstance(); 当我在eclipse之外运行代码时,它运行良好。 当我在eclipse的jUnit中运行代码时,我得到了下面的堆栈跟踪。 缺少的类在Java1.4的rt.jar中,而不是在Java5中,但这不应该从我这里抽象出来吗

我怎样才能通过考试

当我在eclipse中从应用程序运行代码时,也会遇到同样的错误

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) java.lang.NoClassDefFoundError:org/apache/xalan/processor/TransformerFactoryImpl 位于weblogic.xml.jaxp.RegistryTransformerFactory。(RegistryTransformerFactory.java:62) 位于weblogic.xml.jaxp.RegistrySAXTransformerFactory。(RegistrySAXTransformerFactory.java:12) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:494) 位于java.lang.Class.newInstance0(Class.java:350) 位于java.lang.Class.newInstance(Class.java:303) 位于javax.xml.transform.FactoryFinder.newInstance(FactoryFinder.java:100) 位于javax.xml.transform.FactoryFinder.findJarServiceProvider(FactoryFinder.java:278) 位于javax.xml.transform.FactoryFinder.find(FactoryFinder.java:185) 位于javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:103) 位于com.bellsouth.snt.cnmp.sso.netcool.NetcoolAccessThread.writeXmlFile(NetcoolAccessThread.java:278) 位于com.bellsouth.snt.cnmp.sso.netcool.NetcoolAccessThreadTest.testWriteXmlFile(NetcoolAccessThreadTest.java:83) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中 位于java.lang.reflect.Method.invoke(Method.java:585) 位于junit.framework.TestCase.runTest(TestCase.java:164) 位于junit.framework.TestCase.runBare(TestCase.java:130) 位于junit.framework.TestResult$1.protect(TestResult.java:106) 位于junit.framework.TestResult.runProtected(TestResult.java:124) 运行(TestResult.java:109) 运行(TestCase.java:120) 位于junit.framework.TestSuite.runTest(TestSuite.java:230) 运行(TestSuite.java:225) 位于org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) 位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 更新 我在堆栈跟踪的内部做了更多的研究。工作版本(eclipse之外)返回com.sun.org.apache.xalan.internal.xsltc.trax.transformerfactorympl的实例,它是javax.xml.transform.TransformerFactory.newInstance()中的回退impl类名

公共静态TransformerFactory newInstance() 抛出TransformerFactoryConfigurationError{ 试一试{ 返回(TransformerFactory)FactoryFinder.find( /*根据JAXP规范的默认属性名称*/ “javax.xml.transform.TransformerFactory”, /*回退实现类名XSLTC*/ “com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl”); }捕获(FactoryFinder.ConfigurationError e){ 抛出新TransformerFactoryConfigurationError( e、 getException(), e、 getMessage()); } }
将XalanJAR添加到类路径


还可以查看您是否正在使用WebLogic。您必须将JAR放在shared/lib中。

将XalanJAR添加到类路径中


还可以查看您是否正在使用WebLogic。您必须将JAR放在shared/lib中。

您可以检查在Eclipse中运行的Java版本是否与在Eclipse之外运行的Java版本相同(在Eclipse中:运行方式->运行配置…->JRE选项卡)。

您可以检查在Eclipse中运行的Java版本是否与在Eclipse之外运行的Java版本相同(在Eclipse中:运行方式->运行配置…->JRE选项卡)。

我在unittest的设置中添加了以下行

    System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
我想出了一点RTFM的办法。

我在unittest的设置中添加了以下行

    System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
我想出了一点RTFM的办法。

同一版本(有时)上述问题已更新。同一版本(有时)上面的问题已经更新了。为什么它会在eclipse之外运行?我还没有将xalan jar添加到我的java路径中。为了缩小可能的原因,只需添加xalan jar。然后希望您可以让它工作起来,并且在比较不同的运行时环境时,您会更好地了解要寻找什么。为什么它会在eclipse之外运行然后呢?我还没有将xalan jar添加到我的java路径中。为了缩小可能的原因,只需添加xalan jar。然后希望您可以让它工作起来,并且您将更好地了解在比较不同的运行时环境时要查找什么。