通過eclipse生成webservice以及axis2和spring的整合

需要工具:eclipse3.5, axis2-1.5,http-core4.0

Step1:引入axis2 runtime

在windows—>preferennce—>Axis2 preferennce的axis2 runtime引入axis2的路徑如圖:

點擊ok完成。

Step2:建立webservice服務端

1建立dynamic web project

新建web工程,並且編寫好自己的服務接口以及接口的實現,例如這裏編寫了一個接口HelloWorldService,該接口有方法String sayHello(String name);

 

2生成webservice

右鍵接口實現接口,選擇new—>other—>webservice

 

點擊下一步:

出現如圖所示的畫面

將上面的遊標拉到最頂上,選擇Test service,選擇server,選擇爲axis2勾選publish the webservice 如下圖

點擊next

默認勾選Generate a default service.xml 點擊next

選擇start server,server啓動之後點擊finish。Eclipse會啓動下圖頁面

這個時候服務並不能啓動成功,會報如下的錯誤

嚴重: Allocate exception for servlet AxisServlet

java.lang.ClassNotFoundException: org.apache.http.HttpResponseFactory

    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)

    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)

    at org.apache.axis2.transport.http.SimpleHTTPServer.init(SimpleHTTPServer.java:116)

    at org.apache.axis2.engine.ListenerManager.init(ListenerManager.java:74)

    at org.apache.axis2.transport.http.AxisServlet.init(AxisServlet.java:449)

 

 

這是因爲還有兩個地方需要修改

1:添加http-core4.0 jar包到lib下面

2:修改web.xml文件

<servlet>

    <display-name>Apache-Axis Admin Servlet Web Admin</display-name>

    <servlet-name>AxisAdminServlet</servlet-name>

    <servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class>

    <load-on-startup>100</load-on-startup>

  </servlet>

將上面的servlet的class修改成如下

 

<servlet>

    <display-name>Apache-Axis Admin Servlet Web Admin</display-name>

    <servlet-name>AxisAdminServlet</servlet-name>

    <servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class>

    <load-on-startup>100</load-on-startup>

  </servlet>

啓動tomcat,service部署成功

Step 3:生成webservice-client端

1 新建web工程

新建web工程,這裏命名爲WsClient

2生成webservice-client

右鍵工程 new--àother---àwebservice client

在service definitaion 中輸入剛纔部署的webservice的wsdl地址,標尺拉到最上面test client

選擇web service runtime 爲axis2

如下圖

點擊next

選擇生成junit testcase點擊finish  eclipse生成如下所示頁面

同樣的,webservice也需要添加http-core4.0jar包以及更改AxisAdminServlet servlet的class路徑

至此 ws-cilent生成成功,cilent端有相應的測試用例,可以用來測試

 

PS:

如果ws-server端需要整合spring,那麼需要修改現有的service.xml文件

例如自動生成的service.xml如下

<service name="AuthenticateServiceImpl" >

    <Description>

       Please Type your service description here

    </Description>

    <messageReceivers>

       <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />

       <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

    </messageReceivers>

    <parameter name="ServiceClass" locked="false">net.carefx.sso.service.impl.AuthenticateServiceImpl</parameter>

</service>

要整合spring就要修改成如下

<serviceGroup>

    <service name="AuthenticateServiceImpl" >

        <Description>

        Please Type your service description here

        </Description>

        <messageReceivers>

            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />

            <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

        </messageReceivers>

        <parameter name="ServiceClass" locked="false">net.carefx.sso.service.impl.AuthenticateServiceImpl</parameter>

        <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>

        <parameter name="SpringBeanName">authenticateService</parameter>

        <messageReceivers>

            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />

        </messageReceivers>

    </service>

</serviceGroup>

主要是加入了下面兩個配置參數

<parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>

       <parameter name="SpringBeanName">authenticateService</parameter>

再次PS

感謝小虎老師的指導,thanks tiger!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章