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

          導航

          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

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

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1974704
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService

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

          上一篇:WebService大講堂之Axis2(6):跨服務會話(Session)管理

             在現今的Web應用中經常使用Spring框架來裝載JavaBean。如果要想將某些在Spring中裝配的JavaBean發布成WebService,使用Axis2Spring感知功能是非常容易做到的。
              在本文的例子中,除了<Tomcat安裝目錄>\webapps\axis2目錄及該目錄中的相關庫外,還需要Spring框架中的spring.jar文件,將該文件復制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\lib目錄中。
              下面先建立一個JavaBean(該JavaBean最終要被發布成WebService),代碼如下:

          package service;
          import entity.Person;
          public class SpringService
          {
              
          private String name;
              
          private String job;
              
          public void setName(String name)
              {
                  
          this.name = name;
              }
              
          public void setJob(String job)
              {
                  
          this.job = job;
              }
              
          public Person getPerson()
              {
                  Person person 
          = new Person();
                  person.setName(name);
                  person.setJob(job);
                  
          return person;
              }
              
          public String getGreeting(String name)
              {
                  
          return "hello " + name;
              }
          }

              其中Person也是一個JavaBean,代碼如下:

          package entity;
          public class Person
          {
              
          private String name;
              
          private String job;
              
          public String getName()
              {
                  
          return name;
              }
              
          public void setName(String name)
              {
                  
          this.name = name;
              }
              
          public String getJob()
              {
                  
          return job;
              }
              
          public void setJob(String job)
              {
                  
          this.job = job;
              }
          }

              將上面兩個Java源文件編譯后,放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\classes目錄中。

              在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\web.xml文件中加入下面的內容:

          <listener>
                  
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
          <context-param>
                
          <param-name>contextConfigLocation</param-name>
                
          <param-value>/WEB-INF/applicationContext.xml</param-value>
          </context-param>

              <Tomcat安裝目錄>\webapps\axis2\WEB-INF目錄中建立一個applicationContext.xml文件,該文件是Spring框架用于裝配JavaBean的配置文件,內容如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
                  xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:aop
          ="http://www.springframework.org/schema/aop"
                  xmlns:tx
          ="http://www.springframework.org/schema/tx"
                  xsi:schemaLocation
          ="
                      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
          >
            
          <bean id="springService" class="service.SpringService">
               
          <property name="name" value="姚明" />
               
          <property name="job" value="職業男籃" /> 
            
          </bean>   
          </beans>

              applicationContext.xml文件中裝配了service.SpringService類,并被始化了namejob屬性。在配置完SpringService類后,就可以直接在程序中FileSystemXmlApplicationContext類或其他類似功能的類讀取applicationContext.xml文件中的內容,并獲得SpringService類的對象實例。但現在我們并不這樣做,而是將SpringService類發布成WebService

              <Tomcat安裝目錄>\webapps\axis2\WEB-INF\lib目錄中有一個axis2-spring-1.4.1.jar文件,該文件用于將被裝配JavaBean的發布成WebService。在D盤建立一個axi2-spring-ws目錄,并在該目錄中建立一個META-INF子目錄。在META-INF目錄中建立一個services.xml文件,內容如下:

          <service name="springService">
              
          <description>
                  Spring aware
              
          </description>
              
          <parameter name="ServiceObjectSupplier">
                  org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
              
          </parameter>
              
          <parameter name="SpringBeanName">
                  springService
              
          </parameter>
              
          <messageReceivers>
                  
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                      class
          ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
              
          </messageReceivers>
          </service>    

              Windows控制臺進入axi2-spring-ws目錄,并使用jar命令將axi2-spring-ws目錄中的內容打包成axi2-spring-ws.aar,然后將該文件復制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中,啟動Tomcat后,就可以訪問該WebService了,訪問方式與前面幾篇文章的訪問方式相同。獲得wsdl內容的URL如下:

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

              在將Spring中的裝配JavaBean發布成WebService需要注意以下幾點:

              1. JavaBean編譯生成的.class文件需要放在WEB-INF\classes目錄中,或打成.jar包后放在WEB-INF\lib目錄中,而WEB-INF\services目錄中的.aar包中不需要包含.class文件,而只需要包含一個META-INF目錄,并在該目錄中包含一個services.xml文件即可。

              2. services.xml的配置方法與前幾篇文章的配置方法類似,只是并不需要使用ServiceClass參數指定要發布成WebServiceJava類,而是要指定在applicationContext.xml文件中的裝配JavaBean的名稱(SpringBeanName參數)。

              3. services.xml文件中需要通過ServiceObjectSupplier參數指定SpringServletContextObjectSupplier類來獲得SpringApplicationContext對象。

          下一篇:
          WebService大講堂之Axis2(8):異步調用WebService





          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-02-13 09:14 銀河使者 閱讀(17237) 評論(15)  編輯  收藏 所屬分類: javaspring 原創webservice

          評論

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          我按照你在文中的說明一步步進行,可是最后啟動tomcat,最后發現沒有成功部署此webservice。也看見什么異常出來,這是什么原因呢?
          2009-04-29 14:22 | Sophie

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          需要在web.xmll文件中加入下面內容,加了吧?
          <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/applicationContext.xml</param-value>
          </context-param>
          2009-04-29 15:13 | 銀河使者

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          加了。我看tomcat的啟動日志,確實也成功讀取WEB-INF/applicationContext.xml這個文件了。
          2009-04-30 09:43 | Sophie

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService[未登錄]  回復  更多評論   

          我按照你上面的方法做,在ie里面能反問,沒有任何錯誤,但是新建一個客戶端(eclipse中自動生成的)調用這個webservice時,SpringServicePortType.java這個類里面的方法返回的參數類型是XXX.GetPersonResponse(期待類型應是java.lang.String).請問這是為什么呀???
          2009-05-14 15:54 | aa

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          axis2把有些簡單類型封裝到一個類中了,你看看自動生成的stub類,里面有類型所指定的類,你建立個對象,賦一下值就可以了。
          2009-05-14 16:10 | 銀河使者

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService[未登錄]  回復  更多評論   

          我的SpringServicePortType.java這個類里面的方法的返回類型照理應該全部是java.lang.String,但是現在只有第一個不是java.lang.String而是XXX.GetPersonResponse,其他的幾個方法返回的類型都是正確的。不明白為什么?
          2009-05-14 16:29 | aa

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          好文章,受益了。
          再指出一點注意的地方,
          <parameter name="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
          </parameter>
          里面的類一定不要寫錯,在別的文章里看到有用別的類的,可能是不用場合。如果運行有問題,可以考慮下這個地方。
          2009-05-30 23:03 | wqyang

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          我照你寫的做的,可以啟動TOMCAT的時候報這個錯誤,ERROR] Context initialization failed
          org.springframework.beans.factory.BeanDefinitionStoreException: Line 9 in XML document from ServletContext resource [/WEB-INF/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
          2009-07-17 13:28 | mumu

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          可能是寫錯了,把你寫的貼上來看看。配置文件。
          2009-07-17 14:09 | 銀河使者

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          @mumu
          Spring.jar 包問題,解析applicationContext.xml文件出錯了。
          2009-07-27 14:48 | Elimin

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService[未登錄]  回復  更多評論   

          你好,我部署的時候發生這個錯誤怎么回事啊?
          [ERROR] Context initialization failed
          org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [service.SpringService] for bean with name 'springService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: service.SpringService
          2009-12-14 18:49 | laimu

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          幫我看看一個異常可以嗎?在線等

          org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: null
          at org.apache.axis2.deployment.ServiceGroupBuilder.populateServiceGroup(ServiceGroupBuilder.java:106)
          at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:110)
          at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:179)
          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.DeploymentEngine.loadServices(DeploymentEngine.java:131)
          at org.apache.axis2.deployment.FileSystemConfigurator.loadServices(FileSystemConfigurator.java:147)
          at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:82)
          at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:184)
          at com.ncs.saas.comm.message.WebServiceClient.main(WebServiceClient.java:26)
          Caused by: org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: null
          at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:431)
          at org.apache.axis2.deployment.ServiceGroupBuilder.populateServiceGroup(ServiceGroupBuilder.java:101)
          ... 13 more
          Caused by: org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: null
          at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:394)
          ... 14 more
          Caused by: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
          at org.apache.axis2.java.security.AccessController.doPrivileged(AccessController.java:136)
          at org.apache.axis2.deployment.util.Utils.fillAxisService(Utils.java:485)
          at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:386)
          ... 14 more
          Caused by: java.lang.reflect.InvocationTargetException
          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:597)
          at org.apache.axis2.deployment.util.Utils$16.run(Utils.java:491)
          at org.apache.axis2.java.security.AccessController.doPrivileged(AccessController.java:132)
          ... 16 more
          Caused by: org.apache.axis2.AxisFault: Axis2 Can't find ServletConfigParameter
          at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
          at org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier.getServiceObject(SpringServletContextObjectSupplier.java:86)
          ... 22 more
          Caused by: java.lang.Exception: Axis2 Can't find ServletConfigParameter
          at org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier.getServiceObject(SpringServletContextObjectSupplier.java:62)
          ... 22 more
          2010-01-15 11:06 | huajian

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          如果我不希望Spring封裝的Bean的所有Public方法都公布成WebService,是不是我需要用Operate Tag來配置,而不能使用
          <messageReceivers>
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
          class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
          </messageReceivers>
          2010-09-11 10:57 | A.L

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          我跟著您的步驟做了,雖然配置成功,http://localhost:8080/axis2/services/springService?wsdl也輸出了結果,但是我卻沒在當中找到applicationContext.xml中springService bean初始化的姚明、中國男藍信息,如果是沒有的話那么這個初始化有何作用呢?如何輸出這個初始化信息?
          2014-05-23 10:22 | skyman531

          # re: WebService大講堂之Axis2(7):將Spring的裝配JavaBean發布成WebService  回復  更多評論   

          很好,就是有一點,原文中的將上面兩個Java源文件編譯后,放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\classes目錄中。應該要加上各自的包,就是要多建兩個文件夾,把class文件分別放到對應的目錄中去。
          2014-07-28 11:22 | yyyyy
          主站蜘蛛池模板: 永康市| 甘泉县| 贵德县| 靖宇县| 吉林省| 张掖市| 广安市| 特克斯县| 大冶市| 贡嘎县| 措美县| 安泽县| 于都县| 高唐县| 炎陵县| 武汉市| 汝州市| 安庆市| 探索| 鸡泽县| 博客| 韶关市| 松江区| 车致| 黎平县| 铅山县| 且末县| 娄底市| 南投县| 溧阳市| 黔东| 赤壁市| 岳普湖县| 日土县| 邢台县| 太和县| 平江县| 长沙市| 黔江区| 潼关县| 临洮县|