特に問題を解決しようとしているわけではありませんが、ジャージへの学習の道を進んでいます。
次のようにマークされたエンティティクラスがあります。
@Entity
@Table(name = "myentity")
@XmlRootElement
public class MyEntity implements serializable {
// lots of methods...
}
および対応するジャージ サービス
@Stateless
@Path("entity")
public class EntityFacade {
@GET
@Path("{param}")
@Produces({"application/xml;charset=UTF-8"})
public List<MyEntity> find(@PathParam("param") String param) {
List entities = entityManager.getResultList(); // retrieve list from db
return entities;
}
}
正しい XML 応答を返します。XML応答を生成する同じ動作を複製する MessageBodyWriter を書きたいとしたら、どうすればそれを行うことができますか?
@Provider
public class TrasformerMessageBodyWriter implements MessageBodyWriter<Object> {
@Override
public long getSize(Object o, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return 0;
}
@Override
public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
// return true or false depending if I want to rewrite the response
}
@Override
public void writeTo(Object o, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException,
WebApplicationException {
// what do I need to write here...
}
}
@Provider アノテーションを付けると、メッセージ本文ライターが正しく呼び出されていることがわかります。
writeTo が呼び出されると、Object o は Vector で、Type genericType は List ですが、この時点で、XML でオブジェクトを変換する方法について完全に迷っています。
最後に、jersey とその注釈によってすべてが既に提供されている場合、MessageBodyWriter はどのように役立つのでしょうか?
繰り返しますが、これは単なる学術的な演習です。