最近开发因需求要求需要提供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 { @WebMethod
TSLog getLogById(String id);
}

三、实现类

@WebService
public class LogServiceWSImpl implements LogServiceWS { @Autowired
private SystemService systemService;
public LogServiceWSImpl(){
System.out.println("LogServiceWSImpl 初始化了。。。。。。。");
} @Override
public 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/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://cxf.apache.org/jaxws
http://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文件即可,开发完成后要记得测试通过!!!!!

Web Service简单demo的更多相关文章

  1. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  2. Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo

    http://blog.csdn.net/chdhust/article/details/42645313 Nginx + FastCGI 程序(C/C++)搭建高性能web service的Demo ...

  3. Web Service学习-CXF开发Web Service实例demo(一)

    Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样 ...

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

       FastCGI编程包括四部分:初始化编码.接收请求循环.响应内容.响应结束循环. FCGX_Request request; FCGX_Init(); ); FCGX_InitRequest(& ...

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

    http://blog.csdn.net/allenlinrui/article/details/19419721 1.介绍     Nginx - 高性能web server,这个不用多说了,大家都 ...

  6. C# Web Service简单使用

    第一步 打开VS,新建一个项目 第二步  创建一个ASP.NET 空 Web应用程序 我这里用的是VS2017 第三步 添加一个Web 服务(ASMX) 右键解决方案-->添加-->新建项 ...

  7. C# 开发XML Web Service与Java开发WebService

    一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...

  8. RESTful Web Service 架构

    特点:简单,可靠,高效,跨平台和跨语言 含义: Web Service 简单来说是指提供给不同设备通过互联网(一般使用 HTTP 协议)进行通信和交换数据的一种服务.RESTful Web Servi ...

  9. Web Service 实践之 REST vs RPC

    作者:朱涛 出处:http://www.cnblogs.com/mindsbook/archive/2009/11/17/web_service_RESTvsRPC.html Web Service ...

随机推荐

  1. debian下为arm开发板创建基于debian或emdebian的根文件系统

    Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. emdebian 是一个非常好用的嵌入式linux操作系统,其基于debian的特点对于熟悉debian系统的 ...

  2. 微信小程序4 - 几个ES6基础写法

    1. 默认参数 function demo(param){ param=param || {};} 新的写法,很直观 function demo(param={}){} 2. 简化方法,如你所见,de ...

  3. .NET平台下 极光推送

    正好看到别人发了个极光的推送例子,想来前面也刚做过这个,就把我的push类共享下 public class JPush { /// <summary> /// push信息到手机应用上 J ...

  4. 用TortoiseSVN忽略文件或文件夹(ignore)(网络摘抄记录)

    Android项目需要协同一起开发时,就需要保证项目同步完整性.SVN忽略文件列表:.gradle .idea build local.properties *.iml app/*.iml app/b ...

  5. Java IO系统

    理论上,我们可将任何程序分割为三部分:输入.处理和输出.这意味着 IO(输入/输出)是所有程序最为关键的部分.在这一章中,大家将学习Java 为此提供的各种类,如何用它们读写文件.内存块以及控制台 等 ...

  6. sql语句中3表删除和3表查询

    好久没来咱们博客园了,主要近期在忙一些七七八八的杂事,包括打羽毛球比赛的准备和自己在学jqgrid的迷茫.先不扯这些没用的了,希望大家能记得小弟,小弟在此谢过大家了. 回归正题:(以下的sql是本人在 ...

  7. 蓝桥杯 第四届C/C++预赛真题(3) 第39级台阶(递归)

    题目标题: 第39级台阶 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶 ...

  8. 下载VMware

    1.进入VMware官网:http://www.vmware.com/cn 2.找到下载,点击Workstation Pro,此时需要账号登录. 3.选择需要下载的版本.对应的操作系统,点击转至下载

  9. sql case when then else end sql_variant

    /****************************************************************************** ** Name: usp_cfg_Get ...

  10. Android多线程分析之中的一个:使用Thread异步下载图像

    Android多线程分析之中的一个:使用Thread异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可.转载请注明出处 打算整理一下对 Android Fr ...