У меня странная проблема. Я использую @Provider для аннотации своего исключения Mapper, и он работает нормально, но когда я использую его для аннотирования класса ниже, он вообще не будет работать.
@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. Я следовал этому сериализовать объект JAXB через его идентификатор? . Но для инициализации адаптера с помощью моего enitymanger мне сказали использовать для этого MessageBodyReader.
Спасибо за помощь.
MessageBodyReader
не развертывается? Возможно ли, что методisReadable
всегда возвращает false? - person bdoughan   schedule 28.09.2011