14
CXF
Calvin edited this page 2013-11-14 01:37:15 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

SOAP这个名字本身就是个笑话一点都不Simple。其他一些WS-*协议包括安全附件等都不再看好因此SpringSide4.0没什么更新。

测试工具依然是SoapUI。

Tips

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

###2. 从WSDL生成Java 客户端代码 从wsdl生成java则见showcae的bin/wsdl2java.bat, 使用CXF的maven插件 需要预先将wsdl 从http://localhost:8080/showcase/cxf/soap/accountservice?wsdl 保存到target/wsdl/accountservice.wsdl。

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

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

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

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

###6. 打印输入输出的SOAP XML CXF的文档有点out了比如如果要转用slf4j其实不需要特别的设置jul-over-slf4j自己就会把java.util.loggging桥接过来又比如showcase演示了在server端打印xml此时需要开启logger org.apache.cxf.services =INFO 因为debug发现此时的logger名称是 "org.apache.cxf.services.AccountSoapService.AccountSoapServiceImpl"

##资料

  • Book: <Apache CXF Web Service Development> Dec.2009