java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.x

bang 大神 能帮忙看个bug么?
项目是osgi项目 equinox+spring+hibernate+tapestry5 现在要用cxf生成客户端代码供调用
测试发现报 Caused by: java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInputFactory,
在网上百度和google了很久 有说System.setProerty 或者设置-Djavax.xml.stream.XMLInputFactory= com.ctc.wstx.stax.WstxInputFactory
可以解决 试了不行,
百度上有说是cxf和jdk1.6.4以下冲突 我换成jdk1.6.43还是不行,跟踪代码知道
public static XMLInputFactory newInstance(String factoryId,
ClassLoader classLoader)
throws FactoryConfigurationError {
try {
//do not fallback if given classloader can't find the class, throw exception
return (XMLInputFactory) FactoryFinder.newInstance(factoryId, classLoader, false);
} catch (FactoryFinder.ConfigurationError e) {
throw new FactoryConfigurationError(e.getException(),
e.getMessage());
}
}是这个里面强制转换错误,
打开-Djaxp:debug=true
发现JAXP: created new instance of class com.sun.xml.internal.stream.XMLOutputFactoryImpl using ClassLoader: null
JAXP: find factoryId =javax.xml.stream.XMLInputFactory
JAXP: found system property, value=com.ctc.wstx.stax.WstxInputFactory
JAXP: created new instance of class com.ctc.wstx.stax.WstxInputFactory using ClassLoader: null
后就包错了,
仔细查找jar包发现 项目里面有stax2.jar stax.jar woodstox-asl.jar其中里面com.ctc.wstx.stax.WstxInputFactory通过stax2.jar间接继承到stax.jar里面
javax.xml.XMLInputFactory 所以理论上来说子类向父类转换不会错啊,
但是rt.jar里面也有javax.xml.XMLInputFactory这个类 所以是不是转换的时候拿wstxinputfactory转成
rt.jar里的javax.xml.XMLInputFactory 了所以报错了啊 ,虽然能分析到此,但是没有办法解决,
网上又说可删除 woodstox-asl.jar这个包就好了 但是发现不能删除 在系统中tapestry5中有用到。
问题分析到此 我已经是山穷水尽了,,,,,,,故来求助 请指教。

2013-08-29 16:02 "@hongwei01267
"的内容
Caused by: java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInput ...

没碰到过,可以重新下载包含这个类的最新版本包:
http://woodstox.codehaus.org/Download,实在不行打开源码,修改WstxInputFactory

回复 banq 谢谢,修改jar包,真太难了 ,我可能做不到,能不能教我一点调试jar的方法 或者什么 调试的技巧啊。