source

봄/Java 오류: JDK 1.5 이상에서 네임스페이스 요소 'annotation-config'...

nicesource 2023. 9. 1. 21:05
반응형

봄/Java 오류: JDK 1.5 이상에서 네임스페이스 요소 'annotation-config'...

컴파일러 컴플라이언스 레벨 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 버전 보고서:

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 파일을 배포할 때 아래 오류가 발생합니다.톰캣은 제가 설치한 자바를 사용하지 않는 것 같습니다.설정 지침을 따릅니다.PS: 저도 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

예외를 발생시키는 클래스는 이 코드를 사용하여 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 버전을 가정합니다.이로 인해 주석 부분에서 불만이 제기될 것입니다.

Spring 버전을 업그레이드하거나 Java 7을 사용해야 할 것 같습니다.어쨌든 Spring 2.5는 꽤 오랫동안 EOL화되었습니다.

저도 비슷한 문제가 있어요.Spring 2.5.5의 Old Spring MVC/Spring Faces 응용 프로그램은 Java 8에서 실행되지 않습니다.

Java 8을 실행해야 하기 때문에 해결책을 찾기 위해 며칠을 보냈습니다.

번째 6.하는 것이었습니다. Spring 패키지 4.1.6은 4.1.6입니다.메이븐을 썼어요.그 후 거의 전체 프로젝트를 재작업해야 하는 이 방법의 문제.를 들어 에서는 JSF 되고 JSF 4와 같은 제거되었기 입니다.<sf:..>그리고 구성, 어댑터, 핸들러, 매핑과 관련된 몇 가지 더 크고 작은 문제들이 있었습니다.

두 번째 접근 방식은 스프링 JAR를 부분적으로 교체하는 것이었습니다.한 명씩.다시는 성공하지 못합니다.의존 관계를 건드리지 않고는 병을 교체할 수 없습니다.

저는 몇 주 또는 몇 달 동안 고군분투한 후에 두 가지 접근 방식 모두에서 성공을 거둘 수 있다고 믿습니다.하지만 시간이 너무 없습니다.그리고 저는 포기했습니다.내 솔루션은 다음과(와)

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

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;
    }

심지어 이 코드 변경도 정말로 필요한 것은 아니며 단지 재미를 위한 것입니다.왜냐하면 이 소스는 스프링 3.0.0 패키지에서 나온 것으로 스프링 남자들이 자바 버전 확인을 이미 변경했기 때문입니다.7보다 높은 버전은 이전 Java로 간주되지 않습니다.

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

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

감사해요.

Java 8에서 Spring 2.5.5를 지원해야 하므로 이 답변의 접근 방식을 사용하여 미래에 대비한 드롭인 대체 솔루션을 제공했습니다.JdkVersion.class가능한 한 부작용이 거의 없습니다. (다른 사람들은 완전한 수업을 게시하지 않았고, 저는 다른 답을 가로채고 싶지 않았습니다.)Java 8을 확인할 필요가 없으며, 클래스에서 가장 높은 버전인 Java 7로 기본 설정하기만 하면 됩니다.

jar 파일을 추출합니다.

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

하기 <Spring>META-INF/MANIFEST.MF은 ()version=2.5.5) 의 적절한 버전을 찾아봅니다.JdkVersion.java이를 시작점으로 사용합니다(아래 예제는 Spring 2.5.5용이며 작업 중인 버전에서 메서드 서명을 변경하지 않으려는 경우).

의주버과부확다인니합전버을전▁▁of▁▁minor의 장조와 단조를 확인해 .JdkVersion.class파일 이름:

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

클래스가 원래 대상 48.0으로 컴파일되었음을 알 수 있습니다(검색 결과 Java 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 *

을 필요한합니다.spring.jar또는 해당하는 경우).

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

수신인 =>

<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>

