WebService入门详解

1、什么是webservice

先来考虑一个问题,如果我们要在自己的程序里面展示天气预报,那怎么弄?正确的做法是我们发送一个请求到一个系统,他会给我们返回来天气情况。这个就是一个webservice。天气预报系统就相当于webservice的服务端,我们的系统就相当于客户端。如http://www.webxml.com.cn这个网站上面就列举了多个webservice服务站点
2、JAVA中如何调用别人发布的webservice
2.1、获取webservice的wsdl文档
2.11、什么是wsdl文档

wsdl跟java一样,也是一种语言,是通过xml的形式说明该webservice如何调用。
2.12、如何获取wsdl文档

通过在webservice的url后面加?wsdl的方式,比如天气预报的的就是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
2.13、WSDL解析

Wsdl文档从下往上读
Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。(入参和出参的数据类型)
Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构(入参和出参)。
Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对(方法)。
PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持(服务类)。
Binding - 特定服务访问点与具体服务类的绑定(不看内容,看关系)。
Port - 定义为webservice单个服务访问点。
Service- 相关服务访问点的集合。
2.2、通过wsdl文档生成客户端调用代码
2.21、使用jdk自带的命令生成

配置java环境变量后在命令窗口中输入wsimport –s . http://xxxx.xx.xx/xxx?wsdl即可生成java代码
注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。.class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行
注意:可能会报错解析组件 ‘s:schema’ 时出错。在该组件中检测到 's:schem’之类的,如果报错这个请移步:这里
2.3、生成代码后如何调用

先把生成的代码复制到项目中,然后通过读wsdl文档来调用,整体的调用代码类似于下面这样
//wsdl文档中service的name
SayHelloIntefaceService ss = new SayHelloIntefaceService();
//wsdl文档中portType的name
SayHelloInteface shf=ss.getSayHelloIntefacePort();
//wdl文档中complexType的name
String str=shf.sayhellow(“lisi”);
//str即为webservice的服务端返回的信息
System.out.println(str);
3、一个关于WebService的Demo
3.1、服务端
package com.bxoon;
import javax.jws.WebMethod;
public interface WebServiceI {

    @WebMethod(exclude=true)
    String helloWord(String name);

    @WebMethod(exclude=true)
    String helloWord2(String name);
    
}

package com.bxoon;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class HelloWebService implements WebServiceI {

@Override
public String helloWord(String name) {
    return"Hello: "+name;
}

@Override
public String helloWord2(String name){
    return"Hello: "+name;
}

public static void main(String[] args) {
    Endpoint.publish("http://127.0.0.1:8080/helloWord",new HelloWebService());
}

}

3.2 客户端

服务端启动之后通过访问http://127.0.0.1:8080/helloWord?wsdl来得到一个wsdl文档,类似于如下
在这里插入图片描述然后通过命令:
wsimport -s . http://127.0.0.1:8080/helloWord?wsdl
在这里插入图片描述我们把对应的java类copy到客户端项目中,得到这样的目录结构
在这里插入图片描述然后我们编写图中的Client类,代码如下
package com.bxoon;

public class Client {

public static void main(String[] args) {
    HelloWebServiceService service = new HelloWebServiceService();
    HelloWebService webService = service.getHelloWebServicePort();
    String result = webService.helloWord("11");
    System.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值