Domanda

Sto aggiornando il mio ambiente da Eclipse 3.3.1 e Java 1.4 ad eclissare 3.4.1 e Java 1.5. Mio test di unità sono in JUnit 3.

Java Eclipse versione 1.5.0__17

stand-alone ENV versione 1.5.0__12 o 1.5.0-17, sia il lavoro.

Ho un metodo su una classe che scrive un file XML su disco. Chiede TransformerFactory tf = [javax.xml.transform.] TransformerFactory.newInstance (); Quando eseguo il codice al di fuori di Eclipse funziona benissimo. Quando eseguo il codice in JUnit in Eclipse ho la traccia dello stack di seguito. La classe mancante è nel rt.jar di Java 1.4 e non in Java 5, ma non dovrebbe essere astratto che da me?

Come posso fare superare la prova?

ottengo lo stesso errore quando ho eseguito il codice in Eclipse da un'applicazione.

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)

Aggiorna Ho fatto qualche ricerca più nelle viscere della traccia dello stack. Le versioni di lavoro (al di fuori eclisse) stanno tornando un'istanza di com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl che è il nome della classe fallback impl in 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());
        }
    }
È stato utile?

Soluzione 2

Ho aggiunto la seguente riga alla messa a punto della unittest

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

ho capito cosa fare con un po 'di RTFM. http: // java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/TransformerFactory.html#newInstance ()

Altri suggerimenti

Si potrebbe verificare se si esegue con la stessa versione di Java durante l'esecuzione in Eclipse come durante l'esecuzione al di fuori di esso (in Eclipse: Run As -> Esegui ... Configurazione -> scheda JRE).

Aggiungere il JAR Xalan al classpath.

qui se si utilizza WebLogic. Dovrete mettere il vaso in shared / lib.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top