国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

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

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

開(kāi)通VIP
編寫一個(gè)Web service客戶端
    Web service正在作為一種用于構(gòu)建客戶端-服務(wù)器應(yīng)用程序的標(biāo)準(zhǔn)出現(xiàn),而且您可以使用各種技術(shù)來(lái)編寫它們,包括使用工具包。在各種工具包中,可用于Java的是Sun Microsystems編寫的開(kāi)源Axis 和JAX-RPC標(biāo)準(zhǔn)實(shí)現(xiàn)(參見(jiàn)參考資料)。
  我們將集中描述一種用于編寫Web service客戶端的逐步式方法,該方法使用Sun的JAX-RPC標(biāo)準(zhǔn)實(shí)現(xiàn)(JAX-RPC SI)作為其Web service工具包。這個(gè)工具包是可靠的,能夠生產(chǎn)部署在生成環(huán)境中的Web service,后者實(shí)質(zhì)上是JAX-RPC標(biāo)準(zhǔn)的參考實(shí)現(xiàn),而JAX-RPC規(guī)范受到了廣泛的支持。例如,BEA和IBM都支持JAX-RPC,而且事實(shí)上,您可以把一個(gè)Sun實(shí)現(xiàn)生產(chǎn)的Web service部署到BEA WebLogic服務(wù)器中。另外,Sun的實(shí)現(xiàn)符合各種其他規(guī)范,比如WS-Security,這些規(guī)范正在變得越來(lái)越重要。您可以下載用于構(gòu)建一個(gè)Web service客戶端的源代碼。
  要編寫一個(gè)客戶端,您需要一臺(tái)服務(wù)器進(jìn)行編程??捎玫姆?wù)器有幾種,比如Google或eBay,但是這里我們將使用Amazon的Web service。但是,僅僅知道我們想要使用的服務(wù)還不夠。我知道Amazon有一個(gè)Web service,這個(gè)事實(shí)并不能讓我隨心所欲。我需要知道如何調(diào)用該Web service。它支持哪些操作?我應(yīng)該傳遞哪些參數(shù)?我會(huì)獲得什么返回值?
  這些問(wèn)題說(shuō)明,要編寫一個(gè)Web service,必須存在針對(duì)該Web service的可用描述。除了客戶端/服務(wù)器系統(tǒng)之外,服務(wù)器也有描述語(yǔ)言,例如,DCOM和CORBA均使用接口定義語(yǔ)言(Interface Definition Language,IDL)。DCOM和CORBA IDL并非同一種語(yǔ)言——也就是說(shuō),CORBA客戶端無(wú)法使用DCOM服務(wù)器的IDL來(lái)描述對(duì)客戶端可用的遠(yuǎn)程服務(wù)。

描述服務(wù)
  通過(guò)提供對(duì)Web service的描述,Web service描述語(yǔ)言代替了IDL在Web service中的位置。WSDL是一種機(jī)器可以使用的XML語(yǔ)法。代碼生成器可以讀取它。人類也可以讀取它,但是它不是使用或者生產(chǎn)起來(lái)最容易的語(yǔ)言。我的一個(gè)同事Simon Horrell,他喜歡說(shuō)下面這句話,“WSDL就像太陽(yáng)。沒(méi)有它你無(wú)法生存,但是如果您盯著它的時(shí)間過(guò)長(zhǎng),您就會(huì)變瞎!”
  Amazon提供一個(gè)Web service工具包,您可以從Amazon站點(diǎn)下載它。這個(gè)工具包提供針對(duì)Amazon Web service的文檔,而且它還指定了用于描述Web service的WSDL文檔的位置,您也可以在Amazon的站點(diǎn)上找到這些文檔。當(dāng)您打開(kāi)這份WSDL文檔時(shí),如果它看起來(lái)十分復(fù)雜(它的確也十分復(fù)雜),不要過(guò)于擔(dān)心,但是您要明白, 它多多少少提供了對(duì)Web service的完整描述。當(dāng)不需要Amazon工具包時(shí),您將需要一個(gè)開(kāi)發(fā)人員令牌(同樣可以下載)。Amazon使用這個(gè)令牌來(lái)跟蹤Web service的使用,并檢查是否有濫用服務(wù)的情況發(fā)生(參見(jiàn)參考資料)。
  編寫Web service時(shí),您可以采用很多方法,但是這些方法大致可以分為兩類。您可以使用所選擇的工具包提供的工具來(lái)使用WSDL,并生產(chǎn)進(jìn)行調(diào)用的客戶端樁;或者您可以使用底層API來(lái)手動(dòng)編寫Web service。
  使用這兩種方法時(shí)需要進(jìn)行權(quán)衡。第一種方法(使用WSDL)相對(duì)較為容易,但是,它不是很靈活。許多可用的工具會(huì)為您做大量的工作。盡管工具易于使用,而且它們生成的代碼也易于使用,您可能會(huì)發(fā)現(xiàn),這些代碼無(wú)法完成您想要的全部功能,而且它們的性能可能不夠好。例如,您可能需要訪問(wèn)原始的HTTP通信,而生成的代碼可能不會(huì)讓您這樣做。
  第二種方法較難,但是您可以獲得更大的靈活性。從頭開(kāi)始編寫代碼可能很困難而且耗時(shí),但是這樣做最終會(huì)獲得很好的靈活性和性能??梢酝ㄟ^(guò)不同的方式做到這一點(diǎn):您可以使用Java java.net.URL及相關(guān)類,或者可以使用java.net.Socket進(jìn)行低級(jí)工作。也可以使用HTTP API,比如Jakarta Commons項(xiàng)目提供的那些API(參見(jiàn)參考資料)。通常,您會(huì)使用代碼生成工具,而有時(shí)候,您可能需要手動(dòng)地編寫客戶端的某些特定部分。

