Web Service之AXIS定制发布

2024-06-08 10:08
文章标签 定制 web 发布 service axis

本文主要是介绍Web Service之AXIS定制发布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

新建一个服务端java项目,在里面先写一个服务端的java代码(HelloWSDD.java),代码如下:

 

publicclassHelloWSDD {

   //定制提供web服务的方法

   privateintrequestCount = 0 ;

   public String hello(Stringname){

     requestCount++ ;

     System.out.println("调用的次数"+requestCount);

     return"欢迎你 " + name ;

   }

   public Float add(Float a,Floatb){

     requestCount++ ;

     System.out.println("调用的次数"+requestCount);

     return a + b ;

   }

}

 

保存这个文件,如果myeclipse已经设置为自动编译的话,就直接到项目里面找出编译出的HelloWSDD.Class文件,如果不是自动编译,编译后再找这个文件。把这个文件(包含包的结构,比如我的包是com. webservice.wsdd,就直接把com包复制出来)复制到tomcat里面的axis目录中的\WEB-INF\classes。既然class文件可以,那么生成的jar包也不会有什么问题了。

 

编写一个个人的*.wsdd文件,描述一个web服务,在官网上下的axis里面有samples文件夹,里面有例子,不过我这个没有。

那么就编写一个叫HelloWSDD.wsdd的文件,里面的代码如下:

 

<deployment name="test"xmlns="http://xml.apache.org/axis/wsdd"

       xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

 

 

       <servicename="urn:cominfo" provider="java:RPC">

              <parametername="className" value="指明需要发布的类绝对位置" />

              <parametername="allowedMethods" value="方法名" />

       </service>

 

</depoyment>

 

把这个文件放到tomcat里面的axis文件夹里面的的web-inf文件夹里面。再运用命令行的方式会自动生成server-config.wsdd文件,不过这种方法有点麻烦,不如直接编写server-config.wsdd,具体代码如下:


<?xml version="1.0"encoding="UTF-8"?>

<deployment name="test"xmlns="http://xml.apache.org/axis/wsdd"

       xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

      

       <globalConfiguration>

              <parametername="adminPassword" value="admin" />

              <parametername="attachments.implementation"value="org.apache.axis.attachments.AttachmentsImpl" />

              <parametername="sendXsiTypes" value="true" />

              <parametername="sendMultiRefs" value="true" />

              <parametername="sendXMLDeclaration" value="true" />

              <parametername="axis.sendMinimizedElements" value="true" />

 

              <requestFlow>

                     <handlertype="java:org.apache.axis.handlers.JWSHandler">

                            <parametername="scope" value="request" />

                            <parametername="extension" value=".jwr" />

                     </handler>

              </requestFlow>

       </globalConfiguration>

       <handlername="LocalResponder"type="java:org.apache.axis.transport.local.LocalResponder" />

       <handlername="URLMapper"type="java:org.apache.axis.handlers.http.URLMapper" />

       <handlername="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

 

       <servicename="HelloWSDD" provider="java:RPC">

              <parametername="className" value="com.webservice.wsdd.HelloWSDD"/>

              <parametername="allowedMethods" value="*" />

       </service>

 

       <transportname="http">

              <requestFlow>

                     <handlertype="URLMapper" />

                     <handlertype="java:org.apache.axis.handler.http.HTTPAuthHandler" />

              </requestFlow>

       </transport>

       <transportname="local">

              <requestFlow>

                     <handlertype="LocalResponder" />

              </requestFlow>

       </transport>

 

</deployment>

 

上面的文件是完全抄视频的,一个个字母地敲,累死人了。敲完,运行tomcat,报错!仔细又核对,发现两处小错误,又运行,还是不行!说什么deployment写错了,推荐的写法是deployment,这不是完全一样的吗?!真是郁闷。搞了半天,都不行,只好不按视频的教法来做。把HelloWSDD.wsdd放到了WEB-INF目录中,这个文件是这样编写的:

<deployment xmlns=http://xml.apache.org/axis/wsddxmlns:java="http://xml.apache.org/axis/wsdd/providers/java">     

       <servicename="HelloWSDD" provider="java:RPC" style="rpc"use="encoded">

              <parametername="wsdlTargetNamespace"value="http://wsdd.webservice.com" />

              <parametername="className" value="com.webservice.wsdd.HelloWSDD"/>

              <parametername="scope" value="Application" />

              <parametername="allowedMethods" value="*" />

       </service>

</deployment>

开启CMD,进入WEB-INF这个目录,运行以下命令:

Java -Djava.ext.dirs=liborg.apache.axis.client.AdminClient –l http://localhost:8089/axis/servlet/AxisServletHelloWSDD.wsdd

出现了如下错误:

查了资料,说axis的环境变量没有配好!没办法,配呗!

AXIS_HOME:

C:\tomcat7.0\webapps\axis\WEB-INF\lib

AXISCLASSPATH:

