转:

一、搭建简单的axis web服务

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

http://labs.renren.com/apache-mirror//ws/axis/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中;

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 hoojo_@126.com
* @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

分类:
WebService

一、搭建简单的axis web服务的更多相关文章

  1. Linux上搭建文件浏览的web服务(创建软件仓库)(一)

    软件仓库的创建方式有很多,这是一种很简单的创建方式: python -m SimpleHTTPServer 快速搭建一个http服务,提供一个文件浏览的web服务. 使用:Python SimpleH ...

  2. C#最简单的登录Web服务

    因为演示程序,所以有下面问题: 1.password是明码传输. 本文在  C#建立最简单的web服务,无需IIS  的基础上完毕. 详细步骤: 一.RequestProcessor添加变量mLogi ...

  3. 从零开始搭建支持http2的web服务

    前段时间开始,公司各项业务开始陆续接入http2,关于http2的优点与所适用的场景网上有很多的文档可以查阅,这里我主要是总结分享一下如何从0到1搭建http2服务. 这里先说明一下,要完成http2 ...

  4. Windows下搭建Apache+Django+Python Web服务环境

    最近在学Django,想用Apache搭建一个服务器环境,因此在网上看了好多资料,很多都是用Python2.6和Apache2.2搭建的环境,不过我还是想用Python35和Apache24来搭建,具 ...

  5. 018-Go将磁盘目录实现简单的静态Web服务

    package main import( "net/http" ) func main(){ http.Handle("/", http.FileServer( ...

  6. go 实现简单的http web服务

    package main import ( "fmt" "net/http" ) func hello(w http.ResponseWriter, r *ht ...

  7. docker 搭建 web 服务环境

    docker容器虽然早就听说过,但是本人还真的没去用过,刚好看到相关的文章,就分享了下,有机会可以实践下...... 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都 ...

  8. 使用nodejs和express搭建http web服务

    目录 简介 使用nodejs搭建HTTP web服务 请求nodejs服务 第三方lib请求post 获取http请求的正文 Express和使用express搭建http web服务 express ...

  9. 如何搭建属于自己的Web服务器

    如今随着计算机和互联网技术的发展,上网现在已经不再是什么难事,打开浏览器,我们可以访问各种论坛站点,比如CSDN.博客园等,各种视频网站,例如爱奇艺,B站等.在网上我们可以写文章,看视频,购物,打游戏 ...

随机推荐

  1. Kotlin使用处协变的意义与用法

    在上一次https://www.cnblogs.com/webor2006/p/11294849.html中对于Java的协变和Kotlin的协变提到了它们的区别,回忆一下: 其实在Kotlin中也有 ...

  2. 51nod 2517 最少01翻转次数

    小b有一个01序列,她每次可以翻转一个元素,即将该元素异或上1. 现在她希望序列不降,求最少翻转次数. 收起   输入 第一行输入一个数n,其中1≤n≤20000: 第二行输入一个由‘0’和‘1’组成 ...

  3. mac pro下安装brew软件包管理工具

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载软件. 1.打开终端直接输入下面指令回车: ruby -e "$(curl -fsSL h ...

  4. cookies localStorage和sessionStorage的区别

    sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁.因此sessionStorage不是一种持久化的本地 ...

  5. vue-router路由拦截基本设置,md5加密,js-cookie,vuex刷新页面store中的数据丢失等

    vuex持久化 vuex-persistedstate

  6. react 学习记录

    1.  脚手架搭建项目  create-react-app https://www.jianshu.com/p/d196761c8332 2. UI框架 https://ant.design/docs ...

  7. 题解 UVa11889

    题目大意 \(T\) 组数据,每组数据给定两个正整数 \(A,C\),求使 \(LCM(A,B)=C\) 的最小的 \(B\),若无解则输出NO SOLUTION. 分析 当 \(C\%A=0\) 时 ...

  8. django 第五天 自定义标签 静态文件

    昨日忘记上传,先预留位置,稍后补上

  9. Greenplum Segment 的检测机制

    Greenplum集群具有较好的容错性和高可用性,其中一点就体现在segment镜像机制上.接下来本文会简单地阐述segment的作用以及segment镜像机制是如何保证GP高可用的. Segment ...

  10. react添加富文本

    import {Editor} from 'react-draft-wysiwyg'import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'i ...