2011-09-28 86 views
0

我有一個奇怪的問題。我使用@Provider來註釋我的Mapper異常,並且它工作正常,但是當我使用它來註釋下面的類時,它根本不起作用。JBoss AS7 + RestEasy:如何使用@Provider啓用自定義MessageBodyReader什麼也沒做

@Consumes("application/x-java-serialized-object") 
@Provider 
public class JAXBSpecificMarshaller implements MessageBodyReader 
{ 

    @PersistenceContext(unitName = "primary", type = PersistenceContextType.EXTENDED) 
    private EntityManager em; 

    @Override 
    public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) 
    { 
    return type.isAnnotationPresent(XmlRootElement.class); 
    } 

    @Override 
    public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException 
    { 
    try 
    { 
     // DataAdapter dataAdapter = new DataAdapter(em); 
     //unmarshaller.setAdapter(dataAdapter); 
     System.out.println(type.getName()); 
     JAXBContext ctx = JAXBContext.newInstance(type); 
     Unmarshaller unmarshaller = ctx.createUnmarshaller(); 
     return unmarshaller.unmarshal(entityStream); 
    } 
    catch (JAXBException ex) 
    { 
     throw new RuntimeException(ex); 
    } 
    } 


} 

我的主要原因是能夠使用特定的適配器通過在輸入xml中傳遞其id來檢索對象。我跟着這個Serialize a JAXB object via its ID?。但是爲了使用我的enitymanger初始化適配器,我被告知使用MessageBodyReader來完成這個任務。

謝謝你的幫助。

+0

你知道你的'MessageBodyReader'沒有部署嗎?有可能'isReadable'方法總是返回false? –

+0

但即使我在isReadable中始終發送它也是行不通的。 與調試器我發現我想反序列化的實體類不是一個參數化類型,所以編組人員不使用它,它優先收集CollectionProvider – Ghostwan

回答

0

您能否提供一些您正在部署的應用程序服務器以及您正在使用哪種JAX-RS實現的上下文?

對於嘗試爲某些JAXB註釋類實現@Produces @Provider的JBoss AS 7上的RESTeasy,我有類似的問題,但從RESTeasy提供的JAXB編組提供程序總是優先,並且我的編組從未執行過。

我的解決方案是編寫自定義JAXBContextFinder,ContextResolver和JAXBContext的實現。我使用resteasy-jettison提供程序源代碼作爲實現自己的處理程序的配方。 http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/Built_in_JAXB_providers.html

+0

我在Jboss 7上部署戰爭。 事情是,如果我使用來自http://stackoverflow.com/questions/7278406/serialize-a-jaxb-object-via-its-id/7285517#7285517 它在我的項目上工作,但當我改變類型使用上的MessageBodyWriter按我的類型它也不會工作。 – Ghostwan

+0

我想我和你有同樣的問題,因爲我看到了提供者,但它不會選擇它。你有任何JAXBContextFinder,ContextResolver,JAXBContext的源代碼。謝謝 – Ghostwan

+0

對不起,遲到的迴應,你可能自己找到了。作爲參考:http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.resteasy/resteasy-jettison-provider/1.2.1.GA/org/jboss/resteasy /plugins/providers/jaxb/json/JsonJAXBContextFinder.java?av=f – hovenko