欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
開(kāi)發(fā)者關(guān)于 JAX-RPC 的介紹,第 2 部分: 研究 JAX-RPC 的規范提高 Web 服務(wù)互操作性

2003 年 1 月 01 日

在 這個(gè)系列的第一篇文章里, Joshy Joseph 討論了 JAX-RPC 標準的一個(gè)重要方面:它的類(lèi)型映射系統。既然知道了 JAX-RPC 怎樣把 XML 類(lèi)型映射成 Java 類(lèi)型,您就可以認真地研究這個(gè)規范,包括它的異常處理機制和潛在的運行時(shí)服務(wù)了。讀完本文后,您就可以開(kāi)始構建基于 JAVA 的互操作 Web 服務(wù)了。

基于 XML 的遠程過(guò)程調用的 JAVA API(Java APIs for XML-based Remote Procedure Call(JAX-RPC))在 Java Community Process 已經(jīng)作為 JSR 101 進(jìn)入了最后建議階段。XML Web 服務(wù)提供商已經(jīng)開(kāi)始將這個(gè)包作為核心 API 在 JAVA 平臺上構建互操作 Web 服務(wù)。在本系列中,我會(huì )引導讓您一步一步地了解這個(gè)標準提供的主要功能,并使用樣本代碼作為全程指導。

本系列的第一部分中,我描述了 WSDL/XML 類(lèi)型和 JAVA 類(lèi)型之間的互相映射。我解釋了 JAX-RPC 標準怎樣定義該功能,以及關(guān)于如何設計互操作類(lèi)型系統的一些要點(diǎn)。在某種程度上,這個(gè)類(lèi)型映射標準有助于使 Web 服務(wù)運行時(shí)系統實(shí)現消息級別的互操作性。

在這本系列的第二部分中,您將學(xué)到如何用 JAX-RPC 標準的客戶(hù)機和服務(wù)器端接口定義和消息處理模型實(shí)現下一級別的 Web 服務(wù)互操作性。

您可以回憶一下,JAX-RPC 規范包括下列主題:

  • 類(lèi)型映射系統
  • 服務(wù)端點(diǎn)
  • 異常處理
  • 服務(wù)端點(diǎn)上下文
  • 消息處理程序
  • 服務(wù)客戶(hù)機和服務(wù)上下文
  • 帶附件的 SOAP
  • 運行時(shí)服務(wù)
  • JAX-RPC 客戶(hù)機調用模型

正 如我在本系列的第 1 部分談到的那樣,我討論了 JAX-RPC 的類(lèi)型映射系統的重要方面?,F在我將探究一下規范中剩余部分的重點(diǎn)。正如我在第一部分所做的那樣,我將用一段代碼(來(lái)自為 ACME 售書(shū)商所做的樣本 Web 服務(wù))來(lái)描述這些要點(diǎn)。要想了解關(guān)于本示例的更多信息,請參閱第 1 部分,要了解關(guān)于本示例完整的 WSDL 清單,請參閱 附錄。(請參閱 參考資料以了解更多信息)

服務(wù)端點(diǎn)

JAX-RPC 服務(wù)端點(diǎn)指的是真正的服務(wù)實(shí)現所依賴(lài)的 Web 服務(wù)端點(diǎn)。請參閱 圖 1,那里有一個(gè)服務(wù)端點(diǎn)實(shí)現(具體的)類(lèi)和一個(gè)服務(wù)端點(diǎn)接口的定義。



圖 1. 服務(wù)實(shí)現接口層次結構

服務(wù)端點(diǎn)接口

Web 服務(wù)端點(diǎn)類(lèi)是通過(guò)使用 WSDL2JAVA(一個(gè)由 Apache Axis 提供的 WSDL 到 Java 的映射工具)由服務(wù)端點(diǎn)界面派生出來(lái)的,而服務(wù)端點(diǎn)界面是根據 WSDL 定義創(chuàng )建的。正如 JAX-RPC 規范的 5.2 節中預先定義好的一樣,這些服務(wù)端點(diǎn)必須和服務(wù)端點(diǎn)接口定義一致。這個(gè)定義的一些要求如下:

  • 所有服務(wù)端點(diǎn)必須繼承 java.rmi.Remote 接口。
  • 所有由這個(gè)接口實(shí)現的方法必須拋出一個(gè) java.rmi.RemoteException ??赡苡刑囟ㄓ趹贸绦虻漠惓W鳛檫@個(gè)標準異常的補充。
  • 這個(gè)方法參數必須是 JAX-RPC 支持的 Java 類(lèi)型。用這種方法,這個(gè)規范為 Java 平臺和它對應的 XML 類(lèi)型保證了一個(gè)適當的序列化/反序列化機制。
  • 通常,Java接口可以通過(guò)使用 public static final 聲明維護常量數據。然而,JAX-RPC 規范阻礙您這么做,這個(gè)規范表明 WSDL 1.1 在 wsdl.porttype 中對常量的表示不標準。
  • 您可以使用 HolderSOAPElement 類(lèi)作為接口方法的自變量。(請參閱這個(gè)系列的第 1 部分,您可得到關(guān)于 HolderSOAPElement 類(lèi)的更多信息。)

