记录一下cxf-webservice的脚手架搭建

阅读更多
之前只是用CXF完成了WS-Security/policy的一些工作,CXF使用了WSS4J完成了相关的功能,其实是WSS4J通过CXF提供的interceptor机制完成了这些功能。

最近又要实现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代码。具体方法可以搜索。

你可能感兴趣的:(cxf,webservice,server,wsdl2java)