CXF2升级到3兼容spring4会遇到的问题

部署情况:A服务器需要调用B服务器的WebService服务。
版本情况:A服务器和B服务器都是cxf 2.3.0 加spring3,WebService调用相关包路径一致。

升级需求:A服务器需要升级到spring4,WebService调用相关包路径不一致,B服务器不动。
遇到问题:升级A服务器的相关jar文件之后,测试WebService调用时遇到错误:
java.lang.RuntimeException: Cannot create a secure XMLInputFactory
    at org.apache.cxf.staxutils.StaxUtils.createXMLInputFactory(StaxUtils.java:338)
    at org.apache.cxf.staxutils.StaxUtils.getXMLInputFactory(StaxUtils.java:278)
    at org.apache.cxf.staxutils.StaxUtils.createXMLStreamReader(StaxUtils.java:1829)
    at org.apache.cxf.configuration.spring.JAXBBeanFactory.createJAXBBean(JAXBBeanFactory.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at  org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
查询网上的相关文章,有以下解决办法(可以解决问题,但是有个别文章不建议使用该方法):

Properties props = System.getProperties();
props.setProperty("org.apache.cxf.stax.allowInsecureParser", "1");
props.setProperty("UseSunHttpHandler", "true");
从项目长远考虑,还是不采用这种非常规方法,经仔细对比包的情况,发现以下解决方案:
1、首先要确保 woodstox以及stax相关包升级到了最新,cxf 3.2.4对应的是:stax2-api-3.0.2.jar和woodstox-core-asl-4.0.8.jar
2、确保老版本的以woodstox以及stax文件名开头的jar已被清理。
3、有一个非常隐蔽的包:以 wstx文件名开头的jar也需要清理,其实就是早期woodstox版本,我本地是wstx-asl-3.2.7.jar

第1、2两步大部分网上的介绍都会提到,困扰我最久的是第3步,是经自己慢慢的试探才找出来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值