java - 使用动态创建的类时,RESTEasy 找不到 application/xml 的消息正文编写器

标签 java xml maven resteasy cglib

Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/xml

当我尝试以 xml 格式返回动态创建的类/dtos 列表的响应时,出现上述错误。

@GET
@Path("objects")
public Response getObjects(
        @DefaultValue("json") @QueryParam("format") String format)
{    
     GenericEntity entity;

     //I use cglib here to dynamically at runtime create a class called objectDto.
     //The class is just a POJO.

     List<Object> objectsDto = generateObjects(fields);

     entity = new GenericEntity<List<Object>>(objectsDto){};

     Response.ResponseBuilder rBuild;

    if (format.equals("xml"))
    {
        rBuild = Response.ok(entity, MediaType.APPLICATION_XML);
    }
    else
    {
        rBuild = Response.ok(entity, MediaType.APPLICATION_JSON);
    }

    return rBuild.build();
}

奇怪的是我可以返回该对象的 JSON 表示形式,但不能返回 XML。我还可以返回非动态创建的类的 XML 表示形式。

我的 Maven 项目中对resteasy-jaxb-provider 具有正确的依赖关系:

<dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>3.0.6.Final</version>
</dependency>

最佳答案

使用开箱即用的 cglib 是不可能实现这一点的。自 XmlRootElement不被继承,由cglib创建的子类将不再带有该注解。 Cglib 本身是在 Java 引入注释之前编写的,最近没有更新添加此功能。您可以改为使用 cglib 增强器注册 ASM 访问者,该增强器应该负责将注释添加到 cglib 生成的类中。

但是,您可能需要考虑使用 javassist 创建您的类它有更现代的API并支持注释的编写。

关于java - 使用动态创建的类时,RESTEasy 找不到 application/xml 的消息正文编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019651/

相关文章:

xml - 使用 xslt 向使用 xml 创建的 excel 文件添加样式

xml - XSLT 设置默认值时选择一个不可用

java - 无法使用Neo4j 1.9.M05

maven - 在 Maven Assembly Plugin TAR 存档中设置文件所有者

java - Wicket AjaxIndicatorAppender 跨面板

java - 算法:带有链表缺失项的合并排序

xml - Alamofire XML解析错误-1017

java - 将本地依赖项添加到 Maven 项目的最佳方法

java - Maven 上发布新 Podio Java API

java - Spring MVC 可以用于在 Swing 应用程序中实现 MVC 模式吗?