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

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

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

    隨筆-193  評論-715  文章-1  trackbacks-0
    本Blog所有內容不得隨意轉載,版權屬于作者所有。如需轉載請與作者聯系( fastzch@163.com )。
    未經許可的轉載,本人保留一切法律權益。
    一直以來,發現有某些人完全不尊重我的勞動成果,隨意轉載,提醒一下那些人小心哪天惹上官司。

    雖然XFire現在已經被CXF取代,但在現在已經開發的項目中,還是有不少使用XFire來實現Web Service的。前段時間,我寫的使用XFire開發Web Service服務端的文章《XFire完整入門教程》受到了大家的好評,給大家帶來了方便,很是高興。今天來談談用XFire開發客戶端。

    本文也將繼續使用上一篇文章的服務端來做為服務端。使用XFire開發Web Service客戶端分為如下兩大類:
    一、服務提供者告訴你interface,你可以使用如下三種方式來開發:
    YourService即是服務提供者告訴給你的一個interface(當然,也可以根據WSDL的定義,自己定義一個同樣的interface)。
    1,簡單的方式
    Service?serviceModel?=?new?ObjectServiceFactory().create(YourService.class);
    YourService?service?
    =?(YourService)
    ????
    new?XFireProxyFactory().create(serviceModel,?"http://your/remote/url");
    2,JSR 181注釋的方式
    Service?serviceModel?=?new?AnnotationServiceFactory().create(YourService.class);
    YourService?client?
    =?(YourService)
    ????
    new?XFireProxyFactory().create(serviceModel,?"http://your/remote/url");
    3,混合方式
    Service?serviceModel?=
    ??
    new?AnnotationServiceFactory(
    ???
    new?Jsr181WebAnnotations(),
    ???XFireFactory.newInstance().getXFire().getTransportManager(),
    ???
    new?AegisBindingProvider(new?JaxbTypeRegistry())).create(YourService.class);

    二,通過WSDL創建一個動態的客戶端,如下:
    package?test;

    import?java.net.MalformedURLException;
    import?java.net.URL;

    import?org.codehaus.xfire.client.Client;

    public?class?DynamicClientTest?{
    ????
    public?static?void?main(String[]?args)?throws?MalformedURLException,
    ????????????Exception?
    {
    ????????Client?client?
    =?new?Client(new?URL(
    ????????????????
    "http://localhost:8080/xfiretest/services/TestService?wsdl"));
    ????????Object[]?results?
    =?client
    ????????????????.invoke(
    "sayHello",?new?Object[]?{?"Firends"?});
    ????????System.out.println(results[
    0]);

    ????}

    }


    三,使用ANT工具或命令行通過WSDL生成一個客戶端:
    1,使用ANT生成客戶端,ANT腳本如下:
    <?xml?version="1.0"?>
    <project?name="wsgen"?default="wsgen"?basedir=".">
    ????
    <path?id="classpathId">
    ????????
    <fileset?dir="./WebRoot/WEB-INF/lib">
    ????????????
    <include?name="*.jar"?/>
    ????????
    </fileset>
    ????
    </path>
    ????
    <taskdef?classpathref="classpathId"?name="wsgen"?classname="org.codehaus.xfire.gen.WsGenTask">
    ????
    </taskdef>
    ????
    <target?name="wsgen"?description="generate?client">
    ????????
    <wsgen?outputDirectory="./src/"?wsdl="abc.wsdl"?binding="xmlbeans"?package="com.abc.p"?overwrite="true"?/>
    ????
    </target>
    </project>
    請注意,腳本中有一個參數binding,可以指定如下兩種不同的方式:
    (1)jaxb(Java Architecture for XML Binding,https://jaxb.dev.java.net/):使用此種方式時,會自動生成更多的Request和Resopnse類。
    (2)xmlbeans
    調用方式如下:
    AbcServiceClient?client?=?new?AbcServiceClient();
    String?url?
    =?"http://localhost:8080/xfireTest/services/TestService";
    String?result?
    =?client.getAbcPort(url).sayHello("Robin");

    2,使用命令生成客戶端的命令如下:
    gpath=xfire-all-1.2-SNAPSHOT.jar:ant-1.6.5.jar:jaxb-api-2.0EA3.jar:stax-api-1.0.1.jar:jdom-1.0.jar:jaxb-impl-2.0EA3.jar\
    :jaxb
    -xjc-2.0-ea3.jar:wstx-asl-2.9.3.jar:commons-logging-1.0.4.jar:activation-1.1.jar:wsdl4j-1.5.2.jar:XmlSchema-1.0.3.jar:xfire-jsr181-api-1.0-M1.jar;

    java?
    -cp?$gpath?org.codehaus.xfire.gen.WsGen?-wsdl?http://localhost:8080/xfire/services/Bookservice?wsdl?-o?.?-p?pl.tomeks.client?-overwrite?true

    其結果與ANT生成的一樣。


    四,參考資源:
    1,XFire 1.2.6手冊(http://xfire.codehaus.org/User%27s+Guide)
    2,http://xfire.codehaus.org/Client+API
    3,http://xfire.codehaus.org/Dynamic+Client

    posted on 2008-08-28 23:26 Robin's Programming World 閱讀(52348) 評論(33)  編輯  收藏 所屬分類: Java

    評論:
    # re: 使用XFire開發Web Service客戶端完整入門教程 2008-08-28 23:39 | softwave
    確實,很多隨意轉載的非常可惡,連原始鏈接和出處都不標明  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2008-08-29 00:03 | Robin's Java World
    @softwave
    是呀,有些人太討厭了。  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2008-08-29 00:33 | 無名
    # re: 使用XFire開發Web Service客戶端完整入門教程 2008-08-29 09:40 | Robin's Java World
    @無名
    剛剛看了,那篇文章主要是講服務端開發的,對于客戶端的開發,我這里應該是最完整的。  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2008-10-21 17:00 | toby
    問一下,如果是通過WSDL創建一個動態的客戶端,參數是自定義的java對象如何傳遞:
    client.invoke("sayHello", new Object[] { 自定義類型 });
    嗎?
    我經過測試好像不行,運行時報空指針異常。
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2008-12-18 10:29 | tracy
    請教個問題阿,ant 生成客戶端需要哪些包呢, 老是不停的報java.lang.NoClassDefFoundError

    我聲稱時報錯:
    Buildfile: build.xml
    wsgen:

    BUILD FAILED
    build.xml:52: java.lang.NoClassDefFoundError

    Total time: 725 milliseconds  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2008-12-26 20:45 | Yvon
    正好在找這方面的資料,謝謝啦  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2009-05-05 16:40 | @@@
    Object[] results = client
    .invoke("sayHello", new Object[] { "Firends" });
    請問這是調用sayHello 的它的參數是string
    那choose,test怎么調用
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2009-05-15 10:47 | jsp51.zhou
    請問,能不能異步調用啊。  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2009-05-20 12:20 | 軟件代理服務
    你寫錯了,少寫了一句代碼,你并沒有創建服務代理,你是這樣寫的:Service serviceModel = new ObjectServiceFactory().create(YourService.class);
    YourService service = (YourService)
    new XFireProxyFactory().create(serviceModel, "http://your/remote/url");
    事實上,你實例話了一個新的XFireProxyFactory ,而這個沒有含義的
    應該這樣寫:
    serviceModel = new ObjectServiceFactory().create(YourService.class);
    XFire xFire = XFireFactory.newInstance().getXFire();
    XFireProxyFactory factory = new XFireProxyFactory(xFire);
    YourService service = factory .create(serviceModel, "http://your/remote/url");
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2009-05-25 10:48 | rubby
    我感覺在中國 web service 應用很廣泛,但大家都知道皮毛而已。
    誰能夠講清楚Axis Axis2 xfire,CFX,
    比較java和.net創建和調用web service?
    講述web service 的發展歷史?

    我就非常感謝。網上的都大同小異。這篇不錯。  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2009-06-22 10:06 | isly
    請問,我用動態生成客戶端的方式,在main函數中運行ok,但是通過tomcat訪問為什么報javax.servlet.ServletException: javax/wsdl/factory/WSDLFactory
    異常呢,而且我試過把項目中的包拷到tomcat下還是一樣。  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2009-08-14 15:22 | jiangli19192
    package test;

    import java.net.MalformedURLException;
    import java.net.URL;

    import org.codehaus.xfire.client.Client;

    public class DynamicClientTest {
    public static void main(String[] args) throws MalformedURLException,
    Exception {
    Client client = new Client(new URL(
    "http://localhost:8080/xfiretest/services/TestService?wsdl"));
    Object[] results = client
    .invoke("sayHello", new Object[] { "Firends" });
    System.out.println(results[0]);

    }
    }

    運行的之后拋出:
    Exception in thread "main" java.lang.NoClassDefFoundError: javax/wsdl/factory/WSDLFactory
    at org.codehaus.xfire.client.Client.<init>(Client.java:235)
    at org.codehaus.xfire.client.Client.<init>(Client.java:246)
    at com.centfor.zmd.Test.main(Test.java:32)
    Caused by: java.lang.ClassNotFoundException: javax.wsdl.factory.WSDLFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 3 more  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2009-08-18 01:11 | jeff
    就這些東西還當個屁似的,本來就是拾人老外牙慧,還牛逼哄哄的。真是無語!  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2010-02-05 12:32 | mask
    請教樓主一個問題,我現在建立客戶端使用的下面這種方式:
    package test;

    import java.net.MalformedURLException;
    import java.net.URL;

    import org.codehaus.xfire.client.Client;

    public class DynamicClientTest {
    public static void main(String[] args) throws MalformedURLException,
    Exception {
    Client client = new Client(new URL(
    "http://localhost:8080/xfiretest/services/TestService?wsdl"));
    Object[] results = client
    .invoke("sayHello", new Object[] { "Firends" });
    System.out.println(results[0]);

    }
    }
    我現在的客戶端是建立在EJB應用上的,建立完以后,運行該類沒有問題,可以正確輸出結果,但是當我把main方法改成我的一個返回webservice結果的普通方法,在EJB的會話BEAN里調用的時候就是出一個很奇怪的異常:
    Caused by: java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:468)
    at java.lang.Integer.parseInt(Integer.java:497)
    at org.codehaus.xfire.transport.http.CommonsHttpMessageSender.createClient(CommonsHttpMessageSender.java:276)
    at org.codehaus.xfire.transport.http.CommonsHttpMessageSender.open(CommonsHttpMessageSender.java:129)
    at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:121)
    at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
    at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
    請問樓主遇到過這樣的問題嗎?期待樓主的回復  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2010-02-08 15:28 | nick.xiao
    寫的很詳細,thanks  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2010-03-26 17:25 | swarding99
    寫的很好,很詳細。多謝  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2010-04-26 17:28 | Jack
    @softwave
    轉載確實可惡,但部分還是喜歡文章而黏貼到自己博客以供查閱。
    以文章盈利或者打造博客排行為目的的,少  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2010-11-09 10:00 | 雨風
    借用一下樓上朋友的代碼,我也出現了同樣的問題,請教樓主該怎么解決?

    package test;

    import java.net.MalformedURLException;
    import java.net.URL;

    import org.codehaus.xfire.client.Client;

    public class DynamicClientTest {
    public static void main(String[] args) throws MalformedURLException,
    Exception {
    Client client = new Client(new URL(
    "http://localhost:8080/xfiretest/services/TestService?wsdl"));
    Object[] results = client
    .invoke("sayHello", new Object[] { "Firends" });
    System.out.println(results[0]);

    }
    }

    運行的之后拋出:
    Exception in thread "main" java.lang.NoClassDefFoundError: javax/wsdl/factory/WSDLFactory
    at org.codehaus.xfire.client.Client.<init>(Client.java:235)
    at org.codehaus.xfire.client.Client.<init>(Client.java:246)
    at com.centfor.zmd.Test.main(Test.java:32)
    Caused by: java.lang.ClassNotFoundException: javax.wsdl.factory.WSDLFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 3 more  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2010-11-12 09:35 | Robin's Java World
    @雨風
    很明顯,差一些lib,請下載并放到lib目錄中。  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2011-07-12 18:21 | 劍天
    @toby
    你那種方法只是調用普通的webservice,對于一些復雜類型的處理,是處理不了的,這篇文章是講如何處理復雜類型的,我建議你去學學cxf框架吧,你會知道java開發webservice有多么的神奇,在回來看看這個原始的,cxf是起源于xfire,  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2011-09-07 11:06 | xufeng52645264
    我的解決了,需要在工程中添加xfire相關的庫,工程右鍵-構建路徑-配置構建路徑-庫-添加庫-MyEclipseLibrary-選中Xfire1.2 Core Libraries、HTTP Client~、JAXB2 ~三個-確定,OK!@isly
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2011-09-30 16:15 | song
    您好,
    遇到的問題:我現在需要調用別人發布的webservice;他們提供了webservice的接口地址和方法名稱及參數,返回值
    現在想要使用xfire實現訪問,大概應該做哪些步驟...
    謝謝.
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2011-11-22 10:59 | CriusGong
    Hi Robin!
    謝謝你的文章,對我們這些初學者受益匪淺。現我碰到一下問題,這個問題應該很簡單,但是我不清楚這個url的運行,可以給點指點嗎?
    - Server returned error code = 404 for URI : http://localhost:8001/Studey_pjt/services/HelloService. Check server logs for details

      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2012-07-08 01:52 | 567
    567  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2013-01-29 16:08 | chengxx
    您好,我這也是報空指針異常,您解決了嗎?athena2007@126.com能發郵件給我嗎,非常感謝@toby
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2013-02-01 17:00 | yumaoer
    AbcServiceClient client = new AbcServiceClient();
    String url = "http://localhost:8080/xfireTest/services/TestService";
    String result = client.getAbcPort(url).sayHello("Robin");
    新手請教:AbcServiceClient 這個類和 getAbcPort這個方法是怎么來的啊?
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2013-02-28 08:37 | a3
    @jeff
    你屁真多  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2013-05-25 19:55 | wang
    外部包不全@jiangli19192
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2013-06-07 17:20 | promise
    invoke里面的蠶食都是啥意思@mask
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2014-05-04 18:08 | kunlun122
    @promise
    org.codehaus.xfire.fault.XFireFault: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.
    我用動態客戶端調用c#寫的webservice,報上面這個錯誤  回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程 2014-05-04 18:09 | kunlun122
    @kunlun122
    這個webservice有soap1.1,也有soap1.2,我想問xfire用的是哪個標準?
      回復  更多評論
      
    # re: 使用XFire開發Web Service客戶端完整入門教程[未登錄] 2014-06-04 20:18 | ANDY
    你好啊。我用的是動態創建的方法啊,但是為什么斷點到服務端,字符串參數都是空的呢??請指教下。。。。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产成人无码av在线播放| 亚洲免费在线视频| 亚洲女子高潮不断爆白浆| 免费黄色福利视频| 91亚洲精品第一综合不卡播放| 久久精品国产免费| 亚洲视频在线观看视频| 亚洲免费一级视频| 亚洲精品天堂在线观看| 成年女人色毛片免费看| 亚洲AV色无码乱码在线观看| 国产人成免费视频| 国产精品九九久久免费视频| 亚洲αv在线精品糸列| 久久免费区一区二区三波多野| 亚洲精品美女久久久久9999| 老司机在线免费视频| 亚洲人成色99999在线观看| 国产不卡免费视频| 三年在线观看免费观看完整版中文 | 久久久久亚洲AV成人无码| 99免费在线观看视频| 精品亚洲成A人无码成A在线观看| 日韩精品视频免费观看| 成年免费大片黄在线观看com| 久久久久亚洲?V成人无码| 在线日本高清免费不卡| 亚洲国产成人精品无码区花野真一 | 国产精品亚洲高清一区二区| 久久免费精品视频| 亚洲13又紧又嫩又水多| 亚洲国产精品无码久久久久久曰| 黄色免费在线网站| 亚洲中文字幕无码亚洲成A人片| 免费国产小视频在线观看| 国产午夜不卡AV免费| 亚洲午夜精品久久久久久app| 丝袜熟女国偷自产中文字幕亚洲| 88xx成人永久免费观看| 最新亚洲人成无码网站| 国产AV无码专区亚洲AVJULIA|