【发布时间】:2017-09-02 03:58:10
【问题描述】:
好的 - 我知道这应该很容易 - 但由于某种原因 - 我无法让它工作!
假设我有以下 POJO:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class PlainOldJavaObject implements Serializable {
private long uuid;
private String name;
public PlainOldJavaObject() {
}
public long getUuid() {
return this.uuid;
}
public void setUuid(long uuid) {
this.uuid = uuid;
}
public String getNamen() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
/* Omitted HashCode & Equals for brevity. */
}
假设我有以下 xml(为了便于阅读,我已对其进行了格式化 - 实际上我将其作为原始的、未格式化的字符串获取):
<PlainOldJavaObjects>
<PlainOldJavaObject>
<uuid>8119</uuid>
<name>Jimmy</name>
</PlainOldJavaObject>
<PlainOldJavaObject>
<uuid>2372</uuid>
<name>Johns</name>
</PlainOldJavaObject>
</PlainOldJavaObjects>
我到底如何将 XML 转换为 List 实例?
我尝试使用 XStream - 如下:
XStream xStream = new XStream();
List<PlainOldJavaObject> endResultHopefully = (List<PlainOldJavaObject>) xStream.fromXML(result);
但似乎所做的只是将以下内容打印到我的终端...
PlainOldJavaObjects : PlainOldJavaObjects
我到底做错了什么?
注意:添加 JAXB 标记是因为通过谷歌搜索 - 我看到它存在,并且我认为它可能是我想要的 - 但我不确定,也许社区中的某个人也可能对我有一些指导?
【问题讨论】:
-
使用 jaxb。这就是它的作用。
-
我似乎找不到将 jaxb 用于列表的示例,而无需编写列表所在的包装类。这不是我能够为这个项目带来改变的东西。
-
jaxb 模型是将每个元素(实际上是复杂类型)映射到一个 Java 类,这就是您的“PlainOldJavaObjects”元素需要一个类的原因。在我看来,使用 jaxb 的最佳方式是将其从 XSD 中移除,并在编译时生成所有 pojo(带有所有必要的注释)。需要维护的代码要少得多,而且代码模式很容易习惯。如果您使用 XML,Jaxb 绝对是您的必经之路 - 不知道如何说服“强大的力量”……祝您好运。
-
在任何情况下,您都需要一个顶级包装类
PlainOldJavaObjects来保存对象集合,不仅在使用 JAXB 时,在使用 XStream 时也是如此。
标签: java xml jaxb unmarshalling xstream