java - 将resteasy-spring模块加载到WildFly ClassNotFoundException中

标签 java resteasy wildfly

在设置了一个部署在 WildFly 上的小型 JAX-RS 应用程序后,我尝试向 RestEasy 添加 Spring 支持。我想使用 WildFly 中包含的resteasy-spring 模块。部署 WAR 时,我收到 ClassNotFoundException:

 Caused by: java.lang.ClassNotFoundException: org.jboss.resteasy.plugins.spring.SpringContextLoaderListener from [Module "deployment.mk-backend-8.0.0-SNAPSHOT.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.3.0.Final]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:443) [jboss-modules.jar:1.3.0.Final]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:431) [jboss-modules.jar:1.3.0.Final]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:373) [jboss-modules.jar:1.3.0.Final]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118) [jboss-modules.jar:1.3.0.Final]
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.addListener(UndertowDeploymentInfoService.java:1145)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.createServletConfig(UndertowDeploymentInfoService.java:734)
... 6 more

我将该模块包含在 list 文件中,如下所示:

Manifest-Version: 1.0
Dependencies: org.jboss.resteasy.resteasy-spring export

在我的 web.xml 中,我包含了 SpringContextLoaderListener

<listener>
    <listener-class>
        org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
    </listener-class>
</listener>

我对 WildFly 完全陌生。我查阅了很多文档,但找不到任何对我有帮助的东西。 我做错了什么?

最佳答案

我正在处理一个非常类似的问题...如果您没有在 WEB-INF/lib 中包含依赖项,您可以强制 Wildfly 从服务器类路径加载此依赖项,或者如果它与您在项目中使用的特定 lib 版本冲突,甚至可以排除它。 您所要做的就是创建以下 XML 文件并将其保存在 WEB-INF/jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
    <exclusions>
        <module name="org.jboss.resteasy.resteasy-jackson2-provider" />
    </exclusions>
    <dependencies>
        <module name="org.jboss.resteasy.resteasy-jackson-provider" services="import" />
        <module name="org.apache.httpcomponents" services="import"/>
        <module name="org.apache.commons.io" services="import"/>
    </dependencies>
</deployment>
</jboss-deployment-structure>

**您应该注意到节点 <exclusion> 内的标记和<dependencies>只是示例代码,您应该将其替换为您自己需要的配置。

也许您的项目缺少的依赖项在 WildFly 库上被标记为私有(private)。打开目录%JBOSS_HOME%/modules/system/layers/base/org/jboss/resteasy并检查该库是否存在或者该库的 module.xml 是否包含以下标记

<properties>
    <property name="jboss.api" value="private"/>
</properties>

如果 WildFly 依赖项是私有(private)的,您应该将其显式包含在上面显示的 XML (jboss-deployment-struct.xml) 中。否则,您只需使用它,无需在 WEB-INF/lib 或 manifest.mf 文件中包含该库。但是,如果 WildFly 上不提供该依赖项,我建议您将其包含在 WEB-INF/lib 中。

有关更多信息,请查看ClassNotFoundException for ObjectMapper on WildFly 8.1

关于java - 将resteasy-spring模块加载到WildFly ClassNotFoundException中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23617084/

相关文章:

java - 通过keycloak管理客户端在keycloak中创建用户返回IllegalArgumentException

tomcat - 使用 Tomcat 的简单 RESTeasy 示例的 404 响应

java - Wildfly - 打开的文件太多

java - 无法从 war 文件中的资源加载 xml

java - Resteasy @Path(value = "/") vs @Path(value = "") 它们相同

jboss5.x - 有没有一种简单的方法来创建一个新的 Wildfly 服务器实例

java - 在socket和serversocket之间打开多个流

java - 如何从java中的字符串中删除>标签

java - 从搜索结果(Java)中计算页数的方法是什么?

java - 使用 java 8 转换数组列表 -> 映射