理解WSDL,IDL

很多RPC技术都会使用中间语言来定义接口描述,比如Web Service常用的WSDL, Thrift使用的IDL。

这类文件都是接口定义/描述语言 (Interface Definition/Description Language),有几个特点:

1. 采用中间语言来描述接口,以及接口使用到的数据结构(类)

2. 一般都采用文本文件,方便传递

3. 语法上可以使用XML,也可以自定义格式。使用XML的话有一堆工具可以进行读写和直接映射到类/对象。使用自定义格式的话需要自己写解析

需要理解的是,从RPC调用的过程来说,IDL不是RPC的必要组件,它的存在主要是为了支持跨语言调用,通过IDL,可以使用工具生成不同平台下的接口定义和相关的类定义,从本质上说IDL只是描述接口的数据结构的一种方式,更通俗的说,是描述消息的一种方式。

因为RPC本质上来说就是不同主机之间的消息传递,只是这种消息是一个方法而已。所以通过IDL可以让不同语言下的程序拿到统一含义的消息描述。

如果不是跨语言的RPC调用,根本不需要IDL来描述接口,可以直接把定义接口和相关数据结构的类打包,比如取名叫api.jar,服务发布方把api.jar直接发布出去。服务消费者拿到api.jar之后实际上就拿到了消息的数据结构,可以在本地直接使用这些数据结构,保证服务消费者向服务提供方发送的消息是符合约定的。

当然,使用IDL的话,可以让组织外部或者不方便拿到api.jar的人根据IDL来生产接口的数据结构,但请记住,IDL不是RPC的必要组件,它只是为了提供一种描述接口的数据结构,让服务的消费者可以根据它来生成本地的数据结构,从而发送正确格式的消息。

使用Web Service来举例,服务发布方直接使用POJO定义一个HelloService服务,不需要WSDL来描述接口

package test;

public interface HelloService {

	public String sayHello(String name);

}

服务发布方实现HelloService 服务

package test;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.cxf.frontend.ServerFactoryBean;

public class HelloServiceImpl implements HelloService{
	public String sayHello(String name) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("sayHello()... name:" + name);
		return sdf.format(new Date()) + " hello " + name;
	}

	public static void main(String[] args) {
		ServerFactoryBean bean = new ServerFactoryBean();

		// 服务的发布地址
		bean.setAddress("http://localhost:9001/HelloService");
		// 提供服务的类的类型
		bean.setServiceClass(HelloService.class);
		// 提供服务的实例
		bean.setServiceBean(new HelloServiceImpl());
		// 发布服务 publish()...
		bean.create();
		System.out.println("server ready...");
	}
}

服务消费方拿到服务发布方给的HelloService.class类,可以直接用HelloService的类型在本地生成代理,不需要先使用WSDL在本地来生成HelloService的数据结构。

package test;

import org.apache.cxf.frontend.ClientProxyFactoryBean;

public class HelloServiceClient {
	public static void main(String[] args) {
		// 创建WebService客户端代理工厂
		ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
		// 注册WebService接口
		factory.setServiceClass(HelloService.class);
		// 设置WebService地址
		factory.setAddress("http://localhost:9001/HelloService");
		HelloService iHelloWorld = (HelloService) factory.create();
		System.out.println("invoke webservice");
		System.out.println("message context is:" + iHelloWorld.sayHello("Josen"));
		System.exit(0);
	}
}

执行结果:

时间: 2024-08-29 01:42:40

理解WSDL,IDL的相关文章

Thrift源码分析(三)-- IDL和生成代码分析

IDL是很多RPC框架用来支持跨语言环境调用的一个服务描述组件,一般都是采用文本格式来定义. 更多IDL的思考查看<理解WSDL, IDL> Thrift的不同版本定义IDL的语法也不太相同,这里使用Thrift-0.8.0这个版本来介绍Java下的IDL定义 1. namespace 定义包名 2. struct 定义服务接口的参数,返回值使用到的类结构.如果接口的参数都是基本类型,则不需要定义struct 3. service 定义接口 一个简单的例子,IDL文件以.thrift为后缀名.

【黑马Android】(14)webservice概念/调用/wsdl接口

