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

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

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

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

    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 銀河使者 閱讀(17225) 評論(15)  編輯  收藏 所屬分類: java 、spring 、 原創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
    主站蜘蛛池模板: 8x成人永久免费视频| 亚洲2022国产成人精品无码区| 一区二区三区四区免费视频| 亚洲国产成人无码AV在线影院| 亚洲综合精品香蕉久久网97| 亚洲精品线路一在线观看| 成人免费无码大片A毛片抽搐 | 日韩人妻无码免费视频一区二区三区| 国内精品一级毛片免费看| 特级aaaaaaaaa毛片免费视频| 国产精品亚洲精品青青青| 亚洲免费精彩视频在线观看| 亚洲情XO亚洲色XO无码| 免费人成在线观看网站视频 | 亚洲AV日韩AV高潮无码专区| 亚洲A丁香五香天堂网| 国产成人免费永久播放视频平台| 黄页免费的网站勿入免费直接进入| 外国成人网在线观看免费视频 | 亚洲中文字幕无码久久综合网| 国产成人无码a区在线观看视频免费 | 日日麻批免费40分钟无码 | 亚洲视频在线观看视频| 亚洲av永久无码精品网站| 亚洲五月综合缴情在线观看| 久久精品国产亚洲一区二区三区| 亚洲精品WWW久久久久久| 午夜亚洲福利在线老司机| 国产成人免费手机在线观看视频| 成年轻人网站色免费看| 成熟女人特级毛片www免费| 无人在线观看免费高清视频| 一二三四在线播放免费观看中文版视频 | 一二三四免费观看在线视频中文版| 青青青免费国产在线视频小草| 亚洲免费二区三区| 国产高清免费视频| 国产精品成人免费视频网站京东| 妞干网免费观看视频| 尤物永久免费AV无码网站| 成人亚洲综合天堂|