webservice简单使用

webservice简单使用以及问题总结

本人只是学习,总结而已,对自己遇到问题的一个总结!
原文链接参考1https://blog.csdn.net/c99463904/article/details/76018436
原文链接参考2https://blog.csdn.net/aqsunkai/article/details/51711087

学习内容:

WebService采用Http协议来在客户端和服务端之间传输数据。WebService使用XML来封装数据,简要包括XML,SOAP和WSDL。

搭建一个服务端进行访问:

服务端代码

1、定义一个接口:

public interface WeatherInterface {

    public String queryWeather(String cityName);
}

2、定义一个实现类,使用@WebService定义需要发布类

@WebService     //@WebService表示该类是一个服务类,需要发布其中的public的方法
public class WeatherInterfaceImpl implements WeatherInterface{
    @Override
    public String queryWeather(String cityName) {
        System.out.println("获取城市名"+cityName);
        String weather="暴雨";
        return weather;
    }
}

3、发布服务

public class WeatherServer {

    public static void main(String[] args) {
        Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
    }
}

4、启动服务,执行WeatherServer的main方法,访问链接http://127.0.0.1:12345/weather?wsdl看是否出现wsdl xml说明舒,如果成功出现,说明服务端完成了。
在这里插入图片描述

客户端代码

1、使用jdk自带的wsimport来生成客户端代码

wsimport -keep -s . -p com.sun http://127.0.0.1:12345/weather?wsdl

2、拷贝生成的java代码到工程包下
在这里插入图片描述
3、编写客户端代码(WeatherClient)

public class WeatherClient {
    public static void main(String[] args) {
        //创建服务视图,视图是从wsdl文件的service标签的name属性获取
        WeatherInterfaceImplService weatherInterfaceImplService=new WeatherInterfaceImplService();

        //获取服务实现类,实现类从wsdl文件的portType的name属性获取
        WeatherInterfaceImpl weatherInterfaceImpl=weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);
        //获取查询方法,从portType的operation标签获取
        String weather=weatherInterfaceImpl.queryWeather("北京");
        System.out.println(weather);
    }
}

注意:此处我遇到一个问题,就是把client端也放入和server端一样的工程下,导致出现问题,后来新建一个工程就没问题了,这也属于远程rpc调用!(客户端不要与server端代码放一个工程里

访问其他webservice服务端:

webservice参考网站接口,里面提供了webservice服务

1、访问国内手机号码归属地查询WEB服务服务
在这里插入图片描述
2、生成客户端代码

wsimport -keep -s . -p com.sun.mobile -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

但是出现问题:

wsimport -keep -s . -p com.sun.mobile -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
正在解析 WSDL...


[ERROR] Can't connect to SOCKS proxy:Connection refused: connect

无法读取 WSDL 文档: http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl, 原因为 1) 找不到文档; 2) 无法读取文档; 3) 文档的根元素不是 <wsdl:definitions>[ERROR] failed.noservice=在提供的 WSDL 中找不到 wsdl:service:

需要至少提供一个 WSDL, 该 WSDL 至少具有一个服务定义。


        无法解析 WSDL。

后来网上找了半天说是internet有代理,去掉就行,但是我这没设置代理,浏览器能正常看到wsdl描述内容,后来看了网上其他大神的东西,这个wsdl链接就是个对weservice描述的说明书,我把它下载下来然后生成代码不也行吗?
右键–》另存为–》MobileCodeWS.xml
再次执行命令;

wsimport -keep -s . -p com.sun.mobile -verbose MobileCodeWS.xml

成功生成代码!
但是得修改下代码里面的东西,把配置文件变成http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl地址。
在这里插入图片描述
3、编写客户端代码

public class MobileWsClient {

    public static void main(String[] args) throws IOException {
        //创建一个MobileCodeWS工厂
        MobileCodeWS factory = new MobileCodeWS();
        //根据工厂创建一个MobileCodeWSSoap对象
        MobileCodeWSSoap mobileCodeWSSoap = factory.getMobileCodeWSSoap();
        //调用WebService提供的getMobileCodeInfo方法查询手机号码的归属地
        String searchResult = mobileCodeWSSoap.getMobileCodeInfo("18614099874", null);
        System.out.println(searchResult);

      // main3();

    }

执行结果如下:
在这里插入图片描述
至此,webservice初步趟雷完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web Service是一种基于Web的应用程序接口(API),它允许不同的应用程序之间进行交互,使用标准的Web技术进行通信。Web Service通常使用XML格式的数据进行交换,这使得它们可以跨越不同的操作系统和编程语言来实现应用程序集成和数据交换。 Web Service的使用可以分为两个方面,一方面是Web Service的提供者,另一方面是Web Service的使用者。 Web Service的提供者需要遵守一定的规范来创建Web Service,并将它们发布到互联网上,以便其他应用程序可以访问它们。 Web Service的使用者可以通过调用Web Service的方法来访问远程应用程序的功能。使用Web Service时,需要知道Web Service的URL和方法名称,并提供必要的参数。 以下是使用Web Service的简单示例: 1. 创建一个Web Service客户端程序 在编程语言中创建一个Web Service客户端程序,例如Java、C#、Python等。 2. 指定Web Service的URL Web Service的URL是Web Service提供者发布Web Service时指定的地址。您需要知道Web Service的URL才能访问它。 3. 创建Web Service请求 创建一个Web Service请求,包括要调用的方法名称和必要的参数。 4. 发送Web Service请求 将Web Service请求发送到Web Service提供者的URL。 5. 处理Web Service响应 接收Web Service提供者返回的响应,并解析响应以获取所需的数据或执行所需的操作。 这些步骤可以在不同的编程语言和开发环境中实现,具体实现方式可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值