У меня странная проблема. Я использую @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 для этого.
Спасибо за вашу помощь.