试了一下,不行啊。 @XStreamAlias("HEAD") private HEAD head; @XStreamOmitField private MSG msg; 测试之后,有异常如下: com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.ibank.monitor.padomain.CFX.MSG ---- Debugging information ---- field : MSG class : com.ibank.monitor.padomain.CFX required-type : com.ibank.monitor.padomain.CFX converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter path : /CFX/MSG version : 1.4.6
@XStreamAlias("HEAD")
private HEAD head;
@XStreamOmitField
private MSG msg;
测试之后,有异常如下:
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.ibank.monitor.padomain.CFX.MSG
---- Debugging information ----
field : MSG
class : com.ibank.monitor.padomain.CFX
required-type : com.ibank.monitor.padomain.CFX
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /CFX/MSG
version : 1.4.6
xStream.autodetectAnnotations(true);
private String name; @XStreamOmitField
private String hidden; public Test(String name, String hidden) {
this.name = name;
this.hidden = hidden;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getHidden() {
return hidden;
} public void setHidden(String hidden) {
this.hidden = hidden;
}}
public static void main(String[] args) throws IOException {
XStream xs = new XStream();
// xs.processAnnotations(Test.class);
xs.autodetectAnnotations(true);
String str = xs.toXML(new Test("dddd", "dd"));
System.out.println(str); }我这里毫无压力啊,上面两种你都试下。
我的问题是,正常的话,xstream把xml解析成javabean时,xml文档每个节点,都要创建一个对应的javabean,并使用@XStreamAlias。但现在xml文档结构比较复杂,每个节点都创建一个对应的javabean时,工作量很大,而且中间很多节点,我取数据根本就不需要。我通过什么方法,控制xstream解析我使用的文档节点。就想jdom使用xpath一样
我现在应用的场景刚好相反,是把xml转javabean.
两种方式,1:override wrapMapper;2:x.omitField(A.class, "shouldCopyWithProject");
具体说明,请点击这里希望以后遇到相同问题的同学们,能看到这个帖子。
public class ETLXstream extends XStream {
/*
* (non-Javadoc)
*
* @see
* com.thoughtworks.xstream.XStream#wrapMapper
*/
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
/*
* (non-Javadoc)
*
* @see
* com.thoughtworks.xstream.mapper.MapperWrapper#shouldSerializeMember
*/
@Override
public boolean shouldSerializeMember(@SuppressWarnings("rawtypes") Class definedIn, String fieldName) {
// 不能识别的节点,掠过。
if (definedIn == Object.class) {
return false;
}
// 节点名称为fileName的掠过
if (fieldName.equals("fileName")) {
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
}
大哥,回答问题时,都看看清楚题目啊!!!由javaBean到xml这么小儿科的问题,楼主不会自己去官网看帮助文档么???