복붙노트

[SPRING] 스프링 / 자바 오류 : 네임 스페이스 요소 'annotation-config'... JDK 1.5 이상

SPRING

스프링 / 자바 오류 : 네임 스페이스 요소 'annotation-config'... JDK 1.5 이상

컴파일러 준수 레벨 1.5로 컴파일 된 Spring / Java App이 있습니다.

Apache Tomcat 8.0.8을 다운로드 한 새로운 Linux 설치가 있습니다.

JDK 8u5를 다운로드했습니다.

다음과 같이 bash에서 경로를 설정합니다.

PATH=$PATH:$HOME/jdk1.8.0_05/bin
export PATH

Java -version 보고서 :

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

setnenv.sh (Tomcat의 경우)에서 설정합니다.

JDK_HOME=/home/userid/jdk1.8.0_05

WAR 파일을 배포 할 때 오류가 발생합니다. Tomcat은 내가 설치 한 자바를 사용하지 않는 것 같아요. 나는 설치 지침을 따라 갔다. 추신 : 나는 또한 JDK와 같은 문제 대신 JRE를 시도했다.

22-May-2014 11:34:54.070 INFO [http-nio-8080-exec-4] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
22-May-2014 11:34:54.512 SEVERE [http-nio-8080-exec-4] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
 org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [/home/userid/apache-tomcat-8.0.8/webapps/myApplication-QA/WEB-INF/classes/config/spring/securityContext.xml]; nested exception is **java.lang.IllegalStateException: Context namespace element 'annotation-config' and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] are only available on JDK 1.5 and higher**
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4750)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5170)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1270)
    at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:673)
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:221)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:213)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:615)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:78)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1033)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Context namespace element 'annotation-config' and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] are only available on JDK 1.5 and higher
    at org.springframework.context.config.ContextNamespaceHandler$1.parse(ContextNamespaceHandler.java:65)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1253)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1243)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
    ... 49 more

22-May-2014 11:34:54.518 INFO [http-nio-8080-exec-4] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext

해결법

  1. ==============================

    1.예외를 던지는 클래스는이 코드를 사용하여 Java 버전을 확인합니다.

    예외를 던지는 클래스는이 코드를 사용하여 Java 버전을 확인합니다.

    static {
            javaVersion = System.getProperty("java.version");
            // version String should look like "1.4.2_10"
            if (javaVersion.indexOf("1.7.") != -1) {
                majorJavaVersion = JAVA_17;
            }
            else if (javaVersion.indexOf("1.6.") != -1) {
                majorJavaVersion = JAVA_16;
            }
            else if (javaVersion.indexOf("1.5.") != -1) {
                majorJavaVersion = JAVA_15;
            }
            else {
                // else leave 1.4 as default (it's either 1.4 or unknown)
                majorJavaVersion = JAVA_14;
            }
        }
    

    따라서 Spring 2.5가 처음 출시되었을 때,이 코드는 1.7 이후의 Java 버전에서 실행될 것이라고 가정하지 않았습니다. Java 8 이상에서는 위의 코드가 기본 1.4 버전으로 간주됩니다. 이 때문에 주석 부분이 불평 할 것입니다.

    스프링 버전을 업그레이드하거나 Java 7을 사용해야한다고 생각합니다. 스프링 2.5는 지금 당분간 EOLed되었습니다.

  2. ==============================

    2.나는 비슷한 문제가있다. Spring 2.5.5 이전의 Old Spring MVC / Spring Faces 애플리케이션은 Java 8에서 실행되지 않습니다.

    나는 비슷한 문제가있다. Spring 2.5.5 이전의 Old Spring MVC / Spring Faces 애플리케이션은 Java 8에서 실행되지 않습니다.

    우리가 Java 8을 실행해야하기 때문에 솔루션을 찾기 위해 며칠을 보냈습니다.

    첫 번째 아이디어는 : 전체 Spring 패키지를 최대 4.1.6으로 업그레이드하는 것입니다. 나는 Maven을 사용했다. 이 방법의 문제점은 이후 전체 프로젝트를 거의 재 작업해야한다는 것입니다. 예를 들어 Spring 4에서는 와 같이 JSF 구현과 일부 특별한 taglib이 완전히 제거 된 곳이 제거 되었기 때문입니다. 그리고 구성, 어댑터, 핸들러, 매핑에 대한 몇 가지 주요 및 사소한 문제가있었습니다.

    두 번째 접근법은 Spring JAR을 부분적으로 대체하는 것이었다. 하나씩. 다시 성공하지 못했습니다. 의존성을 건드리지 않고 항아리를 교체 할 수 없습니다.

    나는 몇 주 후나 어려움을 겪고 나서 두 가지 접근 방식 모두에서 성공을 거둘 수 있다고 생각합니다. 그러나 그렇게 많은 시간을 보내지 마십시오. 그리고 나는 포기했다. 내 솔루션은 다음과 같습니다.

    org.springframework.core 패키지에서 JdkVersion.java 소스 파일을 찾았습니다. http://www.java2s.com/Code/Jar/o/Downloadorgspringframeworkcoresources300releasejar.htm. 내 프로젝트에서 하나의 클래스 JdkVersion만으로 org.springframework.core 패키지를 만들었습니다. 그 후 Java 8 버전을 확인하기 위해 코드를 간단하게 변경했습니다. 그런 Smth :

    public static final int JAVA_18 = 5;
    

    ...

            javaVersion = System.getProperty("java.version");
        // version String should look like "1.4.2_10"
        if (javaVersion.contains("1.8.")) {
            majorJavaVersion = JAVA_18;         
            System.out.println("JAVA_VERSION: "+javaVersion);
    
        } else if (javaVersion.contains("1.7.")) {
            majorJavaVersion = JAVA_17;
        }
    

    이 소스 코드가 Spring 버전 3.0.0 패키지에서 왔기 때문에 Spring 변경이 이미 Java 버전 확인을 변경했기 때문에이 코드 변경도 실제로는 필요하지 않습니다. 7보다 높은 버전은 이전 java로 간주되지 않습니다.

    이제 응용 프로그램이 제대로 시작됩니다. jdkVersion 클래스를 jar 대신에 프로젝트에서 호출합니다.

    지금까지 작동! 이 아이디어를 주신이 스레드의 모든 분들께 감사드립니다.

    감사

  3. ==============================

    3.Java 8에서 Spring 2.5.5를 지원할 필요가 있으므로이 대답의 접근 방식을 사용하여 JdkVersion.class에 대한 향후 대체 드롭 인 대체 기능을 가능한 한 적은 부작용으로 제공합니다 (아무도 완전한 클래스를 게시하지 않았으며, 나는 다른 대답을 공중 납치하고 싶지 않았다.) Java 8을 검사 할 필요가 없습니다. Java 7을 기본값으로 사용합니다.이 클래스는 클래스에서 고려한 최상위 버전입니다.

    Java 8에서 Spring 2.5.5를 지원할 필요가 있으므로이 대답의 접근 방식을 사용하여 JdkVersion.class에 대한 향후 대체 드롭 인 대체 기능을 가능한 한 적은 부작용으로 제공합니다 (아무도 완전한 클래스를 게시하지 않았으며, 나는 다른 대답을 공중 납치하고 싶지 않았다.) Java 8을 검사 할 필요가 없습니다. Java 7을 기본값으로 사용합니다.이 클래스는 클래스에서 고려한 최상위 버전입니다.

    jar 파일의 압축을 풉니 다.

    mkdir spring
    cd spring
    jar xvf ../spring.jar
    

    META-INF / MANIFEST.MF의 Spring 버전을 확인하십시오 (version = 2.5.5와 같은 것을 볼 수 있습니다). 적절한 버전의 JdkVersion.java를 찾고이를 시작점으로 사용하십시오 (아래의 예제는 Spring 2.5.5 용이며 작업중인 버전의 메소드 서명을 변경하지 않으려 고합니다).

    JdkVersion.class 파일의 주 버전과 부 버전을 확인하십시오.

    javap -verbose org / springframework / core / JdkVersion.class

    우리는 클래스가 원래 48.0으로 컴파일 된 것을 볼 수 있습니다 (이것을 보면 자바 1.4입니다).

    Classfile /tmp/spring/org/springframework/core/JdkVersion.class
      Last modified Jun 23, 2008; size 1286 bytes
      MD5 checksum 98e6ea08ce9186c50cc71d14465fc3dd
      Compiled from "JdkVersion.java"
    public abstract class org.springframework.core.JdkVersion
      minor version: 0
      major version: 48
      flags: ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
    Constant pool:
    ...
    

    다음 내용으로 org / springframework / core / JdkVersion.java를 만듭니다.

    package org.springframework.core;
    
    public abstract class JdkVersion
    {
        public static final int JAVA_13 = 0;
        public static final int JAVA_14 = 1;
        public static final int JAVA_15 = 2;
        public static final int JAVA_16 = 3;
        public static final int JAVA_17 = 4;
    
        private static final String javaVersion;
        private static final int majorJavaVersion;
    
        static
        {
            javaVersion = System.getProperty("java.version");
    
            if (javaVersion.indexOf("1.7.") != -1)
            {
                majorJavaVersion = JAVA_17;
            } else if (javaVersion.indexOf("1.6.") != -1) {
                majorJavaVersion = JAVA_16;
            } else if (javaVersion.indexOf("1.5.") != -1) {
                majorJavaVersion = JAVA_15;
            } else if (javaVersion.indexOf("1.4.") != -1) { // new
                majorJavaVersion = JAVA_14;                 // new
            } else {
                majorJavaVersion = JAVA_17;                 // changed from JAVA_14
            }
        }
    
        public static String getJavaVersion()
        {
            return javaVersion;
        }
    
        public static int getMajorJavaVersion()
        {
            return majorJavaVersion;
        }
    
        public static boolean isAtLeastJava14()
        {
            return true;
        }
    
        public static boolean isAtLeastJava15()
        {
            return getMajorJavaVersion() >= JAVA_15;
        }
    
        public static boolean isAtLeastJava16()
        {
            return getMajorJavaVersion() >= JAVA_16;
        }
    }
    

    그런 다음 Java 1.4로 새 클래스를 컴파일하십시오.

    javac -source 1.4 org / springframework / core / JdkVersion.java

    필요한 경우 major.minor 버전을 위와 같이 다시 확인할 수 있습니다.

    수정 된 jar 파일을 만듭니다 (원래 매니페스트를 덮어 쓰지 않음).

    jar Mcf ../spring-modified.jar *

    필요에 따라 수정 된 jar 파일을 복사하십시오 (spring.jar 또는 적절하게).

  4. ==============================

    4.

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>2.5.6</version>
    

    TO =>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.4.RELEASE</version>
    </dependency>
    

    또는

  5. ==============================

    5.나는 Spring 2.5를 사용하고있는 매우 오래된 프로젝트 (2008 년에 개발 된!)의 또 다른 불행한 사용자가되었습니다. 그리고 Maven 프로젝트가 아니기 때문에 Spring의 최신 버전으로 업그레이드하는 것은 의존성이 실패하고 빌드 오류가 발생하여 오랜 시간이 걸렸습니다. 나는 Tomcat JRE를 1.7로 다운 그레이드했고 잘 동작했다.

    나는 Spring 2.5를 사용하고있는 매우 오래된 프로젝트 (2008 년에 개발 된!)의 또 다른 불행한 사용자가되었습니다. 그리고 Maven 프로젝트가 아니기 때문에 Spring의 최신 버전으로 업그레이드하는 것은 의존성이 실패하고 빌드 오류가 발생하여 오랜 시간이 걸렸습니다. 나는 Tomcat JRE를 1.7로 다운 그레이드했고 잘 동작했다.

    누군가가 도움이 필요한 경우를 대비하여 이클립스에서이를 수행하는 방법을 문서화하면됩니다.

  6. ==============================

    6.2.5에서> = 3.2.3으로 스프링 버전을 마이그레이션하십시오.

    2.5에서> = 3.2.3으로 스프링 버전을 마이그레이션하십시오.

    Spring 마이그레이션의 경우 다음과 같은 변경 작업을 수행해야합니다.

    1) pom.xml에서 봄 2.5.6에 대한 종속성을 제거하고 봄 새 버전에 대한 종속성을 추가하십시오.

    2) 프로젝트의 applicationcontet.xml 파일의 beans 태그에서 'xsi : schemaLocation'을 업데이트합니다.

    예 : http://www.springframework.org/schema/beans/spring-beans-2.5.xsd를 업데이트하십시오. 봄 3.2.3 버전을위한 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd.

    3) 프로젝트를 정리하고 빌드하고 다시 전개하십시오.

  7. ==============================

    7.나는 같은 문제가 있었지만 해결책이있다 :

    나는 같은 문제가 있었지만 해결책이있다 :

    프로젝트 파일 pom.xml에서 다음을 대체하십시오.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>2.5.6</version>
    </dependency>
    

    에 대한:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.4.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.4.RELEASE</version>
    </dependency>
    

    당신의 문제에 작별 인사!

    이 두 가지 종속성은 대부분의 첫 번째 종속성을 대체합니다.

  8. ==============================

    8.나는 같은 문제에 직면했다. 그러나 매우 열심히 노력한 결과 Java 1.8을 사용했기 때문이라는 것을 알게되었습니다. 1.6으로 바꿨고 효과가있었습니다.

    나는 같은 문제에 직면했다. 그러나 매우 열심히 노력한 결과 Java 1.8을 사용했기 때문이라는 것을 알게되었습니다. 1.6으로 바꿨고 효과가있었습니다.

  9. ==============================

    9.이 답변이 완벽하게 답변되었지만, 자바 버전이나 스프링 버전을 업그레이드하는 것이 바람직하지 않을 수도 있습니다.

    이 답변이 완벽하게 답변되었지만, 자바 버전이나 스프링 버전을 업그레이드하는 것이 바람직하지 않을 수도 있습니다.

    우리의 경우에는 JDK 8을 사용하여 Sonar (Jenkins)와 통신 할 수 있어야하며이 업그레이드를 테스트 할 수있는 테스트 기능이 없기 때문에 Spring 버전을 변경하고 싶지는 않습니다.

    우리의 솔루션은 빌드하는 동안 Java 버전을 간단히 덮어 쓰는 것이 었습니다.

    -Djava.version=1.6.45
    
  10. ==============================

    10.이 답변의 전자동 버전을 만들었습니다. 그가 다루는 미묘함을 위해 먼저 그 글을 읽으십시오.

    이 답변의 전자동 버전을 만들었습니다. 그가 다루는 미묘함을 위해 먼저 그 글을 읽으십시오.

    build.xml 파일 내용 :

    <project name="spring-patch" default="patch">
        <target name="patch">
            <mkdir dir="src/org/springframework/core"/>
            <get dest="src/org/springframework/core/JdkVersion.java"
                    src="http://grepcode.com/file_/repo1.maven.org/maven2/org.springframework/spring/2.5.5/org/springframework/core/JdkVersion.java/?v=source&amp;disposition=attachment" />
            <replace dir="src" value="majorJavaVersion = JAVA_17">
              <replacetoken>majorJavaVersion = JAVA_14</replacetoken>
            </replace>
            <javac srcdir="src" />
            <zip destfile="spring.jar" update="true">
                <fileset dir="src" includes="**/*.class" />
            </zip>
            <delete dir="src" />
        </target>
    </project>
    
  11. ==============================

    11.스프링 2.5에 java1.8 및 java1.9 지원을 추가했습니다. tomacat lib에있는 파일을 교체하십시오. JdkVersion.class - 변경됨

    스프링 2.5에 java1.8 및 java1.9 지원을 추가했습니다. tomacat lib에있는 파일을 교체하십시오. JdkVersion.class - 변경됨

    spring.jar 다운로드

  12. from https://stackoverflow.com/questions/23813369/spring-java-error-namespace-element-annotation-config-on-jdk-1-5-and-high by cc-by-sa and MIT license