我有一個奇怪的問題。我使用@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來完成這個任務。
謝謝你的幫助。
你知道你的'MessageBodyReader'沒有部署嗎?有可能'isReadable'方法總是返回false? –
但即使我在isReadable中始終發送它也是行不通的。 與調試器我發現我想反序列化的實體類不是一個參數化類型,所以編組人員不使用它,它優先收集CollectionProvider – Ghostwan