AXIS最佳实践
前言:
Axis是apache一个开源的webservice服务,需要web容器进行发布。本节主要用于介绍使用Axis开发webservice,包括服务端的创建、webservice的部署、客户端的调用。
准备工作:
1、尽可能了解SOAP(简单对象访问协议)、WSDL(web服务描述语言)、XML(可扩展标记语言)、axis(阿帕奇可扩展交互系统)等相关知识。
2、http://ws.apache.org/axis/ Axis官方网站行下载 axis-bin-1_4.zip。 (本文使用的是Axis1版本,非Axis2版本)
3、Axis的两种发布方式介绍。(Webservice服务发布的技术主要有XFire、Jax-WS、Axis等)
A、JWS方式
1.这种方式很简单,只需要将源码java文件放到AXIS_HOME下面,然后将后缀改为.jws,此时Axis会自动编译.jws文件,并把它自动加入到Java WebServie的服务中。
2.但是这种方式的缺点是只能java源代码且类中不能含有包名。
3.此方式的代码实例可参见【转】http://www.cnblogs.com/yisheng163/p/4524808.html
B、WSDD方式
1.编写一个Java类{MySoapServer.java}。
2.web.xml文件中增加Axis核心处理类{AxisServlet}配置。
3.server-config.wsdd文件中配置第一步编写的Java类。
4.启动tomcat,服务发布成功。
开发环境:
Window7 + Eclipse3.3 + Tomcat6 + JDK-1.6
第一步:服务器端的开发{WSDD方式}
1.编写一个Java类{MySoapServer.java}
package my.soap; public class MySoapServer
{
public String getStr(String name)
{
return "Hi, " + name + " ! Welcome to MySoapServer !";
} public int getAdd(int i, int j)
{
return i + j;
}
}
2.web.xml文件中增加Axis核心处理类{AxisServlet}配置
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3.server-config.wsdd文件中配置第一步编写的Java类
<service name="MySoapServer" provider="java:RPC" use="literal">
<parameter name="className" value="my.soap.MySoapServer" />
<parameter name="allowedMethods" value="*" />
<namespace>http://client.mysoap</namespace>
</service>
此文件放在项目的WEB-INF下面,<service>标签的name属性是发布的webservice的名称,可以自己命名,
第一个<parameter>标签的value属性指定实现类的完整路径,包括类名。
第二个<parameter>标签的value属性指定实现类中哪些方法需要发布,此处*为代表类中所有方法,
如果需要指定发布具体某几个方法,value="methodName1 methodName2",方法名中间使用空格隔开即可。
<namespace>标签为可选,它的作用是发布服务中的wsdl中的命名空间。
4.启动tomcat,webservice服务发布成功
截图中的web服务名称为AxisFoo,因此在Browser地址输入http://ip:port/AxisFoo/services,页面显示如下:

第二步:客户端的开发{下面介绍三种调用webservice方式}
A、动态调用接口方式
1.测试代码,MySoapClient.java
package my.soap;
import java.net.URL;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class MySoapClient
{
// “MySoapServer”是server-config.wsdd文件发布服务名称“<service name="MySoapServer" provider="java:RPC" >”
private static final String endpoint = "http://localhost:8080/AxisFoo/services/MySoapServer"; public static void main(String[] args) throws Exception
{
Service service = new Service();// 1.创建service对象,通过axis自带的类创建
Call call = (Call) service.createCall(); // 2.创建服务方法的调用者对象call
call.setTargetEndpointAddress(new URL(endpoint)); // 3.请求服务的URL
call.setOperationName("getStr"); // 4.远程调用方法名 // 通过invoke方法调用webservice, new Object[]为远程调用方法需要传递的参数
String res = (String) call.invoke(new Object[] { "MyAxisFoo!" });// 5.调用webservice System.out.println(res);
}
}
2.测试结果
Hi, MyAxisFoo! ! Welcome to MySoapServer !
B、wsimport命令生成java代码方式
wsimport -d D:/axisclient/ -keep -verbose -p wsimport.client http://localhost:8080/AxisFoo/services/MySoapServer?wsdl

个人不推荐使用此方式,不同Axis版本的服务端使用wsimport生成客户端代码存在bugs。
因此此处不做详细介绍,有需要可以参见[转]:http://www.cnblogs.com/simle/archive/2011/11/03/2233417.html
C、[推荐]使用eclipse自带WEB service client指定wsdl文件,从而反向生成java代码方式
1、右键点击项目名称—>“NEW”—>“Other”—>输入“web” 如下

2、点击“Next”出现客户端配置窗口,如下点击“Browser”选择wsdl文件,然后直接点击“Finish” 如下

3、生成后的客户端代码如下红色区域

4、测试代码,MySoapClient2.java
package my.soap;
import java.net.URL;
import mysoap.client.MySoapServer;
import mysoap.client.MySoapServerServiceLocator; public class MySoapClient2
{
private static final String endpoint = "http://localhost:8080/AxisFoo/services/MySoapServer"; public static void main(String[] args) throws Exception
{
MySoapServerServiceLocator locator = new MySoapServerServiceLocator();
MySoapServer mySoapServer = locator.getMySoapServer(new URL(endpoint)); int add = mySoapServer.getAdd(3, 4);
System.out.println(add);
// 测试结果输出:7
}
}
示例代码下载:
Axis服务和客户端示例代码:AxisFoo
AXIS最佳实践的更多相关文章
- XFire最佳实践
前言:XFire是新一代WebService框架,同时也支持与Spring集成,帮助我们方便快速地在Spring框架中开发WebService应用. 本节主要介绍XFire+Spring集成的2种常用 ...
- ASP.NET跨平台最佳实践
前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java ...
- 《AngularJS深度剖析与最佳实践》简介
由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...
- ASP.NET MVC防范CSRF最佳实践
XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...
- 快速web开发中的前后端框架选型最佳实践
这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...
- Spring Batch在大型企业中的最佳实践
在大型企业中,由于业务复杂.数据量大.数据格式不同.数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理.而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理.这样的过程就是" ...
- Atitit.log日志技术的最佳实践attilax总结
Atitit.log日志技术的最佳实践attilax总结 1. 日志的意义与作用1 1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具1 2. 俩种实现[1]日志系统作为一种服务进程存在 [2] ...
- PHP核心技术与最佳实践——全局浏览
难得买到并喜欢一本好书,‘PHP核心技术与最佳实践’. 几天时间,先看了个大概,总结一下整体是什么样子的,怎么看怎么学. 1.总共14章: 2.第1.2章讲PHP的OOP: 其中第一章侧重于PHP的O ...
- Abp集成Swagger的最佳实践
1.在项目中添加nuget包 Abp.Web.Api.SwaggerTool 2.在项目Abp模块的DependsOn添加AbpWebApiSwaggerToolModule Run It,启动项目, ...
随机推荐
- iOS学习之cocoaPods
Cocoapods Cocoapods作用:iOS开发时,项目中会引用许多第三方库,CocoaPods可以用来方便的统一管理这些第三方库. 第一步安装: 下载安装CocoaPods需要Ruby环境 M ...
- 如何在tomcat中如何部署java EE项目
如何在tomcat中如何部署java EE项目 1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法.2.在tomcat安 ...
- 用Unity写一个12306验证器的恶搞图生成软件
前言 前一阵子是买火车票的高峰期,然后12306的验证码就遭到各种吐槽.其实大部分验证码没有那么难,大家只是因为买不到票 发泄一下不满的情绪.于是各种恶搞的图就出现了,比如找二次元里人物的矮子,找好男 ...
- VS2010,Qt插件安装使用
用了几次的QtCreateor,不习惯. 果断换回VS 基本步骤: 1.安装VS2010 2.安装Qt Creator5 3.安装Qt插件 qt-vs-addin-1.2.2-opensource 就 ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- 使用 UnrealPak.exe 创建 Pak文件方法
看来各位摸UE4 的基佬们,也是被DLC搞得不要不要的呢,其实热更新PAK是很简单就可以实现的,虽然当时我也是弄了快一个月. 下面贴一段以前在 Runtime 状态下 Mount Pak的代码,希望能 ...
- ORACLE存储过程学习
存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...
- NSOperation操作依赖和监听
1.操作依赖 NSOperation之间可以设置依赖来保证执行顺序 比如一定要让操作A执行完后,才能执行操作B,可以这么写 [operationB addDependency:operationA]; ...
- @SuppressWarnings("finally")
@SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. 批注允许您选择性地取消特定代码段(即,类或方法)中的警告.其中的想法是当您看到 ...
- 判断是否存在哈密顿路--HDU 5424
题意:给一张无向图,判断是否是哈密顿图. 哈密顿路:经过每个点有且仅有一次的一条通路. 方法:每次找度数最小的点作为起点,然后dfs整个图,看能遍历到的点的数目能否达到n. #include<i ...