在将此问题标记为重复之前,请仔细阅读。我的问题与SO上的很多问题都不相似。
我正在使用XStream,如下所示:
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("square")
public class Square {
@XStreamAlias("size")
int size;
public int getSize() {
return size;
}
@Override
public String toString() {
return "Square [size=" + size + "]";
}
public void setSize(int size) {
this.size = size;
}
}
对于以下XML结构:
<square>
<size>12</size>
</square>
它工作正常。
对于以下XML结构:
<square>
<size>12</size>
<width>12</width>
</square>
我已经在Stack Overflow上找到了解决方案。
XStream xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
public boolean shouldSerializeMember(Class definedIn,
String fieldName) {
if (definedIn == Object.class) {
return false;
}
return super
.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
但我的问题是我的web服务受到以下XML结构的影响:
<heading>
<square>
<size>12</size>
<width>12</width>
</square>
现在我的问题是它抛出了CannotResolveClassException,我正在捕获并尝试继续执行但它到达EOFException,即它将它视为完全解析完成。如何让XStream忽略Alias之外的标签,就像有人编写一段智能代码来忽略已识别别名中的未知元素一样。