欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

axis2发布webservice各种方式实例

程序员文章站 2022-04-15 10:43:33
...

 

import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @说明 这个是作为服务端的方法类,不能带有命名空间,方法必须为public
 */
public class MyAxis2Service {
	/**
	 * @说明 请求的方法,输出接收到的参数,返回时间戳字符串
	 */
	public String getServiceInit(String name) {
		System.out.println("you name is :" + name);
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(new Date());
	}
	/**
	 * @说明 下载图像
	 */
	public byte[] dowImageWithByte() {
		byte[] imageByte = null;
		try {
			// 下面的代码调用uploadImageWithByte方法上传图像文件
			// 打开图像文件,确定图像文件的大小
			java.io.File file = new java.io.File("c:\\test.jpg");
			java.io.FileInputStream fis = new java.io.FileInputStream(
					"c:\\test.jpg");
			// 创建保存要上传的图像文件内容的字节数组
			imageByte = new byte[(int) file.length()];
			fis.read(imageByte);
		} catch (Exception e) {
			return null;
		} finally {
		}
		return imageByte;
	}
	/**
	 * @说明 上传图像,imageByte参数表示上传图像文件的字节,length参数表示图像文件的字节长度(该参数值可能小于imageByte的数组长度)
	 */
	public boolean uploadImageWithByte(byte[] imageByte, int length) {
		FileOutputStream fos = null;
		try {
			// 将上传的图像保存在D盘的test1.jpg文件中
			fos = new FileOutputStream("d:\\test1.jpg");
			// 开始写入图像文件的字节
			fos.write(imageByte, 0, length);
			fos.close();
		} catch (Exception e) {
			return false;
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (Exception e) {
				}
			}
		}
		return true;
	}
}

 

昨天做了使用axis2做客户端的示例,今天来做使用axis2发布自己的服务。首先到官方下载axis2-1.6.1-war.zip,解压后会得到能够在tomcat上部署的war文件,部署后可以在基于该工程的情况下进行我们的服务发布。我的附件中给的工程可以直接部署到tocmat下,由于上传限制,我删除了lib下的所有包,大家可以将下载的包中的jar拷贝到该工程里面,另外还需要拷贝spring.jar。

 

如果是做接口测试想快速做一个接口以供调用,可以在WEB-INF下创建一个pojo文件夹,然后将自己的类放到该文件夹下面即可完成发布。示例工程里面的MyAxis2Service.class源码是:
 
其实就是昨天的那个类。访问http://localhost:8080/axis2/,可以看到axis2后台管理页面,点击services进入服务列表。其中version是默认的一个接口。
 
以上方法固然方便,不过不能定义自己的包路径。下面来做一下包含包路径的pojo发布。
首先定义类:
package service;
public class MyService {
	/**
	 * @说明 接收参数,有返回值
	 */
	public String getGreeting(String name) {
		return "您好 " + name;
	}
	/**
	 * @说明 接收参数,无返回值
	 */
	public void update(String data) {
		System.out.println("<" + data + ">已经更新");
	}
}
 
再定义一个类,为了演示不同的配置方法:
package service;
public class MyServiceForGroup {
	/**
	 * @说明 接收参数,有返回值
	 */
	public String getGreeting2(String name) {
		return "你真好 " + name;
	}

	/**
	 * @说明 接收参数,无返回值
	 */
	public void update2(String data) {
		System.out.println("<" + data + ">真的已经更新");
	}
}
 
下面再定义一个XML配置文件,定义一个services.xml,在里面增加内容:
<serviceGroup><!-- name 属性就是发布 webservice 的访问名称,一个service代表一个服务,每个服务内可包含多个方法 -->
	<service name="myService"><!-- 描述 -->
		<description>Web Service</description><!-- 指定服务类 -->
		<parameter name="ServiceClass">service.MyService</parameter>
		<!-- 用 operation 指定每一个方法的服务处理器 --><!-- 服务端使用什么样的方式发布WebService,对客户端并没有影响 -->
		<operation name="getGreeting">
			<messageReceiver
				class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
		</operation>
		<operation name="update">
			<messageReceiver
				class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
		</operation>
	</service><!-- 演示多个接口的配置方法 -->
	<service name="MyServiceForGroup">
		<description>Web Service2</description>
		<parameter name="ServiceClass">
			service.MyServiceForGroup
		</parameter>
		<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>
 
下面在C盘或自己看着办创建一个aws文件夹,里面再创建META-INF和service文件夹,其中service就是你的包路径。将services.xml放到META-INF下,将class文件放到service内。在控制台进入aws文件夹,记住了是文件夹内,然后执行 “jar cvf aws.aar .”,会在该文件夹内生成一个aws.aar文件,将该文件拷贝到apache-tomcat-6.0.16\webapps\axis2\WEB-INF\services文件夹内即可完成发布。命令中的aws.aar是要生成的问价的名称,.是生成路径。
 
因为大部分项目都是使用Spring的,如果将自己的接口和spring结合,那会是多么的美好呀。下面就来做这样的例子。
提示做该示例时别忘了增加spring.jar包。
首先定义要发布的类:
package service;
public class SpringService {
	public String getGreeting(String name) {
		return "spring定制,欢迎你: " + name;
	}
}
 
其次在项目的web.xml中增加spring配置:
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
 
在web.xml同级目录定义自己的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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	<bean id="springService" class="service.SpringService"></bean>
</beans>
 
同样要定义services.xml,在里面增加内容:
<serviceGroup>
<!-- Spring的配置方法 对于Spring的aar打包,WEB-INF\services目录中的.aar包中不需要包含.class -->
	<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>
</serviceGroup>
 
下面打包,刚才打包时我们必须把class文件打包在内,使用spring后就不用了。
建立文件夹aws,在里面创建META-INF文件夹,把services.xml拷贝到该文件夹。执行命令打包:“jar cvf aws.aar .”。
但是别忘了,spring使用的类的class文件要拷贝到apache-tomcat-6.0.16\webapps\axis2\WEB-INF\classes\service下面。
 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com