java – JAXB 2.x:抽象方法被编组为属性
发布时间:2020-12-15 02:23:57 所属栏目:Java 来源:网络整理
导读:我有一个抽象的根类,让我们说A. 我有几个实现类扩展A. A具有FIELD注释以及一些@XmlElement注释属性. A也有抽象方法. 编组时(B扩展A),抽象方法返回的值被编组为属性.不是预期的,对吧? @XmlAccessorType(XmlAccessType.FIELD)public abstract class SpecialPr
我有一个抽象的根类,让我们说A.
我有几个实现类扩展A. A具有FIELD注释以及一些@XmlElement注释属性. A也有抽象方法. 编组时(B扩展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 解决方法
我试图重现你的问题,但到目前为止都没有成功.你能看到我在做与你不同的事吗?以下是我的示例代码:
一个 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> UPDATE 根据您的意见: > B不继承A的XmlAccessorType设置. 以下是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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |