A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 晴雨 中级黑马   /  2018-12-24 19:55  /  1149 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

webservice
2.1 webservice的基本概念
webservice是一种可以接收从internet或者intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。
这种技术允许网络上的所有系统进行交互。随着技术的发展,一个web服务可以包含额外的指定功能并且可以在多个b2b应用中协作通讯。
web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理,用以产生一个唯一的,定制的方案。这种协作机制对那些只对最终结果有兴趣的用户来说,是完全透明的。

uddi
在用户能够调用web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件。所以,我们需要一种方法来发布我们的web服务。
uddi (universal description, discovery, and integration) 是一个主要针对web服务供应商和使用者的新项目。uddi 项目中的成员可以通过uddi business registry (ubr) 来操作web服务的调用,ubr是一个全球性的服务。
web服务供应商可以在ubr中描述并且注册他们的服务。
用户可以在ubr中查找并定位那些他们需要的服务。
uddi是一种根据描述文档来引导系统查找相应服务的机制。
uddi包含标准的“白皮书”类型的商业查询方式,
“黄皮书”类型的局部查找,以及
“绿皮书”类型的服务类型查找。
uddi利用soap消息机制(标准的xml/http)来发布,编辑,浏览以及查找注册信息。它采用xml格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

wsdl
对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。
wsdl (web services description language) 规范是一个描述接口,语义以及web服务为了响应请求需要经常处理的工作的xml文档。这将使简单地服务方便,快速地被描述和记录。
以下是一个wsdl的样例:
<?xml version="1.0"?>;
<definitions name="stockquote"
targetnamespace="http://example/stockquote.wsdl"
xmlns:tns="http://example/stockquote.wsdl" (5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)
xmlns:xsd1="http://example/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">;
<types>;
<schema targetnamespace=http://example/stockquote.xsd
xmlns="http://www.w3.org/XX/10/xmlschema">;
<element name="tradepricerequest">;
<complextype>;
<all>;
<element name="tickersymbol" type="string"/>;
</all>;
</complextype>;
</element>;
<element name="tradeprice">;
<complextype>;
<all>;
<element name="price" type="float"/>;
</all>;
</complextype>;
</element>;
</schema>;
</types>;
<message name="getlasttradepriceinput">;
<part name="body" element="xsd1:tradepricerequest"/>;
</message>;
<message name="getlasttradepriceoutput">;
<part name="body" element="xsd1:tradeprice"/>;
</message>;
<porttype name="stockquoteporttype">;
<operation name="getlasttradeprice">;
<input message="tns:getlasttradepriceinput"/>;
<output message="tns:getlasttradepriceoutput"/>;
</operation>;
</porttype>;
<binding name="stockquotesoapbinding"
type="tns:stockquoteporttype">;
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>;
<operation name="getlasttradeprice">;
<soap:operation
soapaction="http://example/getlasttradeprice"/>;
<input>;
<soap:body use="literal"/>;
</input>;
<output>;
<soap:body use="literal"/>;
</output>;
</operation>;
</binding>;
<service name="stockquoteservice">;
<documentation>;my first service</documentation>;
<port name="stockquoteport" binding="tns:stockquotebinding">;
<soap:address location="http://example/stockquote"/>;
</port>;
</service>;
</definitions>;
它包含了以下的关键信息:
消息的描述和格式定义可以通过xml文档中的<types>;和<message>; 标记来传送。
<porttype>; 标记中表示了消息传送机制。 (e.g. request-only, request-response, response-only) 。
<binding>; 标记指定了编码的规范 。
<service>; 标记中表示服务所处的位置 (url)。
wsdl在uddi中总是作为一个接口描述文档。因为uddi是一个通用的用来注册wsdl规范的地方,uddi的规范并不限制任何类型或者格式描述文档。这些文档可能是一个wsdl文档,或者是一个正规的包含导向文档的web页面,也可能只是一个包含联系信息的电子邮件地址。
现在java提供了一个 java api for wsdl (jwsdl)规范。它提供了一套能快速处理wsdl文档的方法,并且不用直接对xml文档进行操作,它会比jaxp更方便,更快速。

