发布axis webservice教程

webservice教程  时间:2021-02-01  阅读:()

利用AXI S开发Webs ervic e(一)——如何发布自己的w ebs ervic e

先介绍下本人开发环境吧。 JDK 1.4.2+Myeclipse 6.0实在经不起诱惑尝尝鲜 +Tomcat

5.0.28+AXIS 1.4。 AXIS 1.4包可以在http://w s.apache.org/axis/找到。 假设所有的环境你已经搭好并且AXIS包也已经下好了。 OK Here we go~

解压axis-bin-1_4.zip这个包可以看到w ebapps 目录双击进入把里面的AXI S文件夹拷到 %TOMCAT_HOME%\webapps 目录下之后拷贝 activation.jar 、 mail.jar、 too ls.jar到%TOMCAT_HOME%\w ebapps\axis\WEB-INF\lib 目录下。 启动 tomc at  访问http://loc a lhos t:8080/ax is/happyax is.jsp如果访问成功恭喜你基本的配置你已经做完了。PS此处的%TOMCAT_HOME%指的是Tomc at的安装目录至于那另外的三个jar包 J2EE

1.4库里就能找的到。

现在来说一下最关键的Webs ervic e的发布。AXI S提供了两种发布方式一种是即时发布Instant Deployment另外一种是定制发布Custom Deployment。即时发布提供了一种非常简单的w ebs ervic e的发布方式但是其中限制太多因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。

1.即时发布JWS (Java Web Service) Files - InstantDeployment

即时发布提供了一种非常简单发布方式发布者只要有Java源代码也就是.java文件然后把其后缀名改成 jws 也就是 java web service 的缩写 拷贝到%T OMCAT_HO ME%\w ebapps\axis 目录下即完成了所有的发布工作。AXI S的编译引擎会处理接下来的所有事情。下面是一段示例代码java代码public class HelloAXIS {public String Hello(String name){return"AXIS say hello to"+name;

}

}

把 HelloAXIS.java 文 件 改 成 HelloAXIS.jws 然 后 拷 贝到 %TOMCAT_HOME%\w ebapps\axis 目 录下  启 动 Tomc at 之后访 问http://localhost:8080/axis/HelloAXIS.jws如果能看到Click to see the WSDL这个超链接就说明已经发布成功了 点击进去就可以看到这个Webservic e的WSDL描述文件。 server端的

发布已经完成了接下来就是编写Client端测试代码了。java代码package c om.chnic.test;import java.net.URL;import javax.xml.namespac e.QName;import org.apache.axis.client.Call;import org.apache.axis.c lient.S ervic e;public class Test {public static void main(String[]args) throws Exception{

String targetEendPoint="http://loc alhost:8080/ax is/He llo AXI S.jw s";

Servic e s ervic e=new Servic e();

Call call=(Call) service.createCall();c all.s etOperationName(new QName(targetEendPoint, "Hello"));c all.s etTargetEndpointAddres s(new URL(targetEendPo int));

String result=(String) c all.invoke(new Object[]{"Robert"});

System.out.println(result);

}

}

测试代码很简单如果熟悉java反射机制的朋友不用两分钟就能看明白。运行后客户端控制台出现AXIS say hello Robert。测试成功。果然很简单吧。不过在这简单背后却是以牺牲灵活性为代价的。假如你现在手里只有.class或者一个jar包 jws就不再能满足你的需求了最要命的就是即时发布不支持带包的类这点AXI S的用户手册上写的也很明白。Important: JWS web services are intended for simple web services.You cannot use packages inthe pages, and as the code is compiled at run time you can not find out about errors until afterdeployment.Production quality web services should use Java classes with custom deployment.

2.定制发布Custom Deployment - Introducing WSDD

比起即时发布定制发布更加烦琐也更复杂但是换来的却是更大的灵活性因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个WSDDWeb ServiceDeployment Descriptor文件这个东东类似与XML稍后会做出介绍。废话不多说我们来看代码

java代码package c om.chnic.w ebs ervic e;public class HelloWorld{public HelloWorld(){

}public String hello(String str){r eturn"He l lo"+s tr;

}public int add(int a, int b){return a+b;

}

}

一个带包的很简单的类 在 eclipse 下编译后按照包名拷到%TOMCAT_HOME%\w ebapps\axis\WEB-INF\c las s es 目录下。 以这个类为例拷贝完之后 这 个 HelloWorld.class 的 路 径 就是%T OMCAT_HO ME%\w ebapps\axis\WEB-INF\c las s es\c om\c hnic\w ebs ervic e。 P S 如果嫌这样太麻烦可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后整体一次性拷贝到w ebs eric ve的工程中。