向下直到樁
  一開(kāi)始,我們將使用Sun的JAX-RPC SI構(gòu)建客戶端(和服務(wù)器)。您可以從Sun的Java開(kāi)發(fā)人員網(wǎng)站上下載Java Web Services Development Pack (JWSDP)(參見(jiàn)參考資料)。您下載并安裝了該工具包之后,它包括了JAX-RPC SI。在安裝期間,您會(huì)被要求選擇一臺(tái)特定的Web服務(wù)器。您可以在此處選擇下載一臺(tái)Web服務(wù)器,或者不選擇Web服務(wù)器。
  有關(guān)安裝的細(xì)節(jié)可以成為另一篇文章的主題了;您只要知道我們將使用%JWSDP-HOME%來(lái)指定安裝JWSDP的位置就可以了。安裝之后,確保您的系統(tǒng)路徑中有%JWSDP-HOME%/jaxrpc/bin。這個(gè)目錄包含了Windows批處理文件和Unix shell腳本,以便運(yùn)行用作JWSDP一部分的工具。您還可以把%JWSDP_HOME%/jaxb/bin添加到其他工具的路徑。
  JAX-RPC提供一個(gè)可以讀取WSDL并生成客戶端樁的工具。這些樁是將為我們的代碼所用的Java類和接口。這些樁給服務(wù)器端功能提供了一個(gè)客戶端接口。例如,如果我們的服務(wù)器提供一個(gè)Maths服務(wù),該服務(wù)帶有一個(gè)叫做add的方法。我們的客戶端代碼將調(diào)用樁上的一個(gè)方法,而樁實(shí)現(xiàn)將對(duì)該方法使用參數(shù),把Java方法調(diào)用變?yōu)閃eb service請(qǐng)求。這個(gè)請(qǐng)求將基于HTTP發(fā)送給服務(wù)器,而且將使用SOAP作為RPC協(xié)議(參見(jiàn)圖1)。


發(fā)出一個(gè)請(qǐng)求

  客戶端調(diào)用樁上的一個(gè)方法,而樁實(shí)現(xiàn)對(duì)該方法使用參數(shù),把Java方法調(diào)用變?yōu)閷⒒贖TTP發(fā)送給服務(wù)器的Web service請(qǐng)求。
  客戶端調(diào)用樁,而樁把調(diào)用轉(zhuǎn)換為SOAP消息,然后樁使用RPC發(fā)送該消息。監(jiān)聽(tīng)服務(wù)器接收該SOAP消息,然后(十有八九)將其轉(zhuǎn)換為服務(wù)器處的一次方法調(diào)用。如果服務(wù)器是用Java編寫的,上述SOAP消息就會(huì)被轉(zhuǎn)換為Java調(diào)用。如果服務(wù)器是.Net服務(wù)器,調(diào)用將很可能是C# 或VB.Net對(duì)象。服務(wù)器的返回值被轉(zhuǎn)換回為SOAP消息,然后返回給樁,而樁會(huì)把返回的SOAP消息轉(zhuǎn)換為Java響應(yīng)。
  wscompile工具生成了樁,而且它具有選項(xiàng)加載。對(duì)于此種討論,我們只需要關(guān)心運(yùn)行wscompile生成客戶端代碼的過(guò)程。對(duì)于wscompile來(lái)說(shuō),首要的輸入是配置文件(通常叫做config.xml)。wscompile讀取這個(gè)文件,用于指定一些信息,比如用于生成客戶端的WSDL文檔的位置。或者,如果我們準(zhǔn)備生成服務(wù)器,您也可以指定要用于服務(wù)器端生成的Java類名。在這種情況下,我們會(huì)生成客戶端代碼,所以配置文件應(yīng)該包含WSLD位置。
  如果您計(jì)劃遵循這里開(kāi)發(fā)出來(lái)的代碼,您應(yīng)該創(chuàng)建一個(gè)目錄來(lái)包含要用到的所有部分,然后在該目錄中創(chuàng)建一個(gè)src、一個(gè)classes和一個(gè)etc目錄。src目錄將包含我們編寫的源代碼,classes目錄將包含編譯以后的代碼,而etc目錄將保存配置信息。我們將在etc目錄中創(chuàng)建config.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<wsdl location="http://soap.amazon.com/schemas3/AmazonWebServices.wsdl"
packageName="javapro.amazon" />
</configuration>

配置元素
  文件包含什么內(nèi)容呢?首先,所有的元素都位于http://java.sun.com/xml/ns/jax-rpc/ri/config名稱空間中。配置元素始終是root元素,而且還有一個(gè)wsdl元素,它包含了兩個(gè)屬性:location和packageName。location屬性顯然是要讀取的WSDL文件所在的位置。wscompile使用packageName屬性作為用于保存所生成代碼的包的名稱。位置可以是本地文件或者URL.config.xml。
現(xiàn)在從命令行運(yùn)行wscompile,同時(shí)傳遞-help標(biāo)志(參見(jiàn)圖2)。正如您看到的那樣,有很多可用的標(biāo)志和特性?,F(xiàn)在我們關(guān)心的是-gen(或者-gen:client,二者是一樣的);-d,告訴wscompile在哪里存放編譯以后的文件;還有-s,是生成源代碼的位置。您還可以使用-verbose,它讓您知道wscompile正在做什么,以及-keep,它指定保存所生成的源文件。您還需要把配置文件作為一個(gè)參數(shù)傳遞給wscompile。

特性列表
  wscompile 命令有很多可用的標(biāo)志和特性,您可以通過(guò)使用-help標(biāo)志來(lái)查看它們。與這里的討論有著密切關(guān)系的是-gen (或-gen:client)、-d和-s。

[client]$ wscompile.sh 
-verbose -gen -d classes
-s src -keep etc/config.xml
  

這個(gè)參數(shù)會(huì)生成大量的輸出,詳細(xì)描述為Web service生成的代碼。wscompile工具生成源代碼并將其編譯為類。如果沒(méi)有傳遞-keep標(biāo)志,源代碼就會(huì)丟失。這里有著大量的代碼,但是我們只會(huì)對(duì)客戶端使用其中的一小部分。
  現(xiàn)在從命令行運(yùn)行wscompile,同時(shí)傳遞-help標(biāo)志(參見(jiàn)圖2)。正如您看到的那樣,有很多可用的標(biāo)志和特性?,F(xiàn)在我們關(guān)心的是-gen(或者-gen:client,二者是一樣的);-d,告訴wscompile在哪里存放編譯以后的文件;還有-s,是生成源代碼的位置。您還可以使用-verbose,它讓您知道wscompile正在做什么,以及-keep,它指定保存所生成的源文件。您還需要把配置文件作為一個(gè)參數(shù)傳遞給wscompile。

[client]$ wscompile.sh 
-verbose -gen -d classes
-s src -keep etc/config.xml
  