清單 1包含一個(gè)服務(wù)端點(diǎn)接口的示例。



清單 1. 服務(wù)端點(diǎn)接口
Public interface AuthorSearchService implements java.rmi.Remote{
Public Books[] seachForAuthor(String authorName) throws java.rmi.RemoteException,
com.acme.InvalidAuthorName;
}

注意 清單 1 中的樣本端點(diǎn)接口處理運行時(shí) RemoteException 和應用程序級的 InvalidAuthorName 。在我描述 JAX-RPC 異常處理時(shí),我將更深入地看一下語(yǔ)義上的意思以及應用程序異常之間的關(guān)系(在 WSDL 的上下文環(huán)境里)。

也要注意,基于 SOAP 的分布式系統和基于其他協(xié)議(如 RMI)的分布式系統的主要的實(shí)現上的區別是,前者不支持通過(guò)引用傳遞和返回對象。因此您應該避免去創(chuàng )建一個(gè)使用遠程引用作為參數或返回值的服務(wù)端點(diǎn)。另外 JAVA 值的類(lèi)型和數組不應該存有遠程引用。

一些服務(wù)提供商(如 WASP)有支持遠程對象引用的實(shí)現??墒菫檫@些實(shí)現寫(xiě)的代碼可能在運行時(shí)系統之間缺少可移植性。例如,可能不是所有的 JAX-RPC 系統都支持 清單 2 中的代碼,因為 BookSearchBroker 對象是通過(guò)引用返回的。



清單 2. 潛在的無(wú)可移植性的代碼
Public interface BookSearchBroker extends java.rmi.Remote{
Public Books[] searchForAuthor(String tickerSymbol) throws java.rmi.RemoteException;
}
public interface StockQuote extends java.rmi.Remote{
public BookSearchBroker getBooksSearchBroker() throws java.rmi.RemoteException;
}

服務(wù)端點(diǎn)實(shí)現類(lèi)型

服務(wù)端點(diǎn)實(shí)現類(lèi)型是由服務(wù)端點(diǎn)接口派生出來(lái)的。作為對這個(gè)接口的補充,這個(gè)服務(wù)端點(diǎn)實(shí)現類(lèi)可能實(shí)現 ServiceLifecycle 接口來(lái)管理服務(wù)的生命周期(請參閱 圖 1)。這個(gè)接口的聲明在 清單 3中給出。



清單 3. 服務(wù)生命周期聲明
Public interface ServiceLifecycle{
void init (Object context) throws ServiceException;
void destroy();
}

這個(gè)接口使得 JAX-RPC 運行時(shí)系統能管理 Web 服務(wù)示例的生命周期。(如果這個(gè)服務(wù)實(shí)現是一個(gè) servlet,那么這個(gè)運行時(shí)系統就是一個(gè) servlet 容器。)這個(gè)運行時(shí)系統負責裝載服務(wù)端點(diǎn)類(lèi)以及服務(wù)端點(diǎn)類(lèi)的實(shí)例化。實(shí)例化之后,它將調用 ServiceLifecycle.init() 方法來(lái)初始化服務(wù)示例。 ServiceLifecycle.init() 認為運行時(shí)上下文 ServiceContext 是一個(gè)參數。我將在后面的題名為 服務(wù)上下文的部分里更加的在細節上討論運行時(shí)上下文這個(gè)問(wèn)題。

