WebService_使用叁要素,利用shell脚本施行webservice请求

By admin in 美高梅手机版4858 on 2019年4月27日

一. 连串背景

过去大家在支付基于webservice的类型中,大家总习于旧贯于直接行使webservice的部分框架,如Axis,axis二和Xfire等。框架的益处是将webservice所涉及到的soap协议、wsdl以及uddi都卷入起来,大家只供给直接调用方法传值并实施请求就足以。但框架也有通病,例如axis二要基于java工程,哪怕只是1个简便的作用大家都要搭建一个java
web项目去落到实处它。那样做的结果正是:

1. 占用服务器磁盘资源(一个java web项目至少也要几M);
2. 占用内存资源。特别是对那些不需要页面的项目来说,java web实在是大材小用了。

就拿自身多年来支出的短信定期发送项目为例。在这一个类型里,我们只供给每日从数据库取多少然后拼成短信,定期调用总公司的短信接口发送短信就能够了。不供给其它图形分界面,功用也很单纯,假如用java项目去做就太家常便饭了。所以大家想到2个奇妙的章程,直接使用webservice的平底知识去贯彻这一个效果。即直接用Linux的shell脚本生成soap音信,然后用soap请求webservice。

一. 体系背景

旧时我们在付出基于webservice的品类中,大家总习于旧贯于直接动用webservice的1对框架,如Axis,axis二和Xfire等。框架的功利是将webservice所涉及到的soap协议、wsdl以及uddi都打包起来,我们只须要直接调用方法传值并实施请求就足以。但框架也有通病,比方axis二要基于java工程,哪怕只是一个简便的意义大家都要搭建3个java
web项目去完成它。那样做的后果正是:

1. 占用服务器磁盘资源(一个java web项目至少也要几M);
2. 占用内存资源。特别是对那些不需要页面的项目来说,java web实在是大材小用了。

就拿自家目前付出的短信定期发送项目为例。在那么些项目里,我们只必要每一日从数据库取多少然后拼成短信,按时调用总集团的短信接口发送短信就足以了。不要求任何图形分界面,效率也很纯粹,假诺用java项目去做就太小题大做了。所以大家想到三个都行的办法,直接利用webservice的尾部知识去落到实处这些职能。即直接用Linux的shell脚本生成soap消息,然后用soap请求webservice。

接触webservice也有1段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,那是首先篇,对webservice实行大约的介绍。

一、Java中WebService规范

     JAVA 中共有三种WebService标准,分别是JAX-WS、JAX-RS、JAXM&SAAJ(废弃)。

二. 推行进度

2. 进行进度

1.什么是webservice

1.JAX-WS规范

     JAX-WS 的完备为Java API for XML-Based Webservices ,早期的依靠SOAP
的JAVA 的Web 服务专门的学业JAX-RPC(Java API For XML-Remote Procedure
Call)如明儿早晨就被JAX-WS
规范代表。从java伍开始协理JAX-WS贰.0本子,Jdk一.陆.0_1三后头的本子帮衬二.1本子,jdk一.7支撑2.二版本。

    选取规范SOAP(Simple Object Access Protocol)
协议传输,soap属于w叁c规范。Soap协议是基于http的应用层协议,soap协议传输是xml数据。

     采用wsdl作为描述语言即webservice使用表达,wsdl属w3c规范。

    
xml是webservice的跨平台的底蕴,XML首要的帮助和益处在于它既与平台非亲非故,又与商家毫无干系。

WebService_使用叁要素,利用shell脚本施行webservice请求。    
XSD,W3C为webservice制定了1套传输数据类型,使用xml举办描述,即XSD(XML
Schema
Datatypes),任何编制程序语言写的webservice接口在发送数据时都要转换到webservice标准的XSD发送。

2.1项目分析

上文提到的短信项目是2个为了达成大家合营社办公室音讯化的小品种。其首要性成效正是每一天从数据库读取根据地即各支集团保费收入及工作落成情形,然后组合成短信发给各样领导以便于其合理调解公司发展计划。

其一体系有两天性状:

1. 功能比较单一;
2. 不需要图形界面操作。因此我们完全可以抛开java项目,直接用shell脚本去实现。

2.壹项目分析

上文提到的短信项目是叁个为了兑现大家企业管理办公室公音信化的小品种。其根本成效正是天天从数据库读取分集团即各支公司保费收入及作业完成景况,然后组合成短信发给各种领导以便于其合理调解厂家发展政策。

