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

          導航

          <2009年9月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

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

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1974575
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          WebService大講堂之Axis2(3):使用services.xml文件發布WebService

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

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

              用Axis2實現Web Service,雖然可以將POJO類放在axis2\WEB-INF\pojo目錄中直接發布成Web Service,這樣做不需要進行任何配置,但這些POJO類不能在任何包中。這似乎有些不方便,為此,Axis2也允許將帶包的POJO類發布成Web Service。
              先實現一個
          POJO類,代碼如下:

          package service;

          public class MyService
          {
              
          public String getGreeting(String name)
              {
                  
          return "您好 " + name;
              }
              
          public void update(String data)
              {
                  System.out.println(
          "<" + data + ">已經更新");
              }
          }

          這個類有兩個方法,這兩個方法都需要發布成Web Service方法。這種方式和直接放在pojo目錄中的POJO類不同。要想將MyService類發布成Web Service,需要一個services.xml文件,這個文件需要放在META-INF目錄中,該文件的內容如下:

          <service name="myService">
              
          <description>
                  Web Service例子
              
          </description>
              
          <parameter name="ServiceClass">
                  service.MyService  
              
          </parameter>
              
          <messageReceivers>
                  
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                      class
          ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
                  
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                      class
          ="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
              
          </messageReceivers>
          </service>

          其中<service>元素用于發布Web Service,一個<service>元素只能發布一個WebService類,name屬性表示WebService名,如下面的URL可以獲得這個WebServiceWSDL內容:

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

          其中name屬性名就是上面URL"?""/"之間的部分。

          <description>元素表示當前Web Service的描述,<parameter>元素用于設置WebService的參數,在這里用于設置WebService對應的類名。在這里最值得注意的是<messageReceivers>元素,該元素用于設置處理WebService方法的處理器。例如,getGreeting方法有一個返回值,因此,需要使用可處理輸入輸出的RPCMessageReceiver類,而update方法沒有返回值,因此,需要使用只能處理輸入的RPCInOnlyMessageReceiver類。

          使用這種方式發布WebService,必須打包成.aar文件,..aar文件實際上就是改變了擴展名的.jar文件。在現在建立了兩個文件:MyService.javaservices.xml。將MyService.java編譯,生成MyService.classservices.xmlMyService.class文件的位置如下:

          D:\ws\service\MyService.class

          D:\ws\META-INF\services.xml

             
          windows控制臺中進入ws目錄,并輸入如下的命令生成.aar文件(實際上,.jar文件也可以發布webservice,但axis2官方文檔中建議使用.aar文件發布webservice):

          jar cvf ws.aar .

             
          最后將ws.aar文件復制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中,啟動Tomcat后,就可以調用這個WebService了。調用的方法和《WebService大講堂之Axis2(1):用POJO實現0配置的WebService》所講的方法類似。

          另外services.xml文件中也可以直接指定WebService類的方法,如可以用下面的配置代碼來發布WebService


          <service name="myService">
              
          <description>
                  Web Service例子
              
          </description>
              
          <parameter name="ServiceClass">
                  service.MyService  
              
          </parameter>
              
          <operation name="getGreeting">
                  
          <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
              
          </operation>
              
          <operation name="update">
                  
          <messageReceiver
                      
          class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
              
          </operation>
          </service>

          上面的配置代碼前面的部分和以前的services.xml文件的內容相同,但后面使用了<operation>元素來指定每一個WebService方法,并單獨指定了處理每一個方法的處理器。對于客戶端來說,調用使用這兩個services.xml文件發布的WebService并沒有太大我區別,只是使用第二個services.xml文件發布WebServices后,在使用wsdl2java命令或使用C#、delphi等生成客戶端的stub時,update方法的String類型被封裝在了update類中,在傳遞update方法的參數時需要建立update類的對象實例。而使用第一個services.xml文件發布的WebService在生成stub時直接可以為update方法傳遞String類型的參數。從這一點可以看出,這兩種方法生成的WSDL有一定的區別。但實際上,如果客戶端程序使用第一個services.xml文件發布的WebService生成stub類時(這時update方法的參數是String),在服務端又改為第二個services.xml文件來發布WebService,這時客戶端并不需要再重新生成stub類,而可以直接調用update方法。也就是說,服務端使用什么樣的方式發布WebService,對客戶端并沒有影響。

          如果想發布多個WebService,可以使用<serviceGroup>元素,如再建立一個MyService1類,代碼如下:

          package service
          public class MyService1
          {
              
          public String getName()  
              { 
                  
          return "bill";
              }
          }

          services.xml文件中可以使用如下的配置代碼來配置MyServiceMyService1類:


          <serviceGroup>
              <service name="myService">
                 
          <description>
                      Web Service例子
                 
          </description>
                 
          <parameter name="ServiceClass">
                      service.MyService  
                 
          </parameter>
                 
          <messageReceivers>
                     
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                          class
          ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
                     
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                          class
          ="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
                 
          </messageReceivers>
              </service>
              <service name="myService1">
                 
          <description>
                      Web Service例子
                
          </description>
                 
          <parameter name="ServiceClass">
                      service.MyService1  
                 
          </parameter>
                  
          <messageReceivers>
                    
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                          class
          ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
                    
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                          class
          ="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
                 
          </messageReceivers>
              </service>
          </serviceGroup>

          下一篇:WebService大講堂之Axis2(4):二進制文件傳輸




          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-21 18:08 銀河使者 閱讀(56772) 評論(59)  編輯  收藏 所屬分類: java 、 原創 、webservice

          評論

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          如果service有個有返回值但不需要傳入參數的方法,<messageReceivers>應該怎樣配置?使用RPCMessageReceiver的話,在c#客戶端中生成的方法無法返回正確的返回值。
          例如:
          service方法:PeopleInfo getPeopleInfo (){.....}
          c#客戶端生成方法的返回值是 getPeopleInfoReponse
          2009-02-13 17:20 | yapituy

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          不需要參數就是參數為0,用

              <operation name="getPeopleInfo " mep="http://www.w3.org/2006/01/wsdl/in-out">
                  <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
              </operation>
          2009-02-13 17:50 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          試了,不行的。在對象瀏覽器中查看生成的對應方法是這樣的
          public WindowsFormsApplication1.PeopleManage.getPeopleInfoReponse getPeopleInfo()

          RPCInOnlyMessageReceiver應該是方法沒有返回值的情況下使用吧。而這個方法是有返回值的
          2009-02-15 22:35 | yapituy

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          問一下,怎么才能生成service.xml文件呢,不會全手寫吧
          2009-02-23 17:15 | zuzong

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我一般是手寫的,MyEclipse或jbuilder也許能自動生成services.xml,但我沒用過。
          2009-02-23 19:06 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          將ws.aar文件復制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中,啟動Tomcat后Tomcat報錯 請指教
          2009-03-26 17:55 | sekirai

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @sekirai
          報什么錯,把錯誤信息貼出來。
          2009-03-26 19:46 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我寫了個測試程序,在IE中輸入
          http://192.168.0.171:8083/ppts/services/MyService?wsdl
          能看到xml文件,內容也都正確,但是輸入http://192.168.0.171:8083/ppts/services/MyService就出錯
          org.apache.axis2.AxisFault: The endpoint reference (EPR) for the Operation not found is /ppts/services/MyService and the WSA Action = null。不知可否指點下
          2009-04-22 11:48 | liufeng

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          輸入http://192.168.0.171:8083/ppts/services/MyService?wsdl是為了生成wsdl文檔 。而輸入http://192.168.0.171:8083/ppts/services/MyService,后面必須要加調用的方法才可以,如你的webservice里有一個方法叫getName,沒有參數,則可以調用http://192.168.0.171:8083/ppts/services/MyService/getName,則會調用getName方法。在axis2生成的客戶端stub類中只寫了http://192.168.0.171:8083/ppts/services/MyService,是因為在后面的語句中處理了,使用了SOAP消息提交的getName請求。
          2009-04-22 12:14 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @銀河使者
          哦,謝謝
          2009-04-22 12:26 | liufeng

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          將ws.aar文件復制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中,啟動Tomcat后Tomcat報錯
          Error: org.apache.axis2.deployment.DeploymentException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0xfd (at char #66, byte #-1) at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:151) at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:81) 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.axiom.om.OMException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0xfd (at char #66, byte #-1) at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249) at org.apache.axiom.om.impl.llom.OMDocumentImpl.getOMDocumentElement(OMDocumentImpl.java:132) at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:411) at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:602) at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:581) at org.apache.axis2.deployment.DescriptionBuilder.buildOM(DescriptionBuilder.java:97) at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:77) at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:144) ... 12 more Caused by: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0xfd (at char #66, byte #-1) at com.ctc.wstx.sr.StreamScanner.throwFromIOE(StreamScanner.java:683) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1086) at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:506) at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161) ... 19 more Caused by: java.io.CharConversionException: Invalid UTF-8 middle byte 0xfd (at char #66, byte #-1) at com.ctc.wstx.io.UTF8Reader.reportInvalidOther(UTF8Reader.java:313) at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:204) at com.ctc.wstx.io.ReaderSource.readInto(ReaderSource.java:84) at com.ctc.wstx.io.BranchingReaderSource.readInto(BranchingReaderSource.java:57) at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:967) at com.ctc.wstx.sr.StreamScanner.getNext(StreamScanner.java:738) at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1995) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069) ... 21 more
          2009-05-09 10:25 | 亦凡

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          請問這個是為啥呢?
          2009-05-09 10:25 | 亦凡

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @亦凡
          你用的是jdk的哪個版本,tomcat和開發webservice是用的同一個jdk版本嗎?
          2009-05-10 08:43 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          錯誤已經找到了,是services.xml中的中文,我去掉中文就可以了,但是在servicelist列表中只能看到axis2自帶的vertion服務,不能看到Myservice,這是為啥呢?但是Myservice可以正常使用
          2009-05-11 14:26 | 亦凡

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          要想在services.xml中加中文,需要將編碼設為UTF-8或GBK。你怎么部署的?再刷新一下,或重啟tomcat,將tomcat的work目錄清空看看
          2009-05-11 15:12 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          能告訴我一下,在linux下怎么配置嗎? 我在linux下配置了一天也沒配置出來,在win下挺好用的.
          2009-05-15 17:32 | 曼聯

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          您好,不知道我是不是理解錯了,下面這段
          “使用這種方式發布WebService,必須打包成.aar文件,..aar文件實際上就是改變了擴展名的.jar文件。在現在建立了兩個文件:MyService.java和services.xml。將MyService.java編譯,生成MyService.class。services.xml和MyService.class文件的位置如下:

          D:\ws\service\MyService.class

          D:\ws\META-INF\services.xml


          我的做法是在D盤下建立WS目錄,然后在WS中分別創建service和META-INF目錄,并將相應的文件放到里面,然后在windows控制臺中進入WS目錄,輸入
          jar cvf ws.aar,結果抱錯“'c' 標志需要指定輸入文件名!”這是怎么回事?謝謝
          2009-05-20 15:56 | 菜鳥

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @菜鳥
          你看一看jar命令應該如何用
          2009-05-20 16:32 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          輸入jar -help,看看幫助
          我后面還一個“.”呢,你沒輸入
          2009-05-20 16:33 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          謝謝您的幫助,后面的我還沒看,前三章,我覺得寫的非常清楚,十分感謝!
          2009-05-21 10:24 | 菜鳥

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          這個對應的客戶端怎么寫???我是小菜,什么時候用axiom這個模塊?用這個模塊的話 是不是方法的形參和返回參數都是OMElement類型的?
          2009-06-09 19:38 | 我好菜

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          博主的文章太棒了~
          WebService中多個方法是需要,可能有輸入參數,可能有輸出參數,可能有返回值,也可能沒有返回值,那么messageReceiver應該怎么配置?需要配置多種嗎?還是要為每個方法都配置一個messageReceiver?文章中的事例:
          <service name="myService">
          <description>
          Web Service例子
          </description>
          <parameter name="ServiceClass">
          service.MyService
          </parameter>
          <messageReceivers>
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
          class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
          class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
          </messageReceivers>
          </service>
          這種配置什么情況會用到嗎?
          2009-06-20 12:03 | 入門菜

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @菜鳥
          你試試這個
          E:\ws>"C:\Program Files\Java\jdk1.6.0_12\bin\jar.exe" cvf ws.aar *.*
          2009-06-25 15:24 | 分享愛的空間

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          博主您好!請教一個問題,我修改了wsdl中的命名空間后,調用服務時服務端接收到的參數都為null,這是什么原因導致的?
          service.xml如下:
          <service name="Hello" >
          <description>test</description>
          <messageReceivers>
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
          </messageReceivers>
          <parameter name="ServiceClass">com.test.Hello</parameter>
          <parameter name="useOriginalwsdl">true</parameter>
          <parameter name="modifyUserWSDLPortAddress">true</parameter>
          </service>

          wsdl中的命名空間為:
          targetNamespace="http://com.test.hello"
          修改為:
          targetNamespace="http://hello/test/com"

          修改后服務端無法接收到客戶端傳遞的參數。
          2009-07-08 00:11 | weoln

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          修改命名空間后,客戶端的調用代碼需要重新生成stub。
          2009-07-08 08:04 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          客戶端我使用的是RPC或者AXIOM的方式調用,沒有生成stub。因為項目中有大量的服務調用,如果有stub的方式生成大量的代碼比較難維護。不知道修改命名空間后,采用RPC或者AXIOM的方式能否正常調用服務?

          RPC調用代碼如下:

          RPCServiceClient serviceClient = new RPCServiceClient();
          Options options = serviceClient.getOptions();
          EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/Hello");

          options.setTo(targetEPR);
          QName op = new QName("http://hello/test/com" , "hello");
          Object[] Args = new Object[] { "zhangsan" };
          Class[] returnTypes = new Class[] { String.class };
          System.out.println("ss");
          Object[] response = serviceClient.invokeBlocking(op, Args, returnTypes);

          System.out.println("re:"+response[0]);

          AXION方式如下:
          EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/Hello");

          Options options = new Options();
          options.setTo(targetEPR);
          options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

          ServiceClient serviceClient = new ServiceClient();
          serviceClient.setOptions(options);

          OMFactory fac = OMAbstractFactory.getOMFactory();
          OMNamespace omNs = fac.createOMNamespace("http://hello/test/com", "ns");
          OMElement method = fac.createOMElement("hello", omNs);//方法名
          OMElement value = fac.createOMElement("name", omNs);//參數名
          value.addChild(fac.createOMText(value, "zhangsan"));
          method.addChild(value);

          OMElement result = serviceClient.sendReceive(method);
          String response = result.getFirstElement().getText();
          System.out.println(response);

          期待回復,非常感謝!
          2009-07-12 10:04 | weoln

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @銀河使者
          你好,我使用adb方式重新生成了客戶端的調用代碼,但是服務端還是不能接收到參數。
          2009-07-12 10:21 | weoln

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          你好,我照著你說的做法已經可以部署上去,進入控制太可以看到這個service的兩個方法,但是當我在流瀏覽器里請求一個方法的時候報錯:
          [ERROR] The ServiceClass object does not implement the required method in the following form: OMElement getGreeting(OMElement e)
          org.apache.axis2.AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement getGreeting(OMElement e)
          at org.apache.axis2.receivers.RawXMLINOutMessageReceiver.invokeBusinessLogic(RawXMLINOutMessageReceiver.java:93)
          at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:42)
          at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
          at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
          at org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:135)
          at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:130)
          at org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:838)
          at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:262)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
          at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
          at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
          at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
          at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
          at java.lang.Thread.run(Thread.java:619)

          這是為什么???謝謝了!等待中.....
          2009-08-09 19:01 | Denys

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @銀河使者
          你好,我按照你的步驟做了一下實驗,用的是jdk1.6、Tomcat6.0和Axis2 1.5,結果報錯了,內容如下:
          Error: org.apache.axis2.deployment.DeploymentException:
          The services.xml file cannot be found for the service: D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services\MyService.aar
          at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:151)
          at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:81)
          at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
          at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:663)
          at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
          at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:338)
          at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:241)
          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:95)
          at org.apache.axis2.transport.http.AxisServlet.initConfigContext(AxisServlet.java:525)
          at org.apache.axis2.transport.http.AxisServlet.init(AxisServlet.java:443)
          at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
          at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
          at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4044)
          at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
          at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
          at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
          at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
          at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
          at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
          at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
          at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
          at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
          at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
          at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)
          at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
          at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
          at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
          at org.apache.catalina.core.StandardService.start(StandardService.java:448)
          at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
          at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
          at java.lang.reflect.Method.invoke(Unknown Source)
          at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: org.apache.axis2.deployment.
          DeploymentException: The services.xml file cannot be found for the service: D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services\MyService.aar
          at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:148) ... 37 more

          是什么原因啊?期待回復中,謝謝!
          2009-08-26 13:31 | @fqx666

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          你的services.xml 文件里有中文注釋吧!是編碼不對,將其保存成utf-8或GB2312,注意xml文件頭要與保存的編碼格式一致。
          2009-08-26 19:09 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @銀河使者
          你好,我查看了一下,Services.xml里面沒有中文注釋,保存格式已經是utf8了,但還是報上面的錯。
          我的Services.xml內容如下:
          <service name="MyService" scope="application">
          <Description>
          Web Service
          </Description>
          <parameter name="ServiceClass" locked="false">
          Server.MyService
          </parameter>

          <operation name="getGreeting">
          <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
          </operation>
          <operation name="update">
          <messageReceiver
          class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
          </operation>

          </service>

          服務器端代碼如下:
          package Server;

          public class MyService {
          public String getGrString(String name)
          {
          return "您好,"+name;
          }

          public void update(String data)
          {
          System.out.println("<"+data+">已經更新!");
          }
          }


          MyService.aar內文件路徑如下:
          \MyService\META_INF\services.xml
          \MyService\Server\MyService.class

          麻煩您再幫我看看,是哪里的問題,謝謝了!
          2009-08-27 14:34 | fqx666

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          你的META-INF目錄中間用的是下劃線,還是減號,應該是減號。
          還有就是看看文件中是否有一些不可視的字符或全角字符,建議把文件的內容重新寫一遍,不要復制。
          2009-08-27 15:14 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          你好,我按照你說的步驟到把
          ws.aar復制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄下然后http://localhost:8080/axis2/services/listServices回車 頁面中出現 Faulty Services
          D:\install\Tomcat 5.5\webapps\axis2\WEB-INF\services\ws.aar
          點擊D:\install\Tomcat 5.5\webapps\axis2\WEB-INF\services\ws.aar
          出現:
          This Web axisService has deployment faults
          Error: org.apache.axis2.deployment.DeploymentException: The services.xml file cannot be found for the service: D:\install\Tomcat 5.5\webapps\axis2\WEB-INF\services\ws.aar at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:151) at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:81) at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:663) at (部分內容)
          為什么呢?
          2009-09-22 11:18 | lh

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          services.xml文件可能放的位置不對
          2009-09-22 11:39 | 銀河使者

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          太謝謝你了
          果然是這方面的原因
          services.xml我寫成了service.xml
          2009-09-22 15:01 | lh

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @fqx666
          你有可能是用winrar壓縮再改后綴名的吧,那樣不行。
          2009-09-29 11:46 | wangh

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @@fqx666
          你有可能是用winrar壓縮再改后綴名的吧,那樣不行。
          2009-09-29 11:47 | 移動工廠

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          SERVICE的CLASS文件和META-INF中的SERVICES.XML一定要打包嗎?
          我的項目要求動態的生成WEB SERVICE(比如傳入JAVA代碼然后編譯部署)
          這個生成WEB SERVICE的WEB SERVICE該怎么寫呢?
          2009-10-07 21:21 | smaxpp

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我調用MyService的update方法時出現這個錯誤:

          Exception in thread "main" org.apache.axis2.AxisFault: The input stream for an incoming message is null.
          at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
          at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
          at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
          at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
          at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
          at client.MyServiceStub.update(MyServiceStub.java:198)
          at client.MyServiceClient.main(MyServiceClient.java:14)

          但我看服務器端的響應是正取的,請問是什么引起這個錯誤呢?
          2009-10-11 10:56 | Russ

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          AXIS1中可以通過WSDD來取消部署的,AXIS2要怎么取消部署呢?
          還有AXIS2中還有沒有SERVER-CONFIG?
          2009-10-16 14:38 | SMAXPP

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          您好,為什么我照你的方式總是不成功,services.xml放到META-INF目錄中,我把Myservice類放到了tomcat6.0\webapps\axis2\WEB-INF\classes\service\Myservice.class,但總是顯示MyseRequested resource not found!
          2009-11-11 10:49 | summermore

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我的services.xml的內容是
          <service name="MyService">
          <description>
          Web Service
          </description>
          <parameter name="ServiceClass">
          service.MyService
          </parameter>
          <messageReceivers>
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
          class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
          class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
          </messageReceivers>
          </service>
          2009-11-11 10:52 | summermore

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          請問博主,
          發布后,測試服務時,報
          org.apache.axis2.AxisFault: Mapping qname not fond for the package: cn.com.webxml

          是什么原因?
          2009-11-17 14:20 | 大器未成

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我配置好以后 可以調用 但是方法的參數名自動變成arg0了 這個是因為什么阿
          <xs:element name="getGreeting">
          ?
          <xs:complexType>
          ?
          <xs:sequence>
          <xs:element minOccurs="0" name="args0" nillable="true" type="xs:string"/>
          </xs:sequence>
          </xs:complexType>

          2009-11-19 16:53 | skybusy2000

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          敬愛的博主:
          This Web axisService has deployment faults
          Error: org.apache.axis2.deployment.DeploymentException: The services.xml file cannot be found for the service: D:\Tomcat 6.0\webapps\axis2\WEB-INF\services\ws.aar
          請問是什么問題??謝謝
          services.xml
          <service name="myService">
          <description>
          Web Service
          </description>
          <parameter name="ServiceClass">
          service.MyService
          </parameter>
          <operation name="getGreeting">
          <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
          </operation>
          <operation name="update">
          <messageReceiver
          class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
          </operation>
          </service>
          2010-01-18 22:05 | jaff

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @jaff
          感謝博主,原來我自己xml文件沒有打包到aar文件里
          2010-01-18 22:19 | jaff

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          為什么我用這種方法發布時,參數的名字還是變了,兩個參數都變成args0
          - <xs:element name="update">
          - <xs:complexType>
          - <xs:sequence>
          <xs:element minOccurs="0" name="args0" nillable="true" type="xs:string" />
          </xs:sequence>
          </xs:complexType>
          </xs:element>
          - <xs:element name="getGreeting">
          - <xs:complexType>
          - <xs:sequence>
          <xs:element minOccurs="0" name="args0" nillable="true" type="xs:string" />
          </xs:sequence>
          </xs:complexType>
          </xs:element>
          2010-01-26 14:26 | Annie

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          @yapituy
          sadf
          2010-03-04 13:29 | dfsdf

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          樓主,你好。
          我想請問下,我用ComplexTypeService類中寫了一個方法來調用
          import ws.service.MyService;
          public class ComplexTypeService{
          public void goUpdate(String data) {
          MyService my = new MyService() ;
          my.update(data);
          }
          }
          我這樣部署到pojo中后,啟動tomcat顯示Faulty Services,我用RPC調用
          RPCServiceClient serviceClient = new RPCServiceClient();
          Options options = serviceClient.getOptions();
          EndpointReference targetEPR = new EndpointReference(
          "http://localhost:8082/axis2/services/ComplexTypeService");
          options.setTo(targetEPR);
          QName opAddEntry = new QName("http://ws.apache.org/axis2", "goUpdate");
          serviceClient.invokeBlocking(opAddEntry, new Object[]{"測試"});

          它給出一個錯誤:[ERROR] ws/service/MyService
          java.lang.NoClassDefFoundError: ws/service/MyService這個是為什么呢?
          2010-03-11 13:56 | 牛肉干

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          你好:我的.aar已部署成功。我寫了個rpc客戶端:

          EndpointReference targetEPR = new EndpointReference(
          "http://localhost:8080/axis2/services/tst/service/MyService");
          options.setTo(targetEPR);
          報錯:org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (EPR) 127.0.0.1/axis2/services/tst/service/MyService
          at rg.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:435)
          后來又改成:targetEPR = new EndpointReference(
          "http://localhost:8080/axis2/services/tst");
          還報錯:The service cannot be found for the endpoint reference (EPR) 127.0.0.1/axis2/services/tst
          我的.aar 名為tst.aar
          請高人指點,關注中......
          2010-04-11 00:49 | dog2walker

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我的環境:啟動的是bin/axis2server.bat
          tst.aar放在E:\axis2-1.5.1\repository\services下
          2010-04-11 01:02 | dog2walker

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          將相關類(找不到的那個類)放到axis2/WEB-INF/classes下
          2010-06-03 17:46 | johnny

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          請問 services.xml not found 的問題解決了嗎?
          2011-08-01 15:41 | frank

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          我也碰到過樓上services.xml not found的問題,其實大家的services.xml文件是建的對的,主要是jar目錄結構的問題,這在作者的文章里面也介紹過,各位可能用的都是Eclipse的except功能,這樣打出的包會有一層WebContent目錄在里面,請檢查各位的jar包結構,jar包:META-INF/services.xml
          2011-10-19 16:15 | zt

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我的.aar文件生成非常了,但在部署到Tomcat6.0中時報Error: org.apache.axis2.deployment.DeploymentException: bad parameter arguments. name cannot be null,請問是為什么?
          2012-01-09 17:12 | wangwenyu

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          為什么wsdl生成的getGreeting方法的參數是args0而不是name呢?怎么修改啊
          2012-04-12 13:02 | sh

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          我剛開始也有這個問題,后來發現是順序的問題,得把aar包放到services之后,這個webservice才能正常訪問的
          2012-09-07 16:36 | 冬天

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService[未登錄]  回復  更多評論   

          Caused by: org.apache.axis2.deployment.DeploymentException: The following error
          occurred during schema generation: service.MyService

          請問下,這個錯誤是怎么導致的?
          2013-11-06 16:40 | Alex

          # re: WebService大講堂之Axis2(3):使用services.xml文件發布WebService  回復  更多評論   

          親愛的樓主
          Exception in thread "main" org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
          at [row,col {unknown-source}]: [1,0]
          at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
          at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:123)
          at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67)
          at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354)
          at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
          at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
          at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
          at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:555)
          at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:531)
          at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102)
          at cn.edu.xidian.saas_customization_app.service.Test.main(Test.java:28)
          能解釋下這個錯誤不
          2015-05-25 22:36 | hekui1002
          主站蜘蛛池模板: 库伦旗| 寿阳县| 明溪县| 晋中市| 麻栗坡县| 绥阳县| 白山市| 崇阳县| 阜新| 眉山市| 吴江市| 普兰县| 新蔡县| 庄浪县| 沛县| 武川县| 开江县| 葵青区| 客服| 大庆市| 普兰店市| 无为县| 巴林左旗| 乌拉特前旗| 胶州市| 将乐县| 恭城| 安阳县| 嵊州市| 靖宇县| 那坡县| 阜南县| 赫章县| 阜城县| 米脂县| 额济纳旗| 莲花县| 沙洋县| 阜康市| 沈阳市| 南通市|