繁体   English   中英

Jaxb 解组返回空对象

[英]Jaxb unmarshaling return null object

我有非常有趣的 xml,我正在尝试将此 xml 转换为 pojo。 在我的 jaxb 解组其返回的空对象之后。

这是xml:

<ServiceResultOfArrayOfstringuHEDJ7Dj xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/HotelWeb.SanAdminSite.RestWebApi.App_Data">
    <Data xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d2p1:string>1105</d2p1:string>
        <d2p1:string>1111</d2p1:string>
    </Data>
    <Error>
        <Code></Code>
        <Message></Message>
    </Error>
    <InfoMessage></InfoMessage>
    <IsSuccessful>true</IsSuccessful>
</ServiceResultOfArrayOfstringuHEDJ7Dj>

我的 POJO 的:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ServiceResultOfArrayOfstringuHEDJ7Dj", namespace = "http://schemas.datacontract.org/2004/07/HotelWeb.SanAdminSite.RestWebApi.App_Data")
public class PostSendLogIdServiceXmlResult {

    private String xmlns;

    @XmlElement(name = "InfoMessage")
    private String infoMessage;

    @XmlElement(name = "Error")
    private Error error;

    @XmlElement(name = "Data")
    private PostSendLogIdData data;

    @XmlElement(name = "IsSuccessful")
    private boolean isSuccessful;

    public String getXmlns() {
        return xmlns;
    }

    public void setXmlns(String xmlns) {
        this.xmlns = xmlns;
    }

    public String getInfoMessage() {
        return infoMessage;
    }

    public void setInfoMessage(String infoMessage) {
        this.infoMessage = infoMessage;
    }

    public Error getError() {
        return error;
    }

    public void setError(Error error) {
        this.error = error;
    }

    public PostSendLogIdData getData() {
        return data;
    }

    public void setData(PostSendLogIdData data) {
        this.data = data;
    }

    public boolean isSuccessful() {
        return isSuccessful;
    }

    public void setSuccessful(boolean successful) {
        isSuccessful = successful;
    }

    @Override
    public String toString() {
        return "PostSendLogIdServiceXmlResult{" +
                "xmlns='" + xmlns + '\'' +
                ", infoMessage='" + infoMessage + '\'' +
                ", error=" + error +
                ", data=" + data +
                ", isSuccessful=" + isSuccessful +
                '}';
    }
}
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

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

    @XmlElement(name = "Code")
    private String code;
    @XmlElement(name = "Message")
    private String message;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Arrays;

@XmlRootElement(name = "Data", namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")
@XmlAccessorType(XmlAccessType.FIELD)
public class PostSendLogIdData {

    @XmlElement(name = "string")
    private String[] postSendLogIds;

    private String _xmlns;

    public String[] getPostSendLogIds() {
        return postSendLogIds;
    }

    public void setPostSendLogIds(String[] postSendLogIds) {
        this.postSendLogIds = postSendLogIds;
    }

    public String get_xmlns() {
        return _xmlns;
    }

    public void set_xmlns(String _xmlns) {
        this._xmlns = _xmlns;
    }

    @Override
    public String toString() {
        return "PostSendLogIdData{" +
                "postSendLogIds=" + Arrays.toString(postSendLogIds) +
                ", _xmlns='" + _xmlns + '\'' +
                '}';
    }
}

和我的 Jaxb 转换实现:

 context = JAXBContext.newInstance(PostSendLogIdServiceXmlResult.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();
 PostSendLogIdServiceXmlResult unmarshal = (PostSendLogIdServiceXmlResult) unmarshaller.unmarshal(new StringReader(response));

在此之后,我获得了具有空值的新PostSendLogIdServiceXmlResult对象。

你能给我任何建议吗。

提前致谢。

再次查看 XML。 命名空间不适用于<Data>元素,它适用于<string>子元素。 请注意d2p1:前缀的应用位置。

此外, <Data>不是根元素,因此整个@XmlRootElement(name = "Data", ...注释未使用,即不必要,而且似乎使您感到困惑,因此我建议从PostSendLogIdData类。

正确的用法是:

@XmlElement(name = "string", namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")
private String[] postSendLogIds;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM