Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java NoSuchMethodException:springframework.boot.autoconfigure.http.HttpMessageConverters_Java_Spring_Java 9 - Fatal编程技术网

Java NoSuchMethodException:springframework.boot.autoconfigure.http.HttpMessageConverters

Java NoSuchMethodException:springframework.boot.autoconfigure.http.HttpMessageConverters,java,spring,java-9,Java,Spring,Java 9,我想在Spring中使用Java9。但我有一个例外: 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.NoSuchMethod

我想在Spring中使用Java9。但我有一个例外:

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
原因:org.springframework.aop.framework.aopconfigeexception:无法使用objeness实例化代理,通过默认构造函数进行常规代理实例化也失败;嵌套异常为java.lang.NoSuchMethodException:org.springframework.boot.autoconfigure.http.HttpMessageConverters$$EnhancerBySpringCGLIB$$1d90bff9。()
位于deployment.datalis_gateway.war//org.springframework.aop.framework.objenesicglibaopproxy.createProxyClassAndInstance(objenesicglibaopproxy.java:82)
位于deployment.datalis_gateway.war//org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:205)
... 62多
原因:java.lang.NoSuchMethodException:org.springframework.boot.autoconfigure.http.HttpMessageConverters$$EnhancerBySpringCGLIB$$1d90bff9。()
位于java.base/java.lang.Class.getConstructor0(Class.java:3302)
位于java.base/java.lang.Class.getDeclaredConstructor(Class.java:2512)
在deployment.datalis_gateway.war//org.springframework.aop.framework.objenesicglibaopproxy.createProxyClassAndInstance(objenesicglibaopproxy.java:76)
... 63多

您知道如何配置Java 9来找到这个受限Java包吗?

您需要使用两个
--将opens
添加到您的运行时JVM参数中,并准备将
opens…
添加到您的应用程序中几乎所有向Spring上下文公开了一些尚未导出的内容的地方。

我在尝试将Spring Boot 2应用程序部署到Wildfly 13时遇到了相同的错误。这是我搜索答案时遇到的唯一一个堆栈溢出问题,所以我想我会把我的发现留在这里,以防其他人也有同样的问题,因为我的解决方案与现在这里唯一的其他答案大不相同

使用嵌入式Tomcat服务器,我的应用程序可以正常运行,但部署到Wildfly将失败,并出现与此问题相同的AOPConfigeException。我还注意到,在异常的根本原因中,Spring正在寻找一个无参数构造函数,当我在所有自动连线的Spring组件中添加无参数构造函数时,该服务实际上部署到Wildfly,并且运行时没有问题。但这似乎是一个感觉不对劲的黑客解决方案,所以我寻找了一个更好的解决方案

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

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

org.apache.maven.plugins
上述解决方案只是在MANIFEST.MF文件中添加“jdk.unsupported”作为“依赖项”的一种方式。不幸的是,这是Maven pom的一部分,我的团队使用Gradle进行构建管理,所以我必须找到另一个解决方案

在Gradle或Maven中工作的解决方案 尽管可能有一种特定于Gradle的方法来完成上述任务,但我发现,您可以使用jboss-deployment-structure.xml将依赖项添加到MANIFEST.MF中,并包含以下内容:

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

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

*注意(如果JBoss指南的链接断开):JBoss-deployment-structure.xml文件分别位于war/jar应用程序的WEB-INF或META-INF目录中


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

在我的例子中,VM参数
--add modules=jdk。不受支持的
帮助。在这种情况下,
objenesicglibaopproxy
使用
sun.reflect.ReflectionFactory
创建代理,并且不查找缺少的构造函数。

如果将jdk.unsupported添加为全局模块,则无需更改应用程序:

<global-modules>
      <module name="jdk.unsupported"/>


请发布您的pom.xml?您在启动时是否面临这个问题?您使用的是哪个Spring版本?Spring5和SpringBoot2已经过测试,可以与java9一起使用。旧版本可能不是。我可以将包定义到文本文件中并加载它吗?我很有希望,但这似乎对我有效。我不再<代码>63省略的公共帧\n使用者:org.springframework.aop.framework.aopconfigeException:无法使用Objensis实例化代理,通过默认构造函数进行常规代理实例化也失败;嵌套异常是java.lang.NoSuchMethodException:
这是一个更好的解决方案。呃,正确的文件名有助于。。。我的输入错误浪费了一天,wildfly 20中的spring应用程序的第一个解决方案是有效的,首先感谢向maven文件添加插件,但没有帮助,然后在web inf中创建了jboss-deployment-structure.xml文件,这个错误消失了。