axis学习小记(一)

      webservice何许人也?webservice是企业发布的完成特定功能的在线服务。通过HTTP协议传输可以轻轻松松的实现分布式的服务调用。分布式在线服务也是web的一个发展方向。而axis是目前较为主流的webservice引擎。他来源于apache的soap协议的一个实现。我们今天来利用axis实现一个简单的分布式调用。

      首先我们需要下载axis组件。其官方主页的地址是:http://www.apache.org/dyn/closer.cgi/ws/axis/1_4

      我们将下载后的压缩包文件,解压到本地硬盘当中。接着将目录当中的webapps目录下的axis文件拷贝到tomcat的目录下(笔者使用的是tomcat6.0)。启动tomcat,在浏览器地址栏当中输入:http://localhost:8080/axis/我们可以看到如下页面:

      点击Validation就可以看见webservice部署成功了

      下面就要开始我们的axis之旅了。axis提供了两种发布的方式:即时发布(jws)和定制发布(wsdd)

      这里即时发布不支持带包的类,但是大部分情况下发布的都是带包的类。所以这里我们就不介绍即时发布了,我们来说一说定制发布吧。

      定制发布相对于即时发布稍微有点复杂。但是其灵活性也更加的强大一些。定制发布需要完成三个步骤:

      第一步:创建服务器类:我们这里创建一个WsddServer的服务器类

package com.foolfish.wsdd;

/**
 * @email foolfish.chen@gmail.com
 * @author Administrator
 */
public class WsddServer {
    public WsddServer(){}

    public String say(String name){
    return "Hello" + name;
    }
}

     该类提供了一个say方法。用于接受参数并返回操作结果。接着我们需要针对该类编写一个wsdd文件。我们把这个wsdd命名为deploy.wsdd。该文件的描述如下所示

<?xml version="1.0" encoding="UTF-8"?>
<deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="firstWsdd" provider="java:RPC">
      <parameter name="className" value="com.foolfish.wsdd.WsddServer"/>
     <parameter name="allowedMethods" value="*"/>
     <parameter name="scope" value="request"/>

</service>

</deployment>

      我们来看一下这个xml文件,该文件的核心部分是

 

<service name="firstWsdd" provider="java:RPC">
      <parameter name="className" value="com.foolfish.wsdd.WsddServer"/>
     <parameter name="allowedMethods" value="*"/>
     <parameter name="scope" value="request"/>

</service>

      我们可以看出,我们给我们需要发布的服务器断的wenservice命名为firstwsdd.并在指定了其class的所在位置、允许被调用的方法以及可被调用的范围。我们需要将deploy.wsdd文件放置到tomcat下axis目录的WEB-INF目录下。接着,运行dos窗口,切换到该目录下运行

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

     需要注意的是在运行上面命令的时候我们需要启动tomcat,不然无法进行编译,编译后,会生成新的文件server-config.wsdd。

      好了,我们接着就要开始写我们的客户端程序了,我们将创建一个名为WsddClient 的客户端程序。我们客户端将要调用服务器端的say方法。并输出结果。服务器端的代码如下图所示:

package com.foolfish.wsdd;

import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

/**
 * @email foolfish.chen@gmail.com
 * @author Administrator
 */
public class WsddClient {
       public static void main(String[] args) {
        String url = "http://localhost:8080/axis/services/firstWsdd";
        try{
             Service serv = new Service();
             Call call = (Call) serv.createCall();
             call.setTargetEndpointAddress(url);
             call.setOperationName(new QName(url,"say"));

             String result = (String)call.invoke(new Object[]{"foolfish"});
             System.out.println("result = "+ result);
        }
        catch(ServiceException e){
            e.printStackTrace();
        }
        catch(RemoteException e){
            e.printStackTrace();
        }

    }
}

 

     上面的代码看起来应该很容易理解,客户端通过路径访问到服务器,接着通过我们发布的wsdd查找需要调用类,并获得该类的方法,执行并返回结果。我们运行上面的程序,将会返回result = Hellofoolfish字符串。

      怎么样,我们很简单的实现了一个简单的分布式调用了吧。我们现在来考虑一个问题,如果这个时候我们需要在调用服务器端的类的前后需要执行相应的操作。例如我们需要统计该webservice一共被调用几次。我们不方面在需要调用的类当中去写,这里我们就用到了axis的一个叫做handler的东西,利用handler我们可以在客户端调用服务器端之前或者之后执行相应的handler。

      这里我们来编写一个handler。取名为WsddServerHandler,用来统计对我们上面制作的webservice的调用次数。

