`
sosdairs
  • 浏览: 5571 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Axis学习笔记

阅读更多

关于WEBSERVICE的架构有很多,本章着重记录Axis框架的简单应用。在其后的文章中将给出高级应用示例以及SUN公司GLASSFISH中集成的Metro框架的应用。

 

Axis到目前为止,最新版本为1.4版,阿帕奇官网上已经有2年没有更新过此项目。

 

实例(参考了axis-bin-1_4.zip\axis-1_4\samples\userguide中的例子)使用版本为Axis1.4.

axis-bin-1_4.zip 下载地址http://www.apache.org/dist/ws/axis/1_4/

工程axis_example目录结构如下:

目录说明如下:

jws:存放*.jws文件

src:java源码  

WEB-INF/classes:java编译后的class文件

WEB-INF/lib:需要用到的jar

 Axis

1.Dynamic Invocation Interface ( DII)

2.Dynamic Proxy方式

3.Stubs方式

JWS文件中不允许带有包名称,故只能使用默认包,这种发布方式显得非常笨拙.

使用WSDD文件发布的WEBSERVICE服务,则相对而言,有更大的灵活性.当使用的使第三方提供的jar包时,无法得到对方提供的源代码,此时JWS明显无法胜任自己的工作.而且,使用WSDD文件发布WEB服务,还可以在其中使用如Handler.使用非常方便,故项目中大多使用第三种方式也就是使用WSDD文件发布服务.

 

通过下面三个例子进行说明。 在开始例子前,把

axis-bin-1_4.zip\axis-1_4\lib下的所有包拷贝到axis_example/WEB-INF/lib目录下,

axis-bin-1_4.zip\axis-1_4\webapps\axis\WEB-INF 下的web.xml文件拷贝到axis_example/WEB-INF目录下。

实例1DII)步骤

 

1.axis_example/src 新建一MyServic.java文件,内容为:

public class MyService { 
    public String processService(String arg){ 
        return arg;
    }   
}

  

 

 

 

 

2.无需编译 (编译由axis进行),拷贝MyServic.javaaxis_example/jws目录下,更改文件名为MyService.jws 3.axis_example/src新建一Client.java文件,内容为:

 

import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 
import javax.xml.namespace.QName; 
import javax.xml.rpc.ServiceFactory; 
import java.net.URL; public class Client { 
    public static void main(String [] args) throws Exception { 
        // 指出service所在URL 
        String endpoint = "http://localhost:" + "8081" + "/axis_example/jws/MyService.jws"; 
        // 创建一个服务(service)调用(call) 
        Service service = new Service(); 
        Call call = (Call) service.createCall();// 通过service创建call对象 
        // 设置service所在URL 
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); 

        // 方法名(processService)与MyService.java方法名保持一致 

        call.setOperationName("processService"); 
        // Object 数组封装了参数,参数为"This is Test!",调用processService(String arg) 
        String ret = (String) call.invoke(new Object[]{"This is Test!"});

        System.out.println(ret); 
    }
} 

 4.axis_example 工程放入tomcat/webapps,启动tomcat 5.编译Client.java,运行其中的main方法进行测试,可以看到屏幕打印出:"This is Test!",可以看到axis_example/WEB-INF目录下生jwsClasses/jws/MyService.class文件——axis会根据你访问时的endpoint,自动编译其中的*.jws文件,并置于生成的jwsClasses相应目录下。

 

(通过http://localhost:8081/axis_example/jws/MyService.jws?wsdl可以查看生成的WSDL文件——SOAP服务描述文件)

1 在上面的 new Object[]{"This is Test!"} 语句中,只传递了一个参数。如果MyServic.java

processService(String arg) 改写为

processService(String arg,String arg2)

你可以通过new Object[]{"test","test2"}传递多个参数。

2 启动tomcat 后控制台出现下面警告:

- Unable to find required classes (javax.activation.DataHandler and javax.mail.i

 

nternet.MimeMultipart). Attachment support is disabled.

这是因为缺少activation.jarmail.jar(本文中的实例可以忽略此警告)。

activation.jar (目前版本为1.1)下载地址

http://java.sun.com/products/javabeans/jaf/downloads/index.html

mail.jar (目前版本为1.4)下载地址

http://java.sun.com/products/javamail/downloads/

实例2Dynamic Proxy)步骤

1.axis_example /src 新建一MyServiceInterface.java文件,内容为:

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface MyServiceInterface extends Remote { 
    public String processService(String arg) throws RemoteException; 
} 

  编译 MyServiceInterface.java 2.修改axis_example/src MyServic.java文件,把类声明

public class MyService改为public class MyService implements MyServiceInterface

3.无需编译,拷贝MyServic.javaaxis_example/jws目录下,更改文件名为MyService.jws 4.更改axis_example/src/Client.java中的main方法,内容为: 

 

 

5.axis_example 工程放入tomcat/webapps,启动tomcat  

6.编译Client.java,运行其中的main方法进行测试,可以看到屏幕打印出:" This is Dynamic Proxy test!"

实例3Stubs)步骤   

1.axis_example/src下新建一MyServic.java文件,内容为:

 

public class MyService { 
    public String processService(String arg){ 
        return arg; 
    } 

} 

 

编译 MyServic.java

2.在新建一deploy.wsdd(可参考 axis-bin-1_4.zip \axis-1_4\samples 中的deploy.wsdd)文件,内容为:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"          xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
 <service name="MyService" provider="java:RPC"> 
  <parameter name="className" value="MyService"/>
  <parameter name="allowedMethods" value="processService"/> 
 </service> 
</deployment> 

 

 

 

 

3.启动tomcat

4.axis_example/WEB-INF目录下执行:

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8081/axis_example/servlet/AxisServlet deploy.wsdd

 

执行后可看到在axis_example/WEB-INF目录下生成server-config.wsdd文件。

5.重新启动tomcat,以便加载 server-config.wsdd 文件。

6.更改axis_example/src/Client.java中的main方法,内容为:

public static void main(String [] args) throws Exception { 
        // 指出service所在URL 
        String endpoint = "http://localhost:" + "8081" + "/axis_example/services/MyService"; 
        // 创建一个服务(service)调用(call) 
        Service service = new Service(); 
        Call call = (Call) service.createCall();// 通过service创建call对象 
        // 设置service所在URL 
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
        // 方法名(processService)与MyService.java方法名保持一致 
        call.setOperationName("processService"); 
        // Object 数组封装了参数,参数为"This is Test!",调用processService(String arg) 
        String ret = (String) call.invoke(new Object[]{"This is Test!"}); 
        System.out.println(ret); 
    } 

 

 

 注: 在这里可以看出, DII 方式安全性不高(url MyService.jwsaxis自动生成),且无法进行一些复杂的配置, Dynamic Invocation Interface(DII) Stubs 方式的区别主要有两个地方:

① 两种不同的 endpoint 

DII http://localhost:8081/axis_example/jws/MyService.jws

Stubs http://localhost:8081/axis_example/services/MyService

② 两种不同的编译方式 

DII :根据endpoint访问web service时,axis自动编译endpoint指定的*.jws文件,并放在生成的WEB-INF/jwsClasses目录下。

Stubs :手工编译java文件,手工编写server-config.wsdd配置文件(这里可以编写deploy.wsdd,用axis提供的java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8081/axis_example/servlet/AxisServlet deploy.wsdd

 

命令生成server-config.wsdd文件中的其他通用部分)

Dynamic Proxy方式仅仅在DII的基础上采用了代理机制,实际上和DII区别不大,。

 7.编译Client.java,运行其中的main方法进行测试,可以看到屏幕打印出:" This is Dynamic Proxy test!"

(通过http://localhost:8081/axis_example/services/MyService?wsdl可以查看生成的WSDL文件——SOAP服务描述文件)

axis 提供了wsdl2java工具,web service服务器端提供了一个地址,可以访问到WSDL文件,wsdl2java工具格式为:java org.apache.axis.wsdl.WSDL2Java [options] WSDL-URI

采用DII方式,可以使用

 

java -Djava.ext.dirs= E:\project\axis_example\WEB-INF\lib org.apache.axis.wsdl.WSDL2Java http://localhost:8081/axis_example/jws/MyService.jws?wsdl -p test.mytest -o E:\project\axis_example\src

 

生成相应的客户端java文件。

采用Stubs方式,可以使用

java -Djava.ext.dirs= E:\project\axis_example\WEB-INF\lib org.apache.axis.wsdl.WSDL2Java http://localhost:8081/axis_example/services/MyService?wsdl -p test.mytest -o E:\project\axis_example\src

 

生成相应的客户端java文件。

参数

-p   指定生成的java文件包名

-o   指定生成的java文件输出目录

如果不指定包名,axis会根据命令参数 WSDL-URI 生成相应的包名,如localhost\axis_example\jws\MyService_jws

 

上述命令会在 E:\project\axis_example\src\test\mytest 目录下生成四个文件:

MyServiceSoapBindingStub.java (相当于上面的MyService.java

MyService_PortType.java (相当于上面的MyServiceInterface.java

MyServiceService.java/MyServiceServiceLocator.java Service Locator模式,隐藏了具体的业务逻辑)

 编写junit单元测试,在axis_example\src\test\mytest下新建一TestClient.java文件(拷贝junit.jar包到axis_example/WEB-INF目录下),内容为:

package test.mytest; 

import junit.framework.TestSuite;  
import junit.framework.TestCase; 
import junit.framework.Test; 

public class TestClient extends TestCase { 

    public TestClient(String string) { 
        super(string); 
    } 

    public void MyServiceClient() throws Exception { 

        MyServiceService service = new MyServiceServiceLocator(); 

        MyService_PortType client = service.getMyService() ; 

        String ret = client.processService("This is Junit Test!"); 

        System.out.println(ret); 

    } 

    public static Test suite() { 

        TestSuite suite = new TestSuite(); 

        suite.addTest(new TestClient("MyServiceClient"));

        return suite; 
    } 

} 

  8. 编译上面四个service文件,并编译运行 TestClient.java ,看到屏幕打印出:" This is Junit Test!"

分享到:
评论

相关推荐

    AXIS学习笔记.doc

    AXIS学习笔记

    AXIS学习笔记

    AXIS学习笔记主要涵盖如何使用AXIS框架来开发SOAP Web服务和客户端程序。SOAP(简单对象访问协议)是一种用于交换结构化信息的标准协议,常用于Web服务交互,尤其是在企业内部系统如ERP的集成中。 首先,你需要搭建...

    Axis学习笔记(网页转贴)

    **Axis学习笔记(网页转贴)** Axis是一个开源的Java库,主要用于创建和使用Web服务。它是Apache软件基金会的一部分,广泛应用于开发基于SOAP(简单对象访问协议)的Web服务。本学习笔记将深入探讨Axis在Web服务开发...

    axis学习资料汇总

    axis学习资料汇总: Axis实例与分析详解; Axis学习笔记.pdf; Tomcat5.0.28下AXIS完全安装手册.doc; Axis1.4 开发指南_V1.0.pdf; AXIS入门及应用.rar; Axis开发Web+Services.doc 等等

    Axis2版本学习笔记

    本笔记将深入探讨Axis2的核心概念、版本差异、安装配置以及在实际项目中的应用。 1. **核心概念** - **SOAP**: Axis2是基于SOAP(Simple Object Access Protocol)协议的,它允许应用程序通过HTTP进行通信,实现跨...

    Axis2,CXF版本学习笔记

    当我们谈论“Axis2,CXF版本学习笔记”时,这通常涉及到两个主要的Java Web服务框架:Apache Axis2和Apache CXF。这两个框架都用于构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)...

    Axis + tomcate

    压缩包内的文件名称列表包括 "Axis学习笔记-我的知识库.htm" 和 "axis-1_4",以及两个看起来像是目录的条目。这表明资源包含了关于Axis的详细学习笔记,可能涵盖了基本概念、安装教程、配置方法、示例代码等内容。...

    axis开发资料

    项目收集的axis的相关资料~~ Axis.pdf ...AXIS学习笔记.txt WebService之axis的复杂对象传输方案.txt 使用Apache Axis部署 Web服务时的常见问题及其解决方法.txt 使用Axis开发Web Service程序.txt

    Axis2_1.X学习笔记

    标题"Axis2_1.X学习笔记"指的是关于Axis2的一个学习资源,其中1.X代表可能是1.4或者1.5等版本,Axis2是Apache软件基金会开发的一个开放源代码Web服务平台,主要用于构建和部署Web服务。这个学习笔记可能是对Axis2在1...

    Axis 开发Web Service(学习笔记)

    **Axis开发Web Service学习笔记** 在信息技术领域,Web服务是一种基于开放标准的互联网通信协议,允许不同的应用程序之间进行互操作。而Axis是Apache软件基金会的一个开源项目,它提供了一个强大的工具集,用于创建...

    axis1.4学习文档

    axis1.4 webservice个人学习笔记

    axis2学习笔计

    标题“Axis2学习笔记”揭示了本篇内容主要围绕Apache Axis2框架展开,这是一个用于构建Web服务和客户端的开源工具。Axis2是基于Axis1的升级版,它提供了更高效、模块化和可扩展的架构,使得开发和部署Web服务变得...

    Web Service学习笔记

    在本学习笔记中,我们将深入探讨Web服务的核心概念、技术栈以及实际案例。 一、Web服务的核心概念 1. **SOAP (Simple Object Access Protocol)**:SOAP是一种基于XML的协议,用于交换结构化信息,是Web服务的基础...

    webservice学习笔记doc文档

    在本学习笔记中,主要介绍了使用Apache Axis2框架来开发和测试Web Service的过程。Apache Axis2是Apache SOAP栈的一个实现,提供了简单且高效的Web Service开发工具。 首先,开发者需要在Eclipse集成开发环境中搭建...

Global site tag (gtag.js) - Google Analytics