java - @XmlElements 标有@XmlJavaTypeAdapters?

标签 java xml xml-serialization jaxb jaxb2

我有这种情况

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

所以复合是简单和/或复合的列表。两者都从定义为 Value 扩展

public abstract class Value implements Serializable {}

Simple 是一个标有适配器的类,用于对简单字符串进行编码/解码

@XmlJavaTypeAdapter(SimpleAdapter.class)
public class Simple extends Value {
  private java.lang.String simple;
  // ...
}

化合物不需要适配器。

问题是,如果我按原样使用 Simple,它会正确地编码(marshal)/解封为

<simple>my.text.here</simple>

但是如果我在 Compound 中使用它,它会输出类似的东西

<compound>
  //...
  <simple>
    <value>my.text.here</value>
  </simple>
  //...
</compound>

我只是想知道为什么...我错过了什么吗?我怎样才能删除那个“值(value)”? 在我看来,适配器根本没有被使用,是否可以在@XmlElements 中标记的类型中使用适配器?

编辑

经过几次测试后,我发现问题可能出在我处理简单实例的方式上。所以我简化了我最初的问题:

给定一个简单的类

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

?

最佳答案

听起来您希望 private java.lang.String innerText; 成为 Simple 类的 @XmlValue。尝试使用 @XmlValue 标记在 Simple 中注释字符串:

@XmlRootElement("simple")
public class Simple {
  @XmlValue
  private java.lang.String innerText;
  //getters/setters
}

或者,如果您在 getter 方法上使用注释(我根据问题中的 XML 输出假设将您的 @XmlElement 标记更改为 @XmlValue 标记:

@XmlValue
public java.lang.String getInnerText() {
  return innerText;
}

当我这样做时,我会得到您在已编辑问题中寻找的输出。

关于java - @XmlElements 标有@XmlJavaTypeAdapters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084895/

相关文章:

java - map 中的值 : Can't parse Integer to Integer

java - 如何优化使用 Singleton 扩展 JLabel 的类

java - 如何修复java中的 double 问题

java - 在 XStream 中使用 MapConverter

javascript - 在 Node.js 中读取 XML 文件

java - JAXB wrap 包装集合

c# - 防止 DataContractSerializer 中空成员的序列化

java - 如何用 rest 返回 boolean 值?

c# - 派生类的 XMLIgnore 属性

xml - 正则表达式匹配打开和关闭标签以及该标签内的特定文本模式