隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

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

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

          上一篇: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).請(qǐng)問這是為什么呀???
          2009-05-14 15:54 | aa

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

          axis2把有些簡(jiǎn)單類型封裝到一個(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ò),在別的文章里看到有用別的類的,可能是不用場(chǎng)合。如果運(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初始化的姚明、中國(guó)男藍(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
          主站蜘蛛池模板: 北流市| 德州市| 南郑县| 井冈山市| 邹城市| 湖州市| 拉萨市| 托里县| 鲁山县| 雅江县| 疏附县| 灵石县| 土默特左旗| 连城县| 长宁区| 临海市| 大宁县| 仪征市| 广平县| 兴国县| 南汇区| 正定县| 塔城市| 增城市| 洛宁县| 三河市| 礼泉县| 台江县| 丰镇市| 堆龙德庆县| 富顺县| 巴林右旗| 黔西县| 吴桥县| 乌苏市| 康保县| 新巴尔虎左旗| 乡城县| 蕉岭县| 桐梓县| 古蔺县|