這個(gè)參數(shù)會(huì)生成大量的輸出,詳細(xì)描述為Web service生成的代碼。wscompile工具生成源代碼并將其編譯為類。如果沒(méi)有傳遞-keep標(biāo)志,源代碼就會(huì)丟失。這里有著大量的代碼,但是我們只會(huì)對(duì)客戶端使用其中的一小部分。
  WSDL文檔包含一個(gè)服務(wù)元素。這個(gè)元素提供對(duì)Web service的最高級(jí)描述——實(shí)質(zhì)上就是它的名稱。(WSDL中)一個(gè)服務(wù)是端口的集合,而端口是對(duì)于如何調(diào)用服務(wù)的高級(jí)描述。特別地,端口包含Web service的地址。如果查看生成的類,您將看到兩個(gè)文件:AmazonSearchService.java和AmazonSearchService_Impl.java。這兩個(gè)文件分別是一個(gè)接口和一個(gè)實(shí)現(xiàn)類,代表了Amazon的WSLD中定義的服務(wù)。還有一個(gè)叫做AmazonSearchPort.java的接口,它對(duì)應(yīng)于WSDL端口定義。如果查看Port接口,您將看到它包含Amazon Web service所能執(zhí)行的所有操作的列表。樁類實(shí)現(xiàn)了這個(gè)服務(wù)接口。該樁叫做AmazonSearchPort_Stub.java,而且這是我們的客戶端將會(huì)使用的類(參見(jiàn)清單1)。

查找樁
  清單1. 服務(wù)接口是由叫做AmazonSearchPort_Stub.java 的樁類實(shí)現(xiàn)的,Web service客戶端將會(huì)使用這個(gè)樁類。

public class AmazonSearchService_Impl extends
com.sun.xml.rpc.client.BasicService implements
AmazonSearchService {
private static final QName serviceName =
new QName("http://soap.amazon.com",
"AmazonSearchService");
private static final QName
ns1_AmazonSearchPort_QNAME = new QName(
"http://soap.amazon.com", "AmazonSearchPort");
private static final Class
amazonSearchPort_PortClass =
javapro.amazon.AmazonSearchPort.class;public java.rmi.Remote getPort(QName portName, Class serviceDefInterface)throws javax.xml.rpc.ServiceException{// implementation elided}public java.rmi.Remote getPort(Class serviceDefInterface)throws javax.xml.rpc.ServiceException{// implementation elided}public javapro.amazon.AmazonSearchPortgetAmazonSearchPort() {String[] roles = new String[] {};javapro.amazon.AmazonSearchPort_Stub stub =new javapro.amazon.AmazonSearchPort_Stub(
handlerChain);return stub;}}
  

為了使重要的數(shù)據(jù)更加顯而易見(jiàn),我們省略了很多實(shí)現(xiàn)代碼。注意,正是getAmazonSearchPort() 方法創(chuàng)建了AmazonSearchport_Stub(就是樁)的一個(gè)實(shí)例。樁是使用handlerChain進(jìn)行初始化的(參見(jiàn)清單2)。

信息結(jié)構(gòu)
  清單2. AmazonSearchPort_Stub是使用handlerChain初始化的樁。我們傳遞給方法一個(gè)AuthorRequest結(jié)構(gòu),而該方法返回一個(gè)ProductInfo結(jié)構(gòu)。

public class AmazonSearchPort_Stubextends com.sun.xml.rpc.client.StubBaseimplements javapro.amazon.AmazonSearchPort {public AmazonSearchPort_Stub(HandlerChain handlerChain) {super(handlerChain);_setProperty(ENDPOINT_ADDRESS_PROPERTY,"http://soap.amazon.com/onca/soap3");}public ProductInfoauthorSearchRequest(AuthorRequest authorSearchRequest)throws java.rmi.RemoteException {try {StreamingSenderState _state = _start(_handlerChain);InternalSOAPMessage _request =_state.getRequest();_request.setOperationCode(AuthorSearchRequest_OPCODE);AmazonSearchPort_AuthorSearchRequest_RequestStructrequestStruct =new AmazonSearchPort_AuthorSearchRequest_RequestStruct();requestStruct.setAuthorSearchRequest(authorSearchRequest);SOAPBlockInfo _bodyBlock =new SOAPBlockInfo(ns1_AuthorSearchRequest_AuthorSearchRequest_QNAME);_bodyBlock.setValue(requestStruct);_bodyBlock.setSerializer(ns1requestStruct_SOAPSerializer);_request.setBody(_bodyBlock);_state.getMessageContext().setProperty(HttpClientTransport.HTTP_SOAPACTION_PROPERTY,"http://soap.amazon.com");_send((String) _getProperty(ENDPOINT_ADDRESS_PROPERTY), _state);AmazonSearchPort_AuthorSearchRequest_ResponseStructresponseStruct = null;Object _responseObj = _state.getResponse().getBody().getValue();if (_responseObj instanceofSOAPDeserializationState) {responseStruct =(AmazonSearchPort_AuthorSearchRequest_ResponseStruct)((SOAPDeserializationState)_responseObj).getInstance();} else {responseStruct = (AmazonSearchPort_AuthorSearchRequest_ResponseStruct)_responseObj;}return responseStruct.get_return();} catch (RemoteException e) {// let this one through unchangedthrow e;} catch (JAXRPCException e) {throw new RemoteException(e.getMessage(), e);} catch (Exception e) {if (e instanceof RuntimeException) {throw (RuntimeException)e;} else {throw new RemoteException(e.getMessage(), e);}}}}

