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>
Andy_能力越到责任越大