这一个类型有三个特征:

1. 功能比较单一;
2. 不需要图形界面操作。因此我们完全可以抛开java项目,直接用shell脚本去实现。

一.壹怎么是劳动(service)

管理器的劳务一般指的正是Computer能提供的某1功效,比如qq能提供聊天服务,杀毒软件能提供杀毒服务。而平凡状态我们把劳务分为两大类,分别是本土服务(本地提供,不需求经过互联网获取)和网络服务(即webservice,必要经过网络获得)。

接下去大家简要相比较下那两种服务。

本地服务 网络服务
实现方式 利用本地资源实现,需要掌握实现方式 通过网络获取,不需要知道怎么实现
实现成本 需要自己承当人力物力,成本较高 只需要远程调用,成本较低
稳定性 自己实现,自己维护,稳定性相对较高,且不依赖互联网,断网风险小 依赖互联网,服务出现问题维护相对较麻烦,但成本不一定高
移植性 较差,换个系统要实现改服务要重新开发 较好,可以快速移植

图形的剧情大概相比较空虚,我们不妨举个例证来回味下。

  • 万一大家要贯彻贰个天气预告的服务,假若大家接纳地面服务,首先我们得发送一个气象卫星,然后我们还要能接收并管理卫星数据的设备,有了数码未来我们有专门的物历史学家分析那几个数量,然后经过技术员用图片的款式显得出来。

  • 借使我们利用互联网服务,我们只须求调取气象基本的接口,就能够赢得气象服务。

  • 1旦有1天大家开采调用的接口传回的数码错乱,假如大家是本土服务,大家当下能够团体人士排查难点,但1旦是网络服务,我们就得仰仗气象主题来减轻难点,而且只要有1天互联网出现故障,大家也会晤临不或许获得气象数据的标题。
  • 尽管某天企务要拓展,我们须要在2个新条件下达成气象服务,假使是地面服务,我们又得重复去贯彻三回。而只即使互连网服务,大家只供给把接口重新在新条件下调用就可以。

从而,大家得以窥见,本地服务的兑现本钱会远不止互联网服务。尤其是对于那一个非主题的劳务,假若大家都要亲力亲为去和睦达成,无疑会增加和睦的承担。同时本地服务的移植性也比不上网络服务,由此网络服务就改成几个百般主要的向上方向。

2.JAX-RS规范

     JAX-奇骏S 是JAVA 针对REST(Representation
State Transfer)风格制定的一套Web 服务标准,由于生产的较晚,该标准(JS索罗德31一,目前JAX-揽胜极光S 的本子为一.0)并没有随JDK壹.陆 一齐发行。

支撑JAX-揽胜S服务标准的框架有:

     
CXF
——XFire和Celtix的统壹(一个由IONA赞助的开源ESB,最初寄存在ObjectWeb上)。

     Jersey——Sun公司的JAX-BMWX5S参考完毕。

     RESTEasy——JBoss的JAX-RS项目。

     Restlet——或许是最早的REST框架了,它JAX-KoleosS以前就有了。

注:REST 是1种软件架构格局,只是一种风格,rest服务应用HTTP 做传输协议。

二.二贯彻流程

二.二落到实处流程

1.贰怎么着是网络服务(webservice)

如上文所说,互连网服务(webservice)正是将某一劳务通过网络宣布并被用户所获得的某1Computer功用。如前方说的情景服务,相比较常见的还有微信公众号支付时我们能够调用的各样接口(如自行还原、支付、识别发送的新闻项目等接口),Tencent地图提供的地形图接口,支付宝提供的开采接口等等。那一个网络服务加上大家本地的主导功效同步整合了2个1体化的序列。

1经一个软件的严重性部分使用了”互连网服务(webservice)”,即它把仓库储存或总计环节”外包”给其它网址了,那么大家就说那几个软件属于Web
Service架构。

Web
瑟维斯架构的基本思维,就算尽只怕把非核心功能交由别的人去做,自身努力付出基本效用。

