搭建简单的axis1.4 web服务

1、在官方网站下载axis的工程(这个等下就有用的)和源码、jar包等,下载地址是:

http://mirror.bit.edu.cn/apache/axis/axis/java/1.4/(原作者给的链接地址已失效,笔者附上自己下载的地址,点击不能正常链接的话,请将地址拷贝到浏览器访问

2、解压下载的工程或源码(两个中任意一个都可以),解压axis-bin-1.4可以看到大致目录是这样的:

docs是文档、lib是jar包、sample是示例、xmls是当前工程所需的xml、webapps是当前工程的webroot目录;

我们打开webapps目录就可以看到一个axis的文件夹,这个文件夹里面有WEB-INF文件夹和一些页面,将axis复制到你的tomcat的webapps目录下。然后启动tomcat服务,访问http://localhost:8080/axis/,看到下面的解码就说明部署成功了:

以后我们将和这个工程不离不弃,它将在我们的axis1.x的webService中发挥很大的作用!

3、创建我们自己的web工程,这里我新建的AxisWebService;创建好工程后,将刚才解压的axis-bin中的lib的jar包copy到当前工程的lib中;

(转载时附注:下载的1.4的包里面不一定包含以下所有包,笔者试了试,将lib下的包全部拷贝到自己的工程lib目录下,实现客户端是不会有问题的

axis-ant.jar

axis.jar

commons-discovery-0.2.jar

commons-logging-1.0.4.jar

jaxrpc.jar

log4j-1.2.8.jar

saaj.jar

wsdl4j-1.5.1.jar

activation-1.1.jar

mail-1.4.jar

创建webService类文件,代码如下:


package  com.hoo.service;  /**  * <b>function:</b>jws的axis WebService
 *  @author  hoojo
 * @createDate Dec 15, 2010 17:03:49 PM
 * @file HelloWorldService.java
 * @package com.hoo.service
 * @project AxisWebService
 * @blog  http://blog.csdn.net/IBM_hoojo  * @email [email protected]
 *  @version  1.0  */   public   class  HelloWorldService {  public  String sayHello(String name,  int  age) {  return  name  +   "  say : hello world! [axis] my age is  "   +  age;
 }
}

4、复制HelloWorldService.java到我们刚才复制的axis文件夹下即可;也就是tomcat下的webapps下的axis下即可;注意:还有重要的一般就是要将这个java文件中的包名去掉,并且将这个文件重命名为HelloWorldService.jws;如果带包名的话,请求后编译的class将会在包路径下,这样我们在全球当前jws的时候就会出现找不到class,详细的你可以到发布在tomcat下的工程看看WEB-INF目录下的jwsClass就一目了然了。

上面的工作完成后,启动tomcat服务器,访问http://localhost:8080/axis/HelloWorldService.jws

你会看到:

There is a Web Service here

Click to see the WSDL

如果你和我看到的是一样的,就证明你已经成功的部署了一个axis1.x的webService。然后我们点击下就可以看到wsdl的xml文件了,内容如下:


<? xml version="1.0" encoding="UTF-8"  ?>  -  < wsdl:definitions  targetNamespace ="http://localhost:8080/axis/HelloWorldService.jws"  xmlns:apachesoap ="http://xml.apache.org/xml-soap"  xmlns:impl ="http://localhost:8080/axis/HelloWorldService.jws"  xmlns:intf ="http://localhost:8080/axis/HelloWorldService.jws"  xmlns:soapenc ="http://schemas.xmlsoap.org/soap/encoding/"  xmlns:wsdl ="http://schemas.xmlsoap.org/wsdl/"  xmlns:wsdlsoap ="http://schemas.xmlsoap.org/wsdl/soap/"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema" >  -  <!--  WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)  -->  -  < wsdl:message  name ="sayHelloResponse" >   < wsdl:part  name ="sayHelloReturn"  type ="xsd:string"   />   </ wsdl:message >  -  < wsdl:message  name ="sayHelloRequest" >   < wsdl:part  name ="name"  type ="xsd:string"   />   < wsdl:part  name ="age"  type ="xsd:int"   />   </ wsdl:message >  -  < wsdl:portType  name ="HelloWorldService" >  -  < wsdl:operation  name ="sayHello"  parameterOrder ="name age" >   < wsdl:input  message ="impl:sayHelloRequest"  name ="sayHelloRequest"   />   < wsdl:output  message ="impl:sayHelloResponse"  name ="sayHelloResponse"   />   </ wsdl:operation >   </ wsdl:portType >  -  < wsdl:binding  name ="HelloWorldServiceSoapBinding"  type ="impl:HelloWorldService" >   < wsdlsoap:binding  style ="rpc"  transport ="http://schemas.xmlsoap.org/soap/http"   />  -  < wsdl:operation  name ="sayHello" >   < wsdlsoap:operation  soapAction =""   />  -  < wsdl:input  name ="sayHelloRequest" >   < wsdlsoap:body  encodingStyle ="http://schemas.xmlsoap.org/soap/encoding/"  namespace ="http://DefaultNamespace"  use ="encoded"   />   </ wsdl:input >  -  < wsdl:output  name ="sayHelloResponse" >   < wsdlsoap:body  encodingStyle ="http://schemas.xmlsoap.org/soap/encoding/"  namespace ="http://localhost:8080/axis/HelloWorldService.jws"  use ="encoded"   />   </ wsdl:output >   </ wsdl:operation >   </ wsdl:binding >  -  < wsdl:service  name ="HelloWorldServiceService" >  -  < wsdl:port  binding ="impl:HelloWorldServiceSoapBinding"  name ="HelloWorldService" >   < wsdlsoap:address  location ="http://localhost:8080/axis/HelloWorldService.jws"   />   </ wsdl:port >   </ wsdl:service >   </ wsdl:definitions >

分析下wsdl的xml文件内容:

targetNamespace=http://localhost:8080/axis/HelloWorldService.jws 

是我们部署的webservice命名空间,也就是我们访问的webService路径。

<wsdl:message name="sayHelloResponse">

           <wsdl:part name="sayHelloReturn" type="xsd:string" />

  </wsdl:message>

是返回值的信息,sayHelloResponse代表响应,即返回值,type是返回值的类型

<wsdl:message name="sayHelloRequest">

           <wsdl:part name="name" type="xsd:string" />

           <wsdl:part name="age" type="xsd:int" />

  </wsdl:message>

请求方法参数信息,sayHelloRequest即请求,part是参数parameter,type是参数的类型

<wsdl:portType name="HelloWorldService">

<wsdl:operation name="sayHello" parameterOrder="name age">

<wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest" />

<wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse" />

</wsdl:operation>

</wsdl:portType>

portType的name是当前webService的名称,operation是一个操作,即可以调用的方法。name就是方法名称了,parameterOrder是参数,input输入即传入参数,output输出即返回的值;

<wsdl:service name="HelloWorldServiceService">

<wsdl:port binding="impl:HelloWorldServiceSoapBinding" name="HelloWorldService">

<wsdlsoap:address location="http://localhost:8080/axis/HelloWorldService.jws" />

</wsdl:port>

</wsdl:service>

webService的名称和绑定的信息,以及访问的url地址。

5、下面编写客户端代码

代码如下:


package  com.hoo.client;  import  java.rmi.RemoteException;  import  javax.xml.namespace.QName;  import  javax.xml.rpc.ServiceException;  import  org.apache.axis.client.Call;  import  org.apache.axis.client.Service;  public   class  HelloWorldClient {  /**  * <b>function:</b>jws axis WebService客户端
 *  @author  hoojo
 * @createDate 2010-12-15 下午05:10:28
 *  @param  args
 *  @throws  ServiceException
 *  @throws  RemoteException  */   public   static   void  main(String[] args)  throws  ServiceException, RemoteException {  // webService访问地址  // String url = " http://localhost :8080/axis/HelloWorldService.jws";    String url  =   " http://localhost:8080/AxisWebService/HelloWorldService.jws " ;  // 创建服务    Service service  =   new  Service();  // 创建调用句柄    Call call  =  (Call) service.createCall();  // 设置请求地址    call.setTargetEndpointAddress(url);  /**  * 设置调用的方法和方法的命名空间;
 * 因为这里是手动发布到webroot目录下的,所以命名空间和请求地址一致
 * 当然null也可以,因为本身它就没有设置命名空间,一般方法的命名空间是
 * 包名倒写组成,如com.hoo.service,ns= http://service.hoo.com   */  call.setOperationName( new  QName( null ,  " sayHello " ));  /**  * 用call调用sayHello方法,设置请求的参数,返回的就是返回值了  */  String result  =  (String) call.invoke( new  Object[] {  " jack " ,  99  });
 System.out.println(result);
 }
}

分析上面的代码

url是根据xml文件中的wsdlsoap:address location的信息得到的,命名空间和方法名称是根据


< wsdl:operation  name ="sayHello" >   < wsdlsoap:operation  soapAction =""   />  -  < wsdl:input  name ="sayHelloRequest" >   < wsdlsoap:body  encodingStyle ="http://schemas.xmlsoap.org/soap/encoding/"  namespace ="http://DefaultNamespace"  use ="encoded"   />   </ wsdl:input >  -  < wsdl:output  name ="sayHelloResponse" >   < wsdlsoap:body  encodingStyle ="http://schemas.xmlsoap.org/soap/encoding/"  namespace ="http://localhost:8080/axis/HelloWorldJWS.jws"  use ="encoded"   />   </ wsdl:output >

的信息得到的,而请求参数和返回值的详细信息是在


< wsdl:message  name ="sayHelloRequest" >   < wsdl:part  name ="name"  type ="xsd:string"   />   < wsdl:part  name ="age"  type ="xsd:int"   />   </ wsdl:message >  -  < wsdl:message  name ="sayHelloResponse" >   < wsdl:part  name ="sayHelloReturn"  type ="xsd:string"   />   </ wsdl:message >  -  < wsdl:portType  name ="HelloWorldJWS" >  -  < wsdl:operation  name ="sayHello"  parameterOrder ="name age" >   < wsdl:input  message ="impl:sayHelloRequest"  name ="sayHelloRequest"   />   < wsdl:output  message ="impl:sayHelloResponse"  name ="sayHelloResponse"   />   </ wsdl:operation >   </ wsdl:portType >

里可以很详细的看到。

至于代码的call.invoke是java中反射机制,不懂的建议看看jdk文档java.lang.reflect包下的内容。

运行上面的代码就可以看到控制台输出:

jack say : hello world! [axis] my age is 99

好了,axis的就完成了,下面我们不用官方的axis的工程,我们写一个自己的AxisWebService工程,然后发布的tomcat的webapps中看看。

6、刚才copy了lib下的jar包,现在要copy下web.xml中的内容,去掉里面的AdminServlet这个配置,其他的都可保留。

然后像刚才一样,将HelloWorldService.java复制到webroot目录下,去掉包名,并且修改后缀为HelloWorldService.jws即可。(如果有兴趣可以看看,发布在tomcat目录下的当前工程的web-inf目录,看看里面是否多了些东西)最后发布当前web工程,访问http://localhost:8080/AxisWebService/HelloWorldService.jws,如果看到和刚才一样的界面,证明你快成功了。点击链接看到wsdl的xml就成功了。

好了,还没有完。看看web.xml中的配置,你大概就知道为什么了。

web.xml中最主要的文件就是org.apache.axis.transport.http.AxisServlet,它就是webService的中央控制器;即配置jws的后缀也在web.xml中定义的,在看看还有services/*,这就表明上面的访问路径也可以是这样的:http://localhost:8080/AxisWebService/services/HelloWorldService

当然如果要这样写就需要用wsdd的发布方式,详细请看下文!

参考文档:http://ws.apache.org/axis/java/user-guide.html

时间: 2024-11-04 17:55:41

搭建简单的axis1.4 web服务的相关文章

综合小实验:GNS3配合VMware搭建DHCP、DNS、Web服务

实验要求: 1.sw2为二层交换机,分别有vlan10,vlan20,vlan100 三个vlan,f1/1-3是接入链路,f1/0为中继链路.2.sw1为三层交换机,分别为三个vlan提供网关,vlan10:192.168.10.1/24.vlan20:192.168.20.1/24.vlan100:192.168.100.1/24,外网接口为f1/1:12.0.0.1/243.局域网内部Linux服务器搭建dhcp服务功能为vlan10,vlan20及vlan100提供地址,地址范围:Vla

快速搭建简单的LBS程序——地图服务

很多时候,我们的程序需要提供需要搭建基于位置的服务(LBS),本文这里简单的介绍一下其涉及的一些基本知识. 墨卡托投影 地图本身是一个三维图像,但在电脑上展示时,往往需要将其转换为二维的平面图形,需要通过投影的方式将三维空间中的点映射到二维空间中.地图投影需要建立地球表面点与投影平面点的一一对应关系. 我们经常使用的一种投影算法是墨卡托投影,大概做法就是先拿一个圆柱体使它的轴与地球自转轴重合,先把球面上的点投影到圆柱的侧面上,再把圆柱展开就得到长方形的地图了. 关于墨卡托投影可以更多信息可以参看

Centos 7搭建LVS+Keepalived高可用Web服务群集

一.LVS+Keepalived高可用群集 Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器.管理服务器池,而不仅仅用作双机热备.使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性:对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入. 在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器.此博客将以DR模式的

Linux系统搭建简单 D H C P服务

首先要给本机配置静态ip,以下为修改网卡信息的配置文件路径: 配置好静态ip后,我们就可以安装DHCP服务了,DHCP服务的包文件在系统盘,接下来挂载系统盘: 以上作用域的各个选项含义如下: subnet & netmask:声明网段地址: range:设置地址池的范围: option domain-name-servers:该作用域指定的DNS服务器地址: option domain-name:指定默认搜索域: option routes:指定该作用域的网关: option broadcast

CentOS 7搭建简单的DNS分离解析服务

实验环境: 1.win10系统一台作为局域网内的客户机.2.win10系统一台作为广域网的客户机.3.CentOS7系统一台作为DNS服务器. 实验准备: 1.在服务器系统上安装DNS服务程序"bind",注意:需要在联网环境下安装. 输入:yum install bind -y 2.安装完毕后,给centOS7系统增加一块网卡,加上原来共两块网卡的网络模式均设为仅主机模式. 3.分别将系统win10.win10-1的网络模式改为仅主机模式. 4.进入centOS7系统,用"

搭建:LVS+Keepalived高可用Web服务群集环境

该服务涉及到的技术较多,相关技术文档的具体解释可以参考以下链接: Centos 7基于DR(直接路由)模式的负载均衡配置详解: Centos 7基于NAT(地址转换)模式的负载均衡配置详解: LVS负载均衡群集详解: 上面的博文结合,可以搭建出keepalived+DR/NAT模式的高可用web群集,这篇博文以keepalived+DR的环境来搭建一个高可用的web服务群集. 该博文以配置为主,并且按照生产环境来配置,可照搬,环境如下: 一.环境分析: 1.2个调度器和2个web节点使用同一个网

隐藏web服务的头信息

一.隐藏nginx头信息 什么是header信息?header信息是访客访问你的网站时,web服务返回给客户端的一段信息,包含了网页的一些基本情况.那么为什么要修改 header信息呢?主要是为了防止被居心不良的人利用来获取漏洞信息,例如:通过最最简单的获取header信息发现你的web服务器版本是 nginx/0.7.60,现在又已知这个版本的nginx有某个漏洞,那么就可以利用这个漏洞来攻击你了.互联网信息更新非常快,web服务程序的更新 也是很频繁,我们很多时候由于种种原因不能及时打上补丁

基于gin框架搭建的一个简单的web服务

刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技术选型 Top 6 web frameworks for Go as of 2017,可以看看这个go语言中Web框架的对比和老大的推荐,我选择gin框架作为学习go语言的框架. image.png 2.Gin介绍 gin框架的中文文档,这个文档相当好,清晰明了解释gin框架的整个用法.下面是gin

golang 搭建 web服务

go语言可以很简单的搭建起一个web服务,重要的只需要仅仅几行,代码如下:package main import ( "fmt" "log" "net/http") func main() { http.HandleFunc("/", HelloWeb) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("erro