  同樣,您可以安全地忽略這里的很多代碼;它就是實(shí)現(xiàn)細(xì)節(jié)。然而,注意傳遞給該方法的是一個(gè)AuthorRequest結(jié)構(gòu),而該方法返回的是一個(gè)ProductInfo結(jié)構(gòu)。此外還要注意,我們將會(huì)發(fā)送請(qǐng)求至的URL被設(shè)置為帶有下列調(diào)用的方法的一部分:

setPropertyHttpClientTransport.HTTP_SOAPACTION_PROPERTY,"http://soap.amazon.com");

創(chuàng)建客戶端
  現(xiàn)在,讓我們編寫客戶端代碼,這實(shí)際上是相當(dāng)容易的事情(參見(jiàn)清單3)。通常,JAX-RPC看起來(lái)就像是您在清單3中看見(jiàn)的代碼那樣:創(chuàng)建服務(wù)實(shí)現(xiàn),向它要求所需的Web service端口,并調(diào)用適當(dāng)?shù)姆椒?。其中的特殊之處在于調(diào)用authorSearchRequest()方法時(shí),您必須使用作者名初始化AuthorRequest對(duì)象。在這種情況下,您想查看書(shū)籍部分,您想要概要情況,而不是詳細(xì)數(shù)據(jù),而且您限制了搜索,讓它包含關(guān)鍵字“Web”。您需要設(shè)置的其他重要值是開(kāi)發(fā)人員令牌。出于明顯的理由,我還沒(méi)有在這里進(jìn)行賦值!

客戶端代碼
  清單3. JAX-RPC客戶端創(chuàng)建了服務(wù)實(shí)現(xiàn),向它要求所需的Web service端口,并調(diào)用適當(dāng)?shù)姆椒ā?

public class Client{public static void main(String[] args){AmazonSearchService_Impl impl =new AmazonSearchService_Impl();AmazonSearchPort port =impl.getAmazonSearchPort();AuthorRequest authorRequest = new AuthorRequest();authorRequest.setAuthor("Kevin Jones");authorRequest.setDevtag("[developer token here]");authorRequest.setMode("books");authorRequest.setKeywords("Web");authorRequest.setType("lite");try{ProductInfo productInfo =port.authorSearchRequest(authorRequest);Details[] details = productInfo.getDetails();for (int ndx = 0; ndx < details.length; ndx++){Details detail = details[ndx];System.out.println(detail.getProductName());}}catch (RemoteException e){e.printStackTrace();}}}

  URL硬編碼在樁中。URL不會(huì)經(jīng)常變化,但是假定您需要發(fā)送請(qǐng)求給另外一個(gè)URL,那該怎么辦呢?您可以讓一個(gè)服務(wù)位于多臺(tái)服務(wù)器上,或許是出于故障恢復(fù)的理由或負(fù)載平衡的目的,或者可能您想通過(guò)跟蹤工具(可以顯示每個(gè)方向上正在發(fā)送的SOAP數(shù)據(jù))發(fā)送請(qǐng)求和響應(yīng)。要完成這些任務(wù),您可以在樁中修改Web service地址:

