WebService入门

WebService入门

@(WebService)[WebService, wsdl, soap,uddi]

WebService概述

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

——参考《百度百科》

PS:个人理解,WebService主要解决的是跨平台的服务问题。

WebService基本概念——SOAP

简单对象访问协议(Simple Object Access Protocol )是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

——参考《百度百科》

SOAP的基本格式

SOAP基本格式包括HTML协议部分和SOAP协议部分。

PS:其实也就是在一个HTML的请求体、响应体里写入SOAP协议格式的XML

HTML协议部分

HTML协议部分,也就是请求头部分和、响应头部分。具体参照示例。

SOAP协议的组成
  • Envelope – 必须的部分。以XML的根元素出现。可把此XML文档标识为一条SOAP消息。
  • Headers – 可选的。包含头部信息。
  • Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
  • Fault – 可选的。提供有关在处理此消息所发生错误的信息。
请求示例
POST /WebServices/WeatherWS.asmx HTTP/1.1
Host: ws.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getRegionProvince"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getRegionProvince xmlns="http://WebXml.com.cn/" />
  </soap:Body>
</soap:Envelope>
响应示例
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getRegionProvinceResponse xmlns="http://WebXml.com.cn/">
      <getRegionProvinceResult>
        <string>string</string>
        <string>string</string>
      </getRegionProvinceResult>
    </getRegionProvinceResponse>
  </soap:Body>
</soap:Envelope>

WebService基本概念——WSDL

WSDL(Web服务描述语言,Web Services Description Language)是为描述Web服务发布的XML格式。W3C组织(World Wide Web Consortium)没有批准1.1版的WSDL,当前的WSDL版本是2.0,是W3C的推荐标准(recommendation)(一种官方标准),并将被W3C组织批准为正式标准。

在诸多技术文献中通常将Web服务描述语言简写为WSDL,读音通常发为:”wiz-dəl”。

WSDL描述Web服务的公共接口。这是一个基于XML的关于如何与Web服务通讯和使用的服务描述;也就是描述与目录中列出的Web服务进行交互时需要绑定的协议和信息格式。通常采用抽象语言描述该服务支持的操作和信息,使用的时候再将实际的网络协议和信息格式绑定给该服务。

——参考《维基百科》

WSDL 1.1标准中元素

WSDL 元素基于XML语法描述了与服务进行交互的基本元素:

Types(消息类型):数据类型定义的容器,它使用某种类型系统(如 XSD)。

Message(消息):通信数据的抽象类型化定义,它由一个或者多个 part 组成。

Part:消息参数

Port Type(端口类型):特定端口类型的具体协议和数据格式规范。

Operation(操作):对服务所支持的操作进行抽象描述,WSDL定义了四种操作: 1.单向(one-way):端点接受信息;2.请求-响应(request-response):端点接受消息,然后发送相关消息;3.要求-响应(solicit-response):端点发送消息,然后接受相关消息;4.通知(notification):端点发送消息。

Binding:特定端口类型的具体协议和数据格式规范。

Service:相关端口的集合,包括其关联的接口、操作、消息等。

Port:定义为绑定和网络地址组合的单个端点。

——参考《百度百科》

WSDL 1.1标准和2.0标准的比较

WSDL 1.1标准和2.0标准的比较

WSDL 1.1标准元素案例

WSDL 1.1标准元素案例

WebService基本概念——UDDI

UDDI是统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写。它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务。

UDDI是OASIS发起的一个开放项目,它使企业在互联网上可以互相发现并且定义业务之间的交互。UDDI业务注册包括三个元件:

  • 白页:有关企业的基本信息,如地址、联系方式以及已知的标识;
  • 黄页:基于标准分类的目录;
  • 绿页:与服务相关联的绑定信息,及指向这些服务所实现的技术规范的引用。

UDDI是核心的Web服务标准之一。它通过简单对象存取协议进行消息传输,用Web服务描述语言描述Web服务及其接口使用。

——参考《维基百科》

PS:个人理解,UUID主要是用于互联网Web Service的搜索和定位。

使用JDK1.7实现一个简单的WebService

基本概念

在JDK1.6中JAX-WS规范定义了如何发布一个webService服务。
JAX-WS是指Java Api for XML – WebService.

用Jdk1.6.0_21以后的版本发布一个WebService服务.
与Web服务相关的类,都位于javax.jws.*包中。
主要类有:
- @WebService - 它是一个注解,用在类上指定将此类发布成一个ws.
- Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
- EndPoint发布完成服务以后,将会独立的线程运行。所以,publish之后的代码,可以正常执行。
- stop方法用于停止服务。

其他注意事项:
- 给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。
- 不支持静态方法,final方法。
- 如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
- 如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

服务端代码

package com.pc.webservice.server;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

/**
 * WebService Demo
 * 
 * @author Switch
 * @data 2016年12月21日
 * @version V1.0
 */
@WebService
public class HelloWebService {
    // 只有非static和非final的方式才能发布为WebService
    public String helloWebService(String name) {
        return "hello " + name;
    }

    public static void main(String[] args) {
        String address = "http://localhost:6166/hello";
        Object implementor = new HelloWebService();
        // 通过Endpoint发布WebService服务
        // 参数1:发布地址
        // 参数2:端点实现对象
        Endpoint.publish(address, implementor);
    }
}

启动main方法,会发布服务到指定地址上,并监听该地址。
可以通过http://主机:端口号/服务查看该服务的基本信息。具体如下图:
Web Service服务信息

使用wsimport命令生成客户端代码

命令为:wsimport -s . http://localhost:6166/hello?wsdl -p com.pc.webservice.client

wsimportjdk自带的,可以根据wsdl文档生成客户端调用代码的工具。
无论服务器端的WebService是用什么语言写的。都将在客户端生成Java代码。
服务器端用什么写的并不重要。这也就体现了跨平台性。

wsimport.exe位于{JAVA_HOME}\bin目录下。

常用参数为:
- -d <目录> : 将生成.class文件,默认参数。
- -s <目录> : 将生成.java文件。
- -p <生成的新包名> : 将生成的类,放于指定的包下。
- (wsdlurl)http://server:port/service?wsdl,必须的参数。
PS:如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。.class代码,可以经过打包以后使用。.java代码可以直接复制到项目中运行。

客户端测试代码

package com.pc.webservice.test;

import org.junit.Test;

import com.pc.webservice.client.HelloWebService;
import com.pc.webservice.client.HelloWebServiceService;

/**
 * WebService 测试类
 * 
 * @author Switch
 * @data 2016年12月21日
 * @version V1.0
 */
public class HelloWebServiceTest {
    @Test
    public void testHelloWebService() {
        // 对应于wsdl中的service
        HelloWebServiceService helloWebServiceService = new HelloWebServiceService();
        // 对应于wsdl中的port,创建代理对象
        HelloWebService proxy = helloWebServiceService.getHelloWebServicePort();
        // 使用代理对象,调用HelloWebService提供的服务
        // 输出:hello WebService
        System.out.println(proxy.helloWebService("WebService"));
    }
}

PS:将wsimport生成的源代码拷入项目就可以使用了。

GitHub:WebServiceDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值