您開(kāi)發(fā)一個(gè)服務(wù)端點(diǎn)類(lèi)時(shí),您必須確保這個(gè)端點(diǎn)不維護任何屬于客戶(hù)機的狀態(tài)。這個(gè)運行時(shí)系統可以把多個(gè)對該服務(wù)端點(diǎn)接口的客戶(hù)機調用分派到對于這個(gè)單一實(shí)例。并且注意這些服務(wù)端點(diǎn)示例可能被運行時(shí)程序合用以提高性能。

在運行時(shí)系統把端點(diǎn)從客戶(hù)服務(wù)里除去時(shí),這個(gè)運行時(shí)系統必須調用 ServiceLifecycle.destroy() 方法。這有助于服務(wù)類(lèi)實(shí)例放棄它正在使用的資源。





回頁(yè)首


異常處理

您可以看到 JAX-RPC 規范試圖在應用程序級和運行系統級處理 Web 服務(wù)運行時(shí)的異常,這是基于服務(wù)端點(diǎn)接口的標準設計方法以及它對 wsdl.fault 元素的映射。

這個(gè)特定于服務(wù)的異常是在 wsdl.fault 元素中聲明的,這些異常類(lèi)型是由 java.lang.Exception 類(lèi)派生的。 清單 4 中的 wsdl.operation 聲明包括特定的 wsdl.fault 元素。



清單 4. wsdl.operation 聲明
<message name="AuthorNotFoundException">
<part name="Author" type="xsd:string" />
</message>
<portType name ="BookSearch">
<operation name="getBooksByAuthor" >
<input message="tns:getAuthorName">
<output message="tns:getBookList">
<fault name=" AuthorNotFoundException" message=" tns: AuthorNotFoundException">
</operation>
</portType>

清單 5中,您可以看到 JAX-RPC 規范怎樣創(chuàng )建它的服務(wù)端點(diǎn)來(lái)處理特定于服務(wù)的 JAVA 異常。



清單 5. 處理特定于服務(wù)的 JAVA 異常
Public interface BookSearch implements java.rmi.Remote{
Public Books[] getBooksByAuthor(String authorName) throws java.rmi.RemoteException,
com.acme.AuthorNotFoundException;
}

清單 6包括作為結果創(chuàng )建的 JAVA 異常類(lèi)



清單 6. Java 異常類(lèi)
public class AuthorNotFoundException extends java.lang.Exception{
...........
public AuthorNotFoundException(String Author ){
.....
}
public getAuthor(){...}
}





回頁(yè)首


服務(wù)端點(diǎn)上下文

JAX-PPC 允許運行時(shí)系統靈活地管理上下文信息(注意, ServiceLifecycle.init() 方法希望得到 Object 類(lèi)型的上下文)。每一個(gè)運行時(shí)環(huán)境可以維護它自己獨特的上下文信息。例如,基于 servlet 的運行時(shí)系統維護一個(gè) ServletEndpointContext 對象。EJB 2.1 規范定義了 EJB SessionContext 。

作 為一個(gè)例子,我們來(lái)探究一個(gè)基于 servlet 的運行時(shí)系統,然后看一下它是怎樣管理上下文信息的。這個(gè) servlet 端點(diǎn)上下文包括的信息有用戶(hù)主體、消息上下文、基于 http 的用戶(hù)會(huì )話(huà)信息以及 servlet 上下文。這個(gè)規范要求服務(wù)運行時(shí)在所有對服務(wù)端點(diǎn)實(shí)例的遠程方法調用之間維護全部這些信息。您可以從下面的清單 7 中的服務(wù)上下文接口看到,這是一個(gè)有價(jià)值的信息,一個(gè)服務(wù)可以通過(guò)多種途徑利用它:

  • HTTP 會(huì )話(huà)信息幫助客戶(hù)機維護和服務(wù)器的 HTTP 會(huì )話(huà)。這是可以任選的功能部件。
  • 用戶(hù)主體(如果運行時(shí)系統已經(jīng)驗證了這個(gè)用戶(hù))幫助服務(wù)開(kāi)發(fā)者驗證用戶(hù)來(lái)得到特定的運行時(shí)操作。
  • 另外一個(gè)很好的由這個(gè)接口提供的功能是它對 SOAP 信息上下文傳播的支持。這幫助服務(wù)實(shí)現者從請求處理程序鏈中獲得 SOAP 信息上下文,然后處理該上下文并將其與響應處理程序鏈關(guān)聯(lián)。

簡(jiǎn)單的說(shuō),這個(gè)接口提供了關(guān)于調用程序、消息、當前環(huán)境的細節的動(dòng)態(tài)運行時(shí)信息。