package com.foolfish.wsdd;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

/**
 * @email foolfish.chen@gmail.com
 * @author Administrator
 */
public class WsddServerHandler extends  BasicHandler{
    private  static long count = 0L;
    private int requestCount = 0;
    //定义一个handler。用于统计某个webservice的调用次数
    public void invoke(MessageContext  args0) throws AxisFault {
        requestCount++;
        count++;
        String status = (String)this.getOption("status");
        System.out.println("The firstHandler status is: " +status +  " count : " + " handlerrequest: " + requestCount);
    }
}

 我们定义好了一个handler。下面我们需要在deploy.wsdd当中去配置,我们来看一下新的deploy.wsdd

<?xml version="1.0" encoding="UTF-8"?>
<deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="fisrtHandler" type="java:com.foolfish.wsdd.WsddServerHandler" >
<parameter name="status" value="success" />
</handler>
<service name="firstWsdd" provider="java:RPC">
    <requestFlow>
        <handler type="fisrtHandler" />
    </requestFlow>
    <parameter name="className" value="com.foolfish.wsdd.WsddServer"/>
     <parameter name="allowedMethods" value="*"/>
     <parameter name="scope" value="request"/>

</service>

</deployment>

 

      我们很容易的看出,我们定义了在调用我们先前定义的webservice的时候需要执行改handler,以便统计调用该handler的次数。

        好吧,我们现在来运行下客户端程序。客户端仍然输出没有handler时候的的字符。我们来看下服务器端输出了什么


     好了,我们的第一个axis完成了。效果还不错吧

    ^_^~~~~~~~

webServices学习之一——axis1实现helloWorld axis1实现helloWorld 博文链接:https://yehao0716.iteye.com/blog/1535268 立即下载

相关推荐

Chromatix_AEC—深入解析曝光表配置与传感器参数计算

本文深入解析高通Chromatix AEC模块中的曝光表配置与传感器参数计算,详细介绍了自动曝光控制(AEC)的核心概念、首行曝光时间计算、行时间与曝光模式对比、帧率计算逻辑以及曝光表高级配置技巧。通过实战案例展示如何优化传感器参数联调,帮助开发者掌握Chromatix工具在摄像头系统中的关键应用。

266

Axis入门教程

Axis入门篇1.   下载Axis,下载地址http://ws.apache.org/2.   安装。Jboss中安装为例。1)   在web部署目录下建立axis.war文件夹(名字可以任意取)。2)   将下载的axis包解压找到webapp目录,将目录中的axis下的文件拷贝至axis.war下,启动JBoss,在浏览器中验证是否安装成功。输入:http://localhost/axis3

1万+

第1.1节 构网型 vs. 跟网型:根本区别与技术原理

构网型与跟网型变流器的本质区别在于控制哲学与等效模型。跟网型变流器采用"电压跟随,电流注入"策略,等效为受控电流源,依赖电网电压作为参考,在弱电网下存在稳定性问题。构网型变流器采用"自主同步,电压构建"策略,等效为受控电压源,能主动构建电压和频率,具备自主运行、黑启动和电网支撑能力。两者的核心差异体现在同步机制、电网依赖性、故障行为和系统支撑等方面。构网型变流器更适合高比例新能源、弱电网和微电网场景,是未来电力系统的重要发展方向。

技术工作者 1394

Axis生成wsdl的三种方法以及注意事项

lApacheAxis下载和安装 a)下载axis2-1.6.1-war.zip,该文件用于将WebService发布到Web容器中。下载地址是: http://axis.apache.org/axis2/java/core/download.html b)将axis2-1.6.1-war.zip文件解压到 安装目录>\webapps文件夹下,启动tomcat后,在webapps目录下会生

qwezhaohaihong 4832

西红柿成熟度检测数据集总结

成熟度类别标注数量semiripe(半成熟)10275rotten(腐烂)13470fullyripe(完全成熟)35031unripe(未成熟)26212。

crz1336768325的博客 2125

tkinter动态表格 - 实时更新数据(TkinterTable)

tkinter动态表格 - 实时更新数据(TkinterTable) 参考 [TkinterTable] Tkinter上的表格GUI】 https://github.com/dmnfarrell/tkintertable/wiki/Usage https://github.com/dmnfarrell/tkintertable/issues/47 python使用tkinter编写一个数据显示窗口(实时显示更新的数据) 首先安装TkinterTable,即pip install tki

qq_33934427的博客 1万+

使用axis1.X根据WSDL地址生成客户端调用代码

 set Axis_Lib=D:/lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Output_Path=D:/wsClient %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -u http://IP:PORT/hello/hi?wsdl

学习园地 2775

同一台电脑使用模拟ModbusTcp主从通讯的时候,Wireshark抓取不到包

在使用ModBus Slave和Poll模拟主从通讯的时候,发现Wireshark怎么都抓取不到包怎么排查和解决?

HUJIANGMING的博客 703

axis2 发布自定义服务器地址

修改wsdl 方法一:只用改一次配置,以后都不用管wsdl了,修改axis2.xml     http://xxx.xxx.xxx.xxx:10018/productServer 方法二:(不好) a:获取localhost:8080/productServer/services/productService?wsdl 内容 b:把在最下面的ip地址替换成你要发布的      

过天的专栏 5378

结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式

高速列车是现代交通运输的重要组成部分,其运行速度高、载客量大,对安全性和可靠性提出了极高的要求。轴箱轴承作为高速列车的关键部件之一,承担着传递载荷和支撑车轴的重要作用。然而,由于长期运行在高速、重载和复杂工况下,轴箱轴承容易出现疲劳磨损、润滑失效和裂纹等故障,从而影响列车的安全性。本项目旨在结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式。

xiaoheshang_123的博客 329

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1727

Axis试用小记(-)

(1)首先将下载的Axis开发包解压。这将得到axis/webapps/axis目录的整体复制到Tomcat下的Webapps目录下。(2)拷贝activation.jar和mail.jar到axis/webappx/axis/WEB-INF/lib目录下。(xmlsec.jar不需要也可以运行)(3)启动Tomcat。访问http://localhost:8080/axis/。单击Validat

Jaytse的专栏 2535

【AI产品思路】用户旅程图与用户全生命周期:到底是什么关系?

用户旅程图(User Journey Map)和用户全生命周期(User Lifecycle)是两种不同的分析框架。用户旅程聚焦单次交易体验的完整过程(如浏览→下单→售后),关注触点、情绪和优化点;而用户生命周期则关注用户与平台的长期关系(从认知到流失),着重提升留存和LTV。两者互为补充:生命周期是时间维度的关系框架,旅程图是行为维度的体验路径。电商运营中,旅程优化改善单次体验,生命周期优化解决长期增长问题,二者结合才能实现体验提升与商业效率的双赢。

qq_25438419的博客 217

python axes_Numpy小记——有关axis/axes的理解

【先声明:本文尽量用简单直观的方式解释说明,可能会有些许错误——欢迎指正交流】NumPy‘s array type augments the Python language with an efficient data structure useful for numerical work, e.g., manipulating matrices. NumPy also provides basi...

weixin_39744316的博客 328

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

numpy 求秩_Numpy小记——有关axis/axes的理解

【先声明:本文尽量用简单直观的方式解释说明,可能会有些许错误——欢迎指正交流】NumPy‘s array type augments the Python language with an efficient data structure useful for numerical work, e.g., manipulating matrices. NumPy also provides basi...

weixin_39805119的博客 426

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

numpy 矩阵 秩_Numpy小记——有关axis/axes的理解

【先声明:本文尽量用简单直观的方式解释说明,可能会有些许错误——欢迎指正交流】NumPy‘s array type augments the Python language with an efficient data structure useful for numerical work, e.g., manipulating matrices. NumPy also provides basi...

weixin_34274163的博客 280

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

AXIS2集成到自己的WebApp中

最近在做WebService的项目用到了AXIS2但是不知道怎么才能把AXIS2集成到我自己的工程中在这里做一下小记以便日生用到。 关于AXIS2怎么发布WebService网上的例子都是直接用的Axis2 war这里就不做介绍了。其实将AXIS2集成到自己的工程中只需要以下几步就可以轻松实现: 1.建立自己的WebApp 2.将Axis2 war解出来将WEB-INF中的conf 和 se

苦海行舟 1010

小记wsdl2java

缘由要实现协同工作,在不同的平台交换数据,是以有一个wsdl文件需要转换成java类文件,以下有两种方式进行转换:(命令行方式) 一、CXF wsdl2java 配置环境变量 CXF-HOME  为“D:/czd/work/java/lib/apache-cxf-2.7.7” 增加  path  “%CXF-HOME %bin” 后, 在cmd下运行 D:/>cd test D:/te

caizedong的专栏 2151

JBoss初学问题小记

     前一段时间,因为一个调研项目的关系,开始学习JBoss和AXIS WebService方面的相关知识。这其中碰到了一些菜鸟级别的问题,可是周围的人都没有懂JBoss的,上网也找不到什么资料,只好自己瞎琢磨了。不久,由于各种原因,这个调研中止了,很遗憾。 做个小结,也算是对自己这段时间的一点回顾吧。   经过多方了解,知道以下jboss资料是很好的,应该在网上都可以找到的:《jboss管理

flywalker的专栏 1685

【人工智能代码学习小记】numpy.stack()到底是干啥的

关于numpy.stack()的一些简单认知

zhang971105的博客 374

python小记(一)矩阵和向量的拼接

@TOCpython小计(一) python矩阵和向量的拼接 比如用python生成一个长度为17000的向量和一个17000×8的矩阵,那么向量的shape为(17000,),矩阵的shape为(17000,8)。查了优快云上很多都是矩阵拼接矩阵,用的基本就是numpy.concatenate,但是这个函数只能拼接两个相同shape的array。 所以首先要用reshape将向量变成矩阵 reshape(17000,1) numpy.concatenate numpy.concatenate,axis=

kkyy的博客 5515

c imadd a b matlab,MATLAB学习小记

1、如何查找Matlab中的算法源代码首先运行程序。用Desktop-----Profiler对程序运行时间进行统计。实际是查看需要进行优化的地方,如何进行优化,减少不必要的时间浪费。然后就是利用Profiler进行查找,自己查看即可。2、M文件的命名规则;1.文件名命名要用英文字符,第一个字符不能是数字。2.文件名不要取为matlab的一个固有函数,m文件名的命名尽量不要是简单的英文单词,最好是...

weixin_31509753的博客 408

springboot1.x调用webservice小记

因工作需要调用webservice接口,不想直接生成类,直接通过相关JAR包调用webservice接口,目前尝试过以下几种方式: 一、axis方式(现在系统在用) 说明:调用JAVA、PHP生成的WEBSERVICE没有问题,但调用.NET开发的WEBSERVICE可能存在问题(我目前遇到的是对方收不到我发送的请求) maven外用包: &lt;dependency&gt;     &l...

jiangxinjiang2003的专栏 2380

webservice 小记

需求: 实现从A系统访问B数据库中的资源,利用spring3.0 + axis2  客户端:请求服务器端方法,发送xml 参数,接收来自服务器端的数据,保存到本地数据库。 服务器端:执行方法,返回数据到客户端。 实现过程客户端: package com.thunisoft.sy.webService; import java.text.SimpleDateFormat;

u011598529的专栏 724
上一篇: Ruby操作MYSQL数据库
下一篇: Ruby线程学习(一)
refactaar
博客等级 码龄17年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值