最近开发因需求要求需要提供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. H4CK1T CTF 2016 Mexico-Remote pentest writeup

    进去网站之后发现连接都是包含类型的,就能想到文件包含漏洞(话说刚总结过就能遇到这题,也算是复习啦) 这里用php://filter/read=convert.base64-encode/resourc ...

  2. 在drop user之前,建议获取该用户的依赖情况

    在删除这两个用户之前,建议获取这两个用户的依赖情况: SQL> col owner format a15 SQL> col name format a15 SQL> col REFE ...

  3. Python中如何将字符串作为变量名

    应用场景描述: 通过配置文件获取服务器上配置的服务名及运行端口号,编写python脚本检测服务上服务是否在运行? #!/usr/bin/env python # -*- coding:utf-8 -* ...

  4. python web框架 推荐

    Flask 很轻,花很少的成本就能够开发一个简单的网站.非常适合初学者学习. 学会以后,可以考虑学习插件的使用,用 SQLAlchemy + Flask-SQLAlchemy 来对你的数据库进行控制. ...

  5. PAT004 Root of AVL Tree

    题目: An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child ...

  6. Openstack(Kilo)安装系列之Keystone(五)

    Create OpenStack client environment scripts To create the scripts Create client environment scripts ...

  7. php在linux中执行外部命令

    目录:一.PHP中调用外部命令介绍二.关于安全问题三.关于超时问题四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数. ...

  8. Windows下RabbitMQ安装,部署,配置

    安装部署 1.当前环境以及参考资料出处 部署环境:windows server 2008 r2 enterprise 官方安装部署文档:http://www.rabbitmq.com/install- ...

  9. Duilib教程-控件练习

    一.控件消息的响应. 在HelloDuilib例子中,程序不能退出,在这里,我将添加一个关闭按钮,当点击它时,调用PostQuitMessage进行退出. 首先在界面的右上角添加一个关闭按钮,并取名为 ...

  10. Hadoop2.0中单点故障解决方案分析

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...