Spring+CXF+Maven发布Webservice - KenNgai

foxting 2021-08-03 原文

使用CXF发布WebService简单又快速,还可以与Spring集成,当Web容器启动时一起发布WebService服务。本例是简单的客户端给服务端发送订单信息,服务端返回订单转为json的字符串。

1.使用maven管理jar包,首先在maven添加使用到的cxf jar包依赖,到CXF官网上找到Maven的依赖内容。

网址如下:http://cxf.apache.org/docs/using-cxf-with-maven.html

我使用的是Tomcat所以引用前两项就可以了

  1. <properties>
  2. <cxf.version>2.2.3</cxf.version>
  3. </properties>
  1. <dependency>
  2. <groupId>org.apache.cxf</groupId>
  3. <artifactId>cxf-rt-frontend-jaxws</artifactId>
  4. <version>${cxf.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.cxf</groupId>
  8. <artifactId>cxf-rt-transports-http</artifactId>
  9. <version>${cxf.version}</version>
  10. </dependency>

其它jar包依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.32</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework</groupId>
  8. <artifactId>spring-core</artifactId>
  9. <version>${spring.version}</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-web</artifactId>
  14. <version>${spring.version}</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework</groupId>
  18. <artifactId>spring-context</artifactId>
  19. <version>${spring.version}</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework</groupId>
  23. <artifactId>spring-beans</artifactId>
  24. <version>${spring.version}</version>
  25. </dependency>

2.创建简单的订单类:

  1. package com.ken.model;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Order implements Serializable {
  6. private String OrderNo;
  7. private String itemCode;
  8. private String itemName;
  9. private Long quantity;
  10. public String getOrderNo() {
  11. return OrderNo;
  12. }
  13. public void setOrderNo(String orderNo) {
  14. OrderNo = orderNo;
  15. }
  16. public String getItemCode() {
  17. return itemCode;
  18. }
  19. public void setItemCode(String itemCode) {
  20. this.itemCode = itemCode;
  21. }
  22. public String getItemName() {
  23. return itemName;
  24. }
  25. public void setItemName(String itemName) {
  26. this.itemName = itemName;
  27. }
  28. public Long getQuantity() {
  29. return quantity;
  30. }
  31. public void setQuantity(Long quantity) {
  32. this.quantity = quantity;
  33. }
  34.  
  35. }

3.WebService接口及实现类:

3.1接口

  1. package com.ken.webservice;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.jws.WebParam;
  6. import javax.jws.WebService;
  7.  
  8. import com.ken.model.Order;
  9.  
  10. @WebService
  11. public interface IRemoteService {
  12. public String showRemoteMessage(@WebParam(name="arg0") String message);
  13. public String addOrder(List<Order> orders);
  14.  
  15. }

3.2接口实现类

  1. package com.ken.webservice.impl;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.jws.WebService;
  6.  
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONArray;
  9. import com.ken.model.Order;
  10. import com.ken.webservice.IRemoteService;
  11.  
  12.  
  13. @WebService(endpointInterface="com.ken.webservice.IRemoteService") //endpointInterface这个不能写错了
  14. public class RemoteServiceImpl implements IRemoteService {
  15. public String showRemoteMessage(String message) {
  16. return "You message is "+ message;
  17. }
  18.  
  19. public String addOrder(List<Order> orders) {
  20. return JSONArray.toJSONString(orders,true);
  21. }
  22. }

4.配置Spring-context.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"
  4. xmlns:jaxws="http://cxf.apache.org/jaxws"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. http://cxf.apache.org/jaxws
  8. http://cxf.apache.org/schemas/jaxws.xsd">
  9.  
  10. <import resource="classpath*:META-INF/cxf/cxf.xml" />
  11. <import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" />
  12. <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" />
  13. <jaxws:endpoint id="remoteServiceEndPoint" implementor="com.ken.webservice.impl.RemoteServiceImpl" address="/RemoteService"></jaxws:endpoint>
  14. </beans>

5.配置web.xml文件

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4.  
  5. <web-app>
  6. <display-name>Archetype Created Web Application</display-name>
  7. <context-param>
  8. <param-name>contextConfigLocation</param-name>
  9. <param-value>classpath:spring-context.xml</param-value>
  10. </context-param>
  11. <listener>
  12. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  13. </listener>
  14. <servlet>
  15. <servlet-name>CXFServlet</servlet-name>
  16. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  17. <load-on-startup>1</load-on-startup>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>CXFServlet</servlet-name>
  21. <url-pattern>/services/*</url-pattern>
  22. </servlet-mapping>
  23. </web-app>

 完成上面的步骤后就可以启动Tomcat并访问

wsdl:

http://localhost:8080/IHealth.Web/services/RemoteService?wsdl

6.客户端调用服务

cmd到其项目的src目录并执行命令就会解析生成相应的调用代码,命令:wsimport -keep http://localhost:8080/IHealth.Web/services/RemoteService?wsdl

 

生成好刷新下src目录就会看到生成的代码,如下

 

此时就可以写调用代码了:

  1. package com.ken.client;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import com.ken.webservice.Order;
  7. import com.ken.webservice.impl.IRemoteService;
  8. import com.ken.webservice.impl.RemoteServiceImplService;
  9.  
  10. public class Client {
  11.  
  12. public static void main(String[] args) {
  13. //创建一个用于产生RemoteServiceImplService实例的工厂,RemoteServiceImplService类是wsimport工具生成的
  14. RemoteServiceImplService factory = new RemoteServiceImplService();
  15. //通过工厂生成一个IRemoteService实例,IRemoteService是wsimport工具生成的
  16. IRemoteService service = factory.getRemoteServiceImplPort();
  17. String result = service.showRemoteMessage("Ken");
  18. System.out.println(result);
  19. List<Order> orders = new ArrayList<Order>();
  20. Order order1 = new Order();
  21. order1.setOrderNo("201706048888");
  22. order1.setItemCode("A10000001");
  23. order1.setItemName("IPHONE");
  24. order1.setQuantity(100L);
  25. orders.add(order1);
  26. Order order2 = new Order();
  27. order2.setOrderNo("201706048888");
  28. order2.setItemCode("A10000002");
  29. order2.setItemName("MAC");
  30. order2.setQuantity(200L);
  31. orders.add(order2);
  32. String resultOrder = service.addOrder(orders);
  33. System.out.println(resultOrder);
  34.  
  35. }
  36.  
  37. }

 运行后控制台内容:

  1. You message is Ken
  2. [
  3. {
  4. "itemCode":"A10000001",
  5. "itemName":"IPHONE",
  6. "orderNo":"201706048888",
  7. "quantity":100
  8. },
  9. {
  10. "itemCode":"A10000002",
  11. "itemName":"MAC",
  12. "orderNo":"201706048888",
  13. "quantity":200
  14. }
  15. ]

  

发表于
2017-06-04 13:30 
KenNgai 
阅读(9311
评论(0
编辑 
收藏 
举报

 

版权声明:本文为foxting原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/foxting/p/6940258.html

Spring+CXF+Maven发布Webservice - KenNgai的更多相关文章

  1. Layui弹出层详解 – 夜神月君

    Layui弹出层详解 今天空了学习一下弹出层 还是一步步展示把 首先,layer可以独立使用,也可以通过Lay […]...

  2. Excel调换数据位置 – 星空6

    Excel调换数据位置          选择需要调换位置的项,按住Shift键,拖动数据,移动到BC列中间线 […]...

  3. 原码、反码和补码 – FF冯静妃

    原码、反码和补码     数在计算机中是以二进制形式表示的,数分为有符号数和无符号数,原码、反码和补码都是有符 […]...

  4. 微信小程序开发踩坑与总结 –

    原文链接:https://segmentfault.com/a/1190000008516296 前段时间把公 […]...

  5. 事件函数SetEvent、PulseEvent与WaitForSingleObject详解 – 蒲公英110

    事件函数SetEvent、PulseEvent与WaitForSingleObject详解 系统核心对象中的E […]...

  6. oracle创建数据库和用户 – WhyWin

    oracle创建数据库和用户   以前开发的时候用得比较多的是mysql和sql server,oracle用 […]...

  7. Java —— StringBuffer 类和 String Builder 类

    一、使用StringBuffer 类处理字符串 StringBuffer 也可以用来存储字符串,比String […]...

  8. http://www.uupoop.com/ps/ – 刘宝成

    http://www.uupoop.com/ps/ 网页版PS,在线PS 基本的PS功能都有,最重要的一点是快 […]...

随机推荐

  1. GitHub和码云gitee及远程仓库管理

    目录 备注: 知识点 GitHub 码云(gitee.com) gitee的使用 本地版本库关联多个远程库 备 […]...

  2. 浏览器插件–NDM扩展–网页资源下载利器

    可能大家都知道IDM,但是却很少人知道NDM。其实他们两个功能很相近,在性能上也差不多,如果你想尝鲜,那不妨试 […]...

  3. FreeMarker 快速入门

    FreeMarker 快速入门 FreeMarker是一个很值得去学习的模版引擎。它是基于模板文件生成其他文本 […]...

  4. ios 信任charles https 证书

    https://www.charlesproxy.com/documentation/using-charle […]...

  5. 六、迭代器、生成器和装饰器

    1.迭代器 定义 能被next()函数进行调用且不断返回下一个值的对象。其内置方法中包含__iter__(返回 […]...

  6. oracle定制定时执行任务

    1.引言 定制定时执行的任务有两种形式,系统级别和数据库级别, 从操作系统级别来讲, windows系统我们可 […]...

  7. 503是一种HTTP状态码。英文名503 Service Unavailable与404(404 Not Found)是同属一种网页状态出错码。前者是服务器出错的一种返回状态,后者是网页程序没有相关的结果后返回的一种状态,需要优化网站的时候通常需要制作404出错页以便网站整体优化。

    goldCat1 商城 消息 | 百度首页    新闻网页贴吧知道音乐图片视频地图百科文库 进入词条搜索词条帮 […]...

  8. Adobe Reader 快捷键

    Adobe Reader 快捷键 1,使用快捷键 在编辑-首选项-一般,选中”使用加速键访问工具& […]...