繁体   English   中英

JAXB复杂XML反序列化(解组)

[英]JAXB Complex XML Deserialization (Unmarshalling)

我正在尝试将xml数据反序列化为Java对象。 它反序列化,但子级列表为空,即数组为空。 我尝试了不同的方法,但失败了。

输入xml字符串

String tempXML = "<searchbadge xmlns=\"www.Ingo.com/Api/v1.0\"   
xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance  
\"><errorcode>0</errorcode><errormessage/><matches><match><address>road 
A</address><badgeno>10109</badgeno><bday>7/13/2015 12:00:00 AM</bday>
<city>Roswell</city><name>Jason Reed</name><phone>876 456 2345</phone>
<state>Georgia</state><zip>30320</zip></match></matches></searchbadge>";

根类

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "searchbadge",namespace="www.Ingo.com/Api/v1.0")

public class SearchBadgeResponse implements Serializable{
@XmlElement(name = "errorcode")
  private String errorcode ;

@XmlElement(name = "errormessage")
private String errormessage ;

@XmlElementWrapper(name = "matches")      
@XmlElement(name = "match")
private List<Match> matches ;

public String getErrorCode() {
    return errorcode;
}

public void setErrorCode(String errorcode) {
    this.errorcode = errorcode;
}
public String getErrorMessage() {
    return errormessage;
}

public void setErrorMessage(String errormessage) {
    this.errormessage = errormessage;
}
public List<Match> getMatches() {
    return this.matches;
}   
public void setMatches(List<Match> matches) {
    this.matches = matches;
  }
}

儿童班:

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "match")

public class Match implements Serializable{

@XmlElement(name = "name")
public String name;

@XmlElement(name = "badgeno")
public String badgeno;

@XmlElement(name = "phone")
public String phone ;

@XmlElement(name = "bday")
public String bday;

@XmlElement(name = "address")
public String address;

@XmlElement(name = "city")
public String city ;

@XmlElement(name = "state")
public String state ;

@XmlElement(name = "zip")
public String zip ;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name ;
}

public String getBadgeNo() {
    return badgeno;
}
public void setBadgeNo(String badgeno) {
    this.badgeno = badgeno ;
}

public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone ;
}

public String getBDay() {
    return bday;
}
public void setBDay(String bday) {
    this.bday = bday ;
}

public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address ;
}

public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city ;
}

public String getState() {
    return state;
}
public void setState(String state) {
    this.state = state ;
}

public String getZip() {
    return zip;
}
public void setzip(String zip) {
    this.zip = zip ;
}    
}

解组码

public static  SearchBadgeResponse getObjectTmp(String valXML)  {
    SearchBadgeResponse myobj = null;

    try

    {
    JAXBContext jaxbContextDes =   
     JAXBContext.newInstance(SearchBadgeResponse.class);
    Unmarshaller unmarshaller = jaxbContextDes.createUnmarshaller();

    StringReader reader = new StringReader(valXML);
    myobj = (SearchBadgeResponse) unmarshaller.unmarshal(reader);

    return  myobj;
    }
    catch(JAXBException jex)
    {
        jex.printStackTrace();      
    }
    return myobj;
}

我不知道这个问题。 任何提示/示例都是可观的。

将名称空间属性添加到子类:

@XmlRootElement(name = "match", namespace="www.Ingo.com/Api/v1.0")
public class Match implements Serializable{

暂无
暂无

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

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