我有一个抽象的根类,比方说A
。
我有几个扩展A
的实现类。
A
具有FIELD注释以及一些@XmlElement
带注释的属性。
A
也有一个抽象的方法。
当编组(B extends A
)时,抽象方法返回的值将作为属性进行编组。不是预期的,对吧?
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class SpecialProfile extends ContentNodeBean {
@XmlElement(name="do-index", namespace="my")
private boolean doIndex = false;
public abstract SpecialProfileType getSpecialProfileType();
... getters and setters for properties ...
}
是否有人有同样的问题,如何解决?
我正在使用org.eclipse.persistence.moxy 2.1.2
答案 0 :(得分:1)
我试图重现你的问题,但到目前为止都没有成功。你能看到我在做与你不同的事吗?以下是我的示例代码:
<强> A 强>
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class A {
public abstract C getC();
public abstract void setC(C c);
}
<强>乙强>
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class B extends A {
private C c;
@Override
public C getC() {
return c;
}
@Override
public void setC(C c) {
this.c = c;
}
}
<强> C 强>
public class C {
}
<强>演示强>
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import org.eclipse.persistence.Version;
public class Demo {
public static void main(String[] args) throws Exception {
System.out.println(Version.getVersionString());
JAXBContext jc = JAXBContext.newInstance(B.class);
System.out.println(jc);
B b = new B();
b.setC(new C());
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(b,System.out);
}
}
<强>输出强>
2.1.2.v20101206-r8635
org.eclipse.persistence.jaxb.JAXBContext@100ab23
<?xml version="1.0" encoding="UTF-8"?>
<b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="b"><c/></b>
<强>更新强>
根据您的意见:
以下是B类应该是什么样的:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class B extends A {
@XmlTransient
private C c;
@Override
public C getC() {
return c;
}
@Override
public void setC(C c) {
this.c = c;
}
}