2015-07-14 2 views
0

Я пытаюсь десериализовать xml-данные на объект Java. Он десериализован, но список дочернего элемента пуст, т. Е. Массив пуст. Я пробовал по-другому, но не смог.JAXB Complex XML Deserialization (Unmarshalling)

ввода Строка 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; 
} 

Я не мог понять проблему. Любые подсказки/образец заметны.

ответ

0

добавить атрибут пространства имен для дочернего класса:

@XmlRootElement(name = "match", namespace="www.Ingo.com/Api/v1.0") 
public class Match implements Serializable{ 
Смежные вопросы