什么是Web Services?
Web Services 是应用程序组件
Web Services 使用开放协议进行通信
Web Services 是独立的(self-contained)并可自我描述
Web Services 可通过使用UDDI来发现
Web Services 可被其他应用程序使用
XML 是 Web Services 的基础
它如何工作?
基础的 Web Services 平台是 XML + HTTP。
HTTP 协议是最常用的因特网协议。
XML 提供了一种可用于不同的平台和编程语言之间的语言。
一、Spring整合CXF实现Web Services
Web Services只是一套接口规范,实际运用中实现Web Services的方法有很多种,Java本身在jdk1.7之后也对webservice有了默认的实现(Oracle JAX-WS RI),但是在我们实际开发中一般还是会使用框架来,比如这里所提到的CXF就有着广泛的应用。
CXF单独发布就不说了,直接讲Spring整合CXF,毕竟现在的JavaEE开发是离不开Spring了。
1.1 maven配置
加入maven依赖
<dependency> <groupId>org.apache.cxfgroupId> <artifactId>cxf-rt-frontend-jaxwsartifactId> <version>3.1.6version>dependency><dependency> <groupId>org.apache.cxfgroupId> <artifactId>cxf-rt-transports-httpartifactId> <version>3.1.6version>dependency>
1.2 配置 web.xml
<servlet> <servlet-name>CXFServletservlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class>servlet><servlet-mapping> <servlet-name>CXFServletservlet-name> <url-pattern>/webservice/*url-pattern>servlet-mapping>
1.3 写一个WS接口及其实现
非常简洁的接口和实现
接口:HelloWorld.java
package com.nowjava.cxf;import javax.jws.WebService;@WebServicepublic interface HelloWorld { public String say(String str);}
实现:HelloWorldImpl.java
package com.nowjava.cxf.impl;import com.nowjava.cxf.HelloWorld;import org.springframework.stereotype.Component;import javax.jws.WebService;@Component("helloWorld")@WebServicepublic class HelloWorldImpl implements HelloWorld { public String say(String str) { return "Hello"+str; }}
1.4 修改Spring配置文件
在spring主配置文件spring.xml中添加引入spring-cxf.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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="com.erictao"/> <import resource="spring-cxf.xml"/>beans>
并且创建配置文件spring-cxf.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"> <jaxws:endpoint implementor="#helloWorld" address="/HelloWorld"> beans>
更加具体的配置可以查看官方给出的文档:http://cxf.apache.org/docs/how-do-i-develop-a-service.html。#helloWorld
指的是我们在HelloWorldImpl类中所自定义的名字,即@Component("helloWorld")
定义的bean id,/HelloWorld
则是我们定义的接口地址。
二、运行发布WS
之后我们运行项目输入该地址:http://127.0.0.1:8080/ssm/webservice/HelloWorld?wsdl如果出现如下界面:
则说明我们的webservice发布成功了。接下来只需要通过客户端调用这个接口即可获得返回结果了。
附:客户端代码生成
客户端的代码可以直接使用工具生成,可参考下面说明:
环境准备
1、JDK环境
2、下载apache-cxf发布包,目前最新版本为3.1.7,解压发布包,设置CXF_HOME,并添加%CXF_HOME %/bin到path环境变量。
3、CMD命令行输入wsdl2java -help,有正常提示说明环境已经正确配置。
命令使用
此命令主要是生成webservice的客户端代码,服务端可以是自行开发的服务,也可以是需要对接的服务接口,最简单的命令如下:
wsdl2java wsdlurl
其中wsdlurl为服务发布的访问地址,未写参数默认生成的是客户端的代码,其中用得最多的是-encoding 参数,是指定Java代码的编码格式,例如:
wsdl2java -encoding wsdlurl
其他详细的参数及说明可以用wsdl2java -help或wsdl2java -h获取,根据实际的需求设置相应的参数即可。
常用接口:IP地址来源搜索 WEB 服务
1、生成客户端代码
WSDL地址:
http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl
使用wsdl2java工具将客户端代码直接生成在eclipse的工程里,eclipse工程地址为:E:\workspace\webservice,命令如下:
wsdl2java -encoding utf-8 -d E:/workspace/webservice/src http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl1
-encoding表示生成的Java文件编码格式为utf8,-d表示代码生成路径为E:/workspace/webservice/src。
执行完毕,没有报任何错误,说明执行成功
可以看到在eclipse下面已经生成了相应的代码:
2、客户端代码调用服务
写一个小demo,调用发布的IP查询服务
package com.nowjava.ipservice;import java.util.Iterator;import java.util.List;import cn.com.webxml.ArrayOfString;import cn.com.webxml.IpAddressSearchWebService;import cn.com.webxml.IpAddressSearchWebServiceSoap;public class IPServiceDemo {public static void main(String[] args) { IpAddressSearchWebService service2 = new IpAddressSearchWebService(); IpAddressSearchWebServiceSoap serviceSoap = service2.getIpAddressSearchWebServiceSoap(); ArrayOfString cityByip = serviceSoap.getCountryCityByIp("58.60.251.188"); List<String> ips = cityByip.getString(); for (Iterator<String> ite = ips.iterator(); ite.hasNext();) { String ip = (String) ite.next(); System.out.println(ip); }}
得到的结果为:
信息: Creating Service {http://WebXml.com.cn/}IpAddressSearchWebService from WSDL:http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl
58.60.251.188
广东省深圳市 电信
总结
以上就是一个简单的Web Services入门实例,更多的关于CXF拦截器,客户端调用就没有做过多介绍,后续有时间的话再接着更新,明白了Web Service服务端和客户端怎么构建,后续只需要当做普通接口编写业务代码即可。
本文节选自:
Web Services 教程
https://nowjava.com/book/web-services
--
知识分享,时代前行!
~~ 时代Java
还有更多好文章……
请查看历史文章和官网,
↓有分享,有收获~