Skip to content
springside edited this page Sep 14, 2012 · 14 revisions

#Apache CXF WebService ##没有话说,享受沉默 showcase项目已演示了JAX-WS2.0 + CXF的最重要特性, 其中客户端在测试用例里.

SOAP这个名字,本身就是个笑话,其他一些WS-*协议,包括安全,附件等都不再看好,因此SpringSide4.0没什么更新。 所以暂时不准备写文档,请直接参阅相关资料。

从wsdl生成java则见bin/wsdl2java.bat, 使用CXF的maven插件, 需要预先将wsdl 从http://localhost:8080/showcase/cxf/soap/accountservice?wsdl 保存到target/wsdl/accountservice.wsdl。

测试工具依然是SoapUI。

Tips

###1. CXF自动生成的WSDL与WADL文件 web.xml里定义了cxf都归CxfServelet管,所以,访问http://localhost:8080/showcase/cxf/ ,就能看到所有的WSDL与WADL.

###2. 既然是默认大于配置,为什么还要写有些annotation

  • 所有传输对象全部加了XMLType(name="xxx"),因为CXF默认在wsdl时将所有类的名字都首字母小写,如果拿着这个WSDL来生成代码,在其他语言的生成工具如windows .net可能会生成出一些首字母小写的类出来。
  • 所有方法的参数都要加@WebParam, 是因为CXF默认只会反射出arg0这样的名称
  • 接口与接口实现类的Header中反复声明一些东西,是因为各自声明的是不一样的,见注释。如果在实现类不声明@WebService,wsdl会分开两个文件显示,不好。

###3. 返回类命名 返回类不要命名为XXXResponse,因为WSDL里也会每个方法默认生成一个XXXXResponse的元素,会造成冲突,最好命名为XXXResult。

###4. Target NameSpace 万一有同名的元素,用namesapce分开来,原意是很好的,对于有双向生成需求的Soap来说也是必须的。但如果没写好,在wsdl里充满各种namesapce声明非常烦人。最好的做法是统一定义唯一一个常量,然后在所有地方用了annotation的地方都添加namespace定义。

返回参考手册