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

相关文章

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面