java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset
java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset
当我尝试通过 ant
运行 我的 TestNG
测试时,我得到 java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset
(完整异常见下文)
我可以毫无问题地编译或 运行ning 我的 Web 应用程序,但不能 运行 通过 ant 进行测试。我相当确定这是一个 class 加载问题,但不确定 class 加载的顺序应该在 运行 时完成。我正在使用 Spring 4.3.1 和 Spring 安全 4.1.1.
是否有特定的顺序来加载我的罐子,以便使用 org.springframework.http.MediaType
的 "correct" 版本?
[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.
org.springframework.http.MediaType.getCharset()
是从 4.3 开始引入的,如果 java 没有找到它,这意味着你的类路径中有一个低于 4.3.1 的 spring-core 版本,它被加载和使用.
难以置信...再次被 class 加载问题挫败...一个名为 activemq-minimal-5.13.3.jar
的 uber jar 引用了其中导致冲突的 spring
个 jar。 activemq-minimal-5.13.3.jar
按字母顺序排在 spring
之前,因此 activemq
罐中的 class 比 spring
罐中的 loaded/used 高。更新了我的 ant build 以首先加载 spring
classes,现在我已经准备好了。
我发现的方法是将我所有的第 3 方库放在一个 "Test" 项目和 added/deleted 罐子中(在问题所在的地方有点倾斜)直到我能够查明 class 加载问题出在哪里。
他们在 spring 最新版本中修改了
org.springframework.http;
MediaType contentType = headers.getContentType();
旧:
contentType.getCharSet()
新:
contentType.getCharset()
就我而言,罪魁祸首是 spring-web-4.2。2.RELEASE,将其升级到 >4.2 为我修复了它
当我尝试通过 ant
运行 我的 TestNG
测试时,我得到 java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharset()Ljava/nio/charset/Charset
(完整异常见下文)
我可以毫无问题地编译或 运行ning 我的 Web 应用程序,但不能 运行 通过 ant 进行测试。我相当确定这是一个 class 加载问题,但不确定 class 加载的顺序应该在 运行 时完成。我正在使用 Spring 4.3.1 和 Spring 安全 4.1.1.
是否有特定的顺序来加载我的罐子,以便使用 org.springframework.http.MediaType
的 "correct" 版本?
[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.
org.springframework.http.MediaType.getCharset()
是从 4.3 开始引入的,如果 java 没有找到它,这意味着你的类路径中有一个低于 4.3.1 的 spring-core 版本,它被加载和使用.
难以置信...再次被 class 加载问题挫败...一个名为 activemq-minimal-5.13.3.jar
的 uber jar 引用了其中导致冲突的 spring
个 jar。 activemq-minimal-5.13.3.jar
按字母顺序排在 spring
之前,因此 activemq
罐中的 class 比 spring
罐中的 loaded/used 高。更新了我的 ant build 以首先加载 spring
classes,现在我已经准备好了。
我发现的方法是将我所有的第 3 方库放在一个 "Test" 项目和 added/deleted 罐子中(在问题所在的地方有点倾斜)直到我能够查明 class 加载问题出在哪里。
他们在 spring 最新版本中修改了
org.springframework.http;
MediaType contentType = headers.getContentType();
旧:
contentType.getCharSet()
新:
contentType.getCharset()
就我而言,罪魁祸首是 spring-web-4.2。2.RELEASE,将其升级到 >4.2 为我修复了它