.;%AXIS_HOME%\activation.jar;%AXIS_HOME%\axis.jar;%AXIS_HOME%\axis-schema.jar;%AXIS_HOME%\axis-ant.jar;%AXIS_HOME%\commons-discovery-0.2.jar;%AXIS_HOME%\commons-logging-1.0.4.jar;%AXIS_HOME%\jaxrpc.jar;%AXIS_HOME%\log4j-1.2.8.jar;%AXIS_HOME%\mail.jar;%AXIS_HOME%\saaj.jar;%AXIS_HOME%\wsdl4j-1.5.1.jar;%AXIS_HOME%\xmlsec.jar

在classpath后面添加

% AXISCLASSPATH %

重启tomcat,又是输入命令。还是不行!

再查资料,又有人说WEB-INF里面又有一个现成的server-config.wsdd。又去下载一个。重启tomcat居然不报错,很好。接着重复刚才的操作,还是不行,跳出一样的错误信息!再查资料,又有人说tomcat端口号要设为默认的8080。好和axis默认配置对应才行,所以把tomcat端口号改回8080,再试,还是不行啊!真是没法了!最后回归按视频的操作,在server-config.wsdd里面修改service的属性。重启tomcat,没有报错,在浏览器里面输入:http://localhost:8089/axis/servlet/AxisServlet  终于跳出了理想的效果:

搞这个东西居然花费了大约四个钟头!真是折磨人啊!自己手贱,把axis的环境变量配置全部删除了,不过也没有出现错误。看来问题的根源还是视频的server-config.wsdd代码有不正确的地方。

 

正确的server-config.wsdd代码:

<?xml version="1.0"encoding="UTF-8"?>

<deploymentxmlns="http://xml.apache.org/axis/wsdd/"

           xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<globalConfiguration>

 <parameter name="adminPassword"value="admin"/>

 <parameter name="attachments.Directory"value="./attachments"/>

 <parameter name="attachments.implementation"value="org.apache.axis.attachments.AttachmentsImpl"/>

 <parameter name="sendXsiTypes" value="true"/>

 <parameter name="sendMultiRefs" value="true"/>

 <parameter name="sendXMLDeclaration"value="true"/>

 <parameter name="axis.sendMinimizedElements"value="true"/>

 <requestFlow>

       <handlertype="java:org.apache.axis.handlers.JWSHandler">

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

  </handler>

  <handlertype="java:org.apache.axis.handlers.JWSHandler">

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

   <parameter name="extension" value=".jwr"/>

  </handler>

 </requestFlow>

 </globalConfiguration>

 <handler name="LocalResponder"

         type="java:org.apache.axis.transport.local.LocalResponder"/>

 <handler name="URLMapper"

         type="java:org.apache.axis.handlers.http.URLMapper"/>

 <handler name="Authenticate"

         type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

 

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

              <parametername="className" value="com.webservice.wsdd.HelloWSDD"/>

              <parametername="allowedMethods" value="*" />

       </service>

 

<transport name="http">

 <requestFlow>

  <handler type="URLMapper"/>

  <handlertype="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

 </requestFlow>

 </transport>

 <transport name="local">

 <responseFlow>

  <handler type="LocalResponder"/>

 </responseFlow>

 </transport>

</deployment>

 

 

回到客户端的那个项目,在里面编写调用的代码。文件名为:TestClient.java

代码如下:

 

import javax.xml.namespace.QName;

 

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

 

publicclassTestClient {

 

   publicstaticvoid main(String[] args) throws Exception {

     //指定获取web服务的位置

     Stringurl = "http://localhost:8089/axis/services/HelloWSDD" ;

     //区别于jws方式的指定:http://localhost:8089/axis/Hello.jws

      Service service = new Service() ;

     Callcall = (Call) service.createCall() ;

     call.setTargetEndpointAddress(new java.net.URL(url)) ;

     call.setOperationName(new QName(url,"add")) ;

     FloatreturnValue = (Float) call.invoke(new Object[]{newFloat(3.2),newFloat(4.5)}) ;

     System.out.println(returnValue);

   }

}

 

运行,控制台出现了结果:7.7

再看tomcat的控制台,服务器这边出现了:“调用的次数1”的字样!再运行客户端这边的程序,还是出现同样的字样,可见是重新调用服务器这边的服务了。如果要改变这种现象,就要修改服务端这边的配置信息。

 

接下来编写取消的服务:*.wsdd

只要把元素deployment改为undeployment就行了。

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

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

       <servicename=”要取消的服务名”>

</ undeployment >

以后取消服务其实也不用这么麻烦,直接删除或者注销服务就行了。

 

Web Service Object的生存范围

<parameter name=”scope”value=”request/session/application” />

request :Axis为每一个SOAP的请求产生服务对象——针对于请求,缺点开销大

session:Axis为每一个调用WebService的客户端产生服务对象——针对会话

application:Axis在服务器的内存中直接new一个服务对象,然后所有的web的对象都调用这个对象。优点开销最小,缺点就是个性化不能满足。

 

针对相关的服务设置对应的请求范围。


这篇关于Web Service之AXIS定制发布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041879

相关文章

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景