隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1974490
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

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

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

              Axis2是一套嶄新的WebService引擎,該版本是對Axis1.x重新設計的產物。Axis2不僅支持SOAP1.1SOAP1.2,還集成了非常流行的REST WebService,同時還支持SpringJSON等技術。這些都將在后面的系列教程中講解。在本文中主要介紹了如何使用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目錄,則建立該目錄)。現在我們已經成功將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 銀河使者 閱讀(72630) 評論(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://www.aygfsteel.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  回復  更多評論   

          @小白
          把調用代碼貼出來看看。可能是指的url不對
          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, 剛開始有字符集的問題,后來調試之后也成功了。現在的問題是使用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 下一頁 
          主站蜘蛛池模板: 潞城市| 屯门区| 西昌市| 兰考县| 永春县| 嵩明县| 策勒县| 吴江市| 寿光市| 塔河县| 盐城市| 西丰县| 四会市| 淄博市| 徐州市| 吐鲁番市| 肥城市| 兴化市| 宜君县| 义马市| 行唐县| 区。| 德清县| 娄烦县| 马尔康县| 女性| 山东省| 博乐市| 宁陵县| 乐至县| 手游| 姜堰市| 广丰县| 西昌市| 陇川县| 南陵县| 乌海市| 扬州市| 浑源县| 榆树市| 洛川县|