복붙노트

[SPRING] java.lang.NoSuchMethodError : org.springframework.util.ClassUtils.forName (Ljava)

SPRING

java.lang.NoSuchMethodError : org.springframework.util.ClassUtils.forName (Ljava)

XML을 반환하는 매우 간단한 코드를 사용합니다.

RestTemplate restTemplate = new RestTemplate();

Source oResponse = restTemplate.postForObject(url, entity, Source.class,
            vars);

XPathOperations xpathTemplate = new Jaxp13XPathTemplate();
String address = xpathTemplate.evaluateAsString("//status", oResponse);

그러나 다음과 같은 오류가 발생합니다.

java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.forName(Ljava/lang/String;)Ljava/lang/Class;
at org.springframework.xml.JaxpVersion.<clinit>(JaxpVersion.java:51)
at org.springframework.xml.transform.TraxUtils.isStaxSource(TraxUtils.java:70)
at org.springframework.xml.xpath.Jaxp13XPathTemplate.evaluate(Jaxp13XPathTemplate.java:131)
at org.springframework.xml.xpath.Jaxp13XPathTemplate.evaluateAsString(Jaxp13XPathTemplate.java:91)

도와주세요. 감사, 블라디미르

해결법

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

    1.런타임에 NoSuchMethodError는 코드가 빌드 된 버전과 다른 버전의 라이브러리를 사용하고 있음을 나타냅니다.

    런타임에 NoSuchMethodError는 코드가 빌드 된 버전과 다른 버전의 라이브러리를 사용하고 있음을 나타냅니다.

    귀하의 경우 봄이 범인입니다. 런타임시 classpath에있는 내용을 확인하고 다음을 확인하십시오.

    http://docs.spring.io/spring/docs/3.2.0.M1/api/org/springframework/util/ClassUtils.html을 보면 ClassUtils.forName (String)이 Spring 3부터 사용되지 않을 것으로 보입니다. 내 생각 엔이 방법을 사용하지만 버전이 제거 된 버전으로 실행중인 버전에 대해 코드를 작성한 것입니다.

    ClassUtils 클래스는 스프링 코어 항아리에 포함되어 있으므로이 항아리의 동일한 버전이 컴파일과 런타임 모두에 사용됩니다.

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

    2.Spring 4.1.1로 마이그레이션 할 때 비슷한 문제가 발생했습니다.

    Spring 4.1.1로 마이그레이션 할 때 비슷한 문제가 발생했습니다.

    우리의 경우에는 다음과 같은 종속성이 있습니다.

    <dependency>
    <groupId>org.springframework.javaconfig</groupId>
    <artifactId>spring-javaconfig</artifactId>
    <version>1.0.0.m3</version>
    </dependency>
    

    빈의 후 처리를 지원하기 위해이 종속성을 inorder에 추가했습니다.

    <bean class="org.springframework.config.java.process.ConfigurationPostProcessor" />
    

    위의 의존성 "ProcessUtils.java"의 클래스가 있는데, 이는 단일 인수 (String)로 ClassUtils.forName을 호출합니다. 그러나이 메소드는 더 이상 사용되지 않습니다. 그래서 Exeception이 던져지고 있습니다.

    나는 stackoverflow의 또 다른 게시물에서 Spring 4.1.1로 ConfigurationPostProcessor가 필요 없다는 것을 배웠다. (이 지원이 가능할 때 정확한 버전은 확실하지 않다.)

    구성 (스프링 컨텍스트 파일)에서 다음을 제거하면 문제가 해결됩니다.

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

    3.당신은 이미 이것을 알았을 지 모르겠지만 제 경우에는 스프링 코어와 다른 버전을 가진 스프링 오름을 사용하고 있습니다. 따라서 단위 테스트를 실행할 때 비슷한 오류 메시지가 나타납니다. 내 경험에 비추어 볼 때, 프로젝트에 포함 된 모든 jar 파일은 불필요한 문제를 피하기 위해 동일한 버전을 사용해야한다는 것을 알게되었습니다.

    당신은 이미 이것을 알았을 지 모르겠지만 제 경우에는 스프링 코어와 다른 버전을 가진 스프링 오름을 사용하고 있습니다. 따라서 단위 테스트를 실행할 때 비슷한 오류 메시지가 나타납니다. 내 경험에 비추어 볼 때, 프로젝트에 포함 된 모든 jar 파일은 불필요한 문제를 피하기 위해 동일한 버전을 사용해야한다는 것을 알게되었습니다.

  4. from https://stackoverflow.com/questions/22465906/java-lang-nosuchmethoderror-org-springframework-util-classutils-fornameljava by cc-by-sa and MIT license