無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
          j2ee web service 客戶端的三種調(diào)用方式: (一)占位程序:該種調(diào)用方式需要服務(wù)端生成所謂的占位程序,也是性能最好的一種方式,據(jù)有的文檔介紹說用占位程序?qū)崿F(xiàn)的web服務(wù)不能實(shí)現(xiàn)各種編程語言比如C#之是互相調(diào)用就是會(huì)引起互操作性的問題.而且生成占位程序的web服務(wù)的確稍麻煩一點(diǎn),更重要的是我不喜歡這種方式,也就不作備忘了:)。

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

          ??????? ServiceFactoryImpl factory = new ServiceFactoryImpl();

          // 工廠類,取得service對(duì)象,

          ?

          ??????? URL wsdlURL = new File(? "complexType-array/WEB-INF/wsdl/CountUser.wsdl").??????????????? ??toURL(); //wsdl 文檔的URL 它可以是一個(gè)遠(yuǎn)程的URL 但是本例引用本地硬盤上的一個(gè)wsdl文件

          其好處是提高程序的性能。

          ??????? URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").???????????????????????? toURL(); // 映射文件的URL 需要著重說明的就是這個(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下開發(fā)的web 服務(wù)客戶端移植時(shí)需要特別注意,麻煩!

          ??????? QName qname = new QName("http://array", "CountUserService");

          ??????? Service service = factory.createService(wsdlURL, qname, mappingURL);// 通過工廠方法得到一個(gè)Service對(duì)象,但createService(wsdlURL, qname, mappingURL)方法是jboss的具體實(shí)現(xiàn)增加一的一個(gè)方法,標(biāo)準(zhǔn)API可沒有這玩意,對(duì)于數(shù)組類型的傳遞只能用這個(gè)方法了,奇怪的是客戶端居然需要部署在服務(wù)器端的映射文件,沒勁!???????

          ??????? CountUser port = (CountUser) service.getPort(CountUser.class); // 取得服務(wù)器端的接口。

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

          ?

          ??????? URL wsdlURL = new File(

          ??????????????? "complexType-array/WEB-INF/wsdl/CountUser.wsdl").

          ????????????????????? toURL();

          ??????? URL mappingURL = new File(

          ??????????????? "complexType-array/WEB-INF/CountUser.xml").

          ???????????????????????? toURL();

          ??????? QName qname = new QName("http://array", "CountUserService");// 表示服務(wù)名QName對(duì)象。

          ??????? Service service = factory.createService(wsdlURL, qname, mappingURL);

          ??????? Call call = service.createCall();

          ??? // 沒什么好說的,依然要用到wsdl文檔文件,映射文件。

          ??????? call.setOperationName(new QName(TARGET_NAMESPACE, "countUser"));// 指定方法名

          ??????? call.setPortTypeName(new QName("CountUser"));// 指定端口名

          ("value",Constants.TYPE_LITERAL_ANYSIMPLETYPE,ParameterMode.IN);

          ??????? call.setReturnType(Constants.TYPE_LITERAL_INT);

          ??????? Object retObj = call.invoke(new Object[] {user});

          ?

          ?

          ?

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

          package array;

          ?

          import java.net.URL;

          import javax.xml.rpc.*;

          import javax.xml.namespace.QName;

          import java.util.*;

          import java.io.File;

          import org.jboss.ws.jaxrpc.ServiceFactoryImpl;

          import org.jboss.ws.Constants;

          ?

          public class ArrayExample {

          ? ?? public ArrayExample() {

          ??? }

          ?

          ??? private static final String TARGET_NAMESPACE =

          ??????????? "http://array";

          ?

          ??? private CountUser getPort() throws Exception {

          ?

          ??????? ServiceFactoryImpl factory = new ServiceFactoryImpl();

          ?

          ??????? URL wsdlURL = new File(

          ??????????????? "complexType-array/WEB-INF/wsdl/CountUser.wsdl").

          ????????????????????? toURL();

          ??????? URL mappingURL = new File(

          ??????????????? "complexType-array/WEB-INF/CountUser.xml").

          ???????????????????????? toURL();

          ??????? QName qname = new QName("http://array", "CountUserService");

          ??????? Service service = factory.createService(wsdlURL, qname, mappingURL);

          ?

          ??????? CountUser port = (CountUser) service.getPort(CountUser.class);

          ?

          ??????? return port;

          ??? }

          ?

          ??? public void testComplexUserArray(User[] user) throws

          ??????????? Exception {

          ??????? CountUser port = getPort();

          ?

          ??????? try {

          ??????????? int returnValue = port.countUser(user);

          ??????????? System.out.print(returnValue);

          ??????? } catch (Exception e) {

          ??????????? throw e;

          ??????? }

          ??? }

          ?

          ??? public void DIIClient(User[] user) throws Exception {

          ?

          ??????? ServiceFactoryImpl factory = new ServiceFactoryImpl();

          ?

          ??????? URL wsdlURL = new File(

          ??????????????? "complexType-array/WEB-INF/wsdl/CountUser.wsdl").

          ????????????????????? toURL();

          ??????? URL mappingURL = new File(

          ??????????????? "complexType-array/WEB-INF/CountUser.xml").

          ???????????????????????? toURL();

          ??????? QName qname = new QName("http://array", "CountUserService");

          ??????? Service service = factory.createService(wsdlURL, qname, mappingURL);

          ??????? Call call = service.createCall();

          ??????? call.setOperationName(new QName(TARGET_NAMESPACE, "countUser"));

          ??????? call.setPortTypeName(new QName("CountUser"));

          ?

          ??????? call.setReturnType(Constants.TYPE_LITERAL_INT);

          ?

          ????? ??Object retObj = call.invoke(new Object[] {user});

          ?

          ??????? System.out.println(retObj.toString());

          ??? }

          ?

          ??? public static void main(String[] args) throws Exception {

          ??????? ArrayExample arrayexample = new ArrayExample();

          ??????? User[] user = new User[2];

          ??????? user[0] = new User(" 張三", "027-88888888", new Date());

          ??????? user[1] = new User("lisi", null, new Date());

          ??????? //arrayexample.testComplexUserArray(user);

          ??????? arrayexample.DIIClient(user);

          ??? }

          }

          ?

          ?

          ?至此好象一個(gè)可以應(yīng)用的web service服務(wù)就完成了,然而這才僅僅只是開始~~~~~~~~~
          如果你想賜教或者討論,歡迎加入QQ群:30406099



          凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
          、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。

          posted on 2006-11-09 12:24 草兒 閱讀(981) 評(píng)論(0)  編輯  收藏 所屬分類: 軟件構(gòu)架java
          主站蜘蛛池模板: 鄱阳县| 奉新县| 利川市| 云梦县| 兴仁县| 靖西县| 刚察县| 壤塘县| 樟树市| 宁远县| 清水河县| 闽清县| 准格尔旗| 县级市| 佛冈县| 平利县| 客服| 阜平县| 墨脱县| 泽普县| 伊金霍洛旗| 靖宇县| 金寨县| 平陆县| 旬邑县| 阜阳市| 岳阳市| 黄石市| 宿州市| 文水县| 江北区| 呼伦贝尔市| 昆明市| 西城区| 若尔盖县| 甘孜| 班戈县| 麦盖提县| 肥东县| 日土县| 鄂尔多斯市|