soap
当商业用户通过uddi找到你的wsdl描述文档后,他通过可以simple object access protocol (soap) 调用你建立的web服务中的一个或多个操作。
soap是xml文档形式的调用商业方法的规范,它可以支持不同的底层接口,象http(s)或者smtp。
之所以使用xml是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。之所以使用http是因为几乎所有的网络系统都可以用这种协议来通信,由于它是一种简单协议,所以可以与任何系统结合,还有一个原因就是它可以利用80端口来穿越过防火墙。
soap的强大是因为它简单。soap是一种轻量级的,非常容易理解的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务平台供应商那里获得。
从技术角度来看,soap详细指明了如何响应不同的请求以及如何对参数编码。一个soap封装了可选的头信息和正文,并且通常使用http post方法来传送到一个http 服务器,当然其他方法也是可以的,例如smtp。soap同时支持消息传送和远程过程调用。以下是一个soap请求。
post /stockquote http/1.1
host: www.stockquoteserver
content-type: text/xml; charset="utf-8"
content-length: nnnn
soapaction: "some-uri"
<soap-env:envelope
xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

soap-env:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/>;
<soap-env:header>;
<t:transaction xmlns:t="some-uri" soap-env:mustunderstand="1">;
5
</t:transaction>;
</soap-env:header>;
<soap-env:body>;
<m:getlasttradeprice xmlns:m="some-uri">;
<symbol>;sunw</symbol>;
</m:getlasttradeprice>;
</soap-env:body>;
</soap-env:envelope>;
jaxr
为了支持uddi在java平台上的功能,java apis for xml registries (jaxr)允许开发者来访问注册中心。
值得注意的是,jaxr并不是建立web服务必需的,你可以利用其他常用的xml apis来直接集成这些协议。
jaxr是一个方便的api,它提供了java api来发布,查找以及编辑那些注册信息。它的重点在于基于xml的b2b应用,复杂的地址本查找以及对xml消息订阅的支持等web服务。
它也可以用来访问其他类型的注册中心,象ebxml注册中心。
这些对web服务的注册信息进行的操作,可以使用当前的一些web服务工具来完成(例如第三方的soap和ebxml消息工具)。另外,当jaxp提供了一致并具有针对性的api来完成这些操作,这将使开发变得更加容易。
jax/rpc
为了使开发人员专注于建立象soap那样的基于xml的请求,jcp正在开发基于rpc (jax/rpc) 的java api。jax/rpc是用来发送和接收方法调用请求的,它基于xml协议,象soap,或者其他的象xmlp (xml protocol,要了解更多可以参考http://www.w3.org/XX/xp/)。jax/rpc使你不用再关注这些协议的规范,使应用的开发更快速。不久,开发人员就不用直接以xml表示方法调用了。
目前有很多第三方实现了soap,开发人员可以在不同的层次上调用soap,并选择使用哪一种。将来,jax/rpc会取代这些apis并提供一个统一的接口来构造以及处理soap rpc请求。
在接收一个从商业伙伴那里过来的soap请求的时候,一个java servlet用jax/rpc来接收这个基于xml的请求。一旦接收到请求后,servlet会调用商务方法,并且把结果回复给商业伙伴。
jaxm
当从商业合作伙伴那里接收一个web服务的请求时,我们需要java api实现一个servlet来处理ebxml消息,就象我们用jax/rpc来处理soap请求一样。
java api for xml messaging (jaxm) 是集成xml消息标准(象ebxml消息或者soap消息)的规范。
这个api是用来推动xml消息处理的,它检测那些预定单的消息格式以及约束。它控制了所有的消息封装机制,用一种直观的方式分割了消息中的信息,象路由信息,发货单。这样,开发人员只要关注消息的有效负载,而不用去担心那些消息的重复处理。
目前的开发人员用jaxp来实现jaxm将要提供的功能,jaxm将会提供一套非常具有针对性的api来处理基于xml的消息传送。这将大大简化开发人员的代码,并使它们具有统一的接口。
jaxm和jax/rpc的差别在于处理消息导向的中间件以及远程过程调用的不同。jaxm注重于消息导向,而jax/rpc是用来完成远程过程调用的。以下是图解。

请注意,在jaxm 和 jax/rpc技术成熟之前,开发人员还是依赖于第三方的soap apis,象apache soap, idooxoap, 以及 glue。当jaxm 和 jax/rpc正式发布后,它将为当前不同的soap和ebxml消息提供统一的接口。就象jdbc位多种不同的数据库提供统一的接口。

jaxb
xml绑定技术可以把xml文档和java对象进行自由转换。
用jaxb,你可以在后台的ejb层,把xml文档转换成java对象。同样你也可以把从ejb中取出的java对象转换成xml文档返回给用户。
jaxb接口提供了比sax和dom更高级的方法来处理xml文档。它提供的特性可以在xml数据和java类之间互相映射,提供了一个简单的方法来转换xml数据。它比逐个解析标记更简单。

4 个回复

倒序浏览
刚好需要就看到了你的分享,太及时了
回复 使用道具 举报
没有别的,就是服
回复 使用道具 举报
回复 使用道具 举报
很实在的干货
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马