最近开发因需求要求需要提供Web Service接口供外部调用,由于之前没有研究过该技术,故查阅资料研究了一番,所以写下来记录一下,方便后续使用。

这个demo采用CXF框架进行开发,后续所提到的Web Service 均由WS所替代。

一、CXF所使用的maven依赖,版本为:

<cxf.version>3.1.4</cxf.version>
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-core</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>${cxf.version}</version></dependency>

  

二、创建WS接口

import javax.jws.WebMethod;
import javax.jws.WebService;@WebService
public interface LogServiceWS {@WebMethodTSLog getLogById(String id);
}

三、实现类

@WebService
public class LogServiceWSImpl implements LogServiceWS {@Autowiredprivate SystemService systemService;public LogServiceWSImpl(){System.out.println("LogServiceWSImpl  初始化了。。。。。。。");}@Overridepublic TSLog getLogById(String id) {return systemService.getEntity(TSLog.class, id);}
}

  切记,实现类和接口尽量放在同一个包中,这样可以避免后续生成的WSDL文件有import标签,导致解析麻烦,或者在实现类上配置接口具体位置来解决该问题。

四、接下来配置CXF的配置文件cxf-beans.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://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd">
<!--  Cxf WebService 服务端示例 -->
<jaxws:endpoint id="userServiceWSImpl" implementor="com.svw.hrssc.webservice.ws.LogServiceWSImpl" address="/log/getLogById"/>
</beans>

implementor:表示WS接口的实现类

address:表示该接口的访问地址

由于使用的CXF为3.0以上版本,所以不需要引入那三个配置文件

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

  

五、接下来配置web.xml将CXF加入到项目启动容器中,项目启动的时候发布WS接口。

首先把cxf-beans.xml文件加入context-param中,项目启动的时候加载CXF配置文件,发布WS接口。

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-mvc-aop.xml,classpath*:spring-mvc.xml,classpath*:cxf-beans.xml</param-value></context-param>

  然后配置org.apache.cxf.transport.servlet.CXFServlet 作用:过滤请求,将符合CXF的请求交给接口处理。

