XML -код работает должным образом, но Junit выходит из строя с noclassdeffound

StackOverflow https://stackoverflow.com/questions/521692

  •  22-08-2019
  •  | 
  •  

Вопрос

Я обновляю свою среду с Eclipse 3.3.1 и Java 1.4 до Eclipse 3.4.1 и Java 1.5. Мои модульные тесты в Junit 3.

Eclipse Java версия 1.5.0__17

Островая Env Версия 1.5.0__12, или 1.5.0-17, оба работают.

У меня есть метод на классе, который записывает XML -файл на диск. Он вызывает TransformerFactory TF = [javax.xml.transform.] TransformererFactory.newinStance (); Когда я запускаю код за пределами затмения, он работает нормально. Когда я запускаю код в Junit в Eclipse, я получаю трассировку стека ниже. Пропавший класс находится в Rt.jar of 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)

ОбновитьЯ провел еще несколько исследований в кишечнике трассировки стека. Рабочие версии (вне Eclipse) возвращают экземпляр com.sun.org.apache.xalan.internal.xsltc.trax.transformerfactoryimpl, который является названием класса Ballack Imp в 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());
        }
    }
Это было полезно?

Решение 2

Я добавил следующую строку для настройки

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

Я понял, что делать с небольшим количеством RTFM.http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/transformerfactory.html#newinstance ()

Другие советы

Вы можете проверить, работаете ли вы с той же версией Java при запуске в Eclipse, что и при запуске за его пределами (в Eclipse: запустите как -> Запуск конфигурации ... -> вкладка JRE).

Добавьте ксалан jar в городскую дорожку.

Также см здесь Если вы используете Weblogic. Вам придется поместить банку в общую/либерацию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top