OR

  1. 프로젝트 속성을 마우스 오른쪽 버튼으로 클릭합니다.
  2. "Java 빌드 경로"로 이동/클릭합니다.
  3. 라이브러리 탭을 선택하고 "JRE 시스템 라이브러리"를 두 번 클릭합니다.
  4. 이 팝업에서 JDK 1.7을 선택합니다(JDK 1.7이 없는 경우 먼저 설치한 다음 "실행 환경"에서 선택합니다).

Property

저도 같은 문제가 있었지만 해결책이 있습니다.

프로젝트 파일 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>

그리고 당신의 문제에 작별 인사를 하세요!!

이 두 종속성은 대부분 첫 번째 종속성을 대체하는 것입니다.

저는 Spring 2.5를 아직도 사용하고 있는 매우 오래된 프로젝트(2008년 개발)의 또 다른 불행한 사용자입니다.또한 메이븐 프로젝트도 아니기 때문에 Spring의 최신 버전으로 업그레이드하는 데 오랜 시간이 걸렸고 종속성이 실패하고 빌드 오류가 발생했습니다.Tomcat JRE를 1.7로 다운그레이드했는데 잘 작동했습니다.

누군가 도움이 필요할 때를 대비해 일식에서 이를 수행하는 방법을 문서화하는 것입니다.

  1. Java 7이 아직 없는 경우 JDK 7을 다운로드하여 다음과 같은 위치에 설치합니다.C:\Program Files\Java\jdk1.7.0_71

  2. 그런 다음 일식으로 이동하여 두 번 클릭합니다.Servers > Tomcat vX.Y server

  3. 클릭Runtime Environment,그리고나서Installed JREs

  4. 그리고나서Add>Standard VM클릭합니다.Next다음과 같은 창이 나타납니다.

    Adding a new JRE

  5. 클릭Directory...JDK를 설치한 폴더(예:C:\Program Files\Java\jdk1.7.0_71JDK는 괜찮습니다, JRE는 필요 없습니다).클릭Finish.

  6. 그런 다음 Java 7용 JRE를 선택하면 준비가 완료됩니다.

스프링 버전을 2.5에서 >=3.2.3으로 마이그레이션합니다.

봄 이주의 경우 다음과 같은 변경을 수행해야 합니다.

pom.xml에서 spring 2.5.6에 대한 종속성을 제거하고 spring new version에 대한 종속성을 추가합니다.

프로젝트의 applicationcontet.xml 파일의 beins 태그에 있는 'xsi:schemaLocation'을(를) 업데이트합니다.

예: 봄 3.2.3 버전의 경우 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 을 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 으로 업데이트합니다.

프로젝트를 정리, 구축 및 다시 배포합니다.

저도 같은 문제에 직면해 있었습니다.하지만 열심히 노력한 끝에 이것이 자바 1.8을 사용하기 때문이라는 것을 알게 되었습니다.1.6으로 바꿨더니 작동했습니다.

이 답변은 완벽하게 답변되었지만 경우에 따라 Java 버전 또는 Spring 버전을 업그레이드하는 것이 바람직하지 않거나 가능하지 않습니다.

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

우리의 해결책은 단순히 자바 버전을 오버라이드하는 것이었습니다.

-Djava.version=1.6.45

답변의 완전 자동 버전을 만들었습니다.그가 다루는 세부 사항에 대해서는 먼저 그 게시물을 읽어보시기 바랍니다.

  • 글머리 기호 아래에 내용이 있는 개미 빌드 파일을 만듭니다.
  • 알았다.spring.jar의 옆에build.xml파일
  • 패치 대상 실행
  • 완료되었습니다. 파일이 패치되었습니다.

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>

지원 java1.8과 java1.9를 spring 2.5에 추가했습니다.tomacat lib의 파일을 교체하십시오.JdkVersion.class - 변경됨

spring.jar 다운로드

언급URL : https://stackoverflow.com/questions/23813369/spring-java-error-namespace-element-annotation-config-on-jdk-1-5-and-high

반응형