spark WebService调用

本文介绍了什么是Web Service,包括其架构中的SOAP、WSDL和UDDI,并详细阐述了三种Web Service调用方法:动态client、WSDL生成本地client和JAX-WS Proxy方式。在Spark中调用远程Web Service时,作者遇到了问题并提供了解决方案。
摘要由CSDN通过智能技术生成

原文地址:https://hywelzhang.github.io/2017/09/04/WebService-WebService%E8%B0%83%E7%94%A8.html

一.什么是Web Service

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。大白话就是,去调用一个远程服务,这就要求跨语言和平台。例如,调用银行的支付接口等。

二.Web Service架构

WebService平台由SOAP,WSDL和UDDI三大技术构成。

1.SOAP(Simple Object Access Protocol,即简单对象访问协议)

交换数据的一种协议规范。包含一个基于XML的可扩展消息信封格式,还需同时绑定一个网络传输协议。这个协议通常是HTTP或HTTPS,但也可能是SMTP或XMPP。一个简单的例子来说明SOAP使用过程,一>个SOAP消息可以发送到一个具有Web Service功能的Web站点,例如,一个含有房价信息的数据库,消息的参数中标明这是一个查询消息,此站点将返回一个XML格式的信息,其中包含了查询结果(价格,
位置,特点,或者其他信息)。由于数据是用一种标准化的可分析的结构来传递的,所以可以直接被第三方站点所利用。

SOAP协议 = HTTP(或其他)协议 + XML数据格式

2.WSDL(Web服务描述语言,Web Services Description Language)

WSDL描述Web服务的公共接口。这是一个基于XML的关于如何与Web服务通讯和使用的服务描述,包括可调用的函数、参数和返回值等。

WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文>件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

3.UDDI(统一描述、发现和集成Universal Description, Discovery, and Integration)

一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。通俗来讲,就是发布自己的服务到互联网上。

它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务。
UDDI是OASIS发起的一个开放项目,它使企业在互联网上可以互相发现并且定义业务之间的交互。UDDI业务注册包括三个元件:
白页:有关企业的基本信息,如地址、联系方式以及已知的标识;
黄页:基于标准分类的目录;
绿页:与服务相关联的绑定信息,及指向这些服务所实现的技术规范的引用。
UDDI是核心的Web服务标准之一。它通过简单对象存取协议进行消息传输,用Web服务描述语言描述Web服务及其接口使用

重点概括:使用XML作为消息格式,并以SOAP封装,由HTTP传输

上面三个标准由这些组织制订:W3C负责XML、SOAP及WSDL;OASIS负责UDDI。

三.Web Service调用

1.通过创建动态client调用。

这种方式简单直接,在运行时动态生成代码去远程调用。不用提前生成client的代码。

//创建动态client
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client = dcf.createClient("http://xxx.xxx.xxx.xxx:xx/subscriberService?wsdl");
//QName,指定namespace和调用方法
QName name = new QName("http://xxx.xxx.xxx/", "callMethods");
//调用方法
Object[] objects = client.invoke(params);

由于应用场景稍微比较特殊,使用scala编写的spark程序调用一个远程web service服务。本地测试虽然通过,但是上生产集群环境挂掉,在创建client时报错如下(如果有大神知道原因,希望能邮件我
godbewithyou1314@gmail.com,非常感谢)(问题终于解决,不是由于集群原因,而是由于maven打包方式造成的):

 11:41:48 ERROR yarn.ApplicationMaster: User class threw exception: java.lang.NullPointerException
java.lang.NullPointerException
    at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:74)
    at org.apache.cxf.endpoint.dynamic
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值