JAXB生成的类字段是抽象的

时间:2017-05-05 03:46:43

标签: java xml xsd jaxb

我已经从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;

1 个答案:

答案 0 :(得分:0)

您可以在拨打电话时使用setter方法设置null。

Impl1Class impl1Class = new Impl1Class();
imple1Class.setDep(null);

您可以使用setter方法吗?如果没有,您可能需要继承 Impl1Class 并将 Dep 设置为null。

希望这有帮助!