`
bdk82924
  • 浏览: 553478 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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 详解
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics