我这里是实现有Spring+SpringMVC+Mybatis的项目,由于CXF能很好的集成到Spring容器中,所以对于已经使用Spring框架的项目推荐使用CXF框架来添加WebService服务


在项目中集成的步骤(服务端):

1:复制CXF的相关jar包。

2:在web.xml配置CXF的核心控制器:CXFServlet

3:开发一个WebService业务接口,该接口要使用@WebService修饰。

开发一个WebService实现类,实现类也需要用@WebService修饰。

4:在Spring配置文件中导入CXF提供Schema。我这里是重新写了一个cxf-config.xml的配置文件方便分模块和查找,开始进行配置使用jaxws:endpoint元素来暴露WebService。

5:如果要添加拦截器。在jaxws:endpoint元素添加inIntercepts或者outIntercept子元素



详细操作如下:

1:复制CXF的相关jar包其中核心包6个

2:在web.xml配置CXF的核心控制器:CXFServlet

<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>


3:开发一个WebService业务接口,该接口要使用@WebService修饰。

开发一个WebService实现类,实现类也需要用@WebService修饰。

packagelog.controller;importjavax.jws.WebService;importnet.sf.json.JSONObject;@WebServicepublicinterfaceTestWebservice{publicabstractvoidsay();publicStringlogin(StringuserName,Stringpassword);}

packagelog.controller;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.jws.WebService;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;importorg.springframework.beans.factory.annotation.Autowired;importdj.log.dao.EmployeeMapper;importdj.log.service.EmployeeService;importdj.log.service.LogService;@WebService(endpointInterface="log.controller.TestWebservice",serviceName="TestWebserviceImpl")publicclassTestWebserviceImplimplementsTestWebservice{@AutowiredprivateEmployeeServiceemployeeService;@AutowiredprivateEmployeeMapperemployeeMapper;@AutowiredprivateLogServicelogService;/**(non-Javadoc)**@seedj.log.controller.TestWebservice#say()*/@Overridepublicvoidsay(){System.out.println("dddddddddddddddddd");}publicStringlogin(StringuserName,Stringpassword){JSONObjectjson=newJSONObject();List<Map<String,Object>>userInfo=logService.selectLogin(userName,password);StringrespMessage="0";if(userInfo.size()>0){respMessage="1";json.put("userName",userName);json.put("password",password);json.put("emp_id",userInfo.get(0).get("EMP_ID"));json.put("roles",userInfo.get(0).get("ROLES"));}json.put("respMessage",respMessage);//PrintWriterout=response.getWriter();//out.print(json.toString());//out.close();returnjson.toString();}}

4:在Spring配置文件中导入CXF提供Schema。我这里是重新写了一个cxf-config.xml的配置文件方便分模块和查找,开始进行配置使用jaxws:endpoint元素来暴露WebService:

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd"><!--引用cxf包下的配置--><importresource="classpath:META-INF/cxf/cxf.xml"/><importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/><importresource="classpath:META-INF/cxf/cxf-servlet.xml"/><!--声明一个bean--><beanid="testWebservice"class="controller.TestWebserviceImpl"/><!--通过这个bean来暴露WebServiceimplementor=""这个bean实现相关的业务逻辑:可以直接写类的路径,也可以直接写已经声明的bean为了更好的使用Spring的依赖注入我们使用声明好的beanaddress="/RCSWebService"指定访问的路径--><jaxws:endpointid="myWebService"implementor="#testWebservice"address="/RCSWebService"/></beans>

在客户端调用的步骤:

1:下载apache-cxf文件,并配置系统环境变量path路径,我这里使用apache-cxf-2.7.6


2:调用cxf提供的wsdl2java工具,根据wsdl文档生成相应的java代码。

3:找到生成的类中一个继承了Service的类。该类的实例可以当做工厂类来使用。通过调用的该类的getXXX获得对象返回赋给一个代理类,通过代理类调用对应的方法

TestWebserviceImpltest=newTestWebserviceImpl();TestWebservicetestdao=test.getTestWebserviceImplPort();testdao.say();