spring集成axis2-1.5.6实现webservice服务器端及客户端

来源:互联网 发布:网络安全法培训课件 编辑:程序博客网 时间:2024/06/05 14:09

1、下载axis2-1.5.6,相关的文件我已经上传,可以到我的资源里去下载

2、新建一个WebProject

以下是myeclipse WebProject的文件目录

 

3、添加jar包,简单起见将axis2-1.5.6-bin中lib下的jar全部导入,同时导入spring.jar

4、编写接口类IFileManagerDao

 

package com.alpha.dao;public interface IFileManagerDao {public abstract String add();public abstract String del();public abstract String upload();public abstract String down();}


5、编写实现类FileManagerDao

package com.alpha.dao.impl;import com.alpha.dao.IFileManagerDao;public class FileManagerDao implements IFileManagerDao {public String add(){System.out.println("add success..");return "add";}public String del(){System.out.println("del success..");return "del";}public String upload(){System.out.println("upload success..");return "upload";}public String down(){System.out.println("down success..");return "down";}}


6、编写webservice FileWebService

package com.alpha.service;import com.alpha.dao.IFileManagerDao;public class FileWebService {IFileManagerDao fileManagerDao;public String add(){return fileManagerDao.add();}public String del(){return fileManagerDao.del();}public String upload(){return fileManagerDao.upload();}public String down(){return fileManagerDao.down();}public IFileManagerDao getFileManagerDao() {return fileManagerDao;}public void setFileManagerDao(IFileManagerDao fileManagerDao) {this.fileManagerDao = fileManagerDao;}}

 

基础的类都写好了,接下来编写配置文件(不存在的文件自己创建)

7、web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- 指定spring配置信息 --><context-param>   <param-name>contextConfigLocation</param-name><param-value>classpath:conf/applicationContext.xml</param-value></context-param>   <!-- 添加spring监听器 -->  <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 注册axis2的servlet -->    <servlet>        <servlet-name>AxisServlet</servlet-name>        <servlet-class>            org.apache.axis2.transport.http.AxisServlet        </servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>AxisServlet</servlet-name>        <url-pattern>/services/*</url-pattern>    </servlet-mapping>      <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>


8、spring配置文件applicationContext.xml

<?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.xsd       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 添加spring ApplicationContextHolder Bean 在Spring 中注入Bean 代理器 --> <bean id="applicationContext"     class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" /><!-- 添加Spring Bean 对象 --><bean id="fileManagerDao" class="com.alpha.dao.impl.FileManagerDao"></bean><bean id="fileWebService" class="com.alpha.service.FileWebService"><property name="fileManagerDao" ref="fileManagerDao"></property></bean></beans>

 

9、services.xml(在WebRoot/services/axis/META-INF/下,需自己创建,axis可任意命名)

<?xml version="1.0" encoding="UTF-8"?><serviceGroup>    <service name="fileWebService">        <description>spring集成axis2案例</description>        <!-- 通过ServiceObjectSupplier参数指定SpringServletContextObjectSupplier类来获得Spring的ApplicationContext对象 -->        <parameter name="ServiceObjectSupplier">            org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier        </parameter>        <!--        SpringBeanName固定的不能改       fileWebService是spring中bean的id     -->        <parameter name="SpringBeanName">            fileWebService        </parameter>        <!--     <messageReceivers>:用于设置处理WebService方法的处理器    in-out有返回值    in-only没有返回值    -->        <messageReceivers>            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"                class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"                class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />        </messageReceivers>    </service></serviceGroup>

 


至此服务器端就已经编写完成。接下来只需启动tomcat就可以发布webservice,可以通过下面的路径查看wsdl

http://localhost:8080/WebServiceTest/services/fileWebService?wsdl
http://ip:port/工程名/services/webservice名?wsdl(webservice名是在services.xml中定义的)

 

10、客户端调用webservice

import javax.xml.namespace.QName;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;public class WebServiceClient {public static void main(String[] args) throws AxisFault {// 建立一个远程连接客户端RPCServiceClient serviceClient = new RPCServiceClient();// 设置参数Options options = serviceClient.getOptions();// 远程webservice服务地址 ,http://ip:port/工程名/services/webservice名EndpointReference targetEPR = new EndpointReference("http://localhost:8080/WebServiceTest/services/fileWebService");options.setTo(targetEPR);// 方法的参数 (如果没有参数opArgs不能为NULL,Object[] opArgs = new Object[] {// }就可以,然后把opArgs传入invokeBlocking)Object[] opArgs = new Object[] { "filename" };// 返回参数类型Class[] classes = new Class[] { String.class };serviceClient.setTargetEPR(targetEPR);// 此处的是 实现类所在的包的倒序QName opName = new QName("http://service.alpha.com", "add");// 可使用在services.xml中targetNamespace中指定的命名// QName opName = new QName("http://service.crystal.com", "down");String ret = serviceClient.invokeBlocking(opName, opArgs, classes)[0].toString();System.out.println(ret);opArgs = new Object[] { 1 };classes = new Class[] { String.class };opName = new QName("http://service.crystal.com", "del");ret = serviceClient.invokeBlocking(opName, opArgs, classes)[0].toString();System.out.println(ret);serviceClient.cleanupTransport();System.out.println(ret);}}



 

原创粉丝点击