在子类中使用@XmlValue
Make use of @XmlValue in subclass
我让这段代码在 EclipseLink 2.5.2 上运行良好,但移动到 2.6.0 会破坏 XmlValue
注释:
The property or field value cannot be annotated with XmlValue since it is a subclass of another XML-bound class.
基础 class 看起来像这样:
public abstract class Baseclass {
@XmlAttribute
private String baseValue;
// ...
}
两个子class之一(复合模式,class B 可以有一个 BaseClass 元素列表):
@XmlRootElement(name = "A")
public class A extends BaseClass {
@XmlValue
private String aValue;
}
以及用法:
public class Root {
@XmlElements({
@XmlElement(class = A.class),
@XmlElement(class = B.class)
})
private BaseClass object;
}
遗憾的是 class 布局无法更改,因为它是 JPA 持久保存到数据库中。我尝试用 XmlJavaTypeAdapter
包装 A 和 B classes 但没有成功。
是否可以像以前一样使用 EL 2.6 或通过适配器使用注释 class?
我设法使用 XmlAdapter 解决了这个问题。
在子类中替换 XmlValue 注解:
@XmlPath(".")
@XmlJavaTypeAdapter(AClassAdapter.class)
private String aValue;
和适配器实现:
public class AClassAdapter extends XmlAdapter<AdaptedValue, String> {
public static class AdaptedValue {
@XmlValue
public String value;
public AdaptedValue() {
}
public AdaptedValue(String value) {
this.value = value;
}
}
@Override
public String unmarshal(AdaptedValue v) throws Exception {
return v.value;
}
@Override
public AdaptedValue marshal(String v) throws Exception {
return new AdaptedValue(v);
}
}
XmlPath(".")
成功了。没有它,编组的 XML 仍然具有包裹在 <aValue>
节点中的 aValue
的值。
就我而言,解决方案是按照此处的建议添加@XmlValueExtension(除了@XmlValue):https://bugs.eclipse.org/bugs/show_bug.cgi?id=461990
我让这段代码在 EclipseLink 2.5.2 上运行良好,但移动到 2.6.0 会破坏 XmlValue
注释:
The property or field value cannot be annotated with XmlValue since it is a subclass of another XML-bound class.
基础 class 看起来像这样:
public abstract class Baseclass {
@XmlAttribute
private String baseValue;
// ...
}
两个子class之一(复合模式,class B 可以有一个 BaseClass 元素列表):
@XmlRootElement(name = "A")
public class A extends BaseClass {
@XmlValue
private String aValue;
}
以及用法:
public class Root {
@XmlElements({
@XmlElement(class = A.class),
@XmlElement(class = B.class)
})
private BaseClass object;
}
遗憾的是 class 布局无法更改,因为它是 JPA 持久保存到数据库中。我尝试用 XmlJavaTypeAdapter
包装 A 和 B classes 但没有成功。
是否可以像以前一样使用 EL 2.6 或通过适配器使用注释 class?
我设法使用 XmlAdapter 解决了这个问题。
在子类中替换 XmlValue 注解:
@XmlPath(".")
@XmlJavaTypeAdapter(AClassAdapter.class)
private String aValue;
和适配器实现:
public class AClassAdapter extends XmlAdapter<AdaptedValue, String> {
public static class AdaptedValue {
@XmlValue
public String value;
public AdaptedValue() {
}
public AdaptedValue(String value) {
this.value = value;
}
}
@Override
public String unmarshal(AdaptedValue v) throws Exception {
return v.value;
}
@Override
public AdaptedValue marshal(String v) throws Exception {
return new AdaptedValue(v);
}
}
XmlPath(".")
成功了。没有它,编组的 XML 仍然具有包裹在 <aValue>
节点中的 aValue
的值。
就我而言,解决方案是按照此处的建议添加@XmlValueExtension(除了@XmlValue):https://bugs.eclipse.org/bugs/show_bug.cgi?id=461990