<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java隨記

    堅持就是勝利!

     

    j2ee web service開發(二) 動態代理與動態調用

    ?j2ee web service 客戶端的三種調用方式: (一)占位程序:該種調用方式需要服務端生成所謂的占位程序,也是性能最好的一種方式,據有的文檔介紹說用占位程序實現的web服務不能實現各種編程語言比如C#之是互相調用就是會引起互操作性的問題.而且生成占位程序的web服務的確稍麻煩一點,更重要的是我不喜歡這種方式,也就不作備忘了:)。

    (二)動態代理:該種方式需要一個指向WSDL文檔的URL。具體實現:

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

    // 工廠類,取得service對象,

    ?

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

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

    ??????? URL mappingURL = new File("complexType-array/WEB-INF/CountUser.xml").???????????????????????? toURL(); // 映射文件的URL 需要著重說明的就是這個映射文件了,標準的j2ee web service API實現中可不需要這玩意,但是在Jboss的實現中不要這個就會報錯cannot obtain java mapping type...,在jboss下開發的web 服務客戶端移植時需要特別注意,麻煩!

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

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

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

    ( 三)動態調用。

    ?

    ??????? 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");// 表示服務名QName對象。

    ??????? 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});

    ?

    ?

    ?

    服務器端的實現參見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);

    ??? }

    }

    ?

    ?

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

    posted on 2006-11-07 10:40 傻 瓜 閱讀(2965) 評論(0)  編輯  收藏 所屬分類: j2ee web service

    導航

    統計

    常用鏈接

    留言簿(7)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    友情鏈接

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成电影亚洲人成9999网| 国产成人亚洲合集青青草原精品| 性色午夜视频免费男人的天堂| 亚洲精品美女视频| 国产网站在线免费观看| 国产成人高清精品免费观看| 亚洲精品国精品久久99热一| 91免费国产在线观看| 国产亚洲精品美女2020久久| 久久久久亚洲AV无码专区首| 成人超污免费网站在线看| 中文字幕看片在线a免费| 精品亚洲国产成人| 在线观看亚洲精品福利片| 噼里啪啦免费观看高清动漫4| a在线视频免费观看在线视频三区| 亚洲视频一区在线观看| 亚洲成av人在片观看| 国产人成免费视频网站| A国产一区二区免费入口| 亚洲日韩一区二区一无码| 亚洲AV无码一区东京热| 亚洲av午夜成人片精品电影| 国产精品白浆在线观看免费| 亚洲欧美国产国产一区二区三区| 亚洲av无码一区二区三区网站| 免费中文字幕不卡视频| 无人在线直播免费观看| 久久久精品午夜免费不卡| 精品久久久久久亚洲综合网| 亚洲国产av一区二区三区丶| 亚洲国产三级在线观看| 又黄又爽无遮挡免费视频| 性做久久久久久久免费看| 久久99热精品免费观看牛牛| 精品97国产免费人成视频| 国产亚洲人成在线影院| 亚洲精品国产高清在线观看| 亚洲日本香蕉视频| 7777久久亚洲中文字幕蜜桃 | 亚洲av无码一区二区三区不卡 |