У меня такая ситуация
@XmlType(name ="", propOrder={"value"})
@XmlRootElement(name = "compound")
public class Compound extends Value {
@XmlElements({
@XmlElement(name="simple", type=Simple.class),
@XmlElement(name="compound", type=Compound.class)
})
protected List<Value> value;
// ...
}
Таким образом, соединение - это список как простых, так и / или сложных.Оба расширяются от значения, определенного как
public abstract class Value implements Serializable {}
Simple - это класс, помеченный с помощью адаптера для маршалирования / демаршалирования в / из простой строки
@XmlJavaTypeAdapter(SimpleAdapter.class)
public class Simple extends Value {
private java.lang.String simple;
// ...
}
Соединению не нужен адаптер.
Проблема в том, что, если я использую Simple 'as is', он правильно маршалирует / unmarshals как
<simple>my.text.here</simple>
, но если я использую его внутри Compound, он выдает что-то вроде
<compound>
//...
<simple>
<value>my.text.here</value>
</simple>
//...
</compound>
И мне просто интересно, почему ... Я что-то пропустил?Как я могу удалить это «значение»?Мне кажется, что адаптер вообще не используется, возможно ли использовать адаптеры в типах, помеченных внутри @XmlElements?
EDIT
После нескольких тестов я обнаружилчто проблема может быть в том, как я обрабатываю простой экземпляр.Поэтому я упростил свой начальный вопрос следующим образом:
Учитывая класс Simple, например
@XmlRootElement("simple")
public class Simple {
private java.lang.String innerText;
// getters/setters
}
, как я могу получить маршаллированный вывод, такой как
<simple>
my.inner.text.here
</simple>
вместо
<simple>
<value>my.inner.text.here</value>
</simple>
?