问题
I am using Simple XML Serialization(simple-xml-2.6.6.jar) here to convert my XML response from webservice to POJO class. XML is as follow:
<Alerts>
<Alert>
<CCRDataObjectID>38</CCRDataObjectID>
<DateTime>
<Type>
<Text>Verified</Text>
</Type>
<ExactDateTime>2010-06-16T00:00:00Z</ExactDateTime>
</DateTime>
<Type>
<Text>Allergy</Text>
</Type>
<Description>
<Text>R-Tanna</Text>
</Description>
<Source>
<Actor>
<ActorID>122</ActorID>
</Actor>
</Source>
<Reaction>
<Description>
<Text>rash</Text>
</Description>
</Reaction>
</Alert>
<Alert>
<CCRDataObjectID>39</CCRDataObjectID>
<DateTime>
<Type>
<Text>Verified</Text>
</Type>
<ExactDateTime>2010-06-16T00:00:00Z</ExactDateTime>
</DateTime>
<Type>
<Text>Allergy</Text>
</Type>
<Description>
<Text>Zithromax</Text>
</Description>
<Source>
<Actor>
<ActorID>122</ActorID>
</Actor>
</Source>
<Reaction>
<Description>
<Text>rash</Text>
</Description>
</Reaction>
</Alert>
</Alerts>
POJOs are as follow :
1st POJO containig list of Alert is Alerts
@Root
public class Alerts {
@ElementList
private List<Alert> Alerts;
public List<Alert> getAlerts() {
return this.Alerts;
}
public void setAlerts(List<Alert> alerts) {
this.Alerts = alerts;
}
}
2nd POJO of actual Alert
is as follow :
@Root(strict=false)
public class Alert {
@Element
private int CCRDataObjectID;
@Element
private DateTime DateTime;
@Element
private Type Type;
@Element
private Description Description;
@Path("Source/Actor")
@Element
private int ActorID;
@Element
private Reaction Reaction;
@Root
private static class Type {
@Element
private String Text;
}
@Root
private static class Description {
@Element
private String Text;
}
@Root
private static class DateTime {
@Element
private Type Type;
@Element
private String ExactDateTime;
}
@Root
private static class Reaction {
@Element
private Description Description;
}
public int getCCRDataObjectID() {
return CCRDataObjectID;
}
public void setCCRDataObjectID(int cCRDataObjectID) {
CCRDataObjectID = cCRDataObjectID;
}
public String getVerification(){
return this.DateTime.Type.Text;
}
public String getDateTime() {
return this.DateTime.ExactDateTime;
}
public String getAllergyType() {
return this.Type.Text;
}
/**
*
* @return Name/Description of an Allergy
*/
public String getDescription() {
return this.Description.Text;
}
public int getActorID() {
return ActorID;
}
public void setActorID(int actorID) {
ActorID = actorID;
}
public String getReactionDescription() {
return this.Reaction.Description.Text;
}
public String getDisplayDate() {
SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy");
return sdf.format(this.DateTime.ExactDateTime);
}
}
On Parsing I get error as follow :
Element 'Alert' does not have a match in class com.mypck.pojo.Alerts at line 2
Now I can't change the XML response as It is being used at other places. What can I do with POJO so that I can parse my XML.
回答1:
OK. Got the answer after going through tutorial. I just need to tell that the list is inline in class Alerts.
@Root
public class Alerts {
@ElementList(inline=true)
private List<Alert> Alerts;
public List<Alert> getAlerts() {
return this.Alerts;
}
public void setAlerts(List<Alert> alerts) {
this.Alerts = alerts;
}
}
回答2:
Shouldn't this:
@ElementList
private List<Allergy> Alerts;
be
@ElementList
private List<Alert> Alerts;
?
来源:https://stackoverflow.com/questions/14121206/java-simple-xml-not-parsing-the-xml-gives-exception