web-dev-qa-db-ja.com

java.lang.NoSuchMethodError:org.springframework.http.MediaType.getCharset()Ljava / nio / charset / Charset

TestNGを介してantテストを実行しようとすると、Java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charsetが発生します(完全な例外については以下を参照してください)

Webアプリケーションのコンパイルや実行に問題はありませんが、antを介してテストを実行できません。これはクラスの読み込みの問題であると確信していますが、実行時にクラスの読み込みを実行する順序がわかりません。 Spring4.3.1とSpringSecurity4.1.1を使用しています。

org.springframework.http.MediaTypeの「正しい」バージョンが使用されるようにjarをロードする特定の順序はありますか?

[testng] org.testng.TestNGException: 
   [testng] An error occurred while instantiating class com.avada.rest.api.GroupsIntTest: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset;
   [testng]     at org.testng.internal.ClassHelper.createInstance1(ClassHelper.Java:388)
   [testng]     at org.testng.internal.ClassHelper.createInstance(ClassHelper.Java:290)
   [testng]     at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.Java:125)
   [testng]     at org.testng.internal.ClassImpl.getInstances(ClassImpl.Java:191)
   [testng]     at org.testng.TestClass.getInstances(TestClass.Java:104)
   [testng]     at org.testng.TestClass.initTestClassesAndInstances(TestClass.Java:90)
   [testng]     at org.testng.TestClass.init(TestClass.Java:82)
   [testng]     at org.testng.TestClass.<init>(TestClass.Java:45)
   [testng]     at org.testng.TestRunner.initMethods(TestRunner.Java:409)
   [testng]     at org.testng.TestRunner.init(TestRunner.Java:247)
   [testng]     at org.testng.TestRunner.init(TestRunner.Java:217)
   [testng]     at org.testng.TestRunner.<init>(TestRunner.Java:161)
   [testng]     at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.Java:555)
   [testng]     at org.testng.SuiteRunner.init(SuiteRunner.Java:168)
   [testng]     at org.testng.SuiteRunner.<init>(SuiteRunner.Java:117)
   [testng]     at org.testng.TestNG.createSuiteRunner(TestNG.Java:1359)
   [testng]     at org.testng.TestNG.createSuiteRunners(TestNG.Java:1346)
   [testng]     at org.testng.TestNG.runSuitesLocally(TestNG.Java:1200)
   [testng]     at org.testng.TestNG.runSuites(TestNG.Java:1124)
   [testng]     at org.testng.TestNG.run(TestNG.Java:1096)
   [testng]     at org.testng.TestNG.privateMain(TestNG.Java:1425)
   [testng]     at org.testng.TestNG.main(TestNG.Java:1394)
   [testng] Caused by: Java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset;
   [testng]     at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.getSupportedMediaTypes(RestTemplate.Java:757)
   [testng]     at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.Java:733)
   [testng]     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.Java:617)
   [testng]     at org.springframework.web.client.RestTemplate.execute(RestTemplate.Java:580)
   [testng]     at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.Java:287)
   [testng]     at com.avada.rest.api.ApiTestClient.getAll(ApiTestClient.Java:81)
   [testng]     at com.avada.rest.api.GroupsIntTest.<clinit>(GroupsIntTest.Java:17)
   [testng]     at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   [testng]     at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
   [testng]     at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
   [testng]     at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
   [testng]     at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.Java:29)
   [testng]     at org.testng.internal.ClassHelper.createInstance1(ClassHelper.Java:377)
   [testng]     ... 21 more
   [testng] The tests failed.
10
Zack Macomber

信じられない...クラスの読み込みの問題に再び失敗しました...activemq-minimal-5.13.3.jarという名前のuberjarには、競合の原因となっているspringjarへの参照が含まれていました。 activemq-minimal-5.13.3.jarはアルファベット順にspringの前にあるため、そのactivemqjar内のクラスはspringjarを介してロード/使用されていました。最初にspringクラスをロードするようにAntビルドを更新しました。これで、すべての設定が完了しました。

私が見つけた方法は、すべてのサードパーティライブラリを「テスト」プロジェクトにまとめ、クラスの読み込みの問題がどこにあるかを特定できるまで、jarを追加/削除しました(問題があった場所に多少の傾向があります)。

7
Zack Macomber

org.springframework.http.MediaType.getCharset()は、4.3以降に導入されました。Javaが見つからなかった場合、ロードされて使用されるクラスパスに4.3.1未満のSpring-Coreバージョンがあることを意味します。

3
Issam EL-ATIF

春の最新バージョンでは、彼らは変更しました

org.springframework.http;

MediaType contentType = headers.getContentType();

古い:

      contentType.getCharSet()

新規:

     contentType.getCharset()
1
vaquar khan