2009-02-06 8 views
0

Я обновляю свою среду от eclipse 3.3.1 и java 1.4 до eclipse 3.4.1 и java 1.5. Мои единичные тесты в JUnit 3.XML-код работает правильно, но junit не работает с NoClassDefFound

затмение Java версия 1.5.0__17

стоять одна окр версия 1.5.0__12 или 1.5.0-17, оба работают.

У меня есть метод класса, который записывает XML-файл на диск. Он вызывает TransformerFactory tf = [javax.xml.transform.] TransformerFactory.newInstance(); Когда я запускаю код за пределами eclipse, он работает нормально. Когда я запускаю код в jUnit в eclipse, я получаю трассировку стека ниже. Недопустимый класс находится в rt.jar java 1.4, а не в java 5, но разве это не должно быть абстрагировано от меня?

Как я могу пройти тест?

Я получаю ту же ошибку, когда запускаю код в 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) 

обновление Я сделал некоторые дополнительные исследования в недрах трассировки стека. Рабочие версии (за пределами затмения) возвращают экземпляр com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl, который является именем класса возврата в javax.xml.transform.TransformerFactory.newInstance()

 
    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()); 
     } 
    } 

ответ

0

Добавить Xalan JAR в путь к классам.

Также см. here, если вы используете WebLogic. Вам придется поставить JAR в shared/lib.

+0

Почему это происходит за пределами затмения? Я не добавлял jar-jar в java-путь. – Aaron

+0

Чтобы сузить вероятные причины, просто добавьте Xalan JAR. Тогда, надеюсь, вы сможете заставить его работать, и вы будете лучше знать, что искать, сравнивая разные среды выполнения. – eljenso

1

Вы можете проверить, работаете ли вы с той же версией Java, когда работаете в Eclipse, как при работе за ее пределами (в Eclipse: Run As -> Run Configuration ... -> JRE).

+0

такая же версия (часть времени) вопрос обновлен. – Aaron

 Смежные вопросы

  • Нет связанных вопросов^_^