Spring集成CXF

这次通过CXF实现Webservice服务端/客户端操作,花费近一周才完成,在编写过程中发现很多问题,便于以后使用,调用成功后进行粗略总结。

环境描述:当前使用的CXF为2.7.6,Spring为3.26版本

一、版本问题

1、之前使用的版本为cxf2.2.6版本,现有maven中配置为2.7.6,在使用过程中服务端发布服务和服务端工程进行服务调用没有任何问题,同时在低版本(如:cxf2.2.6)版本中客户端调用也没有问题,但是在2.7.6版本的客户端工程进行服务调用就会报错,通过
JaxWsProxyFactoryBean方式创建客户端调用时,报:javax.xml.ws.soap.SOAPFaultException Cannot create a secure XMLInputFactory错误,查阅相关资料,问题描述:“当前CXF使用的版本(2.7.x)依赖于Woodstox4.2.0,CXF客户端调用时需要“安全XMLInputFactory”,,必须在调用时实现XMLInputFactory的装载提”,另外一个解决方案是采用低版本替换使用,目前采用2.6.0客户端调用成功。
Cxf2.7.X和spring3.2.X下类库截图:
这里写图片描述

二、配置技术点

1、关于bean的声明
要发布或者要调用的web service接口,需要用@WebService注解声明。不过要注意的是,@WebService注解不会把类声明为spring的bean,可以声明为bean的方式有以下4个:

<jaxws:endpoint> 
<jaxws:client>
<bean id="" class="">  
@Component

2、cxf获取implementor的spring bean
CXF高版本框架中通过implementor=”com.huawei.framework.webservice.HelloWorldImpl” />获取的bean不是spring容器中HelloWordImp对应的bean,而是通过反射或其他机制创造出来的,在implementor属性中,用#beanName,这样的话,cxf框架得到的HelloWorldImpl,就是spring容器持有的那个bean。当然这有个前提,就是系统中已经存在这个bean。采用用或者@Component定义spring bean。

三、问题描述

1、CXF中使用Autowired注解无法注入bean
2、javax.xml.ws.soap.SOAPFaultException Cannot create a secure XMLInputFactory
3、org.apache.cxf.binding.soap.SoapFault Fault occurred while processing
4、org.apache.cxf.common.i18n.UncheckedException No operation was found with the name
5、org.apache.cxf.interceptor.Fault Unexpected wrapper element
6、org.apache.cxf.service.factory.ServiceConstructionException Failed to create service

问题总结为几类
1、webservice接口实现类中如何引用Spring Bean
2、客户端和服务端targetNamespace不一样
3、CXF版本问题
4、客户端调用服务端方法参数不一致

问题参考资料:
1、http://stackoverflow.com/questions/16903216/cxf-2-7-x-woodstox-compatibility-via-maven?answertab=oldest#tab-top
2、http://www.iteye.com/topic/1122268#2382969

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值