用AXIS2发布WebService的方法

Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用。 

Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法。

第一步:首先要下载开发所需要的jar包  

下载:axis2-1.6.1-war.zip  http://www.apache.org/dist//axis/axis2/java/core/1.6.1/ 

下载完后解压至tomcat安装目录下的webapps文件夹下,启动tomcat后,在webapps目录下会生成axis2文件夹。  访问http://localhost:8080/axis2/能看到以下页面表示axis2运行成功。   

第二步:在Eclipse下新建Web Project,工程名:webServe。新建包com.cm.service,新建类HelloWorld,代码如下: 

package com.cm.service;  public class HelloWorld {  public String sayHello(String name){return "Hello, "+name+".";} public String saySorry(String name){return "Sorry,"+name+".";} public String getWorld(){return "Hello,World";}   } 

在WEB-INF目录下修改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">     
<!--Axis2 config start--> 
<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>    
<!--Axis2  end-->   
<welcome-file-list>      <welcome-file>index.jsp</welcome-file>   
</welcome-file-list> 
</web-app>  

把tomcat安装目录下的webapps/axis2/WEB-INF下的modules、service和conf文件件拷至HelloWorld下的WEB-INF目录下。把lib下的如下jar包夜拷过去。 

然后再services下新建HelloWorld/META-INF路径,META-INF下新建services.xml,内容如下: 

<service name="HelloWorld">       <description>HelloWorld Service Example</description>        <parameter name="ServiceClass">com.cm.service.HelloWorld</parameter><operation name="sayHello">           <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>       </operation><operation name="saySorry"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation><operation name="getWorld">                           <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/></operation>
</service>

      启动tomcat后访问http://127.0.0.1:8888/webServe/services/HelloWorld?wsdl能看到服务信息了。  到此Axis2的WebService服务已成功发布  

Axis2客户端调用:  下面看看利用axis2 客户端调用实例   新建一个客户端调用类AxisUtil 代码如下: 

