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

Vla*_*mir 7 xml rest spring resttemplate

我使用非常简单的代码返回XML

RestTemplate restTemplate = new RestTemplate();

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

XPathOperations xpathTemplate = new Jaxp13XPathTemplate();
String address = xpathTemplate.evaluateAsString("//status", oResponse);
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误

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)
Run Code Online (Sandbox Code Playgroud)

请帮忙.谢谢,弗拉基米尔

Jam*_*esB 16

运行时的NoSuchMethodError表示您使用的库版本不同于构建代码的版本.

在你的情况下,春天是罪魁祸首.检查运行时类路径上的内容并确保以下内容:

  • 版本与编译时jar相同
  • 如果有多个版本,请删除不需要的版本

查看http://docs.spring.io/spring/docs/3.2.0.M1/api/org/springframework/util/ClassUtils.html,从Spring 3开始,似乎不推荐使用ClassUtils.forName(String)我的猜测是,您已经针对具有此方法的版本构建了代码,但是正在使用已删除该方法的版本运行它.

ClassUtils类包含在spring-core jar中,因此我将确保在编译和运行时使用相同版本的jar.


小智 5

我们在迁移到 Spring 4.1.1 时遇到了类似的问题

在我们的例子中,我们有如下依赖

<dependency>
<groupId>org.springframework.javaconfig</groupId>
<artifactId>spring-javaconfig</artifactId>
<version>1.0.0.m3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我们添加了此依赖项以支持 bean 的后处理

<bean class="org.springframework.config.java.process.ConfigurationPostProcessor" />
Run Code Online (Sandbox Code Playgroud)

上述依赖项“ProcessUtils.java”中有一个类,它使用单个参数(字符串)调用 ClassUtils.forName。但是,此方法已被弃用。所以正在抛出异常。

我从stackoverflow 的另一篇文章中了解到,我们不需要 Spring 4.1.1 的 ConfigurationPostProcessor(我不确定确切版本,当启用此支持时)

一旦我们从我们的配置(Spring 上下文文件)中删除了以下内容,问题就解决了。