我已经从xsd文件生成了类。
此类包含具有抽象类的字段。这个抽象类有两个不同的实现。我们的电话是Impl1CLass和Impl2Class。
我无法修改xsd架构,我无法修改生成的类。
我需要做的就是当jaxb编组这个类并且抽象字段具有null值时,我需要得到这样的结果:
<dep xsi:type="Impl1Class" xsi:nil="true"/>
生成的类中的Thi字段如下所示:
protected Dep dep;
Dep是抽象类。
所以我需要设置这是nil并且type是特定的(Impl1Class)
我尝试使用BoundType创建XmlAdapter作为抽象类,而ValueType是JAXBElement但是没有运气,因为它需要默认的非arg构造函数,但JAXBElement没有这样的。
REMARK。换句话说我想设置xsi:在xsi时输入:nil =&#34; true&#34;。我怎么能这样做?
以下是生成的类
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "DepartmentKey"
)
@XmlSeeAlso({GroupDepartmentKey.class, EnterpriseDepartmentKey.class})
public abstract class DepartmentKey {
public DepartmentKey() {
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "GroupDepartmentKey",
propOrder = {"serviceProviderId", "groupId", "name"}
)
public class GroupDepartmentKey extends DepartmentKey {
@XmlElement(
required = true
)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String serviceProviderId;
@XmlElement(
required = true
)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String groupId;
@XmlElement(
required = true
)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String name;
......
}
在目标类中没有任何注释的字段
protected DepartmentKey department;
答案 0 :(得分:0)
您可以在拨打电话时使用setter方法设置null。
Impl1Class impl1Class = new Impl1Class();
imple1Class.setDep(null);
您可以使用setter方法吗?如果没有,您可能需要继承 Impl1Class 并将 Dep 设置为null。
希望这有帮助!