隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0

          導(dǎo)航

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

          公告

          關(guān)注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團(tuán)隊(duì)

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務(wù)

          代理網(wǎng)站

          關(guān)注的網(wǎng)站

          協(xié)議

          喜歡的Blog

          國內(nèi)廣告平臺(tái)

          圖書出版

          在線培訓(xùn)

          開發(fā)工具

          微博客戶端

          手機(jī)鈴聲

          操作系統(tǒng)

          • ReactOS
          • 一個(gè)與windowXP/2003兼容的操作系統(tǒng)

          數(shù)學(xué)

          文件格式

          源碼資源

          移動(dòng)(Mobile)

          編程語言

          英語學(xué)習(xí)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1973760
          • 排名 - 6

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

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

          本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

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

             在現(xiàn)今的Web應(yīng)用中經(jīng)常使用Spring框架來裝載JavaBean。如果要想將某些在Spring中裝配的JavaBean發(fā)布成WebService,使用Axis2Spring感知功能是非常容易做到的。
              在本文的例子中,除了<Tomcat安裝目錄>\webapps\axis2目錄及該目錄中的相關(guān)庫外,還需要Spring框架中的spring.jar文件,將該文件復(fù)制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\lib目錄中。
              下面先建立一個(gè)JavaBean(該JavaBean最終要被發(fā)布成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也是一個(gè)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;
              }
          }

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

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

          <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目錄中建立一個(gè)applicationContext.xml文件,該文件是Spring框架用于裝配JavaBean的配置文件,內(nèi)容如下:

          <?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="職業(yè)男籃" /> 
            
          </bean>   
          </beans>

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

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

          <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控制臺(tái)進(jìn)入axi2-spring-ws目錄,并使用jar命令將axi2-spring-ws目錄中的內(nèi)容打包成axi2-spring-ws.aar,然后將該文件復(fù)制到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中,啟動(dòng)Tomcat后,就可以訪問該WebService了,訪問方式與前面幾篇文章的訪問方式相同。獲得wsdl內(nèi)容的URL如下:

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

              在將Spring中的裝配JavaBean發(fā)布成WebService需要注意以下幾點(diǎn):

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

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

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

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





          Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

          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 銀河使者 閱讀(17233) 評(píng)論(15)  編輯  收藏 所屬分類: javaspring 原創(chuàng)webservice

          評(píng)論

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

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

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

          需要在web.xmll文件中加入下面內(nèi)容,加了吧?
          <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發(fā)布成WebService  回復(fù)  更多評(píng)論   

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

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

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

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

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

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

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

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

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

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

          我照你寫的做的,可以啟動(dòng)TOMCAT的時(shí)候報(bào)這個(gè)錯(cuò)誤,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發(fā)布成WebService  回復(fù)  更多評(píng)論   

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

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

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

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

          你好,我部署的時(shí)候發(fā)生這個(gè)錯(cuò)誤怎么回事啊?
          [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發(fā)布成WebService  回復(fù)  更多評(píng)論   

          幫我看看一個(gè)異常可以嗎?在線等

          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發(fā)布成WebService  回復(fù)  更多評(píng)論   

          如果我不希望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發(fā)布成WebService  回復(fù)  更多評(píng)論   

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

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

          很好,就是有一點(diǎn),原文中的將上面兩個(gè)Java源文件編譯后,放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\classes目錄中。應(yīng)該要加上各自的包,就是要多建兩個(gè)文件夾,把class文件分別放到對(duì)應(yīng)的目錄中去。
          2014-07-28 11:22 | yyyyy
          主站蜘蛛池模板: 洛阳市| 汪清县| 剑阁县| 南召县| 贵州省| 黄大仙区| 沅江市| 麻城市| 铁岭县| 黄平县| 尤溪县| 蒙自县| 东阿县| 霍州市| 咸宁市| 凌云县| 西昌市| 旬阳县| 马边| 碌曲县| 壤塘县| 麻栗坡县| 临颍县| 泸溪县| 文水县| 施秉县| 广东省| 德惠市| 贵州省| 大连市| 堆龙德庆县| 温宿县| 赤壁市| 石柱| 连州市| 乌鲁木齐市| 甘孜县| 车险| 星子县| 西林县| 双流县|