CXF+Spring使用

之前也有研究过CXF
大致了解使用CXF生成、发布服务端,客户端代码的调用

不过现在用起来还是感觉研究不够透彻


在项目使用中碰到如下几点需要研究的 ,可能大家也会在平时的开发中碰到,刚好在这做个汇总

1、nameSpace的定义
接口中的targetNamespace是必须要一致的 ,如 wsdl中定义的targetNamespace="http://service.ws.test.com" 。
一般情况下,我们就需要把接口定义在对应的包下com.test.ws.service
实现类的位置可以随意
特殊情况:如果wsdl中定义的namespace为"http://service.ws.test.com" ,但是我们自己的接口在 com.test.ws2.service下,咋办?
spring的注解可以解决这个问题,@WebService(targetNamespace = "http://service.ws.test.com/") 可以指定nameSpace。好像接口和实现类中都需要标注下,自己测试下吧

2、如接口中 public void getUser(String name);
首先这个字段名的大小写是区分的 ,你不可以定义为 String Name,因为请求消息体中XML是区分大小写的
或者接口 public void getUser2(User bean);
User中有 id 和name 两个属性。
如没有特殊情况,大小写一定要保持一致
特殊情况:大小写定义不一致了咋办?
在定义字段前加上注解
@XmlElement(name = "ID", required = true)
private String id;
不过加上注解后,就不可以有 getId()的方法,否则会报错。
解决办法:在getId()前加上 @XmlTransient注解,为不映射成XML的属性

另外一种特殊情况,a、需要指定 参数的顺序,如name必须在id之前 b、soap中的User(Bean)大小写的问题
注解:@XmlType(name = "User", propOrder = { "name", "id" })

3、服务端返回消息中如何带上消息头信息


4、客户端发送消息的时候如何带上消息头


5、客户端接受消息的时候如何解析消息头


6、服务端定义异常结构体

7、鉴权问题

8、超时策略

9、生成的接口方法名 定义不一致,比如soap协议中定义的是 public void GetTest();
不过你的接口中定义的是 getTest();
解决方法:可以在接口中使用注解 @WebMethod(operationName = "GetTest")


参考:
http://old.uplook.cn/biancheng/143/1433149/ CXF 详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值