认识一下WebService应用的简单开发

    在开发中,不免遇到两个不同系统交互的问题,比如数据信息同步、数据信息获取等,解决问题的途径有多种,今天带大家认识一下 WebService,看看它在实际应用中的处理。

    一、什么是WebService

    简单的说:WebService即Web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。

    二、WebService三要素

    SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式;

    WSDL (WebServices Description Language):Web服务描述语言,用来描述如何访问具体的接口;

    UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService;

    三、调用第三方提供的WebService服务

    网上有很多免费的WebService服务,我们通过调用这些免费的WebService服务,来获取所需的数据信息,下面通过调用免费的WebService服务查询手机号码归属地的信息。

    (1)根据提供的服务网址,执行命令,生成代码

    提供服务的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,在窗口输入上面的命令,执行结果如下:

f21dde7f3d3889ce821004ea6e48f83196a.jpg

    由于不同的WebService使用的代码类型,如 java、.net等,所以这里注意一下,若出现报错的情况,看看是否是因为代码编写的类型不同导致,这时,就需要将wsdl下载下来进行修改了。执行完后,在目录下我们可以看到生成了一些java和class文件,删除class文件,保留java文件。

    (2)新建java项目,导入生成的文件

    打开eclipse,新建java project,将java文件复制到项目目录下,注意路径,如下:

    1cbd491fa71050c18cfb52dd41212283319.jpg

    分析一下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);
   }
}

    项目结构如下:

adaeb5a4928bd06dd1600b2de6cbe1a7186.jpg

    运行结果如下:

bf50679e7cc39809f440135b0ec07936ab0.jpg

    四、开发自己的WebService服务

    (1)新建java project项目,创建主要类

    在项目中,主要类分为:接口类、实现类、发布类,如下所示结构:

a3bf443494ccf6ef813e9597e56e99306b1.jpg

    接口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

    687716750794a35843f39c1b5ae18d3304c.jpg

    若运行时报如下错误:

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

ba7dc15fa4b3fa8c9d1b9079b643bea8eac.jpg

    点击WSDL进行查看:

a0e097d5ab75a2a1c49d6afdf9dfe397c39.jpg

    从wsdl文件中可以看到我们提供的接口和类。

    当然,发布的方式也可以不同,根据项目类型,可以使用监听器或者Servlet等方式。

    同第三方服务一样,我们也可以根据访问的wsdl地址生成客户端代码进行接口调用,这里就不做演示了,大家参照上面即可实现。

转载于:https://my.oschina.net/u/3747963/blog/1842905

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值