Apache CXF 第一篇:HelloWorld

阅读更多
1、开发环境:JDK 1.6,Spring 2.0,LZ使用Apache CXF 2.6.2 版本。因为使用Spring 2.0故不能使用CXF with Spring的方式配置WebServices服务,故采用传统的Servlet方式。

2、所需CXFJAR,在CXF下载包中均存在


        
            cxf
            cxf
            2.6.2
            jar
            
                true
            
        
        
            cxf
            neethi
            3.0.2
            jar
            
                true
            
        
        
            cxf
            jaxb-api
            2.2.6
            jar
            
                true
            
        
        
            cxf
            jaxb-impl
            2.2.5
            jar
            
                true
            
        
        
            cxf
            wsdl4j
            1.6.2
            jar
            
                true
            
        
        
            cxf
            wss4j
            1.6.7
            jar
            
                true
            
        
        
            cxf
            xmlschema-core
            2.0.3
            jar
            
                true
            
        
        
            cxf
            xml-resolver
            1.2
            jar
            
                true
            
        
        
            cxf
            xmlsec
            1.5.2
            jar
            
                true
            
        
        
            cxf
            xmlbeans
            2.5.0
            jar
            
                true
            
        
        
            cxf
            saaj-api
            1.3.4
            jar
            
                true
            
        
        
            cxf
            saaj-impl
            1.3.18
            jar
            
                true
            
        
        
            cxf
            geronimo-activation_1.1_spec
            1.1
            jar
            
                true
            
        
        
            cxf
            geronimo-annotation_1.0_spec
            1.1.1
            jar
            
                true
            
        
        
            cxf
            geronimo-javamail_1.4_spec
            1.7.1
            jar
            
                true
            
        
        
            cxf
            velocity
            1.7
            jar
            
                true
            
        
        
            cxf
            jaxb-xjc
            2.2.5
            jar
            
                true
            
        


3、服务端接口:

package com.vtradex.training.server.cxf.helloworld;

import javax.jws.WebParam;
import javax.jws.WebService;

import com.vtradex.training.server.cxf.WsConstants;

/**
 * 
 * @author 潘宁波
 * @version $Revision: v1.0 $Date: 2012-8-31 $
 */
@WebService(name = "HelloWorldService", targetNamespace = WsConstants.NS)
public interface HelloWorldService {
	
	String say(@WebParam(name="message") String message);
	
}



4、服务端实现类:

package com.vtradex.training.server.cxf.helloworld.impl;

import javax.jws.WebService;

import com.vtradex.training.server.cxf.WsConstants;
import com.vtradex.training.server.cxf.helloworld.HelloWorldService;

/**
 * WebService服务端实现类.
 * 
 * serviceName与portName属性指明WSDL中的名称, endpointInterface属性指向Interface定义类.
 * 
 * @author 潘宁波
 * @version $Revision: v1.0 $Date: 2012-8-31 $
 */
@WebService(serviceName = "HelloWorldService", portName = "HelloWorldServicePort", endpointInterface = "com.vtradex.training.server.cxf.helloworld.HelloWorldService", targetNamespace = WsConstants.NS)
public class HelloWorldServiceImpl implements HelloWorldService {

	@Override
	public String say(String message) {
		return "Hello, " + message;
	}

}



5、常量定义类:

package com.vtradex.training.server.cxf;

/**
 * WebService常量定义.
 * 
 * @author 潘宁波
 * @version $Revision: v1.0 $Date: 2012-8-31 $
 */
public class WsConstants {
	
	/**项目内统一的NameSpace定义, for SOAP.*/
	public static final String NS = "http://thorn4.training.vtradex.com";

	/**项目内统一的XML charset定义, for REST*/
	public static final String CHARSET = ";charset=UTF-8";
}



6、发布服务的 Servlet

package com.vtradex.training.server.cxf.helloworld;

import javax.servlet.ServletConfig;
import javax.xml.ws.Endpoint;

import org.apache.cxf.transport.servlet.CXFNonSpringServlet;

import com.vtradex.training.server.cxf.helloworld.impl.HelloWorldServiceImpl;

/**
 * 
 * 
 * @author 潘宁波
 * @version $Revision: v1.0 $Date: 2012-9-1 $
 */
public class WsServlet extends CXFNonSpringServlet {
	
	private static final long serialVersionUID = 1L;

	@Override
	protected void loadBus(ServletConfig sc) {
		super.loadBus(sc);
		
		System.out.println("Starting CXF Web Services... HelloWorldServices");
		
		//: http://localhost:8088/training/ws/helloWorldService?wsdl
		Endpoint.publish("/helloWorldService", new HelloWorldServiceImpl()); 
	}
}



7、web.xml


		CXFServlet
		com.vtradex.training.server.cxf.helloworld.WsServlet
		2
	
	
	
		CXFServlet
		/ws/*
	


8、启动Web服务,在浏览器中即可查看WSDL

9、CXF 客户端调用:

package com.vtradex.training.server.cxf.helloworld;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

/**
 * 
 * 
 * @author 潘宁波
 * @version $Revision: v1.0 $Date: 2012-9-1 $
 */
public class WsClient {
	public static void main(String[] args) {
		
		/**
		 * 这种方式要求客户端必须依赖服务端
		 */
//		JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean();  
//        bean.setServiceClass(HelloWorldService.class);  
//        bean.setAddress("http://localhost:8088/training/ws/helloWorldService");  
//        HelloWorldService helloWorldService = (HelloWorldService)bean.create();  
//        String result = helloWorldService.say("Brofe");  
//        System.out.println(result); 
		
		/**
		 * 通过WSDL调用
		 */
		JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
        Client client = clientFactory.createClient("http://localhost:8088/training/ws/helloWorldService?wsdl");
        client.getInInterceptors().add(new LoggingInInterceptor());
        client.getOutInterceptors().add(new LoggingOutInterceptor());
        Object[] result;
		try {
			result = client.invoke("say", "brofe");
			 System.out.println(result[0]); 
		} catch (Exception e) {
			e.printStackTrace();
		}  
	}
}




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