搭建web项目结合spring+cxf的webservice服务
服务端:
服务端和客户端都需要引入包
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 antlr-2.7.7.jar 2 aopalliance-1.0.jar 3 asm-3.3.jar 4 commons-collections-3.2.1.jar 5 commons-lang-2.6.jar 6 commons-logging-1.1.1.jar 7 cxf-2.4.2.jar 8 cxf-manifest.jar 9 cxf-xjc-boolean-2.4.0.jar 10 cxf-xjc-bug671-2.4.0.jar 11 cxf-xjc-dv-2.4.0.jar 12 cxf-xjc-ts-2.4.0.jar 13 FastInfoset-1.2.9.jar 14 geronimo-activation_1.1_spec-1.1.jar 15 geronimo-annotation_1.0_spec-1.1.1.jar 16 geronimo-javamail_1.4_spec-1.7.1.jar 17 geronimo-jaxws_2.2_spec-1.0.jar 18 geronimo-jms_1.1_spec-1.1.1.jar 19 geronimo-servlet_3.0_spec-1.0.jar 20 geronimo-stax-api_1.0_spec-1.0.1.jar 21 geronimo-ws-metadata_2.0_spec-1.1.3.jar 22 isorelax-20030108.jar 23 jaxb-api-2.2.1.jar 24 jaxb-impl-2.2.1.1.jar 25 jaxb-xjc-2.2.1.1.jar 26 jettison-1.3.jar 27 jetty-continuation-7.4.5.v20110725.jar 28 jetty-http-7.4.5.v20110725.jar 29 jetty-io-7.4.5.v20110725.jar 30 jetty-security-7.4.5.v20110725.jar 31 jetty-server-7.4.5.v20110725.jar 32 jetty-util-7.4.5.v20110725.jar 33 joda-time-1.6.2.jar 34 jra-1.0-alpha-4.jar 35 js-1.7R2.jar 36 jsr311-api-1.1.1.jar 37 msv-core-2010.2.jar 38 neethi-3.0.1.jar 39 opensaml-2.4.1.jar 40 openws-1.4.1.jar 41 relaxngDatatype-20020414.jar 42 saaj-api-1.3.jar 43 saaj-impl-1.3.2.jar 44 serializer-2.7.1.jar 45 slf4j-api-1.6.1.jar 46 slf4j-jdk14-1.6.1.jar 47 spring-aop-3.0.5.RELEASE.jar 48 spring-asm-3.0.5.RELEASE.jar 49 spring-beans-3.0.5.RELEASE.jar 50 spring-context-3.0.5.RELEASE.jar 51 spring-core-3.0.5.RELEASE.jar 52 spring-expression-3.0.5.RELEASE.jar 53 spring-jms-3.0.5.RELEASE.jar 54 spring-tx-3.0.5.RELEASE.jar 55 spring-web-3.0.5.RELEASE.jar 56 stax2-api-3.1.1.jar 57 velocity-1.7.jar 58 woodstox-core-asl-4.1.1.jar 59 wsdl4j-1.6.2.jar 60 wss4j-1.6.2.jar 61 xalan-2.7.1.jar 62 xml-resolver-1.2.jar 63 xmlbeans-2.4.0.jar 64 xmlschema-core-2.0.jar 65 xmlsec-1.4.5.jar 66 xmltooling-1.3.1.jar 67 xsdlib-2010.1.jar
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <!-- 两种方式配置1.监听器配置 2.servlet配置, 以下的是采用监听器配置的 --> 8 9 <!-- 通过上下文参数指定spring配置文件的位置 --> 10 <context-param> 11 <param-name>contextConfigLocation</param-name> 12 <param-value>classpath:cxf-servlet.xml</param-value> 13 </context-param> 14 <listener> 15 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 16 </listener> 17 18 <!-- 配置CXF框架的核心Servlet --> 19 <servlet> 20 <servlet-name>cxf</servlet-name> 21 <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 22 <!-- 通过初始化参数指定配置文件的位置 --> 23 <!-- 24 <init-param> 25 <param-name>config-location</param-name> 26 <param-value>classpath:cxf-servlet.xml</param-value> 27 </init-param> 28 --> 29 </servlet> 30 31 <servlet-mapping> 32 <servlet-name>cxf</servlet-name> 33 <url-pattern>/cxf/*</url-pattern> 34 </servlet-mapping> 35 36 <welcome-file-list> 37 <welcome-file>index.jsp</welcome-file> 38 </welcome-file-list> 39 </web-app>
cxf-servlet.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" 4 xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:jaxrs="http://cxf.apache.org/jaxrs" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://cxf.apache.org/bindings/soap 8 http://cxf.apache.org/schemas/configuration/soap.xsd 9 http://cxf.apache.org/jaxws 10 http://cxf.apache.org/schemas/jaxws.xsd 11 http://cxf.apache.org/jaxrs 12 http://cxf.apache.org/schemas/jaxrs.xsd 13 "> 14 <!-- 引入CXF Bean定义如下,早期的版本中使用,如果是servlet引入的话则下面三句不用了,因为框架引入了 --> 15 <import resource="classpath:META-INF/cxf/cxf.xml" /> 16 <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 17 <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 18 19 <!-- 通过spring配置文件发布CXF的服务 --> 20 21 <!-- 第一种发布方式:没有接口的发布(简单发布) --> 22 <!-- 23 id:唯一标识 24 address:访问url 25 implementor:提供服务的类型 26 --> 27 <jaxws:endpoint id="helloService" address="/hello" 28 implementor="cn.itcast.cxf.HelloService"> 29 <!-- 加入消息拦截器 --> 30 <jaxws:inInterceptors> 31 <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> 32 </jaxws:inInterceptors> 33 <jaxws:outInterceptors> 34 <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> 35 </jaxws:outInterceptors> 36 </jaxws:endpoint> 37 38 <!-- 第二种发布方式:带有接口的发布 --> 39 <!-- 40 id:唯一标识 41 address:访问url 42 serviceClass:接口类型 43 --> 44 <jaxws:server id="hiService" address="/hi" 45 serviceClass="cn.itcast.cxf.IHiService"> 46 <jaxws:serviceBean> 47 <!-- 提供服务的实现类 --> 48 <bean class="cn.itcast.cxf.HiServiceImpl"></bean> 49 </jaxws:serviceBean> 50 51 <!-- 加入消息拦截器 --> 52 <jaxws:inInterceptors> 53 <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> 54 </jaxws:inInterceptors> 55 <jaxws:outInterceptors> 56 <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> 57 </jaxws:outInterceptors> 58 </jaxws:server> 59 60 <!-- 配置restful方式的web服务 --> 61 <bean id="ps" class="cn.itcast.restful.PersonServiceImpl"></bean> 62 <jaxrs:server id="personService" address="/p"> 63 <jaxrs:serviceBeans> 64 <ref bean="ps"/> 65 </jaxrs:serviceBeans> 66 <jaxrs:inInterceptors> 67 <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> 68 </jaxrs:inInterceptors> 69 <jaxrs:outInterceptors> 70 <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> 71 </jaxrs:outInterceptors> 72 </jaxrs:server> 73 </beans>
忽略60-72 那是 jason方面的配置
IHiService.java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package cn.itcast.cxf; 2 3 import javax.jws.WebService; 4 5 @WebService 6 public interface IHiService { 7 public String sayHi(String name); 8 }
HiServiceImpl.java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package cn.itcast.cxf; 2 3 public class HiServiceImpl implements IHiService { 4 5 @Override 6 public String sayHi(String name) { 7 System.out.println("sayHi...."); 8 return "hi " + name; 9 } 10 11 }
然后
localhost:8080/项目地址/hi?xsdl
客户端
利用 wsimport -s 地址 或者ws2java -s地址的命令
得到文件后
把接口文件复制来
配置文件 ClientBean.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" 4 xmlns:soap="http://cxf.apache.org/bindings/soap" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://cxf.apache.org/bindings/soap 8 http://cxf.apache.org/schemas/configuration/soap.xsd 9 http://cxf.apache.org/jaxws 10 http://cxf.apache.org/schemas/jaxws.xsd"> 11 <!-- 配置客户端bean --> 12 <!-- 13 id:唯一标识 14 address:请求的服务地址 15 serviceClass:客户端接口 16 --> 17 <jaxws:client id="hiService" address="http://localhost/CXF_03/cxf/hi" serviceClass="cn.itcast.cxf.IHiService"></jaxws:client> 18 19 </beans>
测试 IHiService就是拷贝过来的接口文件,放到项目中
1 package cn.itcast.test; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import cn.itcast.cxf.IHiService; 7 8 public class Test1 { 9 public static void main(String[] args) { 10 //初始化spring 11 ApplicationContext ctx = new ClassPathXmlApplicationContext("ClientBeans.xml"); 12 IHiService s = (IHiService) ctx.getBean("hiService"); 13 s.sayHi("abc"); 14 System.out.println(s.getClass().getName()); 15 } 16 }