日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
J2EEwebservice開(kāi)發(fā)(二)動(dòng)態(tài)代理與動(dòng)態(tài)調(diào)用

j2ee web service 客戶端的三種調(diào)用方式:

東河網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司

(一)占位程序:該種調(diào)用方式需要服務(wù)端生成所謂的占位程序,也是性能最好的一種方式,據(jù)有的文檔介紹說(shuō)用占位程序?qū)崿F(xiàn)的web服務(wù)不能實(shí)現(xiàn)各種編程語(yǔ)言比如C#之是互相調(diào)用就是會(huì)引起互操作性的問(wèn)題.而且生成占位程序的web服務(wù)的確稍麻煩一點(diǎn),更重要的是我不喜歡這種方式,也就不作備忘了:)。

(二)動(dòng)態(tài)代理:該種方式需要一個(gè)指向WSDL文檔的URL。具體實(shí)現(xiàn):

 
 
 
  1. ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  2. // 工廠類,取得service對(duì)象,   
  3. URL wsdlURL = new File(  "complexType-array/WEB-INF/wsdl/CountUser.wsdl").toURL();   
  4. //wsdl 文檔的URL 它可以是一個(gè)遠(yuǎn)程的URL 但是本例引用本地硬盤上的一個(gè)wsdl文件,其好處是提高程序的性能。   
  5. URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  6. // 映射文件的URL 需要著重說(shuō)明的就是這個(gè)映射文件了,標(biāo)準(zhǔn)的j2ee web service API實(shí)現(xiàn)中可不需要這玩意,但是在Jboss的實(shí)現(xiàn)中不要這個(gè)就會(huì)報(bào)錯(cuò)cannot obtain java mapping type...,在jboss下開(kāi)發(fā)的web 服務(wù)客戶端移植時(shí)需要特別注意,麻煩!   
  7. QName qname = new QName("http://array""CountUserService");   
  8. Service service = factory.createService(wsdlURL, qname, mappingURL);  
  9. // 通過(guò)工廠方法得到一個(gè)Service對(duì)象,但createService(wsdlURL, qname, mappingURL)方法是jboss的具體實(shí)現(xiàn)增加一的一個(gè)方法,標(biāo)準(zhǔn)API可沒(méi)有這玩意,對(duì)于數(shù)組類型的傳遞只能用這個(gè)方法了,奇怪的是客戶端居然需要部署在服務(wù)器端的映射文件,沒(méi)勁!          
  10. CountUser port = (CountUser) service.getPort(CountUser.class);   
  11. // 取得服務(wù)器端的接口。   

( 三)動(dòng)態(tài)調(diào)用。

 
 
 
  1. URL wsdlURL = new File("complexType-array/WEB-INF/wsdl/CountUser.wsdl").toURL();   
  2. URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  3. QName qname = new QName("http://array""CountUserService");// 表示服務(wù)名QName對(duì)象。   
  4. Service service = factory.createService(wsdlURL, qname, mappingURL);   
  5. Call call = service.createCall();   
  6. // 沒(méi)什么好說(shuō)的,依然要用到wsdl文檔文件,映射文件。   
  7. call.setOperationName(new QName(TARGET_NAMESPACE, "countUser"));// 指定方法名   
  8. call.setPortTypeName(new QName("CountUser"));// 指定端口名   
  9. ("value",Constants.TYPE_LITERAL_ANYSIMPLETYPE,ParameterMode.IN);   
  10. call.setReturnType(Constants.TYPE_LITERAL_INT);   
  11. Object retObj = call.invoke(new Object[] {user});   

服務(wù)器端的實(shí)現(xiàn)參見(jiàn)j2ee web service(一)完整的客戶端代碼如下:

 
 
 
  1. package array;   
  2.  
  3. import java.net.URL;   
  4. import javax.xml.rpc.*;   
  5. import javax.xml.namespace.QName;   
  6. import java.util.*;   
  7. import java.io.File;   
  8. import org.jboss.ws.jaxrpc.ServiceFactoryImpl;   
  9. import org.jboss.ws.Constants;   
  10.  
  11. public class ArrayExample {   
  12.      public ArrayExample() {   
  13.     }   
  14.  
  15.     private static final String TARGET_NAMESPACE = "http://array";   
  16.  
  17.     private CountUser getPort() throws Exception {   
  18.  
  19.         ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  20.         URL wsdlURL = new File("complexType-array/WEB-INF/wsdl/CountUser.wsdl"). toURL();   
  21.         URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  22.         QName qname = new QName("http://array""CountUserService");   
  23.         Service service = factory.createService(wsdlURL, qname, mappingURL);   
  24.         CountUser port = (CountUser) service.getPort(CountUser.class);   
  25.         return port;   
  26.     }   
  27.  
  28.     public void testComplexUserArray(User[] user) throws   
  29.             Exception {   
  30.         CountUser port = getPort();   
  31.         try {   
  32.             int returnValue = port.countUser(user);   
  33.             System.out.print(returnValue);   
  34.         } catch (Exception e) {   
  35.             throw e;   
  36.         }   
  37.     }   
  38.  
  39.     public void DIIClient(User[] user) throws Exception {   
  40.         ServiceFactoryImpl factory = new ServiceFactoryImpl();   
  41.         URL wsdlURL = new File("complexType-array/WEB-INF/wsdl/CountUser.wsdl").toURL();   
  42.         URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").toURL();   
  43.         QName qname = new QName("http://array""CountUserService");   
  44.         Service service = factory.createService(wsdlURL, qname, mappingURL);   
  45.         Call call = service.createCall();   
  46.         call.setOperationName(new QName(TARGET_NAMESPACE, "countUser"));   
  47.         call.setPortTypeName(new QName("CountUser"));   
  48.         call.setReturnType(Constants.TYPE_LITERAL_INT);   
  49.         Object retObj = call.invoke(new Object[] {user});   
  50.         System.out.println(retObj.toString());   
  51.     }   
  52.  
  53.     public static void main(String[] args) throws Exception {   
  54.         ArrayExample arrayexample = new ArrayExample();   
  55.         User[] user = new User[2];   
  56.         user[0] = new User(" 張三""027-88888888"new Date());   
  57.         user[1] = new User("lisi"nullnew Date());   
  58.         //arrayexample.testComplexUserArray(user);   
  59.         arrayexample.DIIClient(user);   
  60.     }   
  61. }   

至此好象一個(gè)可以應(yīng)用的J2EE web service服務(wù)就完成了,然而這才僅僅只是開(kāi)始~~~~~~~~~


本文名稱:J2EEwebservice開(kāi)發(fā)(二)動(dòng)態(tài)代理與動(dòng)態(tài)調(diào)用
當(dāng)前路徑:http://www.dlmjj.cn/article/dhgheci.html