Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml java.lang.NoSuchMethodError:org.springframework.util.ClassUtils.forName(Ljava_Xml_Spring_Rest_Resttemplate - Fatal编程技术网

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

Xml java.lang.NoSuchMethodError:org.springframework.util.ClassUtils.forName(Ljava,xml,spring,rest,resttemplate,Xml,Spring,Rest,Resttemplate,我使用返回XML的非常简单的代码 RestTemplate restTemplate = new RestTemplate(); Source oResponse = restTemplate.postForObject(url, entity, Source.class, vars); XPathOperations xpathTemplate = new Jaxp13XPathTemplate(); String address = xpathTemplate.e

我使用返回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)
java.lang.NoSuchMethodError:org.springframework.util.ClassUtils.forName(Ljava/lang/String;)Ljava/lang/Class;
位于org.springframework.xml.JaxpVersion(JaxpVersion.java:51)
位于org.springframework.xml.transform.TraxUtils.isStaxSource(TraxUtils.java:70)
位于org.springframework.xml.xpath.jaxp13xpathmetplate.evaluate(jaxp13xpathmetplate.java:131)
位于org.springframework.xml.xpath.jaxp13xpathmetlate.evaluateString(jaxp13xpathmetlate.java:91)
请帮忙。 谢谢
Vladimir

运行时的NoSuchMethodError表示您使用的库版本与构建代码所依据的版本不同

在您的情况下,Spring是罪魁祸首。请在运行时检查类路径上的内容,并确保:

  • 版本与编译时jar相同
  • 如果存在多个版本,请删除不需要的版本
看看,ClassUtils.forName(String)似乎从Spring 3开始就被弃用了。我猜您已经针对一个具有此方法的版本构建了代码,但正在使用一个已删除该方法的版本运行它


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

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

在我们的例子中,我们有一个依赖项,如下所示

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

org.springframework.javaconfig
在stackoverflow中,我们不需要Spring 4.1.1的ConfigurationPostProcessor(我不确定启用此支持时的确切版本)

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


您可能已经明白了这一点,但在我的例子中,我使用的是一个版本不同于spring core的spring orm,因此在运行单元测试时会收到类似的错误消息。我从经验中了解到,项目中包含的所有spring jar文件都应该具有相同的版本,以避免不必要的问题。

谢谢你,詹姆斯。我应该替换哪个.jar文件?@Vladimir你是如何构建你的应用程序的?@Vladimir我猜是spring core jar导致了这个问题。我已经编辑了我的答案。避免这个问题的最好方法是让所有spring jar都来自同一个构建。我使用的是STS 3.4版本。它有spring-core-4.0.1.RELEXPathOperations是org.springframework.xml.xpath的一部分,它不包含在spring-core.jar中。我应该怎么做?
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor" />