web-dev-qa-db-ja.com

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)

助けてください。ありがとう、ウラジミール

7
Vladimir

実行時のNoSuchMethodErrorは、コードが作成されたバージョンとは異なるバージョンのライブラリを使用していることを示します。

あなたの場合、Springが原因です。実行時にクラスパスに何があるかを確認し、次のことを確認します。

  • バージョンはコンパイル時のjarと同じです
  • 複数のバージョンがある場合は、不要なバージョンを削除してください

http://docs.spring.io/spring/docs/3.2.0.M1/api/org/springframework/util/ClassUtils.html を見ると、ClassUtils.forName(String )はSpring 3で非推奨になりました。このメソッドを使用したバージョンに対してコードをビルドしたものの、メソッドが削除されたバージョンで実行していると思います。

ClassUtilsクラスはspring-corejar内に含まれているため、コンパイル時と実行時の両方で同じバージョンのjarが使用されるようにします。

16
JamesB

Spring 4.1.1に移行するときに、同様の問題が発生しました。

私たちの場合、次のような依存関係がありました

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

Beanの後処理をサポートするために、この依存関係を追加しました

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

上記の依存関係「ProcessUtils.Java」のクラスがあり、単一の引数(文字列)でClassUtils.forNameを呼び出しています。ただし、このメソッドは非推奨になりました。したがって、Execeptionがスローされています。

私は別の post で、Spring 4.1.1のConfigurationPostProcessorは必要ないことを学びました(このサポートが有効になっている場合、正確なバージョンはわかりません)

構成(Spring Contextファイル)から以下を削除すると、問題は解決します。

4
Anjaneya Reddy

あなたはすでにこれを理解しているかもしれませんが、それでも私の場合、バージョンがスプリングコアとは異なるスプリングオームを使用していたため、ユニットテストを実行すると同様のエラーメッセージが表示されていました。私の経験から、プロジェクトに含まれるすべてのSpring jarファイルは、不要な問題を回避するために同じバージョンである必要があることを学びました。

2
Neeraj