Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用JaXB解组后获取null?_Java_Xml_Jaxb - Fatal编程技术网

Java 在使用JaXB解组后获取null?

Java 在使用JaXB解组后获取null?,java,xml,jaxb,Java,Xml,Jaxb,我有下面的XML <?xml version="1.0"?> <aws:TrafficHistoryResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"> <aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11"> <aws:OperationRequest>

我有下面的XML

<?xml version="1.0"?>
<aws:TrafficHistoryResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
    <aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11">
        <aws:OperationRequest>
            <aws:RequestId>6b09364e-ac0d-686c-cb95-0b1393fd234e</aws:RequestId>
        </aws:OperationRequest>

        <aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
            <aws:StatusCode>Success</aws:StatusCode>
        </aws:ResponseStatus>
    </aws:Response>
</aws:TrafficHistoryResponse>
AlexaResult 但是我得到的
result.getAlexaResponse().getAlexaHistoryResult()
为空?我遗漏了什么


谢谢

请注意,您将
aws
名称空间从以下位置更改为:

xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"

首先,确保这是正确的

接下来,如果是这种情况,那么您的文档中有不同名称空间中的元素。在这种情况下,基本上有两种选择:

  • 使用
    package info.java
    定义最常用的名称空间(我认为这将是
    http://awis.amazonaws.com/doc/2005-07-11
    在这种情况下)。在使用此名称空间的
    @XmlElements
    (以及其他注释)中省略
    名称空间
  • 不要使用
    package info.java
    并在所有
    @xmlmelements
    中写入
    名称空间
package info.java
可以提供一个“默认”名称空间,如果它们不提供
名称空间,则该名称空间将用于“限定”元素(由
@xmlement
@xmlementwrapper
@xmlementrefs
定义)。但您也可以显式地提供
名称空间

@XmlElement(name="TrafficHistoryResult",
            namespace="http://awis.amazonaws.com/doc/2005-07-11")
假设 所有模型类都在同一个包中


原始答案 您应该将包级别
@XmlSchema
注释上的名称空间更改为最常用的名称空间,即
http://awis.amazonaws.com/doc/2005-07-11

package info.java

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://awis.amazonaws.com/doc/2005-07-11", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.mycom.web;
结果

由于
TrafficHistoryResponse
元素是唯一具有不同名称空间的元素,请使用
@XmlRootElement
注释上的
名称空间
属性将其覆盖为
http://alexa.amazonaws.com/doc/2005-10-05/

@XmlRootElement(name = "TrafficHistoryResponse", namespace="http://alexa.amazonaws.com/doc/2005-10-05/")
public class AlexaResult implements Serializable {

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


    private AlexaResponse alexaResponse;

    @XmlElement(name="Response")
    public AlexaResponse getAlexaResponse() {
        return alexaResponse;
    }

    public void setAlexaResponse(AlexaResponse alexaResponse) {
        this.alexaResponse = alexaResponse;
    }

}

更新#1
谢谢你的回答。我试过了,但我的反应是 无效的有什么建议吗

当我进行上述两项更改并运行以下代码时:

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jaxbContext = JAXBContext.newInstance(AlexaResult.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

        File xml = new File("input.xml");
        AlexaResult result = (AlexaResult) unmarshaller.unmarshal(xml);
        System.out.println(result.getAlexaResponse().getAlexaHistoryResult());
    }

}
我得到以下输出:

com.mycom.web.AlexaHistoryResult@5872922a

更新#2 仅供参考,我刚刚注意到在
HistoricalData
类的
data
属性上应该有
@xmlementwrapper(name=“HistoricalData”)

import java.io.Serializable;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

public class HistoricalData implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1284437498477880205L;

    private List<Data> data;

    @XmlElementWrapper(name="HistoricalData")
    @XmlElement(name = "Data")
    public List<Data> getData() {
        return data;
    }

    public void setData(List<Data> data) {
        this.data = data;
    }

}

