java-JAXB元帅缺少属性/元素

我有以下JAXB对象:

@XmlRootElement(name = "AuthEntry")
@XmlAccessorType(XmlAccessType.FIELD)
public class AuthEntry {

    @XmlElement(name = "Account")
    private Account account;

    @XmlElement(name = "Key", required = true)
    private String key;

    @XmlElement(name = "Expire", required = true)
    private Date expire;

    // Getter & Setter
    // ...

我使用JAXB Marshaller将对象转换为XML:

public static <T> String marshalObject(T pObject) throws JAXBException, IOException {
    JAXBContext context = JAXBContext.newInstance(pObject.getClass());

    Marshaller m = context.createMarshaller();

    try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
        m.marshal(pObject, stream);
        stream.flush();

        return new String(stream.toByteArray());
    }
}

它运行平稳,没有任何异常,但是,结果始终缺少元素关键字.我尝试将其更改为Attribute,但是它也无法正常工作.这是示例输出:

<AuthEntry xmlns:ns2="urn:schemas-microsoft-com:sql:SqlRowSet3">
    <Account ID="1" Username="datvm" Password="datvm" FullName="NullPtrExc" Active="true"/>
    <Expire>2014-06-06T20:07:32.428+07:00</Expire>
</AuthEntry>

我试图将密钥名称更改为另一个名称,例如AuthKey,但仍然丢失.我做错了什么?

编辑我发现了问题,这是因为我的Key值为null.如果它包含值,则将其写入XML.但是,您能否解释一下为什么在XMLElement中,我编写了required = true,但是当它为null时仍然缺少它吗?

解决方法:

杰克斯空值

默认情况下,JAXB实现不会将属性或元素编组为空值.您可以使用以下方法让JAXB生成包含xsi:nil =“ true”属性的元素:

@XmlElement(nillable=true)

空元素

空元素不是有效的null表示形式.例如,如果您的元素的类型为xs:dateTime,而相应的元素为空,则该文档将无法针对XML模式进行验证.

上一篇:C#联合结构编组


下一篇:无法在Unity中将数组从C整理为C#