<!--过滤cxf请求--><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>/ws/services/*</url-pattern></servlet-mapping>

  根据配置可知,当有 /ws/services/* 格式的请求都会被过滤,然后交给CXF来处理。

至此,CXF服务端开发完成,可以启动项目访问:http://localhost:8080/sscmanage/ws/services/   查看接口是否发布完成。

点击WSDL后面的链接,可以看到CXF产生的WSDL协议。标准的WSDL协议包含如下6部分:

六、测试客户端开发

  • 根据项目中所引用的cxf版本,自己去下载cxf开发包 apache-cxf-3.1.4.zip
  • 解压包至磁盘目录,建议放到开发常用目录
  • 配置环境变量:在系统环境变量中创建  环境变量,变量名:CXF_HOME   变量值:D:\software\development\apache-cxf-3.1.4   然后在系统环境变量Path下添加  %CXF_HOME%\bin  即可,然后打开CMD窗口,输入 wsdl2java -v   验证是否正常
  • WSDL:开发好接口后运行项目,访问http://localhost:8081/sscmanage/ws/services/log/getLogById?wsdl可以看到所产生的的WSDL文档,这是WS接口的标准规范,具体含义还请自行查资料。
  • 然后通过WSDL去生成客户端代码;wsdl2java -d D:\\src -client http://localhost:8081/sscmanage/ws/services/log/getLogById?wsdl   命令解析: wsdl2java是cxf提供的一个根据WSDL文件生成客户端的一个工具 ,因为配置了环境变量,所以可以直接调用,D:\\src  表示在D盘下的src目录下生成代码,http://localhost:8081/sscmanage/ws/services/log/getLogById?wsdl 为运行项目后所产生的的WSDL文档,表示根据该文档生成对应的客户端。
  • 生成代码后,将代码拷贝到创建的java项目中,大致目录如图:
  • 打开测试类可以看到
  • 至此,WS开发demo完毕,项目中CXF的配置已经配置完成,只需要开发对应的接口、实现类和cxf-bean.xml文件即可,开发完成后要记得测试通过!!!!!

转载于:https://www.cnblogs.com/blog411032/p/10534304.html

Web Service简单demo相关推荐

  1. Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.客户端工程 jar 包 : 二.1.  服务端:( new 一个web  service pro ...

  2. 基于xfire发布web Service简单实例

    创建接口 package com.test.service; public interface CaculatorService {public int add(int a,int b);public ...

  3. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    1.介绍     Nginx - 高性能web server,这个不用多说了,大家都知道.     FastCGI程序 - 常驻型CGI程序,它是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将 ...

  4. 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    http://blog.csdn.net/allenlinrui/article/details/19419721 分类: C/C++2014-02-18 17:58 3875人阅读 评论(0) 收藏 ...

  5. java web service简单示例

    http://www.iteye.com/topic/1135747 转载于:https://www.cnblogs.com/fycct/p/5669420.html

  6. spring boot demo( 获取一个RESTful web service)

    Consuming a RESTful Web Service spring demo中给的接口是  http://gturnquist-quoters.cfapps.io/api/random. 返 ...

  7. RPC协议与Web Service

    一.引入 我们每天都在使用浏览器来上网冲浪, 在查找自己需要的资源, HTTP协议自然是我们使用的最多的 一种, 我们尽情地享受着这种信息高速路的快感,却没有试图去了解我们是如何获得这些资源的? 它是 ...

  8. RESTful Web Service 架构剖析

    如今微服务和分布式架构变的越来越流行,而简单,可靠,高效,跨平台和跨语言的 Web Service 则是这类系统架构的基石. RESTful Web Service 恰好满足这些特点,被越来越多的系统 ...

  9. Web Service(三):先了解SOA

    前沿 接着前两篇博客,对Web Service简单的认识和例子,本该是想通过.NET下的WCF再来实现Web Service,然而研究下去发现即使实现了WCF的例子后,对其中的原理不甚明白,也就是在全 ...

  10. .NET2.0中,Winform程序如何异步调用Web Service呢?[Demo下载]——与.net1.1环境下比较...

    最近在MSDN上看到一个在.NET1.1中Winform程序异步调用WebService的例子 我准备模仿着迁移到.NET2.0环境中,遗憾的是,一切不是那么简单. 首先,.net1.1中调用的Web ...

最新文章

  1. GigaScience:ASaiM基于Galaxy微生物组分析框架
  2. RDF -- 资源描述框架
  3. Hibernate关联查询
  4. IPC\DVS\DVR与NVR之间的区别
  5. 宝塔配置mysql host_阿里云安装宝塔以及mysql配置
  6. 计算机2级学的是什么时候出来的,2019计算机二级考试科目有哪些 什么时候出成绩...
  7. 使用 Blazor 开发内部后台(四):基于Card组件快速搭建导航首页
  8. 4位加法器的设计代码verilog_HDLBits:在线学习Verilog(六 · Problem 25-29)
  9. php对接钉钉_php实现钉钉业务报警机器人
  10. zabbix自动发现主机并加入组绑定模板
  11. @value 静态变量_C语言基本知识:变量
  12. ubuntu学习日记--Lesson5:系统目录详解
  13. zepto 清除html,Zepto的使用
  14. 【最强大脑】天才数学家陶哲轩亲授25条职业建议
  15. 操作系统文件的物理结构(文件分配方式)
  16. CS系统设计与开发——人事档案管理系统的设计与实现
  17. angular4使用原生JS属性报错error TS2339: Property 'checked' does not exist on type 'HTMLElement'.
  18. dropbox 怎么使用_如何在一台PC上使用多个Dropbox帐户
  19. 记录: 问题:/usr/bin/ld: main.o: Relocations in generic ELF (EM: 183)
  20. 18-关系型数据和文档型数据库有什么区别?

热门文章

  1. 聊聊那些计量软件(区别、流行度 R Matlab SPSS SAS STATA)
  2. 镜头焦距、光圈、物距与景深之间的关系
  3. 硬盘分区被格式化了如何恢复
  4. 【学习笔记】Baby Step Giant Step算法及其扩展
  5. Android动态logo,Android模仿拉勾网logo动画效果
  6. 处理器流水线长度是否存在理论极限?
  7. 华硕天选笔记本电脑启动机器后搜索不到网络
  8. 忘记电脑开机密码怎么办?六种方法教你解决
  9. 「云渲染」渲染农场的架构原理、特点
  10. hive on spark : 使用load data 命令将hdfs上数据覆写到hive表中报错:could not be cleaned up解决方法