我无法更改名称空间,因为xml是webservice响应。我尝试了@xmlement(name=“TrafficHistoryResult”,名称空间="我仍然得到空结果。我理解。再次检查我的答案。您尝试了错误的URI,请尝试
http://awis.amazonaws.com/doc/2005-07-11
。最后要小心使用
/
。其中一个名称空间有它,另一个没有。如果我像你说的那样将名称空间更改为/2005-07-11,我就不会出现异常。javax.xml.bind.UnmarshaleException:意外元素(uri:,本地:“TrafficHistoryResponse”)。预期的元素是@user755806。您在错误的
@xmlement
上更改了它。您能给我示例代码在哪里进行更改吗?谢谢您的回答。我尝试了此操作,但响应为空。有什么建议吗?@user755806-我声明的更改对我有效。我已更新了我的答案,以包含我使用的演示代码.
import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jaxbContext = JAXBContext.newInstance(AlexaResult.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

        File xml = new File("input.xml");
        AlexaResult result = (AlexaResult) unmarshaller.unmarshal(xml);
        System.out.println(result.getAlexaResponse().getAlexaHistoryResult());
    }

}
com.mycom.web.AlexaHistoryResult@5872922a
import java.io.Serializable;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

public class HistoricalData implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1284437498477880205L;

    private List<Data> data;

    @XmlElementWrapper(name="HistoricalData")
    @XmlElement(name = "Data")
    public List<Data> getData() {
        return data;
    }

    public void setData(List<Data> data) {
        this.data = data;
    }

}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:TrafficHistoryResponse xmlns="http://awis.amazonaws.com/doc/2005-07-11" xmlns:ns2="http://alexa.amazonaws.com/doc/2005-10-05/">
    <Response>
        <TrafficHistoryResult>
            <Alexa>
                <TrafficHistory>
                    <HistoricalData>
                        <Data>
                            <Date>2014-09-17</Date>
                            <PageViews>
<PerMillion>127970</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>507000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-18</Date>
                            <PageViews>
<PerMillion>125880</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>503000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-19</Date>
                            <PageViews>
<PerMillion>120840</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>497000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-20</Date>
                            <PageViews>
<PerMillion>86640</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>461000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-21</Date>
                            <PageViews>
<PerMillion>85550</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>463000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-22</Date>
                            <PageViews>
<PerMillion>130800</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>507000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-23</Date>
                            <PageViews>
<PerMillion>128410</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>501000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-24</Date>
                            <PageViews>
<PerMillion>127350</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>502000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-25</Date>
                            <PageViews>
<PerMillion>125800</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>499000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-26</Date>
                            <PageViews>
<PerMillion>123290</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>493000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-27</Date>
                            <PageViews>
<PerMillion>87840</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>459000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-28</Date>
                            <PageViews>
<PerMillion>86350</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>462000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-29</Date>
                            <PageViews>
<PerMillion>130110</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>500000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-09-30</Date>
                            <PageViews>
<PerMillion>130220</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>498000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-01</Date>
                            <PageViews>
<PerMillion>131730</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>500000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-02</Date>
                            <PageViews>
<PerMillion>127800</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>496000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-03</Date>
                            <PageViews>
<PerMillion>100820</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>461500</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-04</Date>
                            <PageViews>
<PerMillion>73500</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>421300</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-05</Date>
                            <PageViews>
<PerMillion>72850</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>427600</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-06</Date>
                            <PageViews>
<PerMillion>100790</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>467800</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-07</Date>
                            <PageViews>
<PerMillion>103560</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>469200</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-08</Date>
                            <PageViews>
<PerMillion>103220</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>471900</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-09</Date>
                            <PageViews>
<PerMillion>104180</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>470700</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-10</Date>
                            <PageViews>
<PerMillion>97980</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>461700</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-11</Date>
                            <PageViews>
<PerMillion>76100</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>437200</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-12</Date>
                            <PageViews>
<PerMillion>74820</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>435900</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-13</Date>
                            <PageViews>
<PerMillion>102590</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>469300</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-14</Date>
                            <PageViews>
<PerMillion>103400</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>467400</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-15</Date>
                            <PageViews>
<PerMillion>103040</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>475000</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-16</Date>
                            <PageViews>
<PerMillion>102640</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>465400</PerMillion>
                            </Reach>
                        </Data>
                        <Data>
                            <Date>2014-10-17</Date>
                            <PageViews>
<PerMillion>99020</PerMillion>
                            </PageViews>
                            <Rank>1</Rank>
                            <Reach>
<PerMillion>459800</PerMillion>
                            </Reach>
                        </Data>
                    </HistoricalData>
                </TrafficHistory>
            </Alexa>
        </TrafficHistoryResult>
    </Response>
</ns2:TrafficHistoryResponse>