Маршаллинг JAXB исключительно из интерфейсов

У меня есть сложная иерархия интерфейсов Java, которые я хотел бы маршалировать (и не обязательно демаршалировать )с помощью JAXB. Эти интерфейсы представляют объекты, которые будут возвращены из JAX -RS REST API в виде XML, JSON, YAML и т. д. (Я использую RestEasy, который может маршалировать аннотированные типы JAXB -в форматах, отличных от XML.)

Проблема, похоже, в том, что JAXB в основном ориентирован на класс -. Я провел много веб-исследований о трудностях с JAXB и интерфейсами, наиболее близкими решениями являются MOXy JAXB -Map Interfaces to XML и JAXB и интерфейсные модели . Однако у меня есть две основные проблемы :и )я хочу аннотировать/работать с точки зрения интерфейсов, а не конкретных классов (, для которых будет несколько реализаций и которые содержат другие важные состояния, которые не следует маршалировать )и b )У меня несколько уровней наследования интерфейсов. Вот пример интерфейсов без аннотаций JAXB:

interface Uuided {
  UUID getId();
}
interface Named {
  String getName();
}
interface Component extends Uuided, Named {
  Map getAttributes();
}
interface Attribute extends Named {
  Type getType();
  Object getValue();
}
interface ComponentAttribute extends Attribute {
  Component getDeclaringComponent();
}

В идеале это должно генерировать что-то вроде:


  
    
      
      green
      
    
  

Понятно, что абстрактно это приводит к таким проблемам, как определение наиболее производного аннотированного интерфейса, которых теоретически может быть больше одного. Однако в моем случае я считаю, что конкретные классы реализуют только один интерфейс, который следует маршалировать. Разматывать не нужно, так как у меня есть отдельные классы, определяющие свойства upsert.

Итак, мой вопрос: возможно ли это сделать с помощью JAXB, и если да, то как? Даже если мне нужно быть очень точным в определении привязок, адаптеров и т. д., я хотел бы работать в рамках JAXB, чтобы получить преимущества всех не--XML-провайдеров в RestEasy.

13
задан Trevor Robinson 6 March 2012 в 20:10
поделиться