Apche CXF与springMVC整合的webService发布 水深无声 2022-05-30 05:24 179阅读 0赞 一:我们先看发布端(Endpoint) 服务端项目:结构如下 ![这里写图片描述][SouthEast] 1.maven管理jar包 pom.xml如下:加入几个Apache CXF 的核心包 <!-- Apache CXF核心jar--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.1.8</version> </dependency> <!--不加这个包会报错 Unable to locate spring NamespaceHandler for XMLschema namespace --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.8</version> </dependency> <!--java实现webservice,不部署到tomcat,需要jetty包支持--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.8</version> </dependency> 2.web.xml 加入如下配置:把请求交给CXFServlet去处理 <!-- 配置CXF框架的核心Servlet --> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> 3.创建一个webService接口和接口的实现类 接口如下:(注意类上要有@webService标识): package com.xu.lang.CXFwebService; import javax.jws.WebParam; import javax.jws.WebService; /** * @Author: Xuhao * @Description: * @Date: Created in 15:00 2018/3/4 */ @WebService public interface FirstCXFWebService { String conversionString(@WebParam(name = "name") String name, @WebParam(name = "password") String password, @WebParam(name = "token") String token); } webService接口实现如下: package com.xu.lang.CXFwebService; /** * @Author: Xuhao * @Description: * @Date: Created in 15:06 2018/3/4 */ import com.xu.lang.entity.Student; import com.xu.lang.mapper.StudentMapper; import javax.annotation.Resource; import javax.jws.WebService; import javax.xml.ws.Endpoint; //endpointInterface 作用是指定实现的接口 @WebService(endpointInterface = "com.xu.lang.CXFwebService.FirstCXFWebService") public class FirstCXFWebServiceImpl implements FirstCXFWebService { @Override public String conversionString(String name, String password, String token) { //这里只是做了一个字符串的连接 测试用无所谓啦 return new StringBuilder(name).append(password).append(token); } } 4.创建一个spring-webService.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" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-lazy-init="true"> <!--发布webservice--> <bean id="jaxWsServiceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"> <property name="wrapped" value="true" /> </bean> <!-- 创建一个端点用来暴露接口 address :相对刚才web.xml CXF请求路径也就是: http://localhost:8080/demoTest/services/person?wsdl --> <jaxws:endpoint id="serviceimp" address="/person" implementor="com.xu.lang.CXFwebService.FirstCXFWebServiceImpl"> <jaxws:serviceFactory> <ref bean="jaxWsServiceFactoryBean" /> </jaxws:serviceFactory> </jaxws:endpoint> </beans> 启动tomcat中间件: 访问“[http://localhost:8080/demoTest/services/person?wsdl][http_localhost_8080_demoTest_services_person_wsdl]” demoTest:为我的项目名称也是application Context的根目录 ![这里写图片描述][SouthEast 1] services:是web.xml中 CXFServlet ![这里写图片描述][SouthEast 2] 出现如下界面 说明启动成功:-。- ![这里写图片描述][SouthEast 3] 成功就在眼前 -.- 二 客户端的用法: 1.首先需要在本机安装apache-cxf-3.1.8.zip [http://cxf.apache.org/download.html][http_cxf.apache.org_download.html] 官网 下载后解压在任意的目录,解压后的如下图: ![这里写图片描述][SouthEast 4] 然后配置环境变量: ![这里写图片描述][SouthEast 5] 最后用cmd测试下输入wsdl2java:出现下图表示成功 ![这里写图片描述][SouthEast 6] 2.上边都是准备工作 使用WebService的wsdl2java工具生成客户端代码: wsdl2java encoding 编码格式 -p 包名 -d 客户端的项目所在磁盘目录 wsdl路径 我的客户端目录如下: ![这里写图片描述][SouthEast 7] 我执行的命令: wsdl2java -encoding utf-8 -p com.lida.dream\_webservice.info -d E:\\githubFile\\dream-webservice\\src\\main\\java [http://localhost:8080/demoTest/services/person?wsdl][http_localhost_8080_demoTest_services_person_wsdl] 不报错就是执行成功了 如上图红框的文件就是生成过来的.java文件 3.在客户端测试 可以写个main方法测试下 public static void main(String[] args) { JaxWsProxyFactoryBean jaxWsProxyFactoryBean = newJaxWsProxyFactoryBean(); String address = "http://localhost:8080/demoTest/services/person?wsdl" jaxWsProxyFactoryBean.setAddress(address); jaxWsProxyFactoryBean.setServiceClass(FirstCXFWebService.class); FirstCXFWebService firstCXFWebService = (FirstCXFWebService)jaxWsProxyFactoryBean.create(); String str = firstCXFWebService.conversionString("a", "b","c"); System.out.println(str);//abc } 4.结合spring 可以如下 <!-- 使用<jaxws:clietn>调用服务端 jaxws:client内部使用JaxWsProxyFactoryBean方式 --> <jaxws:client id="firstCXFWebService" address="http://localhost:8080/demoTest/services/person?wsdl" serviceClass="com.lida.dream_webservice.info.FirstCXFWebService"> </jaxws:client> spring 客户端测试类: ApplicationContext context= new ClassPathXmlApplicationContext("spring/spring-web.xml"); FirstCXFWebService userDAO= (FirstCXFWebService)context.getBean("firstCXFWebService"); String s = userDAO.conversionString("a", "b", "c"); System.out.println(s); OK大功告成-。-大约花了一整天学习 从0到现在会了基本的操作并且亲测成功运行。有意见或者有什么不对的地方 还请大神指点 互相学习共同进步~ 代码还没发布到github上 想要代码的小伙伴加我qq511831389 睡觉啦。 [SouthEast]: /images/20220530/249d1eeed5854923b0d01e2f83973147.png [http_localhost_8080_demoTest_services_person_wsdl]: http://localhost:8080/demoTest/services/person?wsdl [SouthEast 1]: /images/20220530/8bd324a07ca543a8a3a0b2ffd0c55a21.png [SouthEast 2]: /images/20220530/55998395e9534f60aaba4f2e064d8bcd.png [SouthEast 3]: /images/20220530/bff86d53239542bbb8fc714d910ba6fa.png [http_cxf.apache.org_download.html]: http://cxf.apache.org/download.html [SouthEast 4]: /images/20220530/c5bd279bc1b343dfb0dc5a0b03db43ea.png [SouthEast 5]: /images/20220530/464d6b776eff4f2f8df5801e44be5eb2.png [SouthEast 6]: /images/20220530/69d0491b0c55457f9b493dd846aea7f8.png [SouthEast 7]: /images/20220530/9616288be54440f0924594d3443a6ac1.png
还没有评论,来说两句吧...