当前位置: 代码迷 >> Web前端 >> axis开发webservice范例
  详细解决方案

axis开发webservice范例

热度:458   发布时间:2012-11-08 08:48:11.0
axis开发webservice实例

AXIS项目

   Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插件LombozAXIS的最新版本是1.1,可以从 http://ws.apache.org/axis/index.html下载。

下图是AXIS核心引擎的体系结构图:

整个AXIS项目包括以下几个部分:

  1. 消息流子系统
    消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。处理程序是一个处理请求、响应和故障流的对象。处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
  2. 传输框架子系统
    提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
  3. 数据编码子系统
    AXIS
    完全按照 XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
  4. 其他
    AXIS
    完全支持 WSDL 以及日志记录、出错以及故障处理机制。它同时提供一些工具用来讲WSDL文档转换成客户端的调用框架以及根据类来产生WSDL定义文档。

AXIS目前版本支持的标准是:W3C SOAP 1.1 1.2WSDL 1.1SAAJ 1.1SUN公司:SOAP with Attachments API for Java);JAX-RPCSUN公司:Java API for XML-Based RPC1.0

 

一, 环境搭建

1,安装JDK1.5及以上.

2,安装Tomcat5及以上.

3,下载AXIS项目打包文件axis-1_1.zip解压缩后将目录中的webapps目录下的axis子目录拷贝到tomcat安装目录的webapps

4验证AXIS的安装:重新启动Tomcat服务器后打开浏览器输入网址http://localhost:8080/axis 后应该出现如下图所示页面,点击链接"Validate"来验证Axis所需的几个JAVA包是否齐全。

 

点击超链接Validate后,AXIS会自动检查所需的每一个JAVA组件,这协组件分为:必需组件以及可选组件,必须保证所有必需组件都存在,如下图所示即为验证成功。

 

 

 

二, Web Service服务端开发

编写JAVAHello.java,内容如下:

public class Hello{

 public String hello(String name){

   if(name==null)

    name = "";

   return "hello,"+name+"";

}

}

仅此而已,无需编译,将该文件改名为Hello.jws并拷贝到AXIS应用目录tomcat安装目录的webapps\axis下。

下面我们就可以测试该Web服务了,打开浏览器并输入刚刚创建的文件名对应的URL地址 http://localhost:8080/axis/Hello.jws 浏览器显示如下结果:

There is a Web Service here

        Click to see the WSDL

 

点击页面上的链接查看该Web服务对应的WSDL信息如下所示(我们将在下一小节简单介绍WSDL:

1.? <!--sp-->xml version="1.0" encoding="UTF-8" ?>??
2.? -<wsdl:definitions??
3.? ?targetNamespace="http://localhost:8080/axis/Hello.jws"??
4.? ?xmlns="http://schemas.xmlsoap.org/wsdl/"??
5.? ?xmlns="http://www.w3.org/2000/xmlns/"??
6.? ?xmlns:apachesoap="http://xml.apache.org/xml-soap"????
7.? ?xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"??
8.? ?xmlns:impl="http://localhost:8080/axis/Hello.jws"????
9.? ?xmlns:intf="http://localhost:8080/axis/Hello.jws"??
10. xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"????
11. xmlns:xsd="http://www.w3.org/2001/XMLSchema"??
12. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">??
13. - <wsdl:message name="helloRequest">??
14. <wsdl:part name="name" type="xsd:string" />????
15. wsdl:message>??
16. + <wsdl:message name="helloResponse">??
17. - <wsdl:portType name="Hello">??
18. - <wsdl:operation name="hello" parameterOrder="name">??
19. <wsdl:input name="helloRequest" message="intf:helloRequest" />????
20. <wsdl:output name="helloResponse" message="intf:helloResponse" />??
21. wsdl:operation>????
22. wsdl:portType>??
23. - <wsdl:binding name="HelloSoapBinding" type="intf:Hello">????
24. <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />??
25. - <wsdl:operation name="hello">????
26. <wsdlsoap:operation soapAction="" />??
27. - <wsdl:input name="helloRequest">??
28. <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"????
29.??namespace="http://DefaultNamespace" />?????
30. wsdl:input>- <wsdl:output name="helloResponse">?????
31. <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"??
32.??namespace="http://localhost:8080/axis/Hello.jws" />??????
33. wsdl:output>????
34. wsdl:operation>????
35. wsdl:binding>??
36. - <wsdl:service name="HelloService">??
37. - <wsdl:port name="Hello" binding="intf:HelloSoapBinding">??
38. <wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" />????
39. wsdl:port>?????
40. wsdl:service>????
41. wsdl:definitions>??

三, Web Service客户端开发

(java客户端)

我们前面安装的AXIS环境中已经包含着这样的工具,它是一个JAVA类,类名为:org.apache.axis.wsdl.WSDL2Java。打开命令行窗口,转到AXIS目录下的WEB-INF子目录。确保Tomcat服务已经处于启动状态,键入命令

Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl
?
结果是在当前所在目录下产生一个子目录 localhost/axis/Hello_jws,该目录下有四个JAVA源文件:
??? Hello.java 定义了Web服务接口,此例中只有一个hello方法。
??? HelloService.java 定义了用于获取Web服务接口的方法。
??? HelloServiceLocator.java 接口HelloService的具体实现。
??? HelloSoapBindingStub.java Web服务客户端桩,通过该类与服务器交互。
?
四,编写测试类

//Main.java

package localhost.axis.Hello_jws;

public class Main{

public static void main(String[] args) throws Exception{

 HelloService service = new HelloServiceLocator();

 Hello hello = service.getHello();

 System.out.println("Response:"+hello.hello("world"));

 }

}

 

用以下命令进行编译:

javac -classpath lib\axis.jar;lib\jaxrpc.jar localhost\axis\Hello_jws\*.java

 

如果编译没有问题的话执行该测试程序:

java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main//
运行结果:Response:hello,world

 

  相关解决方案