<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    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類的對象實(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控制臺進(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對象。

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





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

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

    評論

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

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

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

    需要在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ù)  更多評論   

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

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

    我按照你上面的方法做,在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ù)  更多評論   

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

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

    我的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ù)  更多評論   

    好文章,受益了。
    再指出一點(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ù)  更多評論   

    我照你寫的做的,可以啟動(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ù)  更多評論   

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

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

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

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

    你好,我部署的時(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ù)  更多評論   

    幫我看看一個(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ù)  更多評論   

    如果我不希望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ù)  更多評論   

    我跟著您的步驟做了,雖然配置成功,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ù)  更多評論   

    很好,就是有一點(diǎn),原文中的將上面兩個(gè)Java源文件編譯后,放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\classes目錄中。應(yīng)該要加上各自的包,就是要多建兩個(gè)文件夾,把class文件分別放到對應(yīng)的目錄中去。
    2014-07-28 11:22 | yyyyy
    主站蜘蛛池模板: 成人免费网站视频www| 亚洲 综合 国产 欧洲 丝袜| jizz在线免费播放| 美女视频黄免费亚洲| 久久亚洲精精品中文字幕| 亚洲综合网站色欲色欲| 免费人成激情视频| 午夜老司机免费视频| 亚洲欧洲免费无码| 国产大片91精品免费观看不卡| 大地影院MV在线观看视频免费 | 精精国产www视频在线观看免费| 亚洲国产区男人本色在线观看| 亚洲国产精品人久久| 久久被窝电影亚洲爽爽爽| 久久久亚洲精品蜜桃臀| 亚洲第一区在线观看| 国产成人精品免费直播| 日韩免费观看视频| 欧洲美熟女乱又伦免费视频 | 亚洲免费福利在线视频| 亚洲国产精品久久久久秋霞影院 | 91精品手机国产免费| 日韩在线不卡免费视频一区| 久久久精品午夜免费不卡| 久久久国产精品福利免费| 华人在线精品免费观看| 免费网站看av片| 免费无遮挡无码永久视频| 免费A级毛片av无码| 在线观看的免费网站无遮挡| 91精品国产免费网站| 国产乱子精品免费视观看片| 亚洲免费闲人蜜桃| 大地资源在线观看免费高清| 成年男女男精品免费视频网站| 在线观看成人免费| 国产成人无码免费视频97 | 未满十八私人高清免费影院| 无码毛片一区二区三区视频免费播放 | 亚洲乱码无码永久不卡在线|