gpt4 book ai didi

java - NoSuchMethodException : springframework. boot.autoconfigure.http.HttpMessageConverters

转载 作者:行者123 更新时间:2023-12-01 07:18:04 24 4
gpt4 key购买 nike

我想将 Java 9 与 Spring 一起使用。但我得到了异常(exception):

Caused by: org.springframework.aop.framework.AopConfigException: Unable to instantiate proxy using Objenesis, and regular proxy instantiation via default constructor fails as well; nested exception is java.lang.NoSuchMethodException: org.springframework.boot.autoconfigure.http.HttpMessageConverters$$EnhancerBySpringCGLIB$$1d90bff9.<init>()
at deployment.datalis_gateway.war//org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:82)
at deployment.datalis_gateway.war//org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:205)
... 62 more
Caused by: java.lang.NoSuchMethodException: org.springframework.boot.autoconfigure.http.HttpMessageConverters$$EnhancerBySpringCGLIB$$1d90bff9.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3302)
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2512)
at deployment.datalis_gateway.war//org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:76)
... 63 more

您知道如何配置 Java 9 来查找此受限 Java 包吗?

最佳答案

当我尝试将 Spring Boot 2 应用程序部署到 Wildfly 13 时,我遇到了同样的错误。这是我在寻找答案时出现的唯一 Stack Overflow 问题,所以我想我应该将我的发现留在此处如果其他人也有同样的问题,因为我的解决方案与现在这里唯一的其他答案非常不同。

使用嵌入式 Tomcat 服务器,我的应用程序可以正常运行,但部署到 Wildfly 会失败,并出现此问题中询问的相同 AopConfigException。我还注意到异常的根本原因是 Spring 正在寻找无参数构造函数,当我在所有 Autowiring 的 Spring 组件中添加无参数构造函数时,该服务实际上部署到 Wildfly 并运行没有任何问题。但这似乎是一种奇怪的解决方法,感觉不对,所以我寻找更好的解决方案。

我是从this github issue学到的这个异常发生在 Wildfly 中,因为 Jboss 模块没有公开 Objenesis 进行构造函数注入(inject)所需的一些依赖项。他们给出的建议解决方案是通过简单地更新项目构建来添加依赖项,如下所示:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Dependencies>jdk.unsupported</Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>

如果这对您有用,那么恭喜您。我从this JBoss issue拼凑而成上述解决方案只是在 MANIFEST.MF 文件中添加“jdk.unsupported”作为“依赖项”的一种方法。对我来说不幸的是,这是 Maven pom 的一部分,而我的团队使用 Gradle 进行构建管理,所以我必须找到另一个解决方案。

适用于 Gradle 或 Maven 的解决方案

虽然可能有一种 Gradle 特定的方法来完成上述任务,但我从 this JBoss development guide 找到了您可以使用包含以下内容的 jboss-deployment-struct.xml 将依赖项添加到 MANIFEST.MF 中:

<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="jdk.unsupported"/>
</dependencies>
</deployment>
</jboss-deployment-structure>

即使您确实使用 Maven,这似乎也是首选解决方案,因为如果您以后切换到 Gradle,它的工作原理是一样的。当然,只有当问题被隔离到 JBoss/Wildfly 时,此解决方案才有效。

*注意(以防 JBoss 指南的链接失效):jboss-deployment-struction.xml 文件分别位于 war/jar 应用程序的 WEB-INF 或 META-INF 目录中。

还值得注意的是,我在 Java 11 和 Wildfly 13 上看到了这个问题,但我非常怀疑 Java 9 和 10 以及其他版本的 JBoss/Wildfly 上也存在同样的问题。

关于java - NoSuchMethodException : springframework. boot.autoconfigure.http.HttpMessageConverters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com