java调用webservice_WebService基本使用

03d2ff8fe2b80c843b00d65404b1f51a.png

什么是WebService?

   web Service也叫XML Web Service,Web服务。可使用开放的xml标准来描述、发布、发现、协调和配置这些应用程序。用于开发分布式的互操作的应用程序。
   是一种跨编程语言、跨操作系统、跨网络的远程服务器调用技术。
   Webservice使用http传输SOAP协议的数据的一种远程调用技术

1.1 什么是远程调用技术

远程调用数据定义:是系统和系统之间的调用.

0336a7c338d1317031211de5c01c9e43.png

1.2 WebService的原理图

1. Webservice是使用Http发送SOAP协议的数据的一种远程调用技术
2. Webservice要开发服务端
3. Webservice要开发客户端
4. Webservice客户端开发需要阅读服务端的使用说明书(WSDL)

ffefe371f5b21fdccb6a0faceb2c99e8.png

WebService入门程序

WebService开发规范

  1. JAX-WS: java api for xml web service
  2. JAXM:java api from xml message主要定义了包含了发送和接收消息所需的API
  3. JAX-RS:java api from xml RESTFUL
    JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范

以下演示JAX-WS案例:

2.1 需求

  • 服务端:发布一个天气查询服务,接收客户端城市名,返回天气数据给客户端
  • 客户端:发送城市名称给服务端,接收服务端的返回天气数据,打印

2.2 环境

JDK:1.8

Eclipse:2017

2.3 实现

2.3.1 服务端

开发步骤:

第一步

86b9b4220dc3c852e37e651e54cd9453.png

2.3.2 客户端

注意:

1. 要先发布服务,服务运行的状态下生成代码
2. -s后面有个小点,用于指定源代码生成的目录。点即当前目录。
3. 运行客户端必须开启远程服务

开发步骤:

第一步: 

2.3.3 WebService的优缺点

a.优点:

1.发送方式采用http的post发送,http的默认端口事80,防火墙默认不拦截80,所以跨防火墙。
2.采用XML格式封装数据,XML是跨平台的,所以webservice也是跨平台的。
3.webService支持面向对象

b.缺点:

    采用XML格式封装数据,所以在传输过程中,要传输额外的标签,随着SOAP协议的不断完善,标签越来越大,导致webservice性能下降

第三章 WebService的应用场景

3.1 软件集成与复用

e85090248e96f48aa02f25da4ee1241e.png

3.2 适用场景

  • 发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议使用webservice
  • 服务端已经确定使用webservice,客户端不能选择,必须使用webservice

3.3 不适用场景

  • 考虑性能时不建议使用webservice
  • 同构程序下不建议使用webservice,比如java 用RMI,不需要翻译成XML的数据

第四章 WebService的三要素

4.1 SOAP:简单对象访问协议

4.1.1 定义

SOAP:(Simple Object Access Protocol)简单对象访问协议。是XML Web Service 的通信协议.当用户通过UDDI找到     你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。
     SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP.
SOAP=http+xml

4.2.1 协议格式

970a9939a7694247b38ea2cc16cf1518.png

1. 必须有Envelope元素,此元素将整个XML文档标识为一条SOAP消息

2. 可选的Header元素,包含头部信息

3. 必须有Body元素,包含所有的调用和响应信息

4. 可选的Fault元素,提供有关在处理此消息所发生错误的信息

4.2.2 TCP/IP Monitor

  • 代理原理
    客户端不直接去访问服务端的内容,而是通过代理服务去访问服务端的内容
  • 配置
  1. 配置显示监控页面: Eclipse菜单栏中Window—Show View—Debug—TCP/IP Monitor
  2. 配置监控器:Eclipse菜单栏中Window—Preferences— Run/Debug—TCP/IP Monitor—Add

216695ba38a41662c4f36d28fdc394f9.png
  • 测试
    在浏览器中输入代理服务地址,能正常访问,代表代理服务器设置成功

4.2.3 SOAP1.1

使用代理服务端口号和地址进行测试

  • 请求
    POST /weather HTTP/1.1
    Accept: text/xml, multipart/related
    Content-Type: text/xml; charset=utf-8
    SOAPAction: "http://webservice.sky.com/WeatherInterfaceImpl/queryWeatherRequest"
    User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn- revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
    Host: 127.0.0.1
    Connection: keep-alive
    Content-Length: 211

    <?xml version="1.0" ?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
    <ns2:queryWeather xmlns:ns2="http://webservice.sky.com/">
    <arg0>北京</arg0>
    </ns2:queryWeather>
    </S:Body>
    </S:Envelope>
  • 响应
    HTTP/1.1 200 OK
    Date: Tue, 31 Oct 2017 07:45:09 GMT
    Transfer-encoding: chunked
    Content-type: text/xml; charset=utf-8

    e4
    <?xml version="1.0" ?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body><ns2:queryWeatherResponse xmlns:ns2="http://webservice.sky.com/">
    <return>晴</return>
    </ns2:queryWeatherResponse>
    </S:Body>
    </S:Envelope>
    0