接 下 来 就 需 要 编 写 发 布 文 件 deploy.wsdd 。到%TOMCAT_HOME%\w ebapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容xml代码

<deployment xmlns=http://xm l.apache.org/axis/ws dd/xmlns:jav a="http://xml.apache.org/axis/w s dd/providers/java">

<service name="HelloWorld"provider="java:RPC">

<parameter name="clas sName"value="c om.chnic.webservic e.HelloWorld"/>

<parameter name="allowedMethods"value="*"/>

</s ervic e>

</dep loyment>

简单的介绍下各个节点的含义 "HelloWorld"当然是这个webservice的名字后面紧跟的javaRPC指的是服务类型。这里一共有有4种类型分别是RPC,Document,Wrapped

和Mes s age。有兴趣可以看下org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类第二个从字面上也很好理解允许调用的方法。这里的配置告诉引擎可以调用所有的public方法 当然你也可以自己指定。

编写完配置发布文件之后 cmd 打开 windows 的控制台 进入%T OMCAT_HO ME%\w ebapps\axis\WEB-INF目录下键入如下命令java-Djava.ext.dirs=lib org.apache.axis.c lient.Adm inClient dep loy.w sdd

之后控制台返回Processing file deploy.wsdd和Done processing这两段话即说明发布成功。此时会在同级目录生成一个s erver-c onfig.w s dd文件在这里的Admin C lient是AXI S提供的一个客户端管理工具。至于java.ext.dirs的含义可以去了解一下c las sloader和JVM类装载机制方面的知识在这里就不多解释。 还有一点要注意的是在发布的时候Tomc at服务必须处于启动状态否则就会抛出一堆无法连接的异常信息。发布成功之后你可以通过访问http://loc a lho s t:8080/ax is/s ervlet/Ax is S ervlet来查看你所有的定制发布的服务。

客户端测试代码

String targetEendPoint="http://loc alhost:8080/ax is/s ervic es/He lloWorld";

Servic e s ervic e=new Servic e();

Call call=(Call) service.createCall();c all.s etTargetEndpointAddres s(new URL(targetEendPo int));c all.setOperationName(new QName(targetEendPoint, "hello"));

String result=(String) c all.invoke(new Object[]{"Robert"});

System.out.println(result);c all.s etOperationN ame(new QName(targetEendPoint, "add"));

Integer res=(Integer)call.invoke(new Object[]{new Integer(1),new Integer(2)});

System.out.println("The result is: "+res);

运行测试代码控制台显示Hello Rob ert和The result is:3这两句话说明发布成功。仔细观察下发现其实除了那个targetEndpoint之外即时发布和定制发布的客户端调用代码基本上都是一样的。定制发布的URL可以在WSDL文件里找到。 其实定制发布还有一些高级特性这个就留到下一篇再说吧。

利用 AXIS开发Webservice(二)——WSDD的一些高级特性

1、取消发布一个webservice

开篇之前先把上篇的一个遗漏补充上上篇只讲了怎么发布一个w ebs ervic e但是如何取消没有却没有提。其实取消一个已经发布的w eb s ervc e也是非常简单的我们就拿上篇的HelloWorld来做例子吧。

发布webs ervic e的时候我们有一个deploy.w s dd文件 当然在取消发布的时候就会有一个undeploy.w s dd文件。这个文件的内容也很简单 xml的代码如下。

Xml代码

<undeployment xmlns="http://xm l.apac he.org/axis/w s dd/">

<service name="HelloWorld"/>

</undep loyment>

<undeployment xmlns="http://xm l.apac he.org/axis/w s dd/">

<service name="HelloWorld"/>

</undep loyment>

编写完这个xml文件之后把它同样c opy到%TOMCAT_HO M\w ebapps\axis\WEB-INF目录下然后CMD打开控制台在控制台输入一个我们很熟悉的命令java-Djava.ext.dirs=lib org.apache.axis.c lient.AdminClient undep loy.w sdd

运行之后得到如下结果说明取消发布成功

Processing file undeploy.wsdd

<Admin>Done processing</Admin>

2、WSDD的高级特性

说完取消发布之后就来说一下AXI S的一些高级特性AXI S在编写dep loy.w s dd这个文件时每个<s ervic e>节点下面会有这样一个子节点。

Xml代码

<parameter name="scope"value="value"/>

<parameter name=也就是你webservice服务的那个object在后面的value里可以有三个选项request, session, orapplic ation。熟悉Jsp、 Servlet、或者EJB里的Ses sionBean的朋友应该能很快能明白这个三个配置选项的含义。requst这个选项会让AXIS为每一个SOAP的请求产生一个服务对象可以想像如果这个webs ervice的对象足够复杂而且SOAP的请求过多这个选项是非常耗费服务器性能的。session如果选择了session程序就会给每个调用这个webservice的客户端创造一个服务对象。application这个选项最彪悍程序只会在内存里new出来一个服务对象然后为所有webs ervice客户端服务。很显然这个选项不能储存客户端的一些个性化数据。所以在功能性上很多时候不能满足要求。

