JAXB unmarshalling de documentos “genéricos” do mundo real

Temos um grande conjunto de documentos de configuração do estilo

<foo>
  <bar class="com.diedel.Gnarf">
    ...more content
  </bar>
  <bar class="de.doedel.Bork">
    ..more content
  </bar>
  ...
</foo>

As classes de implementação genérica são todas mapeadas usando o próprio Jaxb.

Antes de eu finalmente reverter para o Xstream, uma pergunta para a comunidade: Existe uma maneira (sem truques) de conseguir isso sem ser feito em Jaxb? O que nós tentamos até agora é a desobstrução "aninhada" usando um @ XMLAdapter, onde o campo "bar" obtém um Elemento, obtém a classe alvo e chama outro ciclo "unmarshall". Essa abordagem tem sido a) bem lenta e b) é quebrada com a mudança para o Java 7, onde alguns ThreadLocal mágicos destroem o contexto ao retornar da unmarshall interna.

Descobri que o MOXy pode suportar isso usando @XmlDiscriminatorNode - isso parece uma boa solução e eu realmente gosto da entrada muito boa do Blaise - mas adicionar uma biblioteca de 7MB apenas por diversão não é uma opção.

Outras ideias?

questionAnswers(2)

yourAnswerToTheQuestion