当前位置: 首页 > 知识库问答 >
问题:

JAXB封送缺少属性/元素

荣波
2023-03-14

我有以下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编组程序将对象转换为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,但它仍然缺失。我做错了什么?

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


共有2个答案

葛念
2023-03-14

JAXB忽略必需的属性,见此问答。

但是,如果您使用Schemagen从您的类创建XSD模式,则注释的必需属性将被满足,并且根据模式将需要XML元素。

颛孙国源
2023-03-14

默认情况下,JAXB实现不会为null值列表属性或元素。您可以使用以下命令让JAXB生成一个包含xsi: nil="true"属性的元素:

@XmlElement(nillable=true)

空元素不是null的有效表示形式。例如,如果元素的类型为xs:dateTime,并且相应的元素为空,那么该文档将不会根据XML模式进行验证。

 类似资料:
  • 为什么验证器(http://validator.w3.org/)拒绝这个?什么属性是我不知道的“必需”? 错误: 错误行408,第142列:元素链接缺少必需的属性/模块/14ce1e21/peadig eucookie。css'type='text/css'media='all'/

  • 我正在使用JPA元模型生成http://relation.to/Bloggers/HibernateStaticMetamodelGeneratorAnnotationProcessor能够使用属性名称执行条件查询。 我正在通过ANT和hibernate-jpamodelgen-4.3.5生成元模型类。最终的http://mvnrepository.com/artifact/org.hiberna

  • 我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类

  • 我正在VSCode中使用OpenAPI 3编写一个API文档,扩展为OpenAPI(Swagger)Editor v4.9.1。直到今天它都运行良好-突然我的文档在所有模式声明中充满了“属性”错误。错误是:

  • 我正在使用JAXB解析器将通过http请求发送的XML转换为Java对象,同时根据XSD模式对其进行验证。问题是,当调用unmarshal()方法时,它会引发以下异常: UnMarshalException:意外元素(URI:“http://www.somedomain.com/”,local:“assign”)。所需元素为(无) 如果从根XML元素中删除名称空间,它会引发相同的异常,uri部分为

  • 我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。 目前我使用以下代码作为测试用例: XML输出为: 元素为空有什么原因吗?我希望它包含日期的字符串表示(即)。为了做到这一点,我需要编写一些我自己的代码吗? 的输出是: