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
推荐阅读
-
axis2通过城市名称调用.net写的asmx WebService查询天气实例
-
项目中集成 axis2 发布webservice(转)
-
Axis2 发布webService
-
(1)使用Axis2方式发布webService实例说明
-
使用axis2发布web项目的webService
-
Axis2 发布webservice项目 和 生成客户端代码
-
axis2客户端调用免费的webservice服务的实例之三axis2使用RPC方
-
Axis2 WebService的配置、发布、调用
-
axis2客户端调用免费的webservice服务的实例之二纯手动调用免费
-
php中nusoap调用java axis2发布的webservice