加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

axis1.4的学习总结

发布时间:2020-12-17 00:59:52 所属栏目:安全 来源:网络整理
导读:一.前言: 相信大家对 webservice 有一定的了解我在这里就不再复述 webservice 的一些基本概念。 axis1.3 是 soap1.2 协议的一个实现框架。在工作中我们可以方便的通过 axis 进行 webservice 的开发。 二.准备工作: 1.?开发环境 我使用 axis1.4 做为 Web?Se

一.前言:

相信大家对webservice有一定的了解我在这里就不再复述webservice的一些基本概念。axis1.3soap1.2协议的一个实现框架。在工作中我们可以方便的通过axis进行webservice的开发。

二.准备工作:

1.?开发环境

我使用axis1.4做为Web?Service引擎,它是Apache的一个开源web?service引擎。它目前最为成熟的开源web?service引擎之一。下面我主要介绍一下如何使用Axis搭建web?service?服务的环境。?

①安装tomcat5.0应用服务器;?

②解压axis(附件有),将包中axis目录复制到tomcat目录下的webapps目录下;  ?

③将axis/WEB-INF/lib目录下类文件复制到tomcat目录下的common/lib目录下;?

④重新启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp,如果能访问,表示安装成功;?

注意,axis有几个可选的包,如email.jar,你可以找来放到tomcat目录下的common/lib目录下,如果不使用相关的功能也可以不用(包也已经包含在附件中)。?

这样,开发环境就搭建好了。?

2.?开发方式:

Axis提供两种开发方式:即时发布(Instant?Deployment)、定制发布(Custom?Deployment);

即时发布提供了一种非常简单的Web?Service?发布方式,但是限制太多,不适合项目的整合,所以,在此我们选用定制发布方式。?虽然配置复杂,但是很适合我们开发。

三.axis1.4定制发布WSDD例子:

1.?编写WSDD文件(也就是java类):

???Java代码如下:

??package?cn.qtone.zsywyj.webservice;

??public?class?WebservcieDemo?{

??private?int?requestCount?=?0;

??public?String?helloWorld(String?name){

requestCount?++;

System.out.println("requestCount="?+?requestCount);

System.out.println("Received?:"?+?name);

return?"Hello:"?+?name;

}

??}

代码说明:这里定制一个WebservcieDemo类,里面有个helloWorld的方法,即我们为别人提供服务的方法,它接受一个参数,并返回一个字符串;

2.?编译好放入WEB-INFclass(axis文件夹下)

??将上述的java类进行编译,生成一个包含路径:cn/qtone/zsywyj/webseerviceWebwervcieDem.classs;将上述目录并文件添加到web-infclasses路径下面;

3.?编写deploy.wsdd(文件放置web-inf目录下):

<?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="WebservcieDemo"?provider="java:RPC">??

<parameter?name="className"??

value="cn.qtone.zsywyj.webservice.WebservcieDemo"/>??

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

?</service>??

</deployment>??

代码说明:<service>节点下的?name指名了对外提供服的方法名称,provider指的是服务的类型。共有四种:RPCDocumentWrapped以及Message;我们这里就是指RPC

<parameter>节点下第一个明显就是指出具体调用的类,第二个是指允许调用的方法。这里的*号是指所有的public方法都可以被访问;

4.?生成配置文件并发布:

???在windows控制台处,进入%TOMCAT_HOME%webappsaxisWEB-INF的文件目录下;

然后输入java?-Djava.ext.dirs=lib?

?????org.apache.axis.client.AdminClient?

-lhttp://localhost:8080/axis/servlet/AxisServlet?deploy.wsdd??

如果制台返回:

? ??Processing?file?deploy.wsdd

??????????????<Admin>Done?processing</Admin>

则表明已经发布成功!此时,在同级目录即web-inf下会生成一个server-config.wsdd文件,这个就是我们所有向外提供服务的上下文。

注意:Tomcat服务器部署生成的server-config.wsdd文件在%tomcat_home%webappsaxi

sWEB-INF目录下;(其实它是根据-lhttp://localhost:8080/axis/servlet/AxisServlet这里来找到保存地址的,如果我们要整合到项目中我们可以改成类似于:

-lhttp://localhost:8080/wd/servlet/AxisServlet,然后server-config.wsdd

会保存在%tomcat_home%webappswdWEB-INF目录,这也是tomcat服务要打开才能执行deplyo.wsdd的原因之一吧)

通过http://localhost:8080/axis/servlet/AxisServlet可以查看我们所有定制的服务,也可以通过http://localhost:8080/services/WebservcieDemo?wsdl查看我们刚才才布的服务的wsdl文件。

5.?客户端访问:

Java代码如下:

package?cn.qtone.zsywyj.test;

import?java.net.URL;

import?java.util.*;

import?javax.xml.namespace.QName;

import?org.apache.axis.client.*;

/**

?*?axis1.x客户端调用测试

?*?@author?keyingbo

?*

?*/

public?class?MyServiceExe?{

?/**

?????*?使用axis的WSDL2JAVA调用WS服务?

?????*?..SoapBindingStub类的createCall()方法,

?????*/

public?String?getMessage(String?youName){

????String?result?=?"";

try?{

?//??指定调用WebService的URL

String?

endpoint?=?"http://127.0.0.1:8080/services/WebservcieDemo";

?//???调用WebService????????

Service?service?=?new?Service();

Call?call?=?(Call)?service.createCall();

call.setTargetEndpointAddress(new?java.net.URL(endpoint));

?//??指定要调用的helloWorld方法

call.setOperationName("helloWorld");

???

//?填写你要调用的方法名称

???result?=?(String)?call.invoke(new?Object[]?{youName});

?

}?catch?(Exception?e)?{}

return?result;

public?static?void?main(String?args[]){

System.out.println("-----------------");

System.out.println(new?MyServiceExe().getMessage("柯颖波"));

}

调试运行可以得到结果:

-----------------

Hello:柯颖波

这里需要加入相应的包,在附件上也有。

四.axis1.4整合到项目中:

上述所讲的例子基本上是将web?service独立出的一个项目,即axis是在tomcat下的一个web项目,与其他项目是无关的,所以,如果我们需要操作数据库的时候,我们需要在axisWEB-INF目录?的lib目录下需要引入我们所需要的包,操作我们自定义的类也一样。所以,非常不方便。特别是当我们web?service项目比较复杂,即需要引入很多额外的包的时候,就会造成许多包的冗余(因为在其他项目中可能已经存在了)。所以,我们可以将axis整合到我们的具体项目中:

所谓整合,也就是说在我们的项目中,将axis需要的包引进来,在项目的web.xml中将axisWEB-INF下的web.xml里面的内容整合在一起,编写相应的服务WSDD文件并按照上面的方法进行发布,并把相应生成的server-config.wsdd放置项目的WEB-INF文件夹。

以上面的例子来说明所需步骤:

1.将需要的包复制到项目的WEB-INF下的lib下;

2.在项目的web.xml文件的web-app节点添加axisweb.xmlweb-app节点??下的内容。

3.编写javaWebservcieDemo并编译;

4.根据第1步的类,编写deploy.wsdd;

5.生成配置文件:server-config.wsdd?,将其复制到项目的WEB-INF文件夹下;

五.附加的包:

http://download.csdn.net/detail/keyingbo2008/4284469

?

六.常见问题:

1.axis环境配置好了,但是发布deploy.wsdd的时候出现很多莫名的异常?

答:tomcat5.0没有启动,发布deploy.wsdd需要启动tomcat

2.没有引入相应的包导致异常。

3.如果需要发布多个webService怎么办?

答:我们可以在deploy.wsdd文件下添加<service>(内容)</service>类似的配置信息;其实我们执行deploy.wsdd文件时,系统是根据给出的路径去寻找config-server.xml文件,如果不存在则创建,然后在相应位置添加我们的service配置信息,其实如果这个服务是已经存在的,它会进行一个信息的替换,如果不存在才是新增。(这里可以做一下比较例子来观察不同之处)

4.既然有webservice发布,那肯定有发布取消,怎么取消某个webService呢?

答:比如我要取消webServcieDemo这个服务,那么,我们编写undeploy文件,如下:

<undeployment??xmlns="http://xml.apache.org/axis/wsdd/"?>??

<service?name="WebservcieDemo"??/>???

?</service>??

</undeployment>?

像执行deploy.wsdd文件一样执行该文件,就会取消该服务,其实它的原理就是:根据给出的服务路径找出配置文件config-server.xml,然后将里面包含webServcieDemo这个服务配置的信息去掉。其实,我们可以在一个undeploy.wsdd文件取消多个服务。

5.Exception?in?Thread?"main"??

java.lang.NoClassDefFoundError:?org/w3c/dom/ranges/DocumentRange:

答:少了一个包:xerces.jar

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读