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

          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 銀河使者 閱讀(56708) 評論(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
          主站蜘蛛池模板: 呈贡县| 阿克苏市| 项城市| 平山县| 枝江市| 宁安市| 金川县| 馆陶县| 应城市| 海兴县| 临泉县| 桂平市| 舟曲县| 牙克石市| 兰考县| 靖远县| 抚顺县| 杭锦旗| 金溪县| 永和县| 扎赉特旗| 林甸县| 青龙| 昭苏县| 平昌县| 长宁区| 元谋县| 东台市| 中西区| 卢氏县| 涟水县| 广汉市| 乌拉特前旗| 长子县| 潮安县| 苗栗市| 丽水市| 灵山县| 贵州省| 香港 | 师宗县|