AmazonSearchPort_Stub port = (AmazonSearchPort_Stub)impl.getAmazonSearchPort();port._setProperty(AmazonSearchPort_Stub.ENDPOINT_ADDRESS_PROPERTY,"http://localhost:9090/onca/soap3");

  注意,getAmazonSearchPort()的返回值被轉(zhuǎn)給實(shí)現(xiàn)類而不是接口,所以我們可以設(shè)置端點(diǎn)地址,以便調(diào)用localhost。
  然后,您可以運(yùn)行一個(gè)跟蹤工具,比如來(lái)自Axis的tcpmon或者我編寫的HttpProxy(下載HttpProxy的代碼)。這個(gè)工具被設(shè)置為監(jiān)聽(tīng)客戶端要調(diào)用的端口上的請(qǐng)求,并把它們轉(zhuǎn)發(fā)給原來(lái)的端口(參見(jiàn)圖3)。


監(jiān)聽(tīng)

  HttpProxy跟蹤工具被設(shè)置為監(jiān)聽(tīng)客戶端要調(diào)用的端口上的請(qǐng)求,并把它們轉(zhuǎn)發(fā)給原來(lái)的端口。
如果有些問(wèn)題難于跟蹤,您可以使用這些工具來(lái)檢驗(yàn)SOAP和HTTP。如果使用了代理,您需要告訴Java運(yùn)行時(shí)通過(guò)該代理進(jìn)行調(diào)用。您可以通過(guò)設(shè)置Java系統(tǒng)屬性來(lái)做到這一點(diǎn):

public static void main(String[] args){System.setProperty("proxySet", "true" );System.setProperty("http.proxyHost","myproxy" );System.setProperty("http.proxyPort", "8080" );System.setProperty("http.proxyUser", "xxx");System.setProperty("http.proxyPassword","yyy");...}

  Web service正在快速成為構(gòu)建客戶端/服務(wù)器應(yīng)用程序的一項(xiàng)標(biāo)準(zhǔn)。編寫Web service有多種方式,包括手寫和使用工具包。有各種可用于Java的工具包,包括開(kāi)源的Axis和Sun編寫的JAX-RPC。關(guān)于通過(guò)使用wscompile讀取WSDL和生成必需的客戶端代碼,并使用JAX-RPC來(lái)實(shí)現(xiàn)Web service客戶端,我們已經(jīng)接觸到了其方方面面。下一步將是了解如何編寫服務(wù)器。請(qǐng)參見(jiàn)“編寫一個(gè)Web service服務(wù)器”一文。
  我們尚未討論的還有一些其他的方面,比如管理HTTP會(huì)話、HTTP身份驗(yàn)證和管理錯(cuò)誤,以及各種Java規(guī)范,比如SOAP with Attachments API for Java (SAAJ)和Java Architecture for XML Binding (JAXB),在Web service領(lǐng)域中所扮演的角色。對(duì)于Web service也有講解不夠深入的方面,比如管理附件,理解WSDL,以及rpc/encoded和document/literal風(fēng)格服務(wù)之間的差別。我們將來(lái)會(huì)對(duì)這些主題進(jìn)行更為深入的探討。

關(guān)于作者
Kevin Jones是一名開(kāi)發(fā)人員,他的主要工作是研究和教學(xué)Java編程,并探討HTTP和XML。他生活在U.K,為Developmentor工作。Developmentor是一家培訓(xùn)公司,總部位于美國(guó)和歐洲,專門致力于Java和Microsoft平臺(tái)方面技術(shù)培訓(xùn)。您可以通過(guò)他的電子郵箱kevinj@develop.com與他聯(lián)系。

原文出處
http://www.fawcette.com/javapro/2005_01/magazine/features/kjones_client/

 作者簡(jiǎn)介
Kevin Jones是一位開(kāi)發(fā)人員,主要從事 Java 編程的研究和教學(xué),以及研究 HTTP 和 XML 。他生活在英國(guó),在 Developmentor 公司工作,該公司是一家在美國(guó)和歐洲都設(shè)有辦事處的培訓(xùn)機(jī)構(gòu),主要從事有關(guān) Java 和 Microsoft 平臺(tái)的技術(shù)培訓(xùn)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
舊情復(fù)燃webservice
JAVA6開(kāi)發(fā)WebService (一)
J2ME 的 Web 服務(wù) API講解
Java Web Services的遠(yuǎn)端調(diào)用[圖]
開(kāi)發(fā)者關(guān)于 JAX-RPC 的介紹,第 1 部分: 了解 JAX-RPC 類型映射系統(tǒng)的各個(gè)方面
JAX-WS2.0規(guī)范--第一章
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服