清單 7告訴您怎樣擴展您的服務(wù)實(shí)現類(lèi)來(lái)支持生命周期管理以及怎樣使用服務(wù)上下文。



清單 7. 服務(wù)上下文接口
Public interface BookSearchServiceImpl implements java.rmi.Remote, javax.xml.rpc.server. 
ServiceLifecycle {
public void init(Object context) throws ServiceException{
ServletEndpointConext sC = (ServletEndpointConext)context;
Java.security.Principal userPrinciple = sC. getUserPrincipal();
HttpSession session = null;
Try{
session = sC.getHttpSession();
}catch(JAXRPCException e){ // Not an HTTP based
//endpoint
}
MessageContext ctx = sC.getMessageContext();
}
public void destroy(){
}
public Books[] searchForBooks(String authorName)
throws java.rmi.RemoteException, com.acme.InvalidAuthor{
return null;
}
}





回頁(yè)首


消息處理程序

現在我們來(lái)考慮一下 JAX-RPC 規范的最強大的功能, 消息處理程序。 消息處理程序向 Web 服務(wù)端點(diǎn)(客戶(hù)機和服務(wù)器)提供了附加的消息處理功能,作為對基本服務(wù)實(shí)現邏輯的擴展。處理程序可以處理加密和解密、日志記錄和審計等。當前的 JAX-RPC 運行時(shí)系統僅僅定義了 SOAP 消息處理程序,但是它可以很靈活的定義其他處理程序,而且不需要任何消息處理模型。



圖 2. 服務(wù)和處理程序調用模型

JAX-RPC 處理程序 API 定義了三個(gè)基本的方法,還有兩個(gè)生命周期方法,表示在清單 8 中。



清單 8. 處理程序方法
public class Handler{
handleRequest(MessageContext context)
handleResponse(MessageContext context)
handleFaults(MessageContext context)
init(HandlerInfo info);
destroy();
...........
}

一個(gè)處理程序應該被作為無(wú)狀態(tài)的實(shí)例實(shí)現。通過(guò)提供初始化的接口( Handler.init (HandlerInfo info) ),運行時(shí)系統可以把所要求的上下文信息傳遞給處理程序。這將幫助處理程序獲得特定于容器的增值功能的訪(fǎng)問(wèn)權,包括認證機制,事務(wù)處理,日志記錄的框架等。

處理程序實(shí)現和 JSR 109


在 為 J2EE 容器開(kāi)發(fā) JAX-RPC 處理程序之前,您必須向 J2EE 容器供應商咨詢(xún)。根據實(shí)現企業(yè) Web 服務(wù)(Implementing Enterprise Web Services)規范(JSR109),處理程序在應用程序執行上下文中運行,因此只能支持有限的功能。為了更好地理解這個(gè)因容器產(chǎn)生的限制,請考慮一 下有關(guān)安全性的情況:您可能不會(huì )寫(xiě) JAX-RPC 的處理程序來(lái)支持 WS-Security 在應用程序層進(jìn)行認證和授權。這個(gè)決定應該在應用程序執行之前作出。請參閱您的 J2EE 容器供應商文檔中關(guān)于 Web 服務(wù)的內容,以獲得更多信息。要了解更多關(guān)于 JSR109 的信息,請參閱下面的 參考資料。

您可以隨意地從 API 提供的缺省處理程序派生出新的處理程序,也可以從 SOAP 消息處理程序( SOAPMessageContext 作為一個(gè)參數)或者普通處理程序來(lái)派生出新的處理程序。處理程序可以修改傳遞到自身的消息。因為出于安全性的原因,這些處理程序是很靈活的,所以大多數現 在可用的框架將在運行時(shí)系統的控制下管理它們。例如,在一個(gè) J2EE 的容器里,處理程序可能是 J2EE 容器的一部分。因此,您應該去查找您的應用程序服務(wù)器(運行時(shí))供應商文檔來(lái)找到更多關(guān)于和您正在使用的產(chǎn)品一起被提供的內置處理程序信息。這些內置處理 程序可能是為 WS-Security、WS-Transaction 或日志記錄等原因設計的。盡管您能編寫(xiě)自己的 JAX-RPC 處理程序,應用程序服務(wù)器提供商也能夠根據配置和安全策略決定是否允許一個(gè)新的處理程序存在。

處理程序鏈

處理程序鏈表示一個(gè)有序的處理程序清單。這個(gè)分組有助于您定義和該處理程序調用模型相關(guān)聯(lián)的策略。這些策略的示例包括調用順序、調用風(fēng)格(例如一個(gè)單向的調用只調用 handleRequest() ;它不會(huì )調用 handleResponse() )等。另外一個(gè)您可以在處理程序鏈上設置的的策略:處理程序鏈可以根據 SOAP 頭最外層的元素的 qname 調用處理程序。您可以通過(guò) Handler.init() 方法傳遞一個(gè) HandlerInfo 對象來(lái)將這個(gè)關(guān)聯(lián)配置到處理程序。只有當前正在處理的處理程序返回 true 時(shí),處理程序鏈才繼續處理這個(gè)處理程序。

您可以通過(guò)指定動(dòng)作者( 角色;請參閱 SOAP 1.1 規范以了解更多細節;您可以在下面的 參考資料部分找到一個(gè)相關(guān)的鏈接)的 URI 來(lái)將處理程序鏈和 SOAP 動(dòng)作者相關(guān)聯(lián)。缺省情況下,處理程序鏈總是一直與特定的 SOAP 動(dòng)作者 next 相關(guān)聯(lián)。正如 WSDL 端口限定名所表明的,處理程序鏈是在每服務(wù)端點(diǎn)的基礎上注冊的。

清單 9顯示了一個(gè)能訪(fǎng)問(wèn) SOAP 消息頭的樣本實(shí)現。



清單 9. 樣本處理程序
Public class AcmeSOAPHeaderHandler extends GenericHandler{
Public Boolean handleRequest(MessageContext ctx){
try{
SOAPMessageContext mc = (SOAPMessageContext)ctx;
SOAPMessage msg = mc.getMessage();
SOAPPart sp = msg.getSOAPPart();
SOAPEnvelop se = sp.getEnvelop();
SOAPHeader header= se.getHeader();
// Now we can process the header
if (everything fine )
return true; // chain handlers
//continue processing
else{
//Return false results in chaining to stop
return false;
}
}catch(Exception ex){
}
}
}





回頁(yè)首


服務(wù)客戶(hù)機和服務(wù)上下文

客戶(hù)機 JAX-RPC 的亮點(diǎn)之一就在于它能把上下文信息和端點(diǎn)的遠程方法調用關(guān)聯(lián)起來(lái)。注意,JAX-RPC 規范并不強求上下文信息的語(yǔ)義。用戶(hù)可以根據 WSDL 綁定中 SOAP 頭定義的顯式定義它;也可以根據 WS-Security 之類(lèi)的標準定義它;或者通過(guò)使用特定于綁定的細節(比如 HTTP 請求頭)來(lái)定義它。

這個(gè)運行時(shí)上下文信息可以由容器或者客戶(hù)機來(lái)設定。容器管理的上下文管理被稱(chēng)作 隱式上下文管理,而客戶(hù)機管理的管理被稱(chēng)作 顯式上下文管理。

在這里使用 隱式一詞是因為在隱式上下文管理中,客戶(hù)機或服務(wù)器上都不需要進(jìn)行編程以支持上下文傳播,這種支持是由運行時(shí)引擎提供的。這種上下文信息的示例包括安全和事務(wù)信息。

顯式服務(wù)上下文的表現形式是作為追加于服務(wù)方法調用的附加參數。當從 JAVA 參數映射到 WSDL 時(shí)這可能會(huì )引發(fā)問(wèn)題,因為這些增加的元素將映射到 WSDL 頭。 清單 10 通過(guò)端點(diǎn) JAVA 接口表示了一個(gè) WSDL 定義及它的 soap:header 信息和顯式的服務(wù)上下文表示。



清單 10. WSDL 定義的端點(diǎn) JAVA 接口
public interface BookSerachService implements java.rmi.Remote{
public Books[] searchForBooks(String authorName, StringHolder context)
throws RemoteException;
}

清單 10中,您能看到上下文被加到了方法參數上。

JAX-RPC 規范不強制處理服務(wù)上下文的服務(wù)器端模型。定義處理程序來(lái)進(jìn)行服務(wù)上下文是由容器提供商(針對隱式或顯式上下文管理)和程序員(針對顯式上下文管理)決定的。您能看到,這使得上下文路由和設置報頭消息處理器變得靈活。





