答案: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.com
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/"
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>
JAX/RPC
为了使开发人员专注于建立象SOAP那样的基于XML的请求,JCP正在开发基于RPC (JAX/RPC) 的Java API。JAX/RPC是用来发送和接收方法调用请求的,它基于XML协议,象SOAP,或者其他的象XMLP (XML Protocol,要了解更多可以参考http://www.w3.org/2000/xp/)。JAX/RPC使你不用再关注这些协议的规范,使应用的开发更快速。不久,开发人员就不用直接以XML表示方法调用了。
目前有很多第三方实现了SOAP,开发人员可以在不同的层次上调用SOAP,并选择使用哪一种。将来,JAX/RPC会取代这些APIs并提供一个统一的接口来构造以及处理SOAP RPC请求。
在接收一个从商业伙伴那里过来的SOAP请求的时候,一个Java servlet用JAX/RPC来接收这个基于XML的请求。一旦接收到请求后,servlet会调用商务方法,并且把结果回复给商业伙伴。
ebXML 对于具有高扩展性的商业交易来说,他们需要一种可信任的结构来实现商业事务,多请求的事务,计划以及文档流程,应用的需求经常超越了基于纯SOAP的实现。因为SOAP只是提供了一个底层的结构,而你可能需要一个更高级的框架结构。
ebXML就是为了这个目的的,它是一套处理B2B应用间的合作与通信的XML规范。以下是ebXML中的关键组件:
Collaboration Protocol Profile (CPP)
CPP提供了一种标准并且简单的方法描述了公司提供的产品。另外,它还描述了消息交换的能力以及公司支持的商务合作。它也描述了公司的商务处理方法,包括合伙人如何与公司合作。CPP定义了B2B交易中双方的商务协作。例如,它同时定义了买卖双方的商务处理方法。
Collaboration Protocol Agreement (CPA)
CPA描述了两个公司之间进行交易时的详细需求以及机制。它包含有由手工或者自动从经过买卖双方认可的CPPs中的信息。这个CPA是双方进行指定交易的合约。 CPP和CPA的样例,以及关于规范的细节可以从以下网站获得:
http://ebxml.org/project_teams/trade_partner/cpp-example.xml
http://ebxml.org/project_teams/trade_partner/cpa-example.xml
http://www.ebxml.org/specs/ebCCP.pdf
Business Process and Information Modeling
ebXML还以XML的形式描述了商业事务处理的规范。它包括交易,文档流程,数字通信,数据封装格式以及其他更多。这些规范是用来建立CPPs,描述以及共享商业事务和信息时用的。
Core Components
ebXML中另外一个重要的部分是一系列的XML标记,我们叫它核心组件。这些标记包含了商务数据,象日期,税,账户,交易合同以及其他的。它指明了商业合约和实体,但对每个不同的行业,可能都不一样。
Messaging
ebXML消息格式包含了所有相关的消息导向信息(同步或者异步,可靠性)。一般来说,一个ebXML消息包含了CPA中的可视化内容,并强制执行交易规则。 EbXML是建立在SOAP消息封装机制上的。它扩展了SOAP的协议,增加了多层框架结构来支持附件,安全性以及传送的可靠性。
Registry/Repository
EbXML注册中心是存储CPPs, CPAs, ebXML核心组件和与ebXML相关的文档的服务。它具有强大的查询功能,允许用户查找相关的组件以及发掘潜在客户。JAXR API也可以用来访问ebXML注册中心。商业服务定义了CPPs,并且被存储在ebXML注册中心,然后发布到UDDI中。一个关键的概念是,UDDI提供了一个全球唯一的Web服务的描述信息,但那些真实的信息,还是保存在本地的ebXML库中。这样的话,一个潜在的客户首先到UDDI中查找相关内容,然后根据这些到ebXML库中找CPPs或者其他相关文档。
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是用来完成远程过程调用的。以下是图解。
图 4
上一个:Java语言编程中更新XML文档的常用方法(转自DW,不够完全,但做入门够了。:P)
下一个:用J2EE开发WebService(3)