首页 > 解决方案 > 为什么使用 JAXB 解组将 sting xml 转换为对象的方法返回 null?

问题描述

我正在尝试将我的 xml 字符串转换为对象。我有以下代码,但是当我到达一个字段时,它返回 null。

@Override
public DatosInputDto  convertXmlToDatosInputDto (String xml) {
    DatosInputDto  input = null;
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(DatosInputDto.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        StringReader reader = new StringReader(xml);
        input = (DatosInputDto) unmarshaller.unmarshal(reader);
    } catch (JAXBException ex) {
        LOGGER.error(ex.getMessage(), ex);
    }
    return input;
}

这是字符串的xml:

<?xml version="1.0" encoding="UTF-8"?>
<nd0:OU_SchemaPublic xmlns:nd0="http://www.prueba/cadena/ejemplo/1.00">
    <nd0:TTT_Code>LIM28</nd0:TTT_Code>
    <nd0:TTT_Date>20210622</nd0:TTT_Date>
    <nd0:TTT_CodeType>0203</nd0:TTT_CodeType>
    <nd0:TTT_Receiver>0098</nd0:TTT_Receiver>
    <nd0:TTT_SenderPT>0092</nd0:TTT_SenderPT>
    <nd0:TTT_DocumentFile>Documents</nd0:TTT_DocumentFile>
</nd0:OU_SchemaPublic>
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"code", "date", "codeType", "receiver", "senderPt","documentFile"})
@XmlRootElement(name = "OU_SchemaPublic")
public class DatosInputDto implements Serializable {

    /**
    * 
    */
    private static final long serialVersionUID = -4596758570871609534L;

        private String code;
        private String date;
        private String codeType;
        private String receiver
        private String senderPt;
        private String documentFile;
}

包信息

@javax.xml.bind.annotation.XmlSchema(
            xmlns = {@javax.xml.bind.annotation.XmlNs(prefix = "nd0",
                namespaceURI = "http://www.prueba/cadena/ejemplo/1.00")},
            namespace = "http://www.prueba/cadena/ejemplo/1.00",
            elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.prueba;

我的错误是什么?我需要添加或删除什么?

标签: javaxmlspring-boot

解决方案


您的 XML 属性名称与 Pojo 类不同。在字段上添加以下注释。

@XmlAttribute
 private String code

如果不起作用,请按如下方式添加密钥名称。

@XmlAttribute(name="nd0:TTT_Code")
 private String code

推荐阅读