在开发中,难免遇到两个不一样系统交互的问题,好比数据信息同步、数据信息获取等,解决问题的途径有多种,今天带你们认识一下 WebService,看看它在实际应用中的处理。java
1、什么是WebServiceweb
简单的说:WebService即Web服务,它是一种跨编程语言和跨操做系统平台的远程调用技术。编程
2、WebService三要素app
SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式;eclipse
WSDL (WebServices Description Language):Web服务描述语言,用来描述如何访问具体的接口;编程语言
UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService;ide
3、调用第三方提供的WebService服务操作系统
网上有不少免费的WebService服务,咱们经过调用这些免费的WebService服务,来获取所需的数据信息,下面经过调用免费的WebService服务查询手机号码归属地的信息。.net
(1)根据提供的服务网址,执行命令,生成代码code
提供服务的WebService网址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,经过wsimport命令(该命令是JDK/bin下自带的),生成代码:
wsimport -keep http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
打开cmd,在窗口输入上面的命令,执行结果以下:
因为不一样的WebService使用的代码类型,如 java、.net等,因此这里注意一下,若出现报错的状况,看看是不是由于代码编写的类型不一样致使,这时,就须要将wsdl下载下来进行修改了。执行完后,在目录下咱们能够看到生成了一些java和class文件,删除class文件,保留java文件。
(2)新建java项目,导入生成的文件
打开eclipse,新建java project,将java文件复制到项目目录下,注意路径,以下:
分析一下java文件:MobileCodeWS.java、MobileCodeWSSoap.java是重要的服务类,从代码中能够看出,在下面使用中须要实例化。
(3)实例化类,编写客户端代码,调用接口获取数据
新建PhoneWsClient类,代码以下:
public class PhoneWsClient{ public static void main(String[] args){ //实例化服务类 MobileCodeWS ws = new MobileCodeWS(); //调用服务类的方法获取接口实例 MobileCodeWSSoap soap = ws.getMobileCodeWSSoap(); //经过接口获取数据 String phoneInfo = soap.getMobileCodeInfo("1.......3(手机号)", null); System.out.println(phoneInfo); } }
项目结构以下:
运行结果以下:
4、开发本身的WebService服务
(1)新建java project项目,建立主要类
在项目中,主要类分为:接口类、实现类、发布类,以下所示结构:
接口interface:
/* * 使用@WebService注解标注WebServiceI接口 */ @WebService public interface WebServiceI{ //使用@WebMethod注解标注WebServiceI接口中的方法 @WebMethod String sayHello(String name); }
实现Implement:
/* * 使用@WebService注解标注实现类WebServiceImpl */ @WebService public class WebServiceImpl implements WebServiceI{ @Override public String sayHello(String name){ System.out.println("sayHello "+name); return "sayHello "+name; } }
发布Publish:
/* * 发布WebService */ public class WebServicePublish{ public static void main(String[] args){ //定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址 String address = "http://localhost:8889/My_Server/Webservice"; //使用Endpoint类提供的publish方法发布WebService Endpoint.publish(address, new WebServiceImpl()); System.out.println("发布webservice成功!"); } }
(2)运行WebServicePublish类,发布WebService
若运行时报以下错误:
Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found. Have you run APT to generate them?
解决办法:
先用apt命令将主程序进行编译,而后生成一些java文件;
升级JDK版本,好比1.7之后(推荐);
(3)访问发布WebService的URL地址
本地的话,直接用localhost,若给其余人使用,则需改成实际地址:http://localhost:8889/My_Server/Webservice:
点击WSDL进行查看:
从wsdl文件中能够看到咱们提供的接口和类。
固然,发布的方式也能够不一样,根据项目类型,可使用监听器或者Servlet等方式。
同第三方服务同样,咱们也能够根据访问的wsdl地址生成客户端代码进行接口调用,这里就不作演示了,你们参照上面便可实现。