Spring 整合 CXF

一:发布服务

web.xml

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/config/applicationContext.xml</param-value>
	</context-param>
		
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>	
	
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/webService/*</url-pattern>
	</servlet-mapping>
import javax.jws.WebService;

/**
 * webservice定义 
 * 如果不指定targetNamespace 默认为包名称
 * 例如包名为 com.xx.webservice targetNamespace为 http://webservice.xx.com/
 */
@WebService(targetNamespace= "http://sayhello.webservice/")
public interface ISayHelloWebService {

	public String sayHello(String name);
	
}
webservice实现
import javax.jws.WebService;

/**
 * 如果不指定targetNamespace 默认为包名称
 * 例如包名为 com.xx.webservice targetNamespace为 http://webservice.xx.com/
 */
@WebService(targetNamespace= "http://sayhello.webservice/")
public class SayHelloWebServiceImpl implements ISayHelloWebService {

	public String sayHello(String name) {
		return "hello," + name;
	}
}
Spring 配置为文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:jaxws="http://cxf.apache.org/jaxws"
		xsi:schemaLocation="
			http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
			http://cxf.apache.org/jaxws 
			http://cxf.apache.org/schemas/jaxws.xsd">

		<import resource="classpath:META-INF/cxf/cxf.xml"/>    
		<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> 
	       <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  		
  		<bean id="sayHelloWebService" class="cn.xx.SayHelloWebServiceImpl" />
  		
  		<jaxws:endpoint id="sayHelloWebServiceWS" address="/sayHello">
  			<jaxws:implementor ref="sayHelloWebService" />
  		</jaxws:endpoint>
</beans>

发布服务完成 启动web容器 浏览器查看wsdl文件定义http://localhost:9090/ylnetWebservice/webService/sayHello?wsdl

二:客户端 调用webservice

import javax.jws.WebService;

/**
 * 客户端
 */
@WebService(targetNamespace= "http://sayhello.webservice/")
public interface ISayHelloWebServiceClient {

	public String sayHello(String name);
	
}
public class SayHelloClientWS extends BaseWebService {

	protected ISayHelloWebServiceClient getWebService() {
		return (ISayHelloWebServiceClient) getWebService(ISayHelloWebServiceClient.class);
	}
	
	public String sayHello(String name) {
		return getWebService().sayHello(name);
	}
}
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public abstract class BaseWebService {

	private String host;
	
	private String address;
	
	private JaxWsProxyFactoryBean getJaxWsFactory(Class<?> clazz){
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		System.out.println(getWebServiceAddress());
		factory.setAddress(getWebServiceAddress());
		factory.setServiceClass(clazz);
		return factory;
	}
	
	protected abstract Object getWebService();
	
	/**
	 * TODO 可以考虑在此缓存
	 * <br>------------------------------<br>
	 * @param clazz
	 * @return
	 */
	protected Object getWebService(Class<?>  clazz)  {
		return getJaxWsFactory(clazz).create();
	}
	
	protected String getWebServiceAddress() {
		return getHost() + getAddress();
	}
	
	/**
	 * 获得host
	 * @return the host
	 */
	public String getHost() {
		return host;
	}

	/**
	 * 获得address
	 * @return the address
	 */
	public String getAddress() {
		return address;
	}

	/**
	 * 设置host
	 * @param host the host to set
	 */
	public void setHost(String host) {
		this.host = host;
	}

	/**
	 * 设置address
	 * @param address the address to set
	 */
	public void setAddress(String address) {
		this.address = address;
	}
}
	public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-client.xml");
		SayHelloClientWS sayHelloClientWS = applicationContext.getBean("sayHelloClientWS", SayHelloClientWS.class);
		System.out.println(sayHelloClientWS.sayHello("张三"));
	}
applicationContext-client.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="
			http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
		
	<bean id="sayHelloClientWS" 	class="cn.soaringstar.ylnet.webservice.SayHelloClientWS" >
		<property name="host" 		value="http://localhost:9090/ylnetWebservice/webService/" />
		<property name="address" 	value="sayHello" />
	</bean>

</beans>
posted on 2012-04-27 11:02  YangJin  阅读(192)  评论(0编辑  收藏  举报