webservice优势

  • 平台非亲非故。不管您利用什么平台,都足以动用Web service。

  • 编制程序语言非亲非故。只要遵循相关磋商,就足以接纳任性编制程序语言,向别的网址供给Web
    service。这大大扩大了web service的适用性,下跌了对程序猿的渴求。`

  • 对此Web service提供者来说,布署、晋级和护卫Web
    service都非凡单纯,不必要挂念客户端包容难点,而且三回性就能成功。

  • 对于Web
    service使用者来讲,能够私降低成各类数额、多种服务的集聚(mashup),因而能够做出一些在先根本不可能想像的事情。

2.webservice相关本领

二、WebService(jax-ws)三要素

SOAP: 依靠HTTP协议,选拔XML格式,用来传递音信的格式。

WSDL: 用来描述怎么着访问具体的劳动。

UDDI: 用户本身能够按UDDI标准搭建UDDI服务器,用来处理,分发,查询WebService。别的用户能够团结注册公布WebService调用。

二.二.一 技能介绍

在介绍实现进程此前大家先介绍下soap协议。Soap协议全称为simple Object
Access Protocol,是三个基于http的访问协议,那里的simple
Object指代正是soap新闻,它实质上是叁个xml格式的文书,必须带有以下因素:

*   必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
*  可选的 Header 元素,包含头部信息
*   必需的 Body 元素,包含所有的调用和响应信息    
*   可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

美高梅手机版4858 1

而且soap协议还要依赖POST请求,因为post请求有body域,能够用来封装soap音讯。

Soap请求的不贰秘籍有广大种,能够在框架中呼吁(后文中有介绍,直接封装在框架中,用户只要传值即可)。也足以本人依照格式编写soap音信,直接用http命令请求,比方Linux的curl命令。相对来讲后者的频率会更加高些。

二.2.1 才干介绍

在介绍达成过程在此以前大家先介绍下soap协议。Soap协议全称为simple Object
Access Protocol,是三个遵照http的拜会协议,这里的simple
Object指代正是soap新闻,它实质上是3个xml格式的文件,必须带有以下因素:

*   必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
*  可选的 Header 元素,包含头部信息
*   必需的 Body 元素,包含所有的调用和响应信息    
*   可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

美高梅手机版4858 2

与此同时soap协议还要依附POST请求,因为post请求有body域,可以用来封装soap新闻。

Soap请求的点子有无数种,能够在框架中呼吁(后文中有介绍,直接封装在框架中,用户只要传值就足以)。也能够团结依照格式编写soap音信,直接用http命令请求,比方Linux的curl命令。相对来讲后者的频率会更加高些。

贰.1webservice的落成原理

1.SOAP(通信协议)

     Simple Object Accrss
Protocol,轻巧对象访问协议是在疏散或遍布式的意况中调换新闻的简约的说道,是3个基于XML的商业事务,它蕴涵多少个部分:

(一)SOAP封装(envelop),封装定义了3个讲述音信中的内容是什么,是何人发送的,什么人理接待受并管理它,以及如何处理它们的框架;

(2)SOAP编码规则,用于表示应用程序须要选拔的数据类型的实例。

(2)SOAP RPC 表示远程进度调用和应对的缔约。

(四)SOAP绑定(binding),使用底层协议沟通消息。

(一)请求的协议体

美高梅手机版4858 3

(贰)响应的协议体

 美高梅手机版4858 4

(③)公布依照soap一.二商谈的劳务

在SEI完毕类上增多如下表明

@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)

发表依照soap1.二说道的劳务,必要jax-ws包须求二.二.八上述版本。

 

(四)soap1.贰伸手的协议体

 美高梅手机版4858 5

(伍)soap壹.二响应的协议体

美高梅手机版4858 6

二.3.二 具体贯彻

贰.3.二 具体落到实处

2.1.1概述

广义上的Web服务是三个ULacrosseL财富,客户端能够因此编制程序方式呼吁得到它的劳务,而不需求掌握所请求的劳务是何等贯彻的,这或多或少与价值观的分布式组件对象模型差异。

而是现 在我们说webservice一般是指XML Web ServiceWebService。它是通过soap在web上提供的软件服务,用wsdl进行描述,并经过uddi进行挂号。

  • XML(Extensible 马克up
    Language):扩充型可标志语言,用于数据的传递,是soap的基础。
  • SOAP(Simple Object Access
    Protocol):全称轻松对象访问协议,是壹种基于xml的轻量协议。当用户通过UDDI找到wsdl描述文件后,能够透过soap调用劳动的1个或四个操作。SOAP是XML文书档案情势的调用方法的典型,它能够帮助分裂的底层接口,像HTTP(S)也许SMTP。
  • WSDL(Web Services Description
    Language):webservice描述语言,本质是1个xml文书档案,用于表明soap新闻以及怎样调换这个音信,一般由软件自动生成和行使。
  • UDDI(Universal Description, Discovery, and
    Integration):是一种目录服务,集团经过它对webservice进行注册和搜索

2.WSDL

     WSDL(Web Service Description Language),是二个用来叙述Web服务(Web
Service)和注解什么与Web服务通信的XML语言。因为是基于XML的,所以WSDL既是机器可观看的,又是人可阅览的,那将是二个相当的大的便宜。

     美高梅手机版4858 7

(一)wsdl的翻阅格局

是从下往上读。

种种wsdl有且唯有贰个瑟维斯节点。

1、先找Service节点

二、Service节点中找port节点。种种port对应一个PortType。

三、Port节点对应1binding节点。每一种binding节点对应四个PortType

四、PortType中有operation 节点就是劳动的方法。

5、operation 中有Input(参数)和output(返回值)

6、Input(参数)和output(返回值)对应message节点

7、Message对应element节点。Element节点对应complexType节点描述了参数及再次回到值的数据类型。

 

(二)使用评释标准wsdl

@WebService: 定义服务,在public class上边。

   targetNamespace:钦赐命名空间。

   name:portType的名称。

   portName:port的名称。

  serviceName:服务名称。

 

@WebResult:概念重回值。

   name:重临结果值的称谓。

 

@WebParam:概念参数。

   name:点名参数的名号。

 

@WebMethod

exclude:排除钦定的方法。

暗许情形下,SEI完毕类中所以的public方法会发表成服务措施。

假若不想把public方法公布成服务措施,须求使用@WebMethod申明。把此方式排除。在促成类中最少有3个主意公布为劳动方法。

美高梅手机版4858 8

美高梅手机版4858 9

美高梅手机版4858 10

美高梅手机版4858 11

功能:
通过表明,可以越发形像的叙说Web服务。对自动生成的wsdl文书档案举行改动,为使用者提供三个特别分明的wsdl文书档案。

当修改了WebService评释之后,会潜移默化客户端生成的代码。调用的方法名和参数名也发生了变通。

 

2.三.二.一 soap音信生成工具脚本

美高梅手机版4858 ,鉴于soap信息是三个有固定格式的xml文件,由此我们得以用工具脚本去变通。其代码如下所示:

#!/bin/bash
# filename: create_xml.sh
# create_MarsCheng_20160922
# 从外部传入的第一个参数作为xml的文件名
outfile=$1
# xml中的缩进位
tabs=0
# ++++++++++++++++++++++++++++
# 组装一个节点,输出到文件
# 说一说传参数时的这几个区别:假如有下面这个脚本执行的命令
# /path/to/scriptname  opt1  opt2  opt3  opt4 
# $0: 的值是默认是脚本的名字,从$1-$4 开始就是参数的值
# $# :代表后接的参数『个数』
# $@ :代表『 "$1" "$2" "$3" "$4" 』之意,每个变量是独立的(用双引号括起来); 
# $* :代表『 "$1c$2c$3c$4" 』,其中 c 为分隔字节,默认为空白键, 所以本例中代表『 "$1 $2 $3 $4" 』之意。
# 在shell中我们可以也可以使用${}包含变量名,来调用变量
# ++++++++++++++++++++++++++++
put(){
    echo '<'${*}'>' >> /tmp/sms/request/$outfile
}

# 这里也是输出一个xml的节点,只是比上面的节点有更多的设置
# ${@:3} 的意思:它的值就是由第二个参数开始到最后一个参数,为什么要这样?有时可能你的第二个参数中有空格,shell接受参数是以空格计算的
put_tag() {
    echo '<'${1}' xsi:type="'${2}'">'${@:3}'</'${1}'>' >> /tmp/sms/request/$outfile
}
# 同样是一个输出节点函数,但是添加了CDATA,防止特殊字符造成xml解析失败
put_tag_cdata() {
    echo '<'${1}' xsi:type="'${2}'"><![CDATA['${@:3}']]></'${1}'>' >> /tmp/sms/request/$outfile
}
#由于soap消息的头部一部分一般固定,因此可以直接写一个固定的方法输出
put_head(){
    echo –e “…”>> /tmp/sms/request/$outfile
}
#由于soap消息的尾部一部分一般固定,因此可以直接写一个固定的方法输出
put_end(){
    echo –e “…”>> /tmp/sms/request/$outfile
}
tag_start(){
    str=""
    str=${1}' xsi:type="'${2}'"'
    put $str
}

tag_start_array(){
    str=""
    str=${1}' q1:arrayType="'${2}'" xsi:type="q1:Array"' 
    put $str
}

tag() {
    str=""
    str=${1}' xsi:type="'${2}'" /'
    put $str
}

tag_value(){
    if [ "$1" == 0 ]
    then
        put_tag ${2} ${3} $(echo ${@:4})
    elif [ "$1" == 1 ]
    then
        put_tag_cdata ${2} ${3} $(echo ${@:4})
    fi
}

tag_end(){
    put '/'${1}
}

二.三.贰.1 soap新闻生成工具脚本

鉴于soap音信是2个有固定格式的xml文件,由此大家能够用工具脚本去变通。其代码如下所示:

#!/bin/bash
# filename: create_xml.sh
# create_MarsCheng_20160922
# 从外部传入的第一个参数作为xml的文件名
outfile=$1
# xml中的缩进位
tabs=0
# ++++++++++++++++++++++++++++
# 组装一个节点,输出到文件
# 说一说传参数时的这几个区别:假如有下面这个脚本执行的命令
# /path/to/scriptname  opt1  opt2  opt3  opt4 
# $0: 的值是默认是脚本的名字,从$1-$4 开始就是参数的值
# $# :代表后接的参数『个数』
# $@ :代表『 "$1" "$2" "$3" "$4" 』之意,每个变量是独立的(用双引号括起来); 
# $* :代表『 "$1c$2c$3c$4" 』,其中 c 为分隔字节,默认为空白键, 所以本例中代表『 "$1 $2 $3 $4" 』之意。
# 在shell中我们可以也可以使用${}包含变量名,来调用变量
# ++++++++++++++++++++++++++++
put(){
    echo '<'${*}'>' >> /tmp/sms/request/$outfile
}

# 这里也是输出一个xml的节点,只是比上面的节点有更多的设置
# ${@:3} 的意思:它的值就是由第二个参数开始到最后一个参数,为什么要这样?有时可能你的第二个参数中有空格,shell接受参数是以空格计算的
put_tag() {
    echo '<'${1}' xsi:type="'${2}'">'${@:3}'</'${1}'>' >> /tmp/sms/request/$outfile
}
# 同样是一个输出节点函数,但是添加了CDATA,防止特殊字符造成xml解析失败
put_tag_cdata() {
    echo '<'${1}' xsi:type="'${2}'"><![CDATA['${@:3}']]></'${1}'>' >> /tmp/sms/request/$outfile
}
#由于soap消息的头部一部分一般固定,因此可以直接写一个固定的方法输出
put_head(){
    echo –e “…”>> /tmp/sms/request/$outfile
}
#由于soap消息的尾部一部分一般固定,因此可以直接写一个固定的方法输出
put_end(){
    echo –e “…”>> /tmp/sms/request/$outfile
}
tag_start(){
    str=""
    str=${1}' xsi:type="'${2}'"'
    put $str
}

tag_start_array(){
    str=""
    str=${1}' q1:arrayType="'${2}'" xsi:type="q1:Array"' 
    put $str
}

tag() {
    str=""
    str=${1}' xsi:type="'${2}'" /'
    put $str
}

tag_value(){
    if [ "$1" == 0 ]
    then
        put_tag ${2} ${3} $(echo ${@:4})
    elif [ "$1" == 1 ]
    then
        put_tag_cdata ${2} ${3} $(echo ${@:4})
    fi
}

tag_end(){
    put '/'${1}
}

2.1.二调用原理

webservice之所以能够得以完毕跨平台跨语言之间的调用,是因为它定义了一个合并的音信相互和调用的正式。正如上文所说,webservice的得以完成须要借助多少个第三的才干:XML,soap,wsdl和uddi。

webservice最关键的1环正是soap,即把数量以xml的款型整合起来,然后通过http协议与远程服务开始展览通讯,大家把用xml组合的数目格式统1,称为soap音信,那就成了我们跨平台跨语言通信的基本点。

当然只可以承认,soap格式的报文存在严重的冗余,并且注重定义好的xml
schemas,大家假使手动创造soap消息会特意费劲,须求依附一些工具来简化一些行事,由此现在众多webservice的开法越来越趋于于restful风格的webservice。

美高梅手机版4858 12

如图所示,两个总体的webservice进程能够回顾为以下步骤:

  1. web服务提供者开拓成功劳动后透过web服务中介者发布服务,并由此劳动注册大旨(一般为UDDI)注册(公布)
  2. web服务请求依据本人的需求向web服务中介者建议呼吁,web服务中介者会依照请求在UDDI注册中央找到满意供给的服务(发掘)
  3. web服务中介者会向web服务请求者发表web服务的描述音讯,那个新闻一般是通过wsdl写成的,wsdl能够经过大多浏览器来一向阅读(开采)
  4. web服务请求者依照wsdl音讯编写相应的soap音信,然后发给web服务提供者,来调用相应的web服务(绑定)
  5. web服务提供者会依据soap新闻施行相应的服务,并把调用结果发送给web服务请求者(绑定)

3.UDDI

     UDDI 是1种目录服务,通过它,集团可登记并招来 Web
services。企业将团结提供的Web
Service注册在UDDI,也足以选拔其余集团在UDDI注册的web
service服务,从而达到能源共享。

     UDDI意在将举世的webservcie财富开始展览共享,促进海内外经济同盟。

     但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web
service的地方,可以一贯通过WSDL调用webservice。

2.三.2.二切实施行脚本

具体推行请求的台本,在那几个剧本里会调用soap消息生成工具脚本,会接连数据库读取短信内容,最后用curl落成soap请求。

#统计日期,即当前日期前一天
cal_date=$(date -d -1day +%Y-%m-%d)
#短信是否发送标记,若为1则表示短信已发送,否则为0
flag=$(sqlplus -S statistic/123@tjfxdb << EOF
        set heading off feedback off pagesize 0 verify off echo off
        select flag from statistic.smsflg where calDate ='$cal_date';
        commit;
        quit;
EOF)

if [ ! -n "$flag" ];
then
#从数据库取出短信内容,存入smsinfo
smsinfo=$(sqlplus -S statistic/123@tjfxdb << EOF
        set heading off feedback off pagesize 0 verify off echo off
        select smsinfo from statistic.smsInfo where calDate =date'$cal_date' and smscode ='AHYZ' and bvalid = 1 ;
        commit;
        quit;
EOF)

if [ ! -n "$smsinfo" ]; #若短信内容为空,不发送
then
echo $(date "+%Y-%m-%d %H:%M:%S")" The content is not ready.">> /tmp/sms/log/$cal_date'.log'
else
#生成soap xml文件名
file_name='request'$(date "+%Y%m%d%H%M%S")'.xml'
#调用xml的生成脚本
source '/tmp/sms/create_xml.sh' $file_name
put_head

taskID=$(date "+%s")
declare -i message_size=1
declare -i labels_size=4
name=('DEPTCODE' 'CUR_DATE' 'FUN_DESC' 'CONTENT')
value[0]='123456'
value[1]=$cal_date'日'
value[2]='保费达成情况'
value[3]=$smsinfo
#短信发送对象
telephone=(‘12345678')

message_str2='q2:SmsMessage['$message_size']'
label_str2='q2:Label['$labels_size']'
tag_start_array 'messages' $message_str2
declare -i j=0

#短信核心主体
while ((j<message_size))
do
    tag_start 'SmsMessage' 'q2:SmsMessage'
    tag_value 0 'packetLength' 'xsd:int' '0'
    tag_value 0 'contents' 'xsd:string' '中国人寿'
    tag_start_array 'labels' $label_str2
    declare -i i=0
    while ((i<labels_size))
    do
        tag_start 'Label' 'q2:Label'
        tag_value 0 'packetLength' 'xsd:int' '0'
        tag_value 0 'labelName' 'xsd:string' ${name[i]}
        if [ $i == 3 ]
        then
            tag_value 1 'labelValue' 'xsd:string' ${value[i]}
        else
            tag_value 0 'labelValue' 'xsd:string' ${value[i]}
        fi
        tag_end 'Label'
        let i++
    done
    tag_end 'labels'
    tag_value 0 'orgCode' 'xsd:string' '123456'
    tag_value 0 'receiver' 'xsd:string' ${telephone[j]}
    tag_end 'SmsMessage'
    let j++
done
tag_end 'messages'
tag_value 0 'taskId' 'xsd:string' $taskID
put_end

#请求webservice服务发送短信
curl -H "Content-Type: text/xml;charset=UTF-8" -H "SOAPAction: "http://WebXml.com.cn/getStockInfoByCode""  -d @/tmp/sms/request/$file_name http://Xxxxxxxxxx  >> /tmp/sms/log/$cal_date'.log'
#写短信发送标记位
sqlplus -S statistic/123@tjfxdb << EOF
        set heading off feedback off pagesize 0 verify off echo off
        insert into smsflg(caldate,flag) values('$cal_date',1);
        commit;
        quit;
EOF

分析:

curl是三个行使UPRADOL规则在命令行下工作的文件传输工具,它帮忙文件的上传和下载,由此在剧本中大家用它来开始展览soap请求。其命令格式如下。
美高梅手机版4858 13

-H前面跟的是http请求头,’SOAPAction’键常常用来代表那个HTTP请求是2个web服务请求,同时取值可感觉空字符串,可是也得以是伸手的web服务操作的称谓。

二.3.2.二切实推行脚本

切实试行请求的台本,在那么些剧本里会调用soap新闻生成工具脚本,会接连数据库读取短信内容,最后用curl完成soap请求。

#统计日期,即当前日期前一天
cal_date=$(date -d -1day +%Y-%m-%d)
#短信是否发送标记,若为1则表示短信已发送,否则为0
flag=$(sqlplus -S statistic/123@tjfxdb << EOF
        set heading off feedback off pagesize 0 verify off echo off
        select flag from statistic.smsflg where calDate ='$cal_date';
        commit;
        quit;
EOF)

if [ ! -n "$flag" ];
then
#从数据库取出短信内容,存入smsinfo
smsinfo=$(sqlplus -S statistic/123@tjfxdb << EOF
        set heading off feedback off pagesize 0 verify off echo off
        select smsinfo from statistic.smsInfo where calDate =date'$cal_date' and smscode ='AHYZ' and bvalid = 1 ;
        commit;
        quit;
EOF)

if [ ! -n "$smsinfo" ]; #若短信内容为空,不发送
then
echo $(date "+%Y-%m-%d %H:%M:%S")" The content is not ready.">> /tmp/sms/log/$cal_date'.log'
else
#生成soap xml文件名
file_name='request'$(date "+%Y%m%d%H%M%S")'.xml'
#调用xml的生成脚本
source '/tmp/sms/create_xml.sh' $file_name
put_head

taskID=$(date "+%s")
declare -i message_size=1
declare -i labels_size=4
name=('DEPTCODE' 'CUR_DATE' 'FUN_DESC' 'CONTENT')
value[0]='123456'
value[1]=$cal_date'日'
value[2]='保费达成情况'
value[3]=$smsinfo
#短信发送对象
telephone=(‘12345678')

message_str2='q2:SmsMessage['$message_size']'
label_str2='q2:Label['$labels_size']'
tag_start_array 'messages' $message_str2
declare -i j=0

#短信核心主体
while ((j<message_size))
do
    tag_start 'SmsMessage' 'q2:SmsMessage'
    tag_value 0 'packetLength' 'xsd:int' '0'
    tag_value 0 'contents' 'xsd:string' '中国人寿'
    tag_start_array 'labels' $label_str2
    declare -i i=0
    while ((i<labels_size))
    do
        tag_start 'Label' 'q2:Label'
        tag_value 0 'packetLength' 'xsd:int' '0'
        tag_value 0 'labelName' 'xsd:string' ${name[i]}
        if [ $i == 3 ]
        then
            tag_value 1 'labelValue' 'xsd:string' ${value[i]}
        else
            tag_value 0 'labelValue' 'xsd:string' ${value[i]}
        fi
        tag_end 'Label'
        let i++
    done
    tag_end 'labels'
    tag_value 0 'orgCode' 'xsd:string' '123456'
    tag_value 0 'receiver' 'xsd:string' ${telephone[j]}
    tag_end 'SmsMessage'
    let j++
done
tag_end 'messages'
tag_value 0 'taskId' 'xsd:string' $taskID
put_end

#请求webservice服务发送短信
curl -H "Content-Type: text/xml;charset=UTF-8" -H "SOAPAction: "http://WebXml.com.cn/getStockInfoByCode""  -d @/tmp/sms/request/$file_name http://Xxxxxxxxxx  >> /tmp/sms/log/$cal_date'.log'
#写短信发送标记位
sqlplus -S statistic/123@tjfxdb << EOF
        set heading off feedback off pagesize 0 verify off echo off
        insert into smsflg(caldate,flag) values('$cal_date',1);
        commit;
        quit;
EOF

分析:

curl是二个选用U大切诺基L规则在命令行下专门的学问的文件传输工具,它帮助文件的上传和下载,由此在剧本中我们用它来进展soap请求。其命令格式如下。
美高梅手机版4858 14

-H后边跟的是http请求头,’SOAPAction’键平常用来代表这几个HTTP请求是3个web服务请求,同时取值可认为空字符串,但是也得以是伸手的web服务操作的称谓。

二.1.三调用方法

webservice除了httpsoap调用,也足以用get和post方法来调用,可是soap能够传递结构化的多少,而post和get方法丰富。

在java
web中,大家要调用webservice,平日是要先使用相应框架(如axis二等)生成webservice的对应client,然后经过调用client里面包车型大巴相关措施来实现对webservice的调用。

叁、区域查询系统

2.三.二.三定期实行

为了让系统进一步智能化,施行脚本能够投入Linux的crontab定期职责在那之中。

40 10-18 * * * root sh /tmp/sms/sms_send.sh

地点表示天天十点到18点的36分,脚本都会运转一遍,因为在施行脚本中大家加了短信发送标记位,由此不用忧虑短信回重复发送。

2.三.二.3定时进行

为了让系统进一步智能化,推行脚本能够投入Linux的crontab定期职分当中。

40 10-18 * * * root sh /tmp/sms/sms_send.sh

上边表示每一日十点到1八点的三十七分,脚本都会运行2回,因为在实践脚本中我们加了短信发送标记位,由此不要忧郁短信回重复发送。

二.2webservice相关框架

webservice一个最大的特性便是与语言非亲非故,所以webservice用什么样语言开拓其实都得以。今后用的相比较多的是c#和java,那里我们第2介绍java关于webservice的支付。

java开垦web
service的框架常见的有Axis,axis二,Xfire,CXF以及JWS,在那之中axis2和cxf是近年来极其常用的框架。axis贰能够视作是贰个微型的应用服务器,相对来讲会比较重,不过它成效变得强大,辅助多语言,在大型项目被较多地应用。

1.供给分析

    
创制区域查询服务种类,对外揭露WebService服务,供客户端调用,依照parentid查询区域音讯,再次回到区域新闻列表,并帮忙分页。

     美高梅手机版4858 15

三. 经验总括

Webservice接口的央浼格局有很三种,能够透过框架请求,也能够在java项目中平素基于soap请求,仍是能够像大家这么一贯用shell脚本来完结请求。差异的章程有例外的得失,大家在其实项目中要学会灵活选择,适合的才是最佳的。

三. 经验总括

Webservice接口的请求方式有很种种,能够通过框架请求,也得以在java项目中一向基于soap请求,还足以像大家那样直接用shell脚本来落成请求。分裂的不二等秘书技有两样的优缺点,大家在实际项目中要学会灵活采用,适合的才是最棒的。

二.三webservice以后发展趋势

  1. 通讯协议会倾向于选用更轻量级的rest,而逐步回落对RPC和soap的施用
  2. 通过上文的介绍,我们会发觉未来webservice用于描述接口音信的wsdl以及传递音讯的soap报文都以依靠xml,而这几个xml一般都会有相比复杂的格式定义,现在恐怕会利用尤其轻量级的json来进展数量交互。
  3. 其三点实在也是对一条的增加补充,现在互联网接口会更倾向于restful风格的布署性,更轻量,对劳务的伸手不必再在第1方使用中间转播化,而是直接在浏览器中呼吁。

2.服务端

第一步:创建一java工程

其次步:导入mysql的数据库驱动。

其三步:创造二个dao。依照parentid查询区域列表。再次来到区域pojo的list。支持分页。

第五步:创立二个SEI

第四步:创制SEI达成类。@Webservice申明不要忘。

第五步:公布服务。

AreaDao.java

美高梅手机版4858 16

美高梅手机版4858 17 

AreaInterface.java

美高梅手机版4858 18 

AreaInterfaceImpl.java

美高梅手机版4858 19 

AreaServer.java

美高梅手机版4858 20 

3.客户端

先是步:创立一个java工程

其次步:基于wsdl生成客户端调用代码

其三步:制造服务视图

第四步:获得PortType对象

第6步:调用服务端方法。

AreaClient.java

美高梅手机版4858 21

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有