3、高级特性Handler

接下来说一下Ax is的Handler和Chain机制Hand ler和Chain是Ax is引擎提供的一个很强大的工具。假如现在客户有这样一个需求需要记录某一个w ebs ervic e被调用的次数这个时候如果在service object里去实现这个功能不仅麻烦而且侵入了原有的程序也会对增加原有程序的不稳定性。有了Handler我们就能见easy的解决这个问题。我们先来编写handler的代码。

Java代码pac kage c om.chnic.handler;import org.apache.axis.AxisFault;import org.apache.axis.Mes sageContext;import org.apache.axis.handlers.BasicHandler;public class HelloWorldHandler extends Bas icHandler{private static final long serialVersionUID=1L;public void invoke(Mes sageContext c ontext) throws AxisFault {

String s tatus=(String) this.getOption("s tatus");

System.out.println("HelloWor ldHandler's status is: "+status);

}

}pac kage c om.chnic.handler;

import org.apache.axis.AxisFault;import org.apache.axis.Mes sageContext;import org.apache.axis.handlers.BasicHandler;public class HelloWorldHandler extends Bas icHandler{private static final long serialVersionUID=1L;public void invoke(MessageContext context) throws AxisFault {

String status=(String) this.getOption("status");

System.out.println("HelloWorldHandler's status is: "+status);

}

}

BasicHandler是一个抽象类 Axis提供了很多Handler的具体实现 Basic Handler只是其中最简单的一个。要实现一个自己的handler首先要从继承Bas ic Handler这个类开始并实现其中的invoke(Mes sageContext arg)这个方法。Mes sageContext可以看成是一个Axis的上下文里面存储的是一些Ax is和w eb s ervic e的基本信息。想了解的朋友可以看一下Axis的API。编写完Handler代码之后我们连编写发布文件。

Xml代码

<deployment xmlns="http://xm l.apache.org/axis/w s dd/"xmlns:java="http://xml.apache.org/axis/w s dd/providers/java">

<handler name="Hello" type="j ava:c om.chnic.handler.HelloWorldHandler">

<parameter name="status"value="succ ess"/>

</handler>

<service name="HelloWorld"provider="java:RPC">

<requestFlow>

<handler type="He llo"/>

</requestFlow>

<parameter name="clas sName"value="c om.chnic.webservic e.HelloWorld"/>

<parameter name="allowedMethods"value="*"/>

<parameter name="scope"value="session"/>

</s ervic e>

</dep loyment>

发布代码中有这样的一句细心的朋友一定会发现。

Xml代码

<parameter name="status"value=" session"/>

<parameter name="status"value=" session"/>看完这句代码再对比一下Handler的实现代码中的一句相信大多数人都能明白了。

Java代码

String status=(String) this.getOption("status");

String status=(String) this.getOption("status");Handler通过getOption(String)这个方法拿到了配置文件中我配置的属性值。而我们上述所做的所有工作对于原来的Webs erivc e来说都是透明的不会对侵入原有的程序当中。 一个Handler可以被多个s ervic e所使用通过<requestFlow>这个标签来引用到某一个servic e 中这里还要多提一句既然是一个requestFlow这个当然可以加不只一个的Handler。接下来编写测试代码运行。在本地应用服务器上会打出如下语句HelloWorldHandler's status is: session说明测试成功而且handler是配置在requestflow标签中所以这段代码会在service代码之前先执行。

4、高级特性Chain

介绍完了Handler再来介绍Chain。从Chain的字面意思就能猜到他实现的一连串Handler的功能。假如某个s ervice需要不止一个Handler或者要根据Client的情况来选择需要那些Handler。特别是后一个需求我们无法用一个或者几个Handler来解决这个时候我们就需要<Chain>来实现了。我们先再编写一个Handler加上之前的那个Handler我们来组成一条锁链。

Java代码pac kage c om.chnic.handler;import org.apache.axis.AxisFault;import org.apache.axis.Mes sageContext;import org.apache.axis.handlers.BasicHandler;public class MyHandler extends Bas icHandler {private static final long serialVersionUID=1L;public void invoke(Mes sageContext c ontext) throws AxisFault {

System.out.println("This is MyHandler. .");

}

}

之后我们编写Chain的代码