webservice 的概念 webservice 就是一个应用程序,它提供一种通过web方式访问的api. 解决两个系统或者(应用程序)之间的远程调用..... 调用是跨语言,跨平台... webservice 最基本的组成部分就是客户端,服务端... MyServerSocket.java package cn.itcast.server; import java.io.IOException; import java.io.InputStream; import java.net.Serv

谈谈WebService开发-应用篇(三)-教你如何看WSDL文档

作为webservice客户端开发,在日常工作中可能经常会拿到一个对方提供的wsdl地址或文档,那么拿到这个地址后我们如何编写客户端调用代码呢,前面几篇只是以个人经验的方式写了下,那么真正要根据wsdl文档来编写客户端调用代码就必须学会看懂wsd文档.下面就结合之前的demo来深入剖析下wsdl文档,最后以图解的方式形象说明下. 本文以之前的SayHello的Demo来深入分析下wsdl文档的几个部分,个人认为可以共分6部分,下面分别介绍: <definitions/> 这部分在基础篇里已经介

WSDL文件生成

1. 背景 有过WEB开发的读者,相信对什么是B/S结构并不会陌生.在B/S结构下,应用的逻辑完全在应用服务器实现,用户表现完全在web服务器上实现,客户端只需要浏览器即可进行业务处理.对,客户一般都是通过浏览器来操作的.但是随着科技的发展,我们现在要想访问应用的服务器,不仅可以用浏览器,还可以用POS机.ATM机.用机等.使用这些不是浏览器的工具,那么在开发中,可能最头痛的无非就是如何测试了.总不可以,真的用POS机来测试吧,不过测试价格还行,可行:要是ATM机呢?那该怎么办?所以,我们需要借

PHP使用WSDL格式Soap通信

近期在搞一个项目,甲方只给了一个WSDL文件,让我们实现响应接口. 于是研究了WSDL和SOAP通信相关知识,获益甚深,把我的理解写下来,希望对PHP新手有帮助. 1.基本概念 soap是简单对象访问协议的缩写,是一种可以基于HTTP协议的访问方式.客户端发送请求,然后调用带参数的服务端函数得到服务端的数据:服务端编写处理函数并响应客户端. wsdl是网络服务者动态语言的缩写,这里面定义了双方通信时包含的东西.客户端把wsdl文件给服务端,服务端分析wsdl并写出里面的函数,这样两者无论是什么平

java webservice

1.1 [什么是webservice] 1.1.1 什么是webservice? l Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术. l 采用标准SOAP(Simple Object Access Protocol)  协议传输,soap属于w3c标准.Soap协议是基于http的应用层协议,soap协议传输是xml数据. l 采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准. l xml是webserv

Android笔记之 Web Service 基础

一.Web Service是什么? 就是网络服务,根据W3C的定义,WebServices(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包含.自描述和模块化的应用程序,它可以在网络中被描述.发布和调用,可以将它看作是基于网络的.分布式的模块化组件.  Web Services是建立在通用协议的基础之上的,包括HTTP.SOAP.UDDI.WSDL等.其中Web Service三要素就是SOAP.WSDL和UDDI. SOAP用来描述传递信息的格式, WSDL用来描述如何访

Web API 和 WCF 的比较

现在有很多可用的技术允许你创建被不同客户端所消费的服务,这些客户端可能是Web应用程序.Windows应用程序和移动应用等.服务可以支持http协议或者其他协议.接下来的讨论仅限于ASP.NET Web API和WCF. WCF(Windows Communication Foundation),使用WCF你可以构建安全可靠的服务,并且实现跨平台继承和平滑地交互. Web API,一个用于构建HTTP服务的框架.现在我们每天都在使用手机.平板.apps以及各种不同类型的服务,Web API是一个

MVC面试问题与答案

读这篇文章不意味着你一定要去并且能搞定MVC面试.这篇文章的目的是在面试之前让你快速复习MVC知识.这篇文章也不是MVC培训课程. 如果你想学习MVC,从这儿开始 Learn MVC ( Model view controller) step by step 7 days ,或者是  step by step MVC (Model View Controller) video series from YouTube. 什么是MVC (模型 视图 控制器)? MVC是一个架构模式,它分离了表现与交