Pregunta

Estoy actualizando mi entorno de Eclipse 3.3.1 y Java 1.4 a Eclipse 3.4.1 y Java 1.5. Mis pruebas unitarias están en Junit 3.

Eclipse Java versión 1.5.0__17

UNT independiente de la versión 1.5.0__12, o 1.5.0-17, ambos funcionan.

Tengo un método en una clase que escribe un archivo XML en el disco. Llama a TransformerFactory tf = [javax.xml.transform.] TransformerFactory.NewinStance (); Cuando ejecuto el código fuera del eclipse, funciona bien. Cuando ejecuto el código en Junit en Eclipse, obtengo el rastro de la pila a continuación. La clase faltante está en el rt.jar de Java 1.4 y no en Java 5, pero ¿no debería eso ser abstraído de mí?

¿Cómo puedo hacer que la prueba pase?

Recibo el mismo error cuando ejecuto el código en Eclipse desde una aplicación.

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)

actualizarInvestigué un poco más en las entrañas del rastro de la pila. Las versiones de trabajo (fuera del eclipse) están devolviendo una instancia de com.sun.org.apache.xalan.internal.xsltc.trax.transformerFactoryImpl, que es el nombre de clase de implicación de retroceso en 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());
        }
    }
¿Fue útil?

Solución 2

Agregué la siguiente línea a la configuración de la Unittest

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

Descubrí qué hacer con un poco de RTFM.http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/transformerfactory.html#newinstance ()

Otros consejos

Puede verificar si se ejecuta con la misma versión de Java cuando se ejecuta en Eclipse como cuando se ejecuta fuera de él (en Eclipse: Ejecutar como -> Ejecutar Configuración ... -> JRE Tab).

Agregue el frasco Xalan al classpath.

Ver también aquí Si está usando WebLogic. Tendrás que poner el frasco en compartir/lib.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top