java - 使用列表将 XML 解码为对象会返回 Null 对象

标签 java xml jaxb unmarshalling

我在下面拼命寻求帮助。我已经研究这个问题一个多星期了。因此,详细发布此代码以获得描述性答案。 当我将 XML 解码到对象时。它为 RatePlans 标记返回 Null。

下面是 XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OTA_HotelRatePlanRS EchoToken="fromDB" xmlns="http://www.opentravel.org/OTA/2003/05">
    <Success/>
    <RatePlans HotelCode="00000004" HotelName="Lemon Tree Hotel, Udyog Vihar, Gurugram">
        <RatePlan Start="01 Jan 15" End="31 Mar 19" RatePlanType="Business Single Room With Breakfast(01 Jan 15 ~ 31 Mar 19)" RatePlanID="0000212624" RatePlanQualifier="false" PromotionVendorCode="" RatePlanCategory="B2C">
            <BookingRules>
                <InventoryInfo InvCode="0000000085" InvType="Business Room Single"/>
            </BookingRules>
            <RatePlanLevelFee>
                <Fee>
                    <Taxes>
                        <Tax Code="35" Percent="0.0" ChargeUnit="N"/>
                    </Taxes>
                </Fee>
            </RatePlanLevelFee>
            <Commission StatusType="P">
                <CommissionableAmount Amount="25.00"/>
                <TPA_Extensions>
                    <ExtraGuest commissionable="Y" type="ExtraAdult1"/>
                    <ExtraGuest commissionable="Y" type="ExtraAdult2"/>
                    <ExtraGuest commissionable="Y" type="ExtraAdult3"/>
                    <ExtraGuest commissionable="Y" type="ExtraChild1"/>
                    <ExtraGuest commissionable="Y" type="ExtraChild2"/>
                    <ExtraGuest commissionable="Y" type="ExtraChild3"/>
                </TPA_Extensions>
            </Commission>
        </RatePlan>
    </RatePlans>
</OTA_HotelRatePlanRS>

下面是 OTA_HotelRatePlanRS Java 对象

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="OTA_HotelRatePlanRS", namespace="http://www.opentravel.org/OTA/2003/05")
public class OTA_HotelRatePlanRS {

    @XmlAttribute(name="EchoToken")
    private String EchoToken;

    @XmlElement(name="Success")
    private Success success;

    @XmlElement(name="RatePlans")
    private RatePlans rateplans;

    @Override
    public String toString() {
        return "OTA_HotelRatePlanRS [EchoToken=" + EchoToken + ", success=" + success + ", rateplans=" + rateplans
                + "]";
    }
}

下面是成功的 Java 对象

@XmlRootElement(name="Success")
public class Success {

    @Override
    public String toString() {
        return "Success []";
    }

}

下面是 RatePlans Java 对象

@XmlAccessorType(XmlAccessType.FIELD)
public class RatePlans {

    @XmlElement(name="RatePlan")
    private ArrayList<RatePlan> rateplan;

    public ArrayList<RatePlan> getRateplan() {
        return rateplan;
    }

    public void setRateplan(ArrayList<RatePlan> rateplan) {
        this.rateplan = rateplan;
    }

    @Override
    public String toString() {
        return "RatePlans [rateplan=" + rateplan + "]";
    }
}

下面是 RatePlan Java 对象。

@XmlAccessorType(XmlAccessType.FIELD)
public class RatePlan {

    @XmlAttribute(name="Start")
    private String Start;
    @XmlAttribute(name="End")
    private String End;
    @XmlAttribute(name="RatePlanType")
    private String RatePlanType;
    @XmlAttribute(name="RatePlanID")
    private String RatePlanID;
    @XmlAttribute(name="RatePlanCategory")
    private String RatePlanCategory;

    @Override
    public String toString() {
        return "RatePlan [Start=" + Start + ", End=" + End + ", RatePlanType=" + RatePlanType + ", RatePlanID="
                + RatePlanID + ", RatePlanCategory=" + RatePlanCategory + "]";
    }
}

下面是主要方法。

public static void main(String[] args) {

        try {
            File file = new File("hotelres.xml");
            JAXBContext jContext = JAXBContext.newInstance(OTA_HotelRatePlanRS.class);
            Unmarshaller unmarshallerObj = jContext.createUnmarshaller();
            OTA_HotelRatePlanRS ob = (OTA_HotelRatePlanRS) unmarshallerObj.unmarshal(file);
            System.out.println(ob);
        } catch (Exception e) {
            e.printStackTrace();
        }       

    }

控制台响应 OTA_HotelRatePlanRS [EchoToken=fromDB,成功=null,rateplans=null]

最佳答案

我不相信这个。我在这个问题上徘徊了一个多星期,在将其发布到此处后几分钟内就得到了解决。

我所做的只是从 XML 消息中删除 xmlns 属性。

关于java - 使用列表将 XML 解码为对象会返回 Null 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49855294/

相关文章:

java - 使用 JAXB 生成 Java 原始类型的 XML 模式类型不添加 required 到它

java - Java阶乘程序中的递归

java - 我如何从 Nanohttpd 提供外部 css、jpg 和 gif 文件(Nanohttpd 在普通电脑上运行,而不是在 Android 上运行)?

java - 从 IntelliJ Idea 复制堆栈跟踪

java - 使用 Java 创建 XML 文档

javascript - 从嵌入页面中运行的脚本向容器页面中的脚本发送数据

wsdl - JAXB 自定义 - WSDL 和 schemaLocation 中的多个模式

java - 尝试使用 KeyListeners 和 ImageIcons 时出现错误?

xml - 子结构上的 XPath 求和

gradle - 在gradle应用程序中为wsdl和xsd修改生成的Java类的程序包名称