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

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

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

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    WebService大講堂之Axis2(1):用POJO實現0配置的WebService

    本文為原創,如需轉載,請注明作者和出處,謝謝!

        Axis2是一套嶄新的WebService引擎,該版本是對Axis1.x重新設計的產物。Axis2不僅支持SOAP1.1SOAP1.2,還集成了非常流行的REST WebService,同時還支持Spring、JSON等技術。這些都將在后面的系列教程中講解。在本文中主要介紹了如何使用Axis2開發一個不需要任何配置文件的WebService,并在客戶端使用JavaC#調用這個WebService。

    一、Axis2的下載和安裝

        讀者可以從如下的網址下載Axis2的最新版本:

        http://ws.apache.org/axis2/

        在本文使用了目前Axis2的最新版本1.4.1。讀者可以下載如下兩個zip包:

        axis2-1.4.1-bin.zip

        axis2-1.4.1-war.zip

        其中axis2-1.4.1-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.4.1-war.zip文件用于將WebService發布到Web容器中。

        axis2-1.4.1-war.zip文件解壓到相應的目錄,將目錄中的axis2.war文件放到<Tomcat安裝目錄>\webapps目錄中(本文使用的Tomcat的版本是6.x),并啟動Tomcat。

        在瀏覽器地址欄中輸入如下的URL

        http://localhost:8080/axis2/

        如果在瀏覽器中顯示出如圖1所示的頁面,則表示Axis2安裝成功。



    圖1

    二、編寫和發布WebService

      對于用Java實現的服務程序給人的印象就是需要進行大量的配置,不過這一點在Axis2中將被終結。在Axis2中不需要進行任何的配置,就可以直接將一個簡單的POJO發布成WebService。其中POJO中所有的public方法將被發布成WebService方法。

        下面我們來實現一個簡單的POJO,代碼如下:

    public class SimpleService
    {
        
    public String getGreeting(String name)
        {
            
    return "你好 " + name;
        }    
        
    public int getPrice()
        {
            
    return new java.util.Random().nextInt(1000);
        }    
    }

        SimpleService類中有兩個方法,由于這兩個方法都是public方法,因此,它們都將作為WebService方法被發布。

        編譯SimpleService類后,將SimpleService.class文件放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\pojo目錄中(如果沒有pojo目錄,則建立該目錄)?,F在我們已經成功將SimpleService類發布成了WebService。在瀏覽器地址欄中輸入如下的URL

    http://localhost:8080/axis2/services/listServices

        這時當前頁面將顯示所有在Axis2中發布的WebService,如圖2所示。



    圖2

        在瀏覽器地址欄中輸入如下的兩個URL來分別測試getGreetinggetPrice方法:

    http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill

    http://localhost:8080/axis2/services/SimpleService/getPrice

        3和圖4分別顯示了getGreetinggetPrice方法的測試結果。

    圖3  getGreeting方法的測試結果

    圖4  getPrice方法的測試結果

        在編寫、發布和測試0配置的WebService時應注意如下幾點:

        1. POJO類不能使用package關鍵字聲明包。

        2. Axis2在默認情況下可以熱發布WebService,也就是說,將WebService.class文件復制到pojo目錄中時,Tomcat不需要重新啟動就可以自動發布WebService。如果想取消Axis2的熱發布功能,可以打開<Tomcat安裝目錄>\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置代碼:

    <parameter name="hotdeployment">true</parameter>

        true改為false即可。要注意的是,Axis2在默認情況下雖然是熱發布,但并不是熱更新,也就是說,一旦成功發布了WebService,再想更新該WebService,就必須重啟Tomcat。這對于開發人員調試WebService非常不方便,因此,在開發WebService時,可以將Axis2設為熱更新。在axis2.xml文件中找到<parameter name="hotupdate">false</parameter>,將false改為true即可。

        3. 在瀏覽器中測試WebService時,如果WebService方法有參數,需要使用URL的請求參數來指定該WebService方法參數的值,請求參數名與方法參數名要一致,例如,要測試getGreeting方法,請求參數名應為name,如上面的URL所示。

        4. 發布WebServicepojo目錄只是默認的,如果讀者想在其他的目錄發布WebService,可以打開axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:

        <deployer extension=".class" directory="my" class="org.apache.axis2.deployment.POJODeployer"/>

        上面的配置允許在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\my目錄中發布WebService。例如,將本例中的SimpleService.class復制到my目錄中也可以成功發布(但要刪除pojo目錄中的SimpleService.class,否則WebService會重名)。

    三、 Java實現調用WebService的客戶端程序

        WebService是為程序服務的,只在瀏覽器中訪問WebService是沒有意義的。因此,在本節使用Java實現了一個控制臺程序來調用上一節發布的WebService。調用WebService的客戶端代碼如下:

    package client;

    import javax.xml.namespace.QName;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;

    public class RPCClient
    {
        
    public static void main(String[] args) throws Exception  
        {
            
    //  使用RPC方式調用WebService        
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options 
    = serviceClient.getOptions();
            
    //  指定調用WebService的URL
            EndpointReference targetEPR = new EndpointReference(
                    
    "http://localhost:8080/axis2/services/SimpleService");
            options.setTo(targetEPR);
            
    //  指定getGreeting方法的參數值
            Object[] opAddEntryArgs = new Object[] {"超人"};
            
    //  指定getGreeting方法返回值的數據類型的Class對象
            Class[] classes = new Class[] {String.class};
            
    //  指定要調用的getGreeting方法及WSDL文件的命名空間
            QName opAddEntry = new QName("http://ws.apache.org/axis2""getGreeting");
            
    //  調用getGreeting方法并輸出該方法的返回值
            System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);
            
    //  下面是調用getPrice方法的代碼,這些代碼與調用getGreeting方法的代碼類似
            classes = new Class[] {int.class};
            opAddEntry 
    = new QName("http://ws.apache.org/axis2""getPrice");
            System.out.println(serviceClient.invokeBlocking(opAddEntry, 
    new Object[]{}, classes)[0]);
        } 
    }

    運行上面的程序后,將在控制臺輸出如下的信息:


    你好 超人
    443

        在編寫客戶端代碼時應注意如下幾點:

        1. 客戶端代碼需要引用很多Axis2jar包,如果讀者不太清楚要引用哪個jar包,可以在Eclipse的工程中引用Axis2發行包的lib目錄中的所有jar包。

        2. 在本例中使用了RPCServiceClient類的invokeBlocking方法調用了WebService中的方法。invokeBlocking方法有三個參數,其中第一個參數的類型是QName對象,表示要調用的方法名;第二個參數表示要調用的WebService方法的參數值,參數類型為Object[];第三個參數表示WebService方法的返回值類型的Class對象,參數類型為Class[]。當方法沒有參數時,invokeBlocking方法的第二個參數值不能是null,而要使用new Object[]{}。

        3. 如果被調用的WebService方法沒有返回值,應使用RPCServiceClient類的invokeRobust方法,該方法只有兩個參數,它們的含義與invokeBlocking方法的前兩個參數的含義相同。

        4. 在創建QName對象時,QName類的構造方法的第一個參數表示WSDL文件的命名空間名,也就是<wsdl:definitions>元素的targetNamespace屬性值,下面是SimpleService類生成的WSDL文件的代碼片段:

    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd"
    xmlns:ns
    ="http://ws.apache.org/axis2" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
    xmlns:http
    ="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:mime
    ="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:soap12
    ="http://schemas.xmlsoap.org/wsdl/soap12/"
    targetNamespace
    ="http://ws.apache.org/axis2"
    >
        
    <wsdl:types>
             
        
    </wsdl:types>
         
    </wsdl:definitions>

    四、用wsdl2java簡化客戶端的編寫

        也許有很多讀者會說“有沒有搞錯啊,只調用兩個WebService方法用要寫這么多代碼,太麻煩了”。

        不過幸好Axis2提供了一個wsdl2java.bat命令可以根據WSDL文件自動產生調用WebService的代碼。wsdl2java.bat命令可以在<Axis2安裝目錄>"bin目錄中找到。在使用wsdl2java.bat命令之前需要設置AXIS2_HOME環境變量,該變量值是<Axis2安裝目錄>

        Windows控制臺輸出如下的命令行來生成調用WebService的代碼:

    %AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub

        其中-url參數指定了wsdl文件的路徑,可以是本地路徑,也可以是網絡路徑。-p參數指定了生成的Java類的包名,-o參數指定了生成的一系列文件保存的根目錄。在執行完上面的命令后,讀者就會發現在當前目錄下多了個stub目錄,在."stub"src"client目錄可以找到一個SimpleServiceStub.java文件,該文件復雜調用WebService,讀者可以在程序中直接使用這個類,代碼如下:

    package client;

    import javax.xml.namespace.QName;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;

    public class StubClient
    {
        
    public static void main(String[] args) throws Exception  
        {
            SimpleServiceStub stub 
    = new SimpleServiceStub();
            SimpleServiceStub.GetGreeting gg 
    = new SimpleServiceStub.GetGreeting();
            gg.setName(
    "比爾");
            System.out.println( stub.getGreeting(gg).get_return());
            System.out.println(stub.getPrice().get_return());
        } 
    }

        上面的代碼大大簡化了調用WebService的步驟,并使代碼更加簡潔。但要注意的是,wsdl2java.bat命令生成的Stub類將WebService方法的參數都封裝在了相應的類中,類名為方法名,例如,getGreeting方法的參數都封裝在了GetGreeting類中,要想調用getGreeting方法,必須先創建GetGreeting類的對象實例。

    五、使用C#調用WebService

        從理論上說,WebService可以被任何支持SOAP協議的語言調用。在Visual Studio中使用C#調用WebService是在所有語言中最容易實現的(VB.net的調用方法類似,也同樣很簡單)。

        新建一個Visual Studio工程,并在引用Web服務的對話框中輸入如下的URL,并輸入Web引用名為“WebService”:

        http://localhost:8080/axis2/services/SimpleService?wsdl

        然后引用Web服務的對話框就會顯示該WebService中的所有的方法,如圖5所示。



    圖5

        在完成上面的工作后,只需要如下三行C#代碼就可以調用getGreetinggetPrice方法,并顯示這兩個方法的返回值:

    WebService.SimpleService simpleService = new WSC.WebService.SimpleService();
    MessageBox.Show( simpleService.getGreeting(
    "比爾"));
    MessageBox.Show(simpleService.getPrice().@return.ToString());

        .net解析WSDL文件時直接將getGreeting方法的參數映射為String類型,因此,可以直接進行傳值。
        從上面的調用過程可以看出,添加Web引用的過程就相當于在Java中調用wsdl2java.bat自動生成stub類的過程。只是在調用stub類時與C#有一定的區別,但從總體上來說,都大大簡化了調用WebService的過程。

    下一篇:WebService大講堂之Axis2(2):復合類型數據的傳遞





    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-01-02 17:17 銀河使者 閱讀(72506) 評論(108)  編輯  收藏 所屬分類: java 、 原創 、webservice

    評論共2頁: 1 2 下一頁 

    評論

    # Pojo類如何使用import調用其他類文件  回復  更多評論   

    看了博主的文章,受益非淺。。。

    但是本人在博主文章的基礎之上作進一步的學習的時候遇到了困難。
    如題
    Pojo類如何使用import調用其他類文件

    本人發現使用 import引進其他包的時候,
    調用方法,之后就會出現下面的XML說明

    <soapenv:Reason>
    <soapenv:Text xml:lang="en-US">unknown</soapenv:Text>
    </soapenv:Reason>

    望博主在Pojo類中,如何調用其他文件作下說明 謝謝
    2009-01-19 04:30 | 加加

    # Pojo類如何使用import調用其他類文件  回復  更多評論   

    我主要是想要調用

    axis2文件目錄以外的文件。。。

    就像 我本來有一個JAVA程序,我想把它發布為WebService
    可是不想把它整個程序都放到axis2文檔目錄下
    只想用它的其中幾個公共類打包發布成WebService。。

    所以在這里就遇到困難了
    2009-01-19 05:30 | 加加

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @加加

    是這樣的,axis2實際上就是一個Web目錄,在該目錄中可以發布jsp、servlet,而webservice是依賴servlet來實現的,因此,也可以發布web service,當然,可以將axis2改成其他的名子,如ws。如果想發布類,一般有兩種方法:

    1. 按著本文所述,直接放在pojo目錄或其他的發布目錄中。
    2. 將這些類放在axis2\WEB-INF\classes目錄中,然后使用service.xml文件進行發布。這塊在后面的文章將詳細講解

    在axis2目錄有一些jar文件還需要帶的,否則使用axis2無法成功發布web service,當然,axis2目錄中的jar文件并不是都需要,根據使用的功能需要不同的jar文件,不過為了簡單,可以將所有的jar包都保留。不過這是在服務端,應該沒什么關系。
    2009-01-19 08:37 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    在本系列的后續文章還會講到使用service.xml文件來發布webservice,這種方式比較好,除此之外,還會講到會話在web service中的應用,以及如何跨服務共享會話(session),在c#、delphi中使用調用復雜的web service等。
    2009-01-19 08:39 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    很好,學習中。。。。。
    2009-02-05 10:38 | ziyoo

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    謝謝博主共享了這么有實用的東西,正在學習中...
    2009-02-16 16:48 | 游客ABC

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    您幸苦了!
    2009-02-22 10:37 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    問下,一個完整項目中只發布部分功能成服務,把這幾個類放到axis2文檔目錄下吧?但這些類如何調用項目中其他類?。???
    2009-02-23 14:16 | zhuyongjp

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @zhuyongjp
    被調用的類需要放在axis2目錄中的WEB-INF\lib目錄或WEB-INF\classes目錄中,這樣就可以調用了
    2009-02-23 14:46 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    謝謝,在請教下。如果項目中有些方法既要在內部調用,又要提供對外服務,那這些類應該如何放置呢?
    2009-02-23 16:34 | zhuyongjp

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    這些類應該放在WEB-INF\lib目錄或WEB-INF\classes目錄中,如果要在內部使用,直接調用就可以了,如果在外部使用(如發布成WebService),建議你使用spring來處理,這樣只要在aar文件中放一個services.xml就可以了,直接可以將spring的裝配bean發布成webservice。
    你可以參考我的文章:
    http://m.tkk7.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/13/254499.html
    2009-02-23 16:46 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    博主!如果我所發布webservice類前面引用其它的第三方jar包,那這些jar包應該如何引用進來?我是把那些jar包直接放到WEB-INF\lib目錄里了,沒有提示出錯什么的,但生成的wsdl文件中都是element maxOccurs="unbounded“的語句,很多。不知道是怎么回事!望解決~
    2009-03-16 16:48 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @Christino
    用java或其他客戶端可以生成stub類并調用嗎?
    2009-03-16 17:11 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    我不清楚您說的是什么意思?
    我要發布的Webservice方法前引用了第三方的jar包。說的詳細些就是:我要把matlab的算法(方法)做成webservice來發布,但是其中要引用matlab一些相關的jar包.現在不清楚怎么才能成功的調用?請指教一下,謝謝!
    2009-03-17 16:09 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @Christino
    將第三方的包放在axis2\WEB-INF\lib目錄中,然后在webservice類中引用并調用相關的類就可以了,在客戶端調用沒什么區別。有什么問題嗎?如果是正式發布的webservice,建議看看我后面的幾篇文章,建議使用services.xml文件來發布,而不要放在pojo里,這里面的類不能有package。
    2009-03-17 16:49 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    再請教一個問題我所傳遞的參數有的是17520*10的二維數組,像您第二篇寫的那樣,這樣的參數就肯定不能傳遞嗎?謝謝!
    2009-03-17 16:49 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    多維數組axis2不支持,但可以使用對象數組,如聲明一個長度為17520的數組,數組元素類型是一個對象,這個對象有一個類型為數組(長度為10)的屬性。然后傳到服務器再轉換一下就可以了。
    2009-03-17 17:00 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    呵呵,對,我就是用services.xml來發布的。非常,非常感謝您!我試試!
    2009-03-17 19:00 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    按照您的方法,我試了一下。我做了一個ArrayTemp類來承載這個二維數組,正如我上面所說,我要這個二維數組當做參數傳遞到webservice類的方法,如public Object[] getWebFigure(String[] _nee, ArrayTemp[] arr)這種形式。但是在客戶端傳遞進去的時候,報錯說ArrayTemp類型不匹配。如:getWebFigure.setArr(arr);,,,,所以是不是axis2中參數的數據類型只能是基本類型,像這種對象參數他不認是不是?謝謝!
    2009-03-18 10:28 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @Christino
    按你的getWebFigure方法沒有錯誤,我做了一個例子,完全沒問題,可能是你設置的問題,另外要注意,ArrayTemp的相應屬性必須有getter和setter方法,Axis2不會直接訪問public的類字段,而是通過getter和setter方法來獲得和設置屬性值的。例子代碼如下:

    package service;

    public class ArrayTemp
    {
    public int[] values = new int[10];

    public int[] getValues()
    {
    return values;
    }
    public void setValues(int[] values)
    {
    this.values = values;
    }
    }

    // webservice類
    package service;

    public class ComplexTypeService
    {
    public ArrayTemp[] getWebFigure(String[] _nee, ArrayTemp[] arr)
    {
    System.out.println(_nee[0]);
    System.out.println(arr[0].values[0]);
    ArrayTemp t = new ArrayTemp();

    return new ArrayTemp[]{t};
    }
    }

    <!-- services.xml -->
    <service name="ComplexTypeService" >
    <Description>
    Please Type your service description here
    </Description>
    <messageReceivers>
    <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass" locked="false">service.ComplexTypeService</parameter>
    </service>

    我用.net測試的,沒問題,估計Java也不會有問題。
    2009-03-18 12:22 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    但是我在客戶端傳arr對像數組時,說類型不匹配。getWebFigure.setArr(arr);->出錯。說setArr中的參數應該是SpikeWebserviceStubArrayTemp[]類型,我的arr是ArrayTemp類型。其中SpikeWebserviceStub是用wsdl2java生成的Stub。按您后邊講的,我把ArrayTemp類放到了tomcat6.0\webapps\axis2\WEB-INF\classes\service\ArrayTemp.class中。是這個地方錯了嗎。
    2009-03-18 14:57 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @Christino
    還要注意一點,arr的類型不能是ArrayTemp[],必須為Stub類所帶的相應類型,也就是SpikeWebserviceStub.ArrayTemp[],所以會出現不匹配。

    SpikeWebserviceStub.ArrayTemp[] arr = new SpikeWebserviceStub.ArrayTemp[]{...};
    getWebFigure.setArr(arr);

    這才正確!
    2009-03-18 15:48 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    明白!真的很感謝您花這么多寶貴的時間來指點我這個菜鳥,由衷的感謝!
    2009-03-18 16:03 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    這幾天刷您的博客已經成為我的習慣了呵呵!
    2009-03-18 16:07 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @Christino
    哈哈,受寵若驚??!
    這也正體現了互聯網的精神:人人為我,我為人人??!
    2009-03-18 18:44 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    您的方法是直接把.aar文件放到services文件夾里,從而生成.wsdl文件。那我怎么才能修改.wsdl文件???
    2009-03-19 15:17 | Christino

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @Christino
    修改wsdl文件?一種方法是在服務端先生成一個wsdl文件,然后放到META-INF目錄中,或直接通過url由客戶端根據wsdl生成Stub類,wsdl只用于客戶端生成Stub類,是靜態的或動態的都可以。當修改webservice類時,wsdl會自動改變的(動態方式)。
    2009-03-19 15:27 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    建議還是使用動態生成wsdl的方式,靜態的我也沒用過,不太喜歡靜態的方式
    2009-03-19 15:28 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    你好,我照您的例子做了,0配置什么都對,但結果如下,出現了空值!不知什么原因?getPrice方法正確!!<ns:getGreetingResponse xmlns:ns="http://ws.apache.org/axis2">
    <return>hellonull</return>
    </ns:getGreetingResponse>
    2009-04-09 11:07 | success2008

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @success2008
    你這程序用什么測的,是直接在瀏覽器中測試的,還是使用本文的客戶端程序?
    2009-04-09 11:43 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    我遇到了同樣的問題.
    在瀏覽器中測試
    無論傳入什么參數總是 出現
    - <ns:getGreetingResponse xmlns:ns="http://ws.apache.org/axis2">
    <return>你好 null</return>
    </ns:getGreetingResponse>
    2009-04-11 23:33 | ajax

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @ajax
    你在瀏覽器中輸入的url是什么,發上來看看
    2009-04-13 08:31 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    我也是,原因是wsdl自動生成后,參數是<xs:element minOccurs="0" name="param0" nillable="true" type="xs:string"/>
    名字變成了param0,所以要變成http://localhost:8080/axis2/services/SimpleService/getGreeting?param0=bill,不知道在生成wsdl時指定參數名字
    2009-04-13 14:52 | gp0014

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @gp0014
    是這個問題,所有我問一下訪問的url,哈哈。如果用services.xml進行配置,名子是不會變的。
    2009-04-13 15:22 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    謝謝你們的指點,博主辛苦了.
    2009-04-14 22:25 | ajax

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    @銀河使者
    怎么修改wsdl中的參數,比如你在SimpleService中的name在wsdl中式param0,怎么把它改過來
    2009-04-28 18:04 | Spring

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    這個改不了,但使用services.xml文件來發布webservice,就是name了。試試看
    2009-04-28 19:43 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    gg.setName("比爾");
    這個地方,在我的環境里測試,是沒有setName方法的,
    我改成gg.setParam0("比爾");行了.
    2009-05-08 19:32 | 心夢帆影

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    受益匪淺,希望博主及時更新,給大家提供更多的學習資源
    2009-05-13 23:02 | minmin

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    The import org.apache.axis2.rpc.client.RPCServiceClient cannot be resolved
    怎么解決?
    QQ 418329288
    2009-05-16 19:05 | bginner121

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    那個庫沒引用。你可以引用axis2中的所有的jar文件試試
    2009-05-16 19:31 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @銀河使者
    是的,我想知道具體要引用哪個包?
    2009-05-16 23:10 | bginner121

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @bginner121
    The import org.apache.axis2.rpc.client.RPCServiceClient cannot be resolved ,怎么解決?

    需要引用 axis2-adb-1.3.jar
    2009-05-16 23:15 | bginner121

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    如何解決?
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method setName(String) is undefined for the type SimpleServiceStub.GetGreeting

    at org.bgnnr.client.StubClient.main(StubClient.java:15)
    2009-05-17 00:57 | bginner121

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    你的程序有語法錯誤,你是手工編譯的嗎?還是用eclipse?
    2009-05-17 09:20 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    你好,我照您的例子做了,不知什么原因?
    <ns:getGreetingResponse xmlns:ns="http://ws.apache.org/axis2">
    <return>hello null</return>
    </ns:getGreetingResponse>
    總是空直。。。郁悶啊!
    2009-05-17 18:23 | java web

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    http://localhost:8080/axis2/services/SimpleService/getGreeting?param0=bill
    試試
    2009-05-17 19:55 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    非常謝謝
    2009-05-19 18:39 | java web

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    如何解決?
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method setName(String) is undefined for the type SimpleServiceStub.GetGreeting

    at org.bgnnr.client.StubClient.main(StubClient.java:15)
    2009-05-21 12:41 | beginner121

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    setName方法未定義錯誤。
    2009-05-21 13:15 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    太謝謝你了
    2009-08-13 15:17 | amado

    # 關于Faulty Services  回復  更多評論   

    您好,在按您的步驟進行操作之后,我發布的服務卻無法顯示,是Faulty Services。點擊之后提示說This Web axisService has deployment faults,錯誤為Error: java.lang.UnsupportedClassVersionError: Bad version number in . 請問您該怎么解決? 謝謝
    2009-08-14 19:59 | 亦澤

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    樓上你的問題解決了嗎,我遇到了同樣的問題
    2009-08-18 18:30 | tingyun

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    這個問題是jdk的版本不對,你們的機器上是否安裝了不同版本的jdk,需要使用同一個版本的jdk編譯程序才可以。
    2009-08-19 10:42 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    教程很不錯,講解很詳細
    2009-08-25 10:44 | 大鵬

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    問個很菜的問題.wsdl文件是怎么生成的???這里面沒有介紹.生成的stub文件夾應該放在那個文件夾下面.項目中的SRC下???
    2009-09-08 21:32 | 小菜

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    wsdl文件是通過訪問url自動生成的。stub文件夾里的類放哪都行,只是普通的java類,不過別忘了改package
    2009-09-08 21:48 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    可以放在eclipse中的src目錄下就可以
    2009-09-08 21:48 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    想問下,我的POJO編譯后的文件,放POJO目錄下,怎么AXIS2沒發現該服務的?我的也是AXIS2 1.4.1
    2009-09-13 09:20 | jackyrong

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    為什么我使用POJO發布一個不帶包名的類,但是AXIS2報錯:
    Error: org.apache.axis2.deployment.DeploymentException: Invalid service. META-INF directory not found. at org.apache.axis2.deployment.repository.util.ArchiveReader.processWSDLs(ArchiveReader.java:297) at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:67) at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:597) at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144) at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:330) at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:227) at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:324) at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:64) at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:71) at org.apache.axis2.deployment.scheduler.Scheduler$SchedulerTimerTask.run(Scheduler.java:83) at java.util.TimerThread.mainLoop(Unknown Source) at java.util.TimerThread.run(Unknown Source) Caused by: org.apache.axis2.deployment.DeploymentException: Invalid service. META-INF directory not found. at org.apache.axis2.deployment.repository.util.ArchiveReader.processWSDLs(ArchiveReader.java:285) ... 12 more
    2009-10-07 16:58 | smaxpp

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    沒有META-INF目錄,把pojo放哪個目錄里了?
    2009-10-07 18:09 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    放在C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services\pojo
    下了
    2009-10-07 20:20 | smaxpp

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    %AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub
    這句話執行不了.報window 找不到%java_home%\bin

    2009-10-19 16:17 | 天空在線

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @smaxpp
    發布簡單POJO目錄寫錯了吧,應該是在C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF下面新建一個pojo目錄,然后在將你要發布的pojo類文件放到里面。如果你要發布到services目錄下面,應該是發布哪種達成aar包形式的Web Service。
    2009-10-31 17:38 | Mr.Blue

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @天空在線
    提示找不到%JAVA_HOME%\bin\java.exe這個的話你可以看看wsdl2java這個批處理的源碼,里面對報各種錯誤都有比較詳細的說明,你可以參照著一個個去解決各種異常。
    2009-10-31 17:44 | Mr.Blue

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    您好,請問我按照您的方法將一個POJO發布成WebService,卻出現了下面的錯誤,請問這是為什么?
    This Web axisService has deployment faults
    Error: java.lang.NoClassDefFoundError: SimpleService (wrong name: po/SimpleService) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.codehaus.jam.internal.reflect.ReflectClassBuilder.build(ReflectClassBuilder.java:69) at org.codehaus.jam.provider.CompositeJamClassBuilder.build(CompositeJamClassBuilder.java:51) at org.codehaus.jam.internal.JamClassLoaderImpl.loadClass(JamClassLoaderImpl.java:128) at org.codehaus.jam.JamClassIterator.nextClass(JamClassIterator.java:68) at org.codehaus.jam.JamClassIterator.next(JamClassIterator.java:88) at org.apache.axis2.deployment.POJODeployer.deploy(POJODeployer.java:95) at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:597) at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144) at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:330) at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:227) at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:324) at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:64) at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:71) at org.apache.axis2.deployment.scheduler.Scheduler$SchedulerTimerTask.run(Scheduler.java:83) at java.util.TimerThread.mainLoop(Unknown Source) at java.util.TimerThread.run(Unknown Source)
    2009-11-07 04:57 | 學習者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    SimpleService 沒找到
    2009-11-07 10:15 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    非常感謝!!
    2009-11-09 23:56 | 學習者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    非常感謝??!
    2009-11-19 10:34 | homezly

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    我也出現 類This Web axisService has deployment faults
    Error: java.lang.NoClassDefFoundError: SimpleService (wrong name: pojo/SimpleService) at

    的錯誤,可我明明按要求放的,怎么就找不到呢
    用的JDK1.4.2 tomcat4 axis2 1.4.1


    出現以下
    Available services
    Version
    Service EPR : http://localhost:8080/axis2/services/Version

    Service Description : Version
    Service Status : Active
    Available Operations
    getVersion

    --------------------------------------------------------------------------------

    Faulty Services
    E:\jakarta-tomcat-4.1.31\webapps\axis2\WEB-INF\pojo\sayHello.class

    2009-11-22 23:01 | 學習者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @學習者
    出現找不到pojo/SimpleService的錯誤,很明顯是你發布的pojo\sayHello.class服務名字與你想訪問的名字不一致所致,可以修改E:\jakarta-tomcat-4.1.31\webapps\axis2\WEB-INF\pojo\SimpleService.class , 試試看
    2009-12-12 11:37 | Mr.Blue

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    樓主太牛了,謝謝啦
    2009-12-29 00:41 | 樓主太牛了

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    我一直沒弄明白,如果服務器端的方法需要一個復雜類型作為參數,比如UserTO,但是客戶端沒有這個類型,那么怎么傳遞這個參數呢?請用java解答一下,不甚感激。
    2010-01-21 21:31 | 老章

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    樓主,首先謝謝你的這篇文章
    然后請教你一個問題:
    我要是想給一個方法傳兩個參數,那如何定義
    Object[] object = new Object[]{???};
    謝謝
    2010-03-25 14:21 | Lin

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    出現Faulty Services,什么原因呢?
    2010-04-02 08:21 | 小白

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @小白
    把調用代碼貼出來看看??赡苁侵傅膗rl不對
    2010-04-02 09:13 | 銀河使者

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    為什么我把SimpleService放入POJO目錄下找不到該服務?
    2010-04-12 11:38 | greedy

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    @ajax
    看wsdl文件,輸入參數是args0而不是你想要的name,所以得不到你想要的參數
    2010-05-15 20:13 | 楓葉

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @楓葉
    我這兒也是setName()問題,改成setArgs0()就好了。
    2010-06-13 10:50 | Lu Wenhe

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    真的挺不錯的,我喜歡哈佛的校訓
    2010-08-19 17:47 |

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    太棒的教程了
    2010-08-30 11:55 | admin

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    您好,請問web service是如何生成wsdl文件的呢?
    2010-09-14 11:45 | liyaling

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    訪問URL:http://localhost:8080/axis2/services/SimpleService?wsdl
    后臺報了這個錯:[INFO] org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0xc8 (at char #1088, byte #-1)
    是編碼格式不對,請問這個怎么解決呢?
    2010-09-14 15:56 | liyaling

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @liyaling
    已經知道了
    2010-09-16 11:45 | liyaling

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    This Web axisService has deployment faults
    Error: java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$100(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.codehaus.jam.internal.reflect.ReflectClassBuilder.build(ReflectClassBuilder.java:69) at org.codehaus.jam.provider.CompositeJamClassBuilder.build(CompositeJamClassBuilder.java:51) at org.codehaus.jam.internal.JamClassLoaderImpl.loadClass(JamClassLoaderImpl.java:128) at org.codehaus.jam.JamClassIterator.nextClass(JamClassIterator.java:68) at org.codehaus.jam.JamClassIterator.next(JamClassIterator.java:88) at org.apache.axis2.deployment.POJODeployer.deploy(POJODeployer.java:95) at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:597) at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144) at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:330) at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:227) at org.apache.axis2.deployment.DeploymentEngine.loadServices(DeploymentEngine.java:131) at org.apache.axis2.deployment.WarBasedAxisConfigurator.loadServices(WarBasedAxisConfigurator.java:284) at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:82) at org.apache.axis2.transport.http.AxisServlet.initConfigContext(AxisServlet.java:516) at org.apache.axis2.transport.http.AxisServlet.init(AxisServlet.java:436) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) at org.apache.catalina.core.StandardService.start(StandardService.java:519) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

    2011-01-10 14:15 | xiao

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    你好,拜讀了,感謝你的文章
    有一個問題:
    我在服務端寫的方法返回類型是List或Map,然后自動生成stub類,用stub類調用那個方法的時候為什么會出錯呢
    Exception in thread "main" org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unsupported type null anyType
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
    at com.ws.agan.service.ComplexServiceStub.fromOM(ComplexServiceStub.java:7119)
    at com.ws.agan.service.ComplexServiceStub.getUser4Map(ComplexServiceStub.java:507)
    at com.ws.agan.client.ComplexServiceClient.main(ComplexServiceClient.java:49)
    Caused by: java.lang.Exception: org.apache.axis2.databinding.ADBException: Unsupported type null anyType
    at com.ws.agan.service.ComplexServiceStub$Map$Factory.parse(ComplexServiceStub.java:3615)
    at com.ws.agan.service.ComplexServiceStub$GetUser4MapResponse$Factory.parse(ComplexServiceStub.java:1972)
    at com.ws.agan.service.ComplexServiceStub.fromOM(ComplexServiceStub.java:7085)
    ... 2 more
    Caused by: org.apache.axis2.databinding.ADBException: Unsupported type null anyType
    at com.ws.agan.service.ComplexServiceStub$ExtensionMapper.getTypeObject(ComplexServiceStub.java:3149)
    at com.ws.agan.service.ComplexServiceStub$Map$Factory.parse(ComplexServiceStub.java:3564)
    ... 4 more

    其他返回簡單數據類型的方法都沒有問題,這是怎么回事呢博主?謝謝
    2011-05-27 14:53 | 阿甘

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    你好,可以將這個的視頻發給我嗎? 謝謝!
    2011-10-28 09:36 | superwingkoo

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    文中談到的搭建axis2 server& client 很好。指出一個bug:
    System.out.println(stub.getPrice().get_return()); ==>
    SimpleServiceStub.GetPrice gp = new SimpleServiceStub.GetPrice();
    System.out.println(stub.getPrice(gp).get_return());
    使用wsdl2java 生成的client 代碼,getPrice() 方法也是需要輸入參數的:
    public client.SimpleServiceStub.GetPriceResponse getPrice(

    client.SimpleServiceStub.GetPrice getPrice)
    # 未完待續!一個問題請教


    2011-12-16 16:53 | 賈曉磊

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    按照教程上的描述, 在Java 中不論是自己寫client 還是使用wsdl2java 自動生成clien可以比較自如地調用;
    由于業務需求,我自己搭建了一個python webservice. 在python中,server端和client 端可以正常調用,我用python client 調用java server, 剛開始有字符集的問題,后來調試之后也成功了?,F在的問題是使用axis2 client 不能成功訪問python server;
    1: 按照文中提到的手寫client 的方法,自己寫了一個client,返回結果一直為空,axis2 client 的請求到不了 python server, 收到的結果為null。
    2: 我用wsdl2java 根據python發布的wsdl 自動生成一個client 代碼,嚴格按照參數進行調用,還是出問題
    Exception in thread "main" org.apache.axis2.AxisFault: javax.xml.stream.XMLStreamException: element text content may not contain START_ELEMENT
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
    at client.SMSService2Stub.fromOM(SMSService2Stub.java:1598)
    at client.SMSService2Stub.getPrice(SMSService2Stub.java:177)
    at client.SMSService2Stub_Client.main(SMSService2Stub_Client.java:16)
    Caused by: java.lang.Exception: javax.xml.stream.XMLStreamException: element text content may not contain START_ELEMENT
    at client.SMSService2Stub$Returns$Factory.parse(SMSService2Stub.java:1153)
    at client.SMSService2Stub.fromOM(SMSService2Stub.java:1592)
    ... 2 more
    Caused by: javax.xml.stream.XMLStreamException: element text content may not contain START_ELEMENT
    at org.apache.axiom.om.impl.SwitchingWrapper.getElementText(SwitchingWrapper.java:981)
    at javax.xml.stream.util.StreamReaderDelegate.getElementText(StreamReaderDelegate.java:72)
    at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getElementText(XMLStreamReaderWrapper.java:100)
    at org.apache.axiom.util.stax.debug.XMLStreamReaderValidator.getElementText(XMLStreamReaderValidator.java:76)
    at client.SMSService2Stub$Returns$Factory.parse(SMSService2Stub.java:1124)
    ... 3 more

    # 我跟了一下源碼,還是搞不定。 博主有email嗎?可以詳細請教
    #qq: 281304051
    #gmail: jiaxiaolei19871112@gmail.com

    2011-12-16 17:27 | 賈曉磊

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    eclipse_jee版可以可視化的完成webservice發布以及stub的操作
    2012-02-21 21:55 | 游客

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    怎么不提供用axis請求.net 寫的webservice啊
    2012-03-27 14:09 | mars

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    我采用了axis2 1.6,1.5,1.4寫第一個簡單webservice 帶參數的方法,給它傳值去獲取不到。類是直接ctrl+c的
    訪問地址:http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill
    得到的結果是:
    <ns:getGreetingResponse xmlns:ns="http://ws.apache.org/axis2">
    <return>你好 null</return>
    </ns:getGreetingResponse>

    請問這是什么原因,怎樣解決????
    qq:1004143305

    謝謝,比較急
    2012-08-26 11:17 | kunsy

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    @kunsy
    看了wsdl文件,里面的屬性名是param0,傳的是name所以根本獲取不到

    誰有axis2 的環境配置,要求把axis的所以的jar配置進環境變量里。
    比如,我一個類,引用了axis jar里的某個類,我想通過cmd直接編譯。
    可是我怎么配置,都顯示類找不到。求幫助,謝了
    我就想通過cmd直接編譯,希望能給出具體的相關配置
    2012-08-26 12:57 | kunsy

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    怎么返回json數據啊、
    2012-10-11 16:23 | 憤怒的小鳥

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    學習了,感謝樓主分享,再接再厲期待更多佳作
    2012-10-15 17:34 | vvin

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    樓主 您好 我按照您的指導寫代碼 結果發現wdsl文件總是會出現兩個wsdl:binding 這是為什么呢?
    - <wsdl:binding name="SimpleServerSoap11Binding" type="ns:SimpleServerPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    - <wsdl:operation name="getPrice">
    <soap:operation soapAction="urn:getPrice" style="document" />
    - <wsdl:input>
    <soap:body use="literal" />
    </wsdl:input>
    - <wsdl:output>
    <soap:body use="literal" />
    </wsdl:output>
    </wsdl:operation>
    - <wsdl:operation name="getGreeting">
    <soap:operation soapAction="urn:getGreeting" style="document" />
    - <wsdl:input>
    <soap:body use="literal" />
    </wsdl:input>
    - <wsdl:output>
    <soap:body use="literal" />
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    - <wsdl:binding name="SimpleServerSoap12Binding" type="ns:SimpleServerPortType">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    - <wsdl:operation name="getPrice">
    <soap12:operation soapAction="urn:getPrice" style="document" />
    - <wsdl:input>
    <soap12:body use="literal" />
    </wsdl:input>
    - <wsdl:output>
    <soap12:body use="literal" />
    </wsdl:output>
    </wsdl:operation>
    - <wsdl:operation name="getGreeting">
    <soap12:operation soapAction="urn:getGreeting" style="document" />
    - <wsdl:input>
    <soap12:body use="literal" />
    </wsdl:input>
    - <wsdl:output>
    <soap12:body use="literal" />
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    - <wsdl:binding name="SimpleServerHttpBinding" type="ns:SimpleServerPortType">
    <http:binding verb="POST" />
    - <wsdl:operation name="getPrice">
    <http:operation location="SimpleServer/getPrice" />
    - <wsdl:input>
    <mime:content type="text/xml" part="getPrice" />
    </wsdl:input>
    - <wsdl:output>
    <mime:content type="text/xml" part="getPrice" />
    </wsdl:output>
    </wsdl:operation>
    - <wsdl:operation name="getGreeting">
    <http:operation location="SimpleServer/getGreeting" />
    - <wsdl:input>
    <mime:content type="text/xml" part="getGreeting" />
    </wsdl:input>
    - <wsdl:output>
    <mime:content type="text/xml" part="getGreeting" />
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    - <wsdl:service name="SimpleServer">
    - <wsdl:port name="SimpleServerHttpSoap11Endpoint" binding="ns:SimpleServerSoap11Binding">
    <soap:address location="http://localhost:8080/axis2/services/SimpleServer.SimpleServerHttpSoap11Endpoint/" />
    </wsdl:port>
    - <wsdl:port name="SimpleServerHttpSoap12Endpoint" binding="ns:SimpleServerSoap12Binding">
    <soap12:address location="http://localhost:8080/axis2/services/SimpleServer.SimpleServerHttpSoap12Endpoint/" />
    </wsdl:port>
    - <wsdl:port name="SimpleServerHttpEndpoint" binding="ns:SimpleServerHttpBinding">
    <http:address location="http://localhost:8080/axis2/services/SimpleServer.SimpleServerHttpEndpoint/" />
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>
    2012-11-05 15:16 | 云霄雨霽

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   


    您好,請問我生成SimpleServiceStub.class文件的時候報錯:如下??赡苁鞘裁磫栴}造成的。先謝謝您
    C:\Users\Tumi>%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/servic
    es/SimpleService?wsdl -p client -s -o stub
    'D:\Development' 不是內部或外部命令,也不是可運行的程序
    或批處理文件。
    2013-03-01 17:30 | focus

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService[未登錄]  回復  更多評論   

    哈哈,我也遇到這個問題!感謝你!@賈曉磊
    2014-07-16 11:41 | 123

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    我也是一樣,wsdl里面的參數是args0,http://localhost:8080/axis2/services/SimpleService/getGreeting?args0=bill但是輸出還是null

    <ns:getGreetingResponse xmlns:ns="http://ws.apache.org/axis2">
    <return>鎮ㄥソ null</return>
    </ns:getGreetingResponse>
    我用的是tomcat8.x,axis1.6x
    而且還有中文亂碼,好急??!希望樓主能解答啊
    2014-07-31 15:46 | tianqi

    # re: WebService大講堂之Axis2(1):用POJO實現0配置的WebService  回復  更多評論   

    在用命令行生成WebService,報了如下的錯誤,請大神解答一下啊


    C:\Users\ibm\Desktop\boss>%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:49401/OspWebService.asmx -p com.wenjun.webserivce -s -o stub
    Using AXIS2_HOME: C:\Develop\Tools\afterInstall\axis2-1.6.2
    Using JAVA_HOME: C:\Develop\Tools\Java\JDK1.6.0_14
    Retrieving document at 'http://localhost:49401/OspWebService.asmx'.
    [Fatal Error] OspWebService.asmx:108:17: The element type "p" must be terminated by the matching end-tag "</p>".
    log4j:WARN No appenders could be found for logger (org.apache.axis2.i18n.ProjectResourceBundle).
    log4j:WARN Please initialize the log4j system properly.
    Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:178)
    at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
    at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
    Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'http://localhost:49401/OspWebService.asmx'.: org.xml.sax.
    SAXParseException: The element type "p" must be terminated by the matching end-tag "</p>".
    at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.readInTheWSDLFile(CodeGenerationEngine.java:320)
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:133)
    ... 2 more
    Caused by: org.xml.sax.SAXParseException: The element type "p" must be terminated by the matching end-tag "</p>".
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
    ... 7 more
    C:\Users\ibm\Desktop\boss>



    2015-05-31 12:15 | suwenjun
    評論共2頁: 1 2 下一頁 
    主站蜘蛛池模板: 在线永久免费的视频草莓| **一级一级毛片免费观看| 日韩精品视频免费观看| 亚洲一久久久久久久久| 在线观看无码AV网站永久免费| 亚洲乱码卡三乱码新区| 青草草色A免费观看在线| 亚洲国产美女精品久久| 亚洲免费网站观看视频| 亚洲色大成网站WWW国产| 免费观看大片毛片| 美女黄频视频大全免费的| 全亚洲最新黄色特级网站 | 亚洲中文字幕精品久久| 久久综合AV免费观看| 亚洲人成网站在线播放2019| 成人免费看片又大又黄| 无码天堂va亚洲va在线va| 亚洲精品无码专区久久同性男| 久久久久免费视频| 久久精品国产亚洲AV无码麻豆 | www.亚洲色图| a级毛片视频免费观看| 久久久亚洲欧洲日产国码aⅴ | 特级av毛片免费观看| 亚洲中文字幕无码久久综合网| 日本免费久久久久久久网站| 亚洲午夜电影在线观看| 日韩中文字幕免费| 中文在线日本免费永久18近| 亚洲视频一区网站| 日韩免费无砖专区2020狼| 中文日本免费高清| 67194在线午夜亚洲| 亚洲第一区在线观看| 日韩精品久久久久久免费| 亚洲人xxx日本人18| 亚洲人成网站色在线入口| 久久伊人免费视频| 亚洲AV无码一区二区三区性色 | 亚洲精品国产情侣av在线|