package com.cm.client;    
import javax.xml.namespace.QName;  
import org.apache.axis2.addressing.EndpointReference; 
import org.apache.axis2.client.Options;  
import org.apache.axis2.rpc.client.RPCServiceClient;   
public class AxisUtil {public static void main(String[] args) {String xmlStr="xiaoxu.wang";String url="http://127.0.0.1:8888/webServe/services/HelloWorld";String method="saySorry";AxisUtil.sendService(xmlStr,url,method);}public static String sendService(String xmlStr,String url,String method){String xml=null;try {RPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();EndpointReference targetEPR = new EndpointReference(url);                options.setTo(targetEPR);//在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值     QName opAddEntry = new QName("http://service.cm.com",method); // 参数,如果有多个,继续往后面增加即可,不用指定参数的名称     Object[] opAddEntryArgs = new Object[] {xmlStr};// 返回参数类型,这个和axis1有点区别      // invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;// 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];// 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。// 当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}// 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,// 该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同Class[] classes = new Class[] { String.class };      xml=(String)serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0];      System.out.println(xml);} catch (Exception e) {e.printStackTrace();long end = System.currentTimeMillis();}return xml;}
}   

运行结果:  Sorry,xiaoxu.wang.  

总结:以上就是Axis2 服务发布与调用的简单案例。至于其他的实现方法有兴趣的可以继续研究。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 屏幕引脚配置 2.3 项目生成 3、KEIL端程序整合 3.1 LCD驱动添加 3.2 函数修改 3.2.1 lcd.h修改 3.2.2 lcd_innit.h 修改 3.2.3 lcd.c修改 3.2.4 lcd_inut.c修改 3.3 主函数代码 3.3…

Django学习笔记-表单(forms)的使用

在Django中提供了了form表单&#xff0c;可以更为简单的创建表单模板信息&#xff0c;简化html的表单。 一、网页应用程序中表单的应用 表单通常用来作为提交数据时候使用。 1.1 创建表单模板文件夹 在项目文件夹下创建一个template文件夹&#xff0c;用于存储所有的html模…

gitee page发布的静态网站,无法播放目录中的mp4视频

起因是希望在gitee上部署静态网站&#xff0c;利用three.js VideoTexture 环境贴图播放视频。 但是试了多几次 mp4均提示404&#xff0c;资源无法获取&#xff1b; 找了很多方案&#xff0c;最后发现将视频转为ogv 就可以完美适配了&#xff1b; mp4转ogv 附threejs使用ogv进…

使用百度地图SDK计算距离

说明&#xff1a;通过百度地图提供的SDK&#xff0c;可以计算出两个地点之间的距离&#xff0c;另外还有行驶路线等等。本文介绍如果使用百度地图SDK&#xff0c;并用java代码实现。 申请 首先需要登录百度地图的官网&#xff0c;申请开发者认证&#xff0c;个人认证一般都很…

GPT一键化身「AI助理」——自定义指令功能

最近GPT又更新了一个超实用的功能——自定义指令&#xff0c;启用后&#xff0c;你可以给GPT设置一些固定指令&#xff0c;让它记住或扮演某个角色&#xff0c;比如客服、律师、投资管理师、老师、营养师...... 这样&#xff0c;我们就不再需要每次都要打开新的聊天&#xff0c…

ChatGPT的工作原理:从输入到输出

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

华为eNSP:isis配置跨区域路由

一、拓扑图 二、路由器的配置 1、配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]q AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huawe…

【React Native】学习记录(一)——环境搭建

Expo是一套工具&#xff0c;库和服务&#xff0c;可让您通过编写JavaScript来构建原生iOS和Android应用程序。 一开始学习的时候直接使用的是expo。 npx create-expo-app my-appcd my-appnpm run start接下来需要搭建安卓和IOS端&#xff08;为此特意换成了苹果电脑&#xff09…

云曦暑期学习第二周——文件上传漏洞

1.文件上传 1.1原理 一些web应用程序中允许上传图片、视频、头像和许多其他类型的文件到服务器中。 文件上传漏洞就是利用服务端代码对文件上传路径变量过滤不严格将可执行的文件上传到一个到服务器中 &#xff0c;再通过URL去访问以执行恶意代码。 1.2为什么存在文件上传漏…

Angular:动态依赖注入和静态依赖注入

问题描述&#xff1a; 自己写的服务依赖注入到组件时候是直接在构造器内初始化的。 直到看见代码中某大哥写的 private injector: Injector 动态依赖注入和静态依赖注入 在 Angular 中&#xff0c;使用构造函数注入的方式将服务注入到组件中是一种静态依赖注入的方式。这种方…

PHP关于数组的各类处理方法

获取数组中的唯一值 function getUniqueValues($array) {return array_unique($array); }// 示例用法 $numbers [1, 2, 3, 2, 1, 4, 5]; $result getUniqueValues($numbers); print_r($result); // 输出结果: Array ( [0] > 1 [1] > 2 [2] > 3 [5] > 4 [6] >…

React的hooks---useEffect

在函数组件主体内&#xff08;React 渲染阶段&#xff09;改变 DOM、添加订阅、设置定时器、记录日志以及执行其他包含副作用的操作都是不被允许的&#xff0c;因为这可能会产生莫名其妙的 bug 并破坏 UI 的一致性 useEffect Hook 的使用则是用于完成此类副作用操作。useEffec…

ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量

在PHPenv安装的时候&#xff0c;环境变量默认的PHP版本是7.4的&#xff0c;MySQL的版本是5.7的&#xff0c;要想使用ThinkPHP8来开发&#xff0c;就必须修改环境变量&#xff0c;本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv&#xff0c;网站&…

102、SOA、分布式、微服务之间有什么关系和区别?

SOA、分布式、微服务之间有什么关系和区别? 分布式架构是指将单体架构中的各个部分拆分&#xff0c;然后部署到不同的机器或进程中去&#xff0c;SOA和微服务基本上都是分布式架构师SOA是一种面向服务的架构&#xff0c;系统的所有服务都注册在总线上&#xff0c;当调用服务时…

LiveGBS流媒体平台GB/T28181功能-设备树自定义分组自定义组织机构选择通道共享给上级国标平台配置权限给指定用户

LiveGBS流媒体平设备树自定义分组自定义组织机构选择通道共享给上级国标平台权限给指定用户 1、背景2、分组2.1、新建分组2.2、选择通道2.3、导入设备2.4、编辑名称2.5、删除分组2.6、移除分组 3、国标级联3.1、分组共享节点3.1.1、共享给上级平台3.1.2、分配权限给用户 3.2、级…

Android 帧率分析

卡顿&#xff1a; 界面呈现是指从应用生成帧并将其显示在屏幕上的动作。如需确保用户能够流畅地与您的应用互动&#xff0c;您的应用呈现每帧的时间不应超过 16ms&#xff0c;以达到每秒 60 帧的呈现速度&#xff08;为什么是 60fps&#xff1f;&#xff09;。如果您的应用存在…

PV操作解决经典进程同步问题

一.经典同步问题 在学习《操作系统》时&#xff0c;会接触到进程的概念&#xff0c;其中不可避免的接触到进程同步问题&#xff0c;今天我们用熟悉的PV操作解决一些经典的进程同步问题。 二.生产者-消费者问题 1.问题描述 问题描述&#xff1a;一组生产者进程和一组消费者进…

Linux中使用du命令来查看目录的大小

在Linux中&#xff0c;你可以使用du命令来查看目录的大小。下面是一些常用的du命令选项&#xff1a; -h&#xff1a;以人类可读的格式显示文件大小。-s&#xff1a;仅显示总大小&#xff0c;而不显示每个子目录的大小。-c&#xff1a;显示总大小&#xff0c;并在最后一行显示总…

汽车交流充电桩控制主板的电路设计

汽车充电桩控制主板的电路设计 你是否曾经遇到过汽车没油的问题?但是&#xff0c;随着电动汽车的普及&#xff0c;充电问题也变得越来越重要。而汽车充电桩控制板电路设计则是解决这一问题的关键。 汽车充电桩控制板电路设计包括硬件电路设计、软件电路设计和安全性设计。硬件…

[vulnhub]DC2

文章目录 [vulnhub]DC2信息收集flag1flag2cewlwpscan flag3什么是rbash&#xff1f; flag4flag5git提权 总结 [vulnhub]DC2 信息收集 扫ip&#xff0c;有两种方式&#xff1a;arp、nmap nmap -sP 192.168.56.0/24 -T4arp-scan -l192.168.56.137 扫端口&#xff1a; nmap -…