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

Axis1.4发布WebService

发布时间:2020-12-16 22:03:30 所属栏目:安全 来源:网络整理
导读:本章节主要介绍Axis1.4发布WebService。这里只说明发布相关内容,调用方法后续会说明。 1、下载安装 ? ? ? 下载地址: http://archive.apache.org/dist/axis/ ? ? ? 本案例中使用的版本 : http://archive.apache.org/dist/axis/axis/java/1.4/axis-bin-1_4.


1、下载安装

? ? ? 下载地址: http://archive.apache.org/dist/axis/
? ? ? 本案例中使用的版本 : http://archive.apache.org/dist/axis/axis/java/1.4/axis-bin-1_4.zip
? ? ? 下载完成之后解压文件,得到目录如下

? ? ? 目录说明:
? ? ? ? ? ? docs:存放Axis的说明文档。
? ? ? ? ? ? lib:存放Axis的二进制发布包,(如果你想在你项目中使用就导入这里的包)。
? ? ? ? ? ? samples:官方给的一些简单案例。
? ? ? ? ? ? webapps:里面放了一个axis项目,放到tomcat的webapps下可以直接使用。
? ? ? ? ? ? xmls:相关说明文档。
? ? ?? maven安装:大多数情况下我们只是想在自己的web项目中引入这项技术,我们只需要导入jar包即可。
[html]? view plain ?copy
?

在CODE上查看代码片

派生到我的代码片

  1. <dependency>??
  2. ????groupId>axis</>??
  3. ????artifactIdversion>1.4 >axis-wsdl4j>1.5.1>javax.mail>mail>1.4.7>??

2、即时发布JWS

步骤:编写一个不带包名的java类→修改后缀为jws→将文件拷贝到项目根目录下。
例如本例中:新建java类,将下载的axis1_4中webapps下的axis文件夹拷贝到tomcat的webapps下,启动tomcat。
[java]? copy
?

派生到我的代码片

    public?class?HelloJWS?{??
  1. ????public?String?sayHello(String?name){??
  2. ????????return?"jws?=?"?+?name;??
  3. ????}??
  4. }??
将上面java类后缀修改为jws复制到tomcat/webapps/axis/ 目录下。访问路径 :项目名/类名.jws?wsdl
访问这个路径:http://127.0.0.1:8080/axis/HelloJWS.jws?wsdl 在浏览器上就可以看到wsdl了,表示发布服务成功。
JWS方式总结:
? ? ? 1. 即时发布方式比较简单,写个类一丢就可以了。
? ? ? 2. 类不能有包名,而且如果你只有class或者jar包则不可以使用这种方式。
? ? ? 3. 所以可以看出,这种方式只能发布特别特别简单的服务。 不适用企业开发,所以了解就好了。

3、定制发布

定制发布的步骤:
? ? ? 定制发布就是需要自己写配置文件然后指定哪些方法是需要发布的,哪些方法不需要发布。所以这种比较好。
一般来说定制发布的步骤如下:
? ? ? 1. 新建一个web工程。
? ? ? 2. 导入jar包,如果使用maven管理jar包则使用上面给出的maven依赖即可。
? ? ? 3. 像正常项目那样编写业务类。
? ? ? 4. 修改web.xml文件,添加一个访问地址,用于访问wsdl文件。
? ? ? 5. 写一个deploy.wsdd文件,配置哪些方法需要发布,哪些不用。然后在cmd命令行执行一个命令读取这个文件。
服务就发布了。如果想取消则可以写一个undeploy.wsdd文件,同样的命令执行这个文件即可。(下面会详细说明)
? ? ? 6. 访问wsdl,看看服务是否发布成功。
? ? ?? 注意:?上述步骤的第4步是为了生成server-config.wsdd文件。如果你直接编辑server-config.wsdd文件。那么就
不用那么麻烦了。所以我比较喜欢直接编辑server-config.wsdd文件。
定制发布的详细流程:
? ? ? 1. 创建一个maven工程,并添加依赖导入jar包,编辑一个普通的方法用于发布。
? ? ? ? ? ??


