Jaxb Unmarshalling提供了零
我知道有很多像我这样的问题。但是我不知道如何解决我的问题。 那是我的课。
我有这样的应用程序类。我也有这样的XML数据。我需要解析它以获取saccreq对象的列表。
public class App {
public static void main(String[] args) {
String data = "<MT94x><saccreq><id>979373531_410</id><code>1</code><state>BEGIN</state></saccreq><saccreq><id>1089699343_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1090788724_410</id><code>7</code><state>FIN</state></saccreq><saccreq><id>1090858234_410</id><code>1</code><state>REFUSE</state></saccreq><saccreq><id>1167198643_410</id><code>9</code><state>FIN1</state></saccreq><saccreq><id>1092582159_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1093640470_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1094544929_410</id><code>5</code><state>FIN</state></saccreq><saccreq><id>1097041457_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1097685077_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1098520777_410</id><code>11</code><state>FIN</state></saccreq><saccreq><id>1101668069_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1102311654_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1103381880_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1103707818_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1104481517_410</id><code>6</code><state>FIN</state></saccreq><saccreq><id>1109203484_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1117235778_410</id><code>9</code><state>FIN</state></saccreq></MT94x>";
MT94x result = stringToObject(data, MT94x.class);
System.out.println(result.getSaccreq());
}
public static <T> T stringToObject(final String textClazz, final Class<T> clazz){
T returnedValue;
try {
final JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
final StringReader reader = new StringReader(textClazz);
returnedValue = (T) unmarshaller.unmarshal(reader);
} catch ( final JAXBException e ) {
throw new RuntimeException("an error occurred while unmarshalling xml into " + clazz.getCanonicalName() + " object", e );
}
return returnedValue;
}
}
Unmarshalling为SaccReq列表提供了零值。结果我只是得到“ []”。
import javax.xml.bind.annotation.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@XmlRootElement(name = "MT94x")
@XmlAccessorType(XmlAccessType.FIELD)
public class MT94x implements Serializable {
public MT94x(){}
@XmlElement(name = "saccreq")
private List<Saccreq> saccreq;
public List<Saccreq> getSaccreq(){
if (saccreq == null){
saccreq = new ArrayList<>();
}
return this.saccreq;
}
public void setSaccreq(List<Saccreq> saccreqs){
this.saccreq = saccreqs;
}
}
如Saccreq类中所示,我有3个字段元素,这些字段元素在App类中的“数据”变量中。
@XmlAccessorType(XmlAccessType.FIELD)
public class Saccreq {
@XmlElement
private String id;
@XmlElement
private String code;
@XmlElement
private String state;
public Saccreq(){}
public void setId(String id){
this.id = id;
}
public String getId() {
return id;
}
public void setCode(String code){
this.code = code;
}
public String getCode() {
return code;
}
public void setState(String state){
this.state = state;
}
public String getState() {
return state;
}
}
有人可以提供好的建议来解决这个问题吗?
I know there are many question like mine. But I don't know how to solve my problem.
That's my classes.
I have such App class as Main class. Also I have such xml data. I need to parse it to get list of Saccreq objects.
public class App {
public static void main(String[] args) {
String data = "<MT94x><saccreq><id>979373531_410</id><code>1</code><state>BEGIN</state></saccreq><saccreq><id>1089699343_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1090788724_410</id><code>7</code><state>FIN</state></saccreq><saccreq><id>1090858234_410</id><code>1</code><state>REFUSE</state></saccreq><saccreq><id>1167198643_410</id><code>9</code><state>FIN1</state></saccreq><saccreq><id>1092582159_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1093640470_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1094544929_410</id><code>5</code><state>FIN</state></saccreq><saccreq><id>1097041457_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1097685077_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1098520777_410</id><code>11</code><state>FIN</state></saccreq><saccreq><id>1101668069_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1102311654_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1103381880_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1103707818_410</id><code>1</code><state>FIN</state></saccreq><saccreq><id>1104481517_410</id><code>6</code><state>FIN</state></saccreq><saccreq><id>1109203484_410</id><code>9</code><state>FIN</state></saccreq><saccreq><id>1117235778_410</id><code>9</code><state>FIN</state></saccreq></MT94x>";
MT94x result = stringToObject(data, MT94x.class);
System.out.println(result.getSaccreq());
}
public static <T> T stringToObject(final String textClazz, final Class<T> clazz){
T returnedValue;
try {
final JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
final StringReader reader = new StringReader(textClazz);
returnedValue = (T) unmarshaller.unmarshal(reader);
} catch ( final JAXBException e ) {
throw new RuntimeException("an error occurred while unmarshalling xml into " + clazz.getCanonicalName() + " object", e );
}
return returnedValue;
}
}
Unmarshalling provides null value for Saccreq list. I just get "[]" in result.
import javax.xml.bind.annotation.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@XmlRootElement(name = "MT94x")
@XmlAccessorType(XmlAccessType.FIELD)
public class MT94x implements Serializable {
public MT94x(){}
@XmlElement(name = "saccreq")
private List<Saccreq> saccreq;
public List<Saccreq> getSaccreq(){
if (saccreq == null){
saccreq = new ArrayList<>();
}
return this.saccreq;
}
public void setSaccreq(List<Saccreq> saccreqs){
this.saccreq = saccreqs;
}
}
As you see in Saccreq class I have 3 field elements which values are in "data" variable in App class.
@XmlAccessorType(XmlAccessType.FIELD)
public class Saccreq {
@XmlElement
private String id;
@XmlElement
private String code;
@XmlElement
private String state;
public Saccreq(){}
public void setId(String id){
this.id = id;
}
public String getId() {
return id;
}
public void setCode(String code){
this.code = code;
}
public String getCode() {
return code;
}
public void setState(String state){
this.state = state;
}
public String getState() {
return state;
}
}
Can somebody give good advice to solve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论