문제

Eclipse 3.3.1 및 Java 1.4에서 Eclipse 3.4.1 및 Java 1.5로 환경을 업그레이드하고 있습니다. 내 단위 테스트는 Junit 3에 있습니다.

일식 Java 버전 1.5.0__17

독립형 ENV 버전 1.5.0__12 또는 1.5.0-17, 두 작업 모두 작동합니다.

클래스에 XML 파일을 디스크에 작성하는 메소드가 있습니다. transformErfactory tf = [javax.xml.transform.] transformerfactory.newinstance ()를 호출합니다. 일식 밖에서 코드를 실행하면 잘 실행됩니다. Eclipse의 Junit에서 코드를 실행하면 아래에 스택 추적이 나타납니다. 누락 된 클래스는 Java 1.4의 Rt.jar에 있으며 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의 인스턴스를 반환합니다.

    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 : RUN AS -> RUN CONFIGURATION ...-> JRE Tab).

Xalan 항아리를 클래스 경로에 추가하십시오.

또한 참조하십시오 여기 Weblogic을 사용하는 경우. 항아리를 공유/lib에 넣어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top