Como serializar condicionalmente com JAXB ou Jackson? Vista Externa vs Vista Interna

Estou criando uma API RESTful e tenho um caso de uso em que preciso renderizar duas visualizações diferentes dos meus dados. Uma que podemos usar internamente e outra que exporemos externamente. Além disso, minha API precisa suportar XML e JSON.

Para minha resposta JSON, isso é extremamente fácil de se fazer com Jackson. Posso incluir condicionalmente campos em minha resposta JSON usando o recurso JsonViews:http://wiki.fasterxml.com/JacksonJsonViews

Primeiro você precisa criar uma classe simples especificando seus pontos de vista:

public class Views {

    public static class External {}

    public static class Internal extends External {}
}

Agora, com as minhas aulas de visualização, anotei meus campos com os quais eles parecem pertencer:

    @JsonView(Views.External.class)
    private String external = "External";

    @JsonView(Views.Internal.class)
    private String internal = "Internal";

Você pode então serializar o objeto e especificar qual visão você quer usar:

    ObjectMapper jsonMapper = new ObjectMapper();
    ObjectWriter externalWriter = jsonMapper.writerWithView(Views.External.class);
    String externalJson = externalWriter.writeValueAsString(new ResponseObject());

Isso funciona bem para JSON, mas infelizmente o mesmo não é suportado para XML. Como posso conseguir o mesmo com XML? Estou disposto a usar o JAXB, se necessário, para minha conversão XML.

questionAnswers(2)

yourAnswerToTheQuestion