4.2.4 SOAP1.2

  • 发布SOAP1.2服务端,在实现类上加入如下注解:@BindingType(SOAPBinding.SOAP12HTTP_BINDING)

备注: 在某些版本上不支持SOAP1.2服务端发布,直接发布异常。

需要在服务端引入第三方JAR(jaxws-ri-2.2.8jaxws-rilib下所有jar包)

  • 请求
    POST /weather HTTP/1.1
    Accept: application/soap+xml, multipart/related
    Content-Type: application/soap+xml; charset=utf-8;action="http://webservice.sky.com/WeatherInterfaceImpl/queryWeatherRequest"
    User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
    Host: 127.0.0.1
    Connection: keep-alive
    Content-Length: 209

    <?xml version="1.0" ?>
    <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
    <S:Body>
    <ns2:queryWeather xmlns:ns2="http://webservice.sky.com/">
    <arg0>北京</arg0>
    </ns2:queryWeather>
    </S:Body>
    </S:Envelope>
  • 响应
    HTTP/1.1 200 OK
    Date: Tue, 31 Oct 2017 08:07:17 GMT
    Transfer-encoding: chunked
    Content-type: application/soap+xml; charset=utf-8

    e2
    <?xml version="1.0" ?>
    <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
    <S:Body>
    <ns2:queryWeatherResponse xmlns:ns2="http://webservice.sky.com/">
    <return>晴</return>
    </ns2:queryWeatherResponse>
    </S:Body>
    </S:Envelope>
    0

4.2.5 SOAP1.1和SOAP1.2区别

相同点:
    请求发送方式相同:都是使用POST
    协议内容相同:都有Envelope和Body标签
不同点:
    数据格式不同:content-type不同
      SOAP1.1:text/xml;charset=utf-8
      SOAP1.2:application/soap+xml;charset=utf-8
   命名空间不同:
      SOAP1.1:http://schemas.xmlsoap.org/soap/envelope/
      SOAP1.2:http://www.w3.org/2003/05/soap-envelope

4.2 WSDL:Web服务描述语言

4.2.1 定义

WSDL:Web Services Description Language.
     是基于 XML 的用于描述Web Service及其函数、参数和返回值。通俗理解Wsdl是webservice的使用说明书.大多数情况下由软件自动生成和使用.
     一般用于Web Service的发布的服务的说明文档。

4.2.2 文档结构

9fe672114b7e1b5a0a0f59517c0d97a2.png
<service>:服务视图,webservice的服务结点,它包括了服务端点
<binding>:为每个服务端点定义消息格式和协议细节
<portType>:服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType
<message>:定义一个操作(方法)的数据参数(可有多个参数)
<types>:定义 web service 使用的全部数据类型

4.2.3 阅读方式从下往上

234d71b799fc8c44043414b3ce97d3f7.png

4.3 UDDI:目录服务

UDDI:

第五章 WebService客户端调用方式

公网服务地址:

http://www.webxml.com.cn/zh_cn/index.aspx

5.1 生成客户端调用方式

5.1.1 wsimport 命令介绍

1. wsimport就是jdk提供的的一个工具,作用就是根据WSDL地址生成客户端代码.
2. 位置JAVA_HOME/bin目录下
3. wsimport常用的参数:
                 -s  生成java文件的
                 -d  生成class文件的,默认参数
                 -p  指定包名的,如果不加该参数,默认包名就是wsdl文档中的命名空间的倒序

5.1.2 调用公网手机号归属地查询服务

5.1.3 公网天气服务端查询

import 

5.1.4 特点

    该种方式使用简单,但一些关键的元素在代码生成时写死到生成代码中,不方便维护,所以仅用于测试。

5.2 客户端编程调用方式

package 

5.3 HttpURLConnection调用方式

第一步 创建服务地址

第二步 打开一个通向服务地址的连接

第三步 设置参数

设置POST,POST必须大写,如果不大写,报异常

第四步 组织SOAP数据,发送请求

第五步 接收服务端响应,打印

示例:

import 

第六章 深入开发:用注解修改WSDL内容

6.1 JAX-WS注解

6.1.1 注解说明

WebService的注解都位于javax

6.1.2 注解示例

package 

6.1.3 使用注解注意的地方

@WebMethod对所有非静态的公共方法对外暴露为服务.

对于静态方法或非public方法是不可以使用@WebMethod注解的.

对public方法可以使用@WebMethod(exclude=true)定义为非对外暴露的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值