Java代码package c om.chnic.chain;import org.apache.axis.SimpleChain;import c om.chnic.handler.He lloWor ldHandler;import c om.chnic.handler.MyHandler;public clas s HelloWorldChain extends Simp leChain{private static final long serialVersionUID=1L;public HelloWorldChain(){

HelloWorldHandler hwh=new HelloWorldHandler();

MyHandler mh=new MyHandler();this.addHandler(hw h);this.addHandler(mh);

}

}

在Chain的构造函数中把我要的两个Hand ler用addHand ler()方法加载进去。之后我们来编写发布文件。 <c hain>和<handler>元素有些许不同在这里有必要多句嘴。

<chain>元素中的子元素只允许是<handler>或者<chain>。后者也就是允许在“锁链”里再嵌套“锁链”在这里就拿嵌套<handler>来举例他同样有两种方式来实现。第一种是直接包含<handler>:

Xml代码

<chain name="myChain">

<handler type="java:c om.chnic.handler.MyHandler"/>

</chain>

<chain name="myChain">

<handler type="java:c om.chnic.handler.MyHandler"/>

</c hain>

第二种是引用别的<handler>

Xml代码

<handler name="myHandler" type="jav a:c om.chnic.handler.MyHandler"/>

<chain name="myChain"/>

<handler type="myHand ler"/>

</chain>

因为我们这里的Handler并没有由Bas icHandler来实现而是由继承S impleChain这个类来实现严格意义上讲 S imp leChain也可以算是一个Handler 因为Simp leCh ain也是从BasicHandler继承而来他同样实现了invoke()这个方法。下面回归正题来看我们的发布代码。

Xml代码

<deployment xmlns="http://xm l.apache.org/axis/w s dd/"xmlns:java="http://xml.apache.org/axis/w s dd/providers/java">

<chain name="myChain">

<handler type="java:c om.chnic.chain.He lloWorldChain"/>

</c hain>

DogYun春节优惠:动态云7折,经典云8折,独立服务器月省100元,充100送10元

传统农历新年将至,国人主机商DogYun(狗云)发来了虎年春节优惠活动,1月31日-2月6日活动期间使用优惠码新开动态云7折,经典云8折,新开独立服务器可立减100元/月;使用优惠码新开香港独立服务器优惠100元,并次月免费;活动期间单笔充值每满100元赠送10元,还可以参与幸运大转盘每日抽取5折码,流量,余额等奖品;商家限量推出一款年付特价套餐,共100台,每个用户限1台,香港VPS年付199元...

Digital-vm80美元,1-10Gbps带宽日本/新加坡独立服务器

Digital-vm是一家成立于2019年的国外主机商,商家提供VPS和独立服务器租用业务,其中VPS基于KVM架构,提供1-10Gbps带宽,数据中心可选包括美国洛杉矶、日本、新加坡、挪威、西班牙、丹麦、荷兰、英国等8个地区机房;除了VPS主机外,商家还提供日本、新加坡独立服务器,同样可选1-10Gbps带宽,最低每月仅80美元起。下面列出两款独立服务器配置信息。配置一 $80/月CPU:E3-...

创梦网络-四川一手资源高防大带宽云服务器,物理机租用,机柜资源,自建防火墙,雅安最高单机700G防护,四川联通1G大带宽8.3W/年,无视UDP攻击,免费防CC

? ? ? ?创梦网络怎么样,创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以****,属于一手资源,高防机柜、大带宽、高防IP业务,另外创梦网络近期还会上线四川联通大带宽,四川联通高防IP,一手整CIP段,四川电信,联通高防机柜,CN2专线相关业务。成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快...

webservice教程为你推荐
桌面背景图片桌面背景和桌面壁纸的区别是什么?天玑1000plus和骁龙865哪个好各位觉得联发科最新芯片天机1000靠谱吗?真的能打过麒麟990?聚酯纤维和棉哪个好聚酯纤维面料和纯棉面料哪个好免费阅读小说app哪个好想看小说有什么好用的app推荐?小说软件哪个好用免费现在看小说用什么软件好?朱祁钰和朱祁镇哪个好历史上真实的明英宗是怎么样的?性格之类的。朱祁钰和朱祁镇的相关的最好可以详细点的机械表和石英表哪个好石英表和机械表哪个好浮动利率和固定利率哪个好对于企业来说固定利率贷款与浮动利率贷款优缺点各是什么?谢谢了。手机杀毒软件哪个好安卓手机杀毒软件哪个最好电陶炉和电磁炉哪个好电陶炉和电磁炉哪个好?主要是炒菜,爆炒。
海外主机 免费试用vps 万网域名管理 ipage 高防dns securitycenter 香港托管 174.127.195.202 轻博 申请个人网页 坐公交投2700元 傲盾官网 微软服务器操作系统 万网空间购买 移动服务器托管 深圳域名 黑科云 七牛云存储 数据湾 hdsky 更多