xstream不映射字段_用xstream 将xml映射为类对象遇到的问题

xml文件内容:

.....

......

需求:

我定义了一个类为UpdateHandler,该类具有一个private 属性,名为className,在利用xstream从xml实例化类的时候,我用到下面的代码:

xStream.alias("updateHandler", UpdateHandler.class);

xStream.useAttributeFor("className",String.class);

xStream.aliasAttribute("class", "className");

总是出错,出错内容如下:

-------------------------------------

Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: solr.DirectUpdateHandler2 : solr.DirectUpdateHandler2

---- Debugging information ----

required-type       : com.giant.dre.config.GiantSolrConfig

cause-message       : solr.DirectUpdateHandler2 : solr.DirectUpdateHandler2

class               : com.giant.dre.config.GiantSolrConfig

message             : solr.DirectUpdateHandler2 : solr.DirectUpdateHandler2

line number         : 59

path                : /config/updateHandler

cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException

-------------------------------

at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:63)

at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)

at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)

at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:117)

at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)

at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:826)

at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:813)

at com.thoughtworks.xstream.XStream.fromXML(XStream.java:761)

at com.giant.dre.config.GiantSolrConfigManager.parseXmlAndFillConfig(GiantSolrConfigManager.java:22)

at com.giant.test.XstreamTest.main(XstreamTest.java:15)

Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: solr.DirectUpdateHandler2 : solr.DirectUpdateHandler2

at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:49)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.XStream11XmlFriendlyMapper.realClass(XStream11XmlFriendlyMapper.java:23)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:72)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:60)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:76)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)

at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:34)

at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.determineType(AbstractReflectionConverter.java:248)

at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:155)

at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:118)

at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)

... 9 more

--------------------------------------------------------------

我猜测可能是xml里面的class具有特殊的含义,不能当做一般的属性名来使用,于是我修改上面的代码如下:

首先修改xml为:

.....

......

然后修改代码为:

xStream.alias("updateHandler", UpdateHandler.class);

xStream.useAttributeFor("className",String.class);

xStream.aliasAttribute("classx", "className");

这样果然不会错了。

xml里面的class具有特殊意义吗?或者xstream在解析的时候会理解class为特殊意义?可是我的xml里面的属性名class是不能随便改的,有没有什么办法可以做到吗?

2008年11月17日 16:41

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值