之前也有研究过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 详解
大致了解使用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 详解