最近又要实现WS Server的应用,就搭建了一下,helloWorld程序已经上传到Github
https://github.com/wwwcomy/cxf_test
pom里面的Spring是为了测试spring4.2的兼容性加上的,尽管cxf-core其实原本就有对Spring的引用,但是引用方式都是provided,所以必须得自己再加上Spring
除了cxf-core就是cxf-rt-transports-http这个component了,CXF提供了多种Transports的支持,包括HTTP,JMS,Local,甚至webSocket。但是实际应用中一般都是基于HTTP的,所以在这里就用了这个引用。另外Pom里面还加入了其他的不知名引用,我找了半天也没找到对所有引用的介绍,这里就不深入看了。感觉如果能完全理解transports,databinding应该就可以了。
另外,cxf的wsdl2java功能可以直接生成client代码或者server代码,client这块就不说了,直接能使用。server的代码使用如下方式:
wsdl2java -d d:/src -server -impl http://localhost:8080/soap_server/ws/HelloWorld?wsdl
注意那个impl参数能让CXF生成一个默认的空实现。
以前一直以为webservice必须要跑在容器里面,其实不是的,如果把那个wsdl下到本地,用如下方式生成代码:
wsdl2java -d d:/src -server -impl c:/HelloWorld.wsdl
生成的代码是包括一个main方法的,main方法能直接跑,生成的main方法如下:
public class IHelloService_HelloServicePort_Server{ protected IHelloService_HelloServicePort_Server() throws java.lang.Exception { System.out.println("Starting Server"); Object implementor = new HelloServicePortImpl(); String address = "http://localhost:8081/soap_server/ws/HelloWorld"; Endpoint.publish(address, implementor); } public static void main(String args[]) throws java.lang.Exception { new IHelloService_HelloServicePort_Server(); System.out.println("Server ready..."); Thread.sleep(5 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } }
除此之外,java自带的wsimport 也能方便的生成client代码。具体方法可以搜索。