? ? ? 上图就是整个项目的结构了。其中WEB-INF目录下的deploy.wsdd表示写入其中的配置会被发布。undeploy.wsdd则用于取消发布。
? ? ? 2. 修改web.xml文件,增加一个访问路径。所以如果你想看看项目一共发布了多少个服,访问这个路径即可。
copy
? <!DOCTYPE?web-app?PUBLIC??
  • ?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"??
  • ?"http://java.sun.com/dtd/web-app_2_3.dtd"?web-appservlet ????????servlet-name>AxisServlet ????????servlet-class>org.apache.axis.transport.http.AxisServlet ??
  • servlet-mappingurl-pattern>/services/*>??
  • ? ? ? 3. 新建deploy.wsdd文件,将我们服务发布出去。
    copy
    ? deployment?xmlns="http://xml.apache.org/axis/wsdd/"??
  • ????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" ????<!--?name:?服务名随便写。?-->??
  • service?name="SayHello"?provider="java:RPC"parameter?name="className"?value="com.ztesoft.axis.ws.HelloImpl"?/>??
  • ????????<!--?value表示哪些方法需要发布,*表示全部的public方法。?-->??
  • ????????<!--?如果想指定方法名,方法名与方法名用逗号隔开?-->??
  • parameter?name="allowedMethods"?value="*"?/>??
  • <!--?指定命名空间?-->??
  • namespace>http://www.ztesoft.com/axis/sayHelloservicedeployment>??
  • ? ? ? 4. 部署项目到tomcat,并且启动项目。这个时候访问?http://127.0.0.1:8080/axis/services(因为web.xml配置了这个servlet路径,
    所以访问这个路径)你会发现有两个服务,AdminService 和 Version。因为我们还没有生成server-config.wsdd文件,所以只有两个。
    ? ? ? 5. 通过命令行执行命令读取deploy.wsdd生成server-config.wsdd文件发布服务。项目的WEB-INF目录下
    [plain]? copy
    ?

    派生到我的代码片

      java?-Djava.ext.dirs=lib?org.apache.axis.client.AdminClient?-l?http://127.0.0.1:8080/axis/services?deploy.wsdd??
    ? ? ? 注意:此处是相对路径,所以你需要到tomcat/webapps/axis/WEB-INF 目录下执行cmd。你就会看到

    ? ? ? 如果你看到上面两行内容,说明执行成功了。-l 后面的路径就是你在web.xml中配置的AxisServlet路径这个时候该目录下会生成
    一个server-config.wsdd文件。这时访问?http://127.0.0.1:8080/axis/services。你就会发现多出来一个服务。点击SayHello的wsdl
    你就可以看见服务描述了。

    ? ? ? 如果不想发布这个服务了,则同样执行上面的命令,将deploy.wsdd换成undeploy.wsdd即可。undeploy.wsdd内容如下
    执行之后就看不到该服务了。下面的服务名就是上面可以随便写的name。
    copy
    ? deployment?xmlns="http://xml.apache.org/axis/wsdd/"?service?name="SayHello"??>??
    总结:
    ? ? ? 1. 定制发布比即时发布方便很多,可以自由定义。所以一般用这种,而且不需要添加任何注解只需要配置一个文件即可。
    ? ? ? 2. deploy.wsdd以及undeploy.wsdd的目的都是为了生成或者修改server-config.wsdd。所以直接编辑server-config.wsdd就可以了。
    ? ? ? 3. 完整的server-config.wsdd文件如下。
    copy
    ? <?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"globalConfigurationparameter?name="sendMultiRefs"?value="true"?parameter?name="disablePrettyXML"?value="true"?parameter?name="adminPassword"?value="admin"?parameter?name="dotNetSoapEncFix"?value="true"?parameter?name="enableNamespacePrefixOptimization"?value="false"?parameter?name="sendXMLDeclaration"?value="true"?parameter?name="attachments.implementation"?value="org.apache.axis.attachments.AttachmentsImpl"?parameter?name="sendXsiTypes"?value="true"?requestFlow ????????????handler?type="java:org.apache.axis.handlers.JWSHandler" ????????????????parameter?name="scope"?value="session"?handler ???????????? ????????????????parameter?name="scope"?value="request"?parameter?name="extension"?value=".jwr"?handler?name="URLMapper"?type="java:org.apache.axis.handlers.http.URLMapper"?handler?name="LocalResponder"?type="java:org.apache.axis.transport.local.LocalResponder"?handler?name="Authenticate"?type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"?transport?name="http"handler?type="URLMapper"?handler?type="java:org.apache.axis.handlers.http.HTTPAuthHandler"?parameter?name="qs:list"??
  • ????????????value="org.apache.axis.transport.http.QSListHandler"?parameter?name="qs:wsdl"??
  • ????????????value="org.apache.axis.transport.http.QSWSDLHandler"?parameter?name="qs.list"??
  • parameter?name="qs.method"??
  • ????????????value="org.apache.axis.transport.http.QSMethodHandler"?parameter?name="qs:method"??
  • parameter?name="qs.wsdl"??
  • transporttransport?name="local"responseFlowhandler?type="LocalResponder"?<!--?想要添加或者取消修改一下内容即可,AdminService与Version注销不提供服务。?-->??
  • >??
  • 4、高级特性Handler & Chain?

    ? ? ? 上面说了直接编辑server-config.wsdd即可发布服务,所以下面就不再使用命令行方式。
    Handler:
    ? ? ? 有时候我们有一些特别的需求,比如当执行我们提供的服务时,希望有一些拦截动作。例如拦截一些非法的用户,
    或者统计下这个服务被调用了多少次等很奇怪的问题。对于这种问题一般做法就是设置拦截器。就是在执行你的服务
    前执行某些方法,执行之后在执行某些方法。Handler就是做这类事情的。项目结构如下:
    具体步骤:
    ? ? ? 1. 写两个类,继承BasicHandler。类分别叫BeforeHandle,AfterHandler。
    ? ? ? 2. 配置server-config.wsdd,将这两个方法加入到服务中。
    详细步骤:
    ? ? ? 1. 创建类并继承BasicHandler
    copy
    ? package?com.ztesoft.axis.ws;??
  • ??
  • import?org.apache.axis.AxisFault;??
  • import?org.apache.axis.MessageContext;??
  • import?org.apache.axis.handlers.BasicHandler;??
  • class?BeforeHandle?extends?BasicHandler?{??
  • ????/**?
  • ?????*/??
  • ????private?static?final?long?serialVersionUID?=?-1804045183252961242L;??
  • ????@Override??
  • void?invoke(MessageContext?msgContext)?throws?AxisFault?{??
  • ????????String?someParam?=?(String)?this.getOption("someParam");??
  • ????????System.out.println("前置方法,这里会第一个被调用");??
  • ????????System.out.println("server-config.wsdd中配置的自定义参数?:"?+?someParam);??
  • ??????????
  • ????}??
  • }??
  • copy
    ? class?AfterHandler?extends?BasicHandler{??
  • long?serialVersionUID?=?-1077633556581583559L;??
  • ????????System.out.println("后置方法,执行完服务后调用我。我是第三个被调用的。");??
  • }??
  • ? ? ? 2. 修改server-config.wsdd文件,type里面的类路径前面需要加上前缀 java:
    copy
    ? <!--?添加一个自定义的handler?-->??
  • handler?name="beforeHandler"?type="java:com.ztesoft.axis.ws.BeforeHandle" ????<!--?这里还可以设置自定义参数,在类中使用this.getOptions("someParam")?获取参数?-->??
  • parameter?name="someParam"?value="好好学习,天天向上"?handler?name="afterHandler"?type="java:com.ztesoft.axis.ws.AfterHandler"?<!--?添加handler?-->??
  • handler?type="beforeHandler"?handler?type="afterHandler"?>??
  • Chain:
    ? ? ? 如果我有一连串的方法需要被调用,那该怎么办呢?将Handler一个一个的连接起来组成一个链就是chain。
    步骤:
    ? ? ? 1. 新建一个类继承SimpleChain。
    ? ? ? 2. 将这个类提供的服务像Handler一样配置到server-config.wsdd中。
    详细步骤:
    ? ? ? 1. 新建类
    copy
    ? import?org.apache.axis.SimpleChain;??
  • class?BeforeChain?extends?SimpleChain{??
  • long?serialVersionUID?=?7781745675745772330L;??
  • ??????
  • //?写在构造器重即可??
  • public?BeforeChain(){??
  • ????????BeforeHandle?beforeHandle?=?new?BeforeHandle();??
  • ????????AfterHandler?afterHandler?=?new?AfterHandler();??
  • ??????????
  • ????????//?执行顺序与添加顺序一致。??
  • this.addHandler(beforeHandle);??
  • ????????this.addHandler(afterHandler);??
  • }??
  • copy
    ? class?AfterChain?extends?SimpleChain?{??
  • long?serialVersionUID?=?-620214048210047247L;??
  • public?AfterChain(){??
  • ????????BeforeHandle?beforeHandle?=?new?BeforeHandle();??
  • ????????AfterHandler?afterHandler?=?new?AfterHandler();??
  • ????????//?执行顺序与添加顺序一致。??
  • }??
  • ? ? ? 2. 修改配置文件
    copy
    ? <!--?添加自定义Chain?-->??
  • chain?name="beforeChain"handler?type="java:com.ztesoft.axis.ws.BeforeChain"?chainchain?name="afterChain"handler?type="java:com.ztesoft.axis.ws.AfterChain"?chain?type="beforeChain"?chain?type="afterChain"?>??
  • 总结:
    ? ? ? Handler与Chain只是一种拦截作用,Axis也默认提供了一些拦截的类。例如:有个Handler叫做 Authenticate。
    利用他可以实现用户权限控制,即调用方法的时候需要提供用户名密码,只有正确的才能调用。利用Handler和
    Chain我们也可以做一些日志记录等相关内容,或者报文记录。配置在全局拦截里面, globalConfiguration节点即可。

    5、自带调试工具tcpmon

    ? ? ? 有时候我们想查看我们发送与请求的内容,这个时候我们该怎么做呢?tcpmon也许是一个很不错的选择。tcpmon主要
    起到一个拦截的作用,原理如下,本来我们是直接访问8080端口的。使用tcpmon之后,我们访问地址改成8081(可以自
    己定义)接着请求的内容被记录下来,然后tcpmon将请求的内容一模一样的转到8080。处理完成之后服务器将处理内容
    回给tcpmon,tcpmon记录返回内容。在将处理结果转发给我们。
    ? ? ? 该工具集成到了axis包中,查找org.apache.axis.utils.tcpmon ,运行这个类的main方法即可看见

    ? ? ? 点击Add按钮,修改请求地址端口为红色的端口。发起服务调用即可看到下面接受与发送的消息了。

    总结:
    ? ? ? 通过拦截webservice的请求我们发现,webservice采用http的方式传递数据。传输的数据是满足soap规则的xml文档。
    由此可以证明? WebService = HTTP + SOAP + WSDL

    6、额外注意事项

    ? ? ? Axis技术发布服务就暂时写到这里了。如果博文中有什么不对的地方请指出,我会第一时间修订过来。这里只说了如何
    发布一个服务,关于调用则会在后续章节详细说明。

    7、附录一些最终的配置文件

    web.xml配置
    copy
    ? >??
    server-config.wsdd配置文件详细。
    copy
    ? parameter?name="qs:list"?value="org.apache.axis.transport.http.QSListHandler"?parameter?name="qs:wsdl"?value="org.apache.axis.transport.http.QSWSDLHandler"?parameter?name="qs.list"?value="org.apache.axis.transport.http.QSListHandler"?parameter?name="qs.method"?value="org.apache.axis.transport.http.QSMethodHandler"?parameter?name="qs:method"?value="org.apache.axis.transport.http.QSMethodHandler"?parameter?name="qs.wsdl"?value="org.apache.axis.transport.http.QSWSDLHandler"? ??????
  • <!--?添加自定义Chain?-->??
  • <!--?添加handler或者Chain?-->??
  • ????????????<!--?<handler?type="beforeHandler"/>?-->??
  • <!--?<handler?type="afterHandler"/>?-->??
  • >
  • (编辑:李大同)

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

      推荐文章
        热点阅读