2014-02-25 7 views
2

找不到MessageBodyWriter類型的響應對象:媒體類型的java.util.ArrayList中:應用/ XML的RESTEasy找不到應用/ 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提供商正確的依賴性:

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

當你生成CGLIB你的類,你還生成JAXB註解呢? – gregwhitaker

+0

我想你已經打了有問題......我需要我的註釋類@XmlRootElement ...我們弄清楚如何添加註解類:) :)感謝您的幫助兄弟! – Schokea

回答

2

這是不可能的使用CGLIB開箱。由於XmlRootElement不被繼承,由CGLIB創建的子類將不再攜帶這種註釋。 Cglib本身是在將註釋引入到Java之前編寫的,並且最近的更新沒有添加此功能。您可以改爲使用cglib增強器註冊ASM訪問者,該增強器應該負責將註釋添加到cglib生成的類。

然而,你可能要考慮使用javassist具有更現代的API,支持批註的書寫創建類。

+0

是因爲@格雷格Whitakers評論我也從其他線程,這是不可能的發現。我現在要看看javassist,謝謝。 – Schokea

相關問題