回頁(yè)首


帶附件的 SOAP

JAX-RPC 規范 API 在遠程過(guò)程調用和/或返回值時(shí)支持 MIME 編碼的內容的使用。這是以帶附件的 SOAP 標準為基礎的(請參閱 參考資料)。 帶附件的 SOAP 消息是通過(guò)使用 MIME multipart/related 類(lèi)型建立的。根部件是初始的 SOAP 消息,MIME 內容被作為消息的另外部件添加。這些 SOAP 部件可能包含對 MIME 部件的引用。也要注意每一個(gè) MIME 部件包含內容的 ID 或內容定位信息來(lái)唯一地標識 MIME 部件。請參閱 圖 3,它顯示了一條樣本 MIME 消息。



圖3. SOAP 消息包

JAVA 服務(wù)端點(diǎn)接口中的遠程方法可能使用幾個(gè) JAVA 類(lèi)型中的一個(gè)來(lái)表示 MIME 編碼的內容。

  • JAX-RPC 規范提供了一個(gè) JAVA 類(lèi)的集合,它是直接到 MIME 類(lèi)型的映射。示例包括:
    • Image/gif 映射到 java.awt.image
    • text/plain 映射到 java.lang.string
    • text/xml 映射到 javax.xml.transform.Source

    請參閱 JAX-RPC 規范的 7.5 節,那里有完整的映射清單(您可以在 參考資料里找到一個(gè)到這個(gè)規范的鏈接。)

  • javax.activation.DataHandler 可以映射任何 MIME 類(lèi)型。

JAX-RPC 運行時(shí)系統通過(guò)以下幾點(diǎn)決定 MIME 部件的 MIME 類(lèi)型。

  • 使用 WSDL 中 mime.content 元素定義的 MIME 類(lèi)型
  • SOAP 消息中 MIME 部件的 Content-Type




回頁(yè)首


運行時(shí)服務(wù)

這里有幾個(gè)必須由 JAX-RPC 運行時(shí)基礎架構支持的確定的要求。我將在這里討論最重要的兩個(gè)。

安全性

JAX-RPC 運行時(shí)系統必須支持最基本的 HTTP 認證??蛻?hù)機發(fā)送用戶(hù)名和密碼到 HTTP 服務(wù)器,它們在那里被驗證(HTTP 服務(wù)器被認為是 JAX-RPC 運行時(shí)系統的一部分)。所有其他的安全機制(數字證書(shū)、SSL、WS-Security 等)都是由客戶(hù)機和服務(wù)器運行時(shí)系統所提供的增值功能。這些可以用 JAX-RPC 處理程序和服務(wù)傳播來(lái)處理。想了解更多細節,您可以參閱系統文檔來(lái)了解關(guān)于您的特定運行時(shí)更多細節。

會(huì )話(huà)管理

這個(gè)要求使客戶(hù)機能參與和服務(wù)端點(diǎn)的會(huì )話(huà)。JAX-RPC 的運行時(shí)系統至少應該支持下面中的一個(gè):

  • 基于 Cookie 的會(huì )話(huà)管理
  • URL 重寫(xiě)
  • SSL 會(huì )話(huà)

服務(wù)器初始化會(huì )話(huà)管理進(jìn)程。您可以通過(guò)設置 session.maintain 屬性為 true 來(lái)表明服務(wù)器就緒以支持會(huì )話(huà)。要了解更多具體如何做的細節,請參閱樣本。

JAX-RPC 會(huì )話(huà)管理中的一個(gè)最明顯的遺漏是對 SOAP 基于頭的會(huì )話(huà)相關(guān)性的要求,目前大多數工具包都支持此會(huì )話(huà)相關(guān)性。一旦您已經(jīng)定義了會(huì )話(huà)管理的標準方式,并且各方已經(jīng)在 WS-I 和其他標準上達成一致,那么您就可以認為規范的下一個(gè)版本將會(huì )要求這一點(diǎn)。





回頁(yè)首


JAX-RPC 客戶(hù)機調用模型



圖 4. 客戶(hù)機端 JAX-RPC


