JBossAS7+;RestEasy:如何使用@Provider启用自定义MessageBodyReader没有做任何事情

JBossAS7+;RestEasy:如何使用@Provider启用自定义MessageBodyReader没有做任何事情,rest,annotations,resteasy,provider,jboss7.x,Rest,Annotations,Resteasy,Provider,Jboss7.x,我有个棘手的问题。我使用@Provider来注释我的映射程序异常,它可以正常工作,但是当我使用它注释下面的类时,它根本不起作用 @Consumes("application/x-java-serialized-object") @Provider public class JAXBSpecificMarshaller implements MessageBodyReader { @PersistenceContext(unitName = "primary", type = Persist

我有个棘手的问题。我使用@Provider来注释我的映射程序异常,它可以正常工作,但是当我使用它注释下面的类时,它根本不起作用

@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来检索对象。我遵循了这一点。但是要用我的enitymanger初始化适配器,我被告知要使用MessageBodyReader进行初始化


谢谢您的帮助。

您能提供一些关于您要部署到哪个应用服务器以及您正在使用哪个JAX-RS实现的上下文吗

我在JBoss上遇到了与RESTeasy类似的问题,因为7试图为一些JAXB注释类实现@products@提供程序,但RESTeasy提供的JAXB封送器提供程序始终优先,我的封送器从未执行过


我的解决方案是为自定义JAXBContextFinder、ContextResolver和JAXBContext编写实现。我使用resteasy抛弃提供程序源代码作为实现自己的处理程序的方法

您知道您的
MessageBodyReader
未部署吗?
isReadable
方法是否可能总是返回false?但即使我在isReadable中发送always true,它也不会起作用。通过调试器,我发现我要反序列化的实体类不是参数化类型,因此封送拆收器不使用它,它更喜欢CollectionProvider,我正在Jboss 7上部署war。问题是,如果我在我的项目中使用它的源代码,但是当我按我的类型更改MessageBodyWriter上的类型使用时,它也不会工作。我想我和你有同样的问题,因为我看到了提供程序,但它不会选择它。您有JAXBContextFinder、ContextResolver、JAXBContext的源代码吗。谢谢你迟来的回复,你可能自己也发现了。仅供参考:仅供参考:这可能与RestEasy 2.3.3中修复的此问题有关。最终,我在使用2.3.1.GA遇到类似问题后发现了此问题。