Java NoMessageBodyWriterFoundFailure:找不到类型为的响应对象的MessageBodyWriter

Java NoMessageBodyWriterFoundFailure:找不到类型为的响应对象的MessageBodyWriter,java,jboss,jaxb,jboss7.x,resteasy,Java,Jboss,Jaxb,Jboss7.x,Resteasy,即使在WAR文件中捆绑了RESTEasy-JAXB-jar-RESTEasy-JAXB-provider.jar,我也会遇到以下错误 04:52:54,461 ERROR [org.jboss.resteasy.core.SynchronousDispatcher] (default task-1) Failed executing GET /editor/getMetadata/com.karthik.editor.model.EditorAuditEditor: o rg.jboss.res

即使在WAR文件中捆绑了RESTEasy-JAXB-jar-RESTEasy-JAXB-provider.jar,我也会遇到以下错误

04:52:54,461 ERROR [org.jboss.resteasy.core.SynchronousDispatcher] (default task-1) Failed executing GET /editor/getMetadata/com.karthik.editor.model.EditorAuditEditor: o
rg.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: com.karthik.SerializedStatusTO of media type: app
lication/xml
        at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:166)
        at org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse(SynchronousDispatcher.java:485)
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:422)
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:111)
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:217)
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:159)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
我还在WAR中包括jboss-deployment-structure.xml,以排除jboss提供的模块/jar

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
        <exclude-subsystems>
            <subsystem name="resteasy" />
        </exclude-subsystems>
        <exclusions>
            <module name="javaee.api" />
            <module name="javax.ws.rs.api"/>
            <module name="org.jboss.resteasy.resteasy-jaxrs" />
        </exclusions>
        <local-last value="true" />
    </deployment>
</jboss-deployment-structure>


我已经在JBoss7 EAP上部署了战争。我目前正在将我的应用程序从JBoss5迁移到JBoss7。没有代码更改,可以在JBoss5上正常工作。您能否在JBOSS 7上帮助解决此问题。

基本上,您已经告诉服务器将SerializedStateTo对象作为响应发送回客户端,但它不知道如何将其转换为字符串。您需要为com.karthik.serializedStatuto类包含一个包含MessageBodyWriter的jar,或者,如果这是您创建的类,您需要自己创建并包含一个


IIRC如果bean是JAXB注释的,那么它不需要自定义编写器。您能提供bean的代码和发送服务器响应的方法吗?

最后,我找到了解决方案。
问题是子系统名称。没有名为“resteasy”的子系统,该子系统实际上名为“jaxrs”。
我在jboss-deployment-structure.xml中更新了子系统名称,如下所示:

<exclude-subsystems>
   <subsystem name="jaxrs" />
</exclude-subsystems>


bean是JAXB注释的。我已经包含了resteasy-jaxb-provider.jar,用于将Java对象封送和解封送到XML。同样的代码在JBoss5中运行良好。我怀疑问题在于JBoss7中的类加载/jar版本。出于好奇,如果添加jackson jaxrs提供程序会发生什么?我原以为resteasy由defaut提供了jaxb提供程序,但也许它们被某种方式压制了?或者实际上尝试使用jaxb提供程序Jackson jaxrs是用于JSON响应类型的。我的服务发送XML响应。是的,我知道我更感兴趣的是看它是否能提供任何提供者。SJBOSS 5没有附带JAX-RS实现,所以您必须捆绑它。另一方面,JBoss7包含了一个实现。如果您使用的是Maven,您可能会尝试将JAX-RS设置为provided。在JBoss7中,它已经存在了。请参阅文档:或者您不想使用附带版本的原因是什么?