So schreiben Sie einen XML MessageBodyWriter-Provider mit Trikot

Ich versuche gerade kein Problem zu lösen, sondern bin auf einem Lernweg zum Trikot.

Ich habe eine Entitätsklasse wie folgt markiert:

@Entity
@Table(name = "myentity")
@XmlRootElement
public class MyEntity implements serializable {
  // lots of methods...
}

und den entsprechenden Trikotservice

@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;
    }

}

Welche geben eine korrekte XML-Antwort. Angenommen, ich möchte einen MessageBodyWriter schreiben, der dasselbe Verhalten reproduziert und eine XML-Antwort erzeugt. Wie könnte ich das tun?

@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...
    }
}

Durch Markieren mit @Provider Annotation kann ich sehen, dass der Nachrichtentext-Writer korrekt aufgerufen wurde.

Wenn writeTo aufgerufen wird, ist Object o ein Vektor und Type genericType ist eine Liste, aber an diesem Punkt bin ich völlig verloren, wie ich das Objekt in XML transformieren könnte.

Zuletzt, wenn alles bereits von Jersey und seinen Anmerkungen bereitgestellt wird, wie kann ein MessageBodyWriter nützlich sein?

Ich wiederhole noch einmal, dass dies nur eine akademische Übung ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage