首页 文章

使用动态创建的类时,RESTEasy无法找到application / xml的Message Body Writer

提问于
浏览
2

找不到类型的响应对象的MessageBodyWriter:java.util.Array媒体类型列表:application / xml

尝试在动态创建的类/ dtos列表的xml中返回响应时,我收到上述错误 .

@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>

1 回答

  • 2

    使用开箱即用的cglib是不可能的 . 由于XmlRootElement不是继承的,因此cglib创建的子类将不再携带此批注 . Cglib本身是在将注释引入Java之前编写的,并且最近没有更新添加此功能 . 您可以使用cglib增强器注册ASM访问者,该增强器应负责将注释添加到cglib生成的类中 .

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

相关问题