這里是三個(gè)不同的從客戶(hù)機調用服務(wù)端點(diǎn)的的模型,如 圖 4所示。它們獨立于任何特定于服務(wù)實(shí)現的模型。我將依次討論每一個(gè)模型的細節。

  • 基于存根的模型(靜態(tài)存根)您有兩種方法可以創(chuàng )建服務(wù)存根:
    • 來(lái)自 JAVA 服務(wù)端點(diǎn)接口
    • 來(lái)自服務(wù)的 WSDL 描述

    您可以從 WSDL(用 WSDL2JAVA)或從服務(wù)端點(diǎn)接口生成一個(gè)存根類(lèi)。一個(gè)生成了的存根類(lèi)是實(shí)現 javax.xml.rpc.stub 和服務(wù)端點(diǎn)接口所必需的。這個(gè)存根接口通過(guò)設置諸如端點(diǎn)地址、會(huì )話(huà)、用戶(hù)名、密碼這樣的屬性來(lái)提供 API 以配置存根。

  • 動(dòng)態(tài)代理。和上面所討論的靜態(tài)存根相反的是,運行時(shí)客戶(hù)機使用 javax.xml.rpc.Service 接口來(lái)創(chuàng )建動(dòng)態(tài)服務(wù)代理存根客戶(hù)??蛻?hù)機能夠 推算出關(guān)于 WSDL 和它要調用的服務(wù)的信息。它使用 ServiceFactory 類(lèi)來(lái)創(chuàng )建服務(wù)獲取代理。
  • DII(動(dòng)態(tài)調用接口)。 這個(gè)軟件模式省卻了客戶(hù)提前了解服務(wù)的確切名字和參數的需要。DII 客戶(hù)機可以使用能查找服務(wù)信息的服務(wù)代理程序在運行時(shí)發(fā)現這個(gè)信息。服務(wù)發(fā)現中的靈活性使運行時(shí)系統能使用服務(wù)代理程序,服務(wù)代理程序能夠采用各種服務(wù)發(fā) 現機制(如 ebXML、注冊表、UDDI等)。

如果您正在為 J2EE 開(kāi)發(fā),您應該記住下面的特定于 J2EE 的 JAX-RPC 要求:

  • 服務(wù)應該實(shí)現 javax.naming.referenceable 和/或 java.io.serlializable 接口來(lái)支持注冊和查找。
  • 組件供應商必須在部署描述符中聲明所有的服務(wù)引用。




回頁(yè)首


結束語(yǔ)

到現在為止,我已經(jīng)討論了 JAX-RPC 的大部分功能,您可以用這些功能來(lái)生成互操作性的 Web 服務(wù)。關(guān)于這個(gè)標準的這個(gè)介紹性系列文章將使您能夠開(kāi)發(fā)出具有最大程度互操作性的 Web 服務(wù)。正如我早些時(shí)候提到過(guò)的,有很多不同的 JAX-RPC 運行時(shí)引擎的實(shí)現可供使用,還有不同質(zhì)量級別的服務(wù)功能(來(lái)支持 J2EE)可供使用;因此,您總是應該咨詢(xún)您的應用程序容器提供商來(lái)了解更多關(guān)于對 JAX-RPC 支持程度的信息?,F在,沒(méi)有哪個(gè)單獨的 JAX-RPC 運行時(shí)系統可以提供本系列中討論的所有功能。我確信將有這個(gè)規范的修正版來(lái)支持最近的 SOAP 和 WSDL 規范(兩個(gè)規范現在的版本都達到了 1.2);JAX-RPC 也可以采用 JAXB(Java XML Binding,JAVA XML 綁定,JSR31)作為互操作性類(lèi)型映射。請密切注視這個(gè)規范,因為 Web 服務(wù)發(fā)展能支持越來(lái)越多的服務(wù)概要和 SOAP 頭擴展。



參考資料



關(guān)于作者

Joshy Joseph 是一個(gè)在 IBM OGSA 開(kāi)發(fā)小組中工作的軟件工程師。他編程時(shí)主要喜歡使用 Web 服務(wù)、語(yǔ)義 Web、REST 及網(wǎng)格計算這樣的新興技術(shù),以及基于UML、AOP 和 XP 的編程模型。您可以通過(guò) joshy@us.ibm.com和他聯(lián)系。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Web 服務(wù)編程技巧與竅門(mén): 在 JAX-RPC 應用程序中構建有狀態(tài)會(huì )話(huà)
JAX-RPC vs JAX-WS(二):
藍色理想 - WebService的基本概念
Java Web Services的遠端調用[圖]
RPC 編程
JAVA6開(kāi)發(fā)WebService (一)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久