`

Axis之Stubs方式

阅读更多
    http://www.blogjava.net/xiaodaoxiaodao/archive/2007/03/24/106122.html 
    http://www.360doc.com/content/07/0326/09/10754_413889.shtml    
   实例(参考了 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目录结构如下:

axis.JPG
目录说明如下:

jws :存放*.jws文件

src :java源码

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

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



Axis 支持三种web service开发方式,分别为:

1 、Dynamic Invocation Interface ( DII)

2 、Dynamic Proxy方式

3 、Stubs方式

通过下面三个例子进行说明。



在开始例子前,把

① 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目录下。



实例1(DII)步骤 :

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

public class MyService {

    public String processService(String arg){

        return arg;

    }

}



2.  无需编译 (编译由axis进行),拷贝MyServic.java到axis_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.jar和mail.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/



实例2(Dynamic 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.java到axis_example/jws目录下,更改文件名为MyService.jws



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

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

        String wsdlUrl = "http://localhost:8081/axis_example/jws/MyService.jws?wsdl";

        String nameSpaceUri = "http://localhost:8081/axis_example/jws/MyService.jws";

        String serviceName = "MyServiceService";



        ServiceFactory serviceFactory = ServiceFactory.newInstance();

        javax.xml.rpc.Service service = serviceFactory.createService(new URL(wsdlUrl), new QName(nameSpaceUri, serviceName));

        MyServiceInterface proxy = (MyServiceInterface)

                service.getPort(new QName(nameSpaceUri, portName), MyServiceInterface.class);



        System.out.println("This is " + proxy.processService("Dynamic Proxy test!"));

    }

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

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





实例3(Stubs)步骤 :

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.jws为axis自动生成),且无法进行一些复杂的配置, 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简介及安装

    总结,Axis为Web服务开发提供了强大的工具和支持,无论是通过stubs方式还是DIY方式,都能帮助开发者高效地构建和部署Web服务。理解并熟练运用Axis,对于Java开发者在Web服务领域的工作至关重要。

    java连接webservice,axis2实现方式所需jar包

    Axis2是Apache软件基金会开发的一个Web服务框架,它提供了一种高效、灵活的方式来创建和部署Web服务。 首先,让我们逐一了解`描述`中提到的Axis2所需的关键jar包及其作用: 1. **axis2-kernel-1.6.2.jar**:这是...

    Axis开发Web Service实例

    对于Stubs方式,需要先使用Axis的wsdl2java工具生成服务的Java存根类。然后,通过这些存根类,客户端可以直接调用服务方法,就像调用本地Java方法一样。这种方式通常适用于更复杂的交互场景,因为它提供了更强类型的...

    axis配置(axis详细配置)

    通常情况下,DII方式适用于不经常变化的服务,而Stubs方式则适用于需要频繁更新的服务。 #### 四、总结 通过本文的介绍,我们不仅了解了如何在Eclipse环境下配置和部署Axis环境,还学习了如何创建和调用一个简单的...

    Axis客户端的几种实现方式

    Axis提供了一系列的命令行工具,如`wsdl2java`,可以从WSDL文件生成Java客户端 stubs。在给定的文件名称列表中,`testWSDL2Java`可能就是使用这个工具生成的代码。这个工具将WSDL转换为Java类,这些类包含了与服务...

    Axis和WebService配置使用之Hello

    标题中的“Axis和WebService配置使用之Hello”表明我们将探讨如何在Java环境中使用Axis库来创建和使用Web服务,实现一个简单的“Hello World”示例。 Axis是一个开源的Java SOAP(简单对象访问协议)工具包,它允许...

    apache axis1.4实例

    Apache Axis1.4主要基于SOAP(Simple Object Access Protocol)协议,它提供了一种简单的方式来实现基于XML的分布式计算。此框架允许开发者将Java类转换为Web服务,反之亦然,极大地简化了Web服务的开发过程。其核心...

    axis1.4依赖包

    6. **使用方法**: 开发者可以通过 Axis1.4 提供的命令行工具(如wsdl2java和java2wsdl)来生成服务客户端或服务器端代码,也可以通过编程方式直接使用API进行更精细的控制。在项目构建系统(如Maven或Gradle)中,...

    axis2客户端需要的jar包

    ADB提供了一种简单而高效的方式来处理XML消息。 2. **axis2-kernel.jar**:这是Axis2的核心模块,包含了处理消息、创建服务和客户端实例、管理模块加载等基础功能。它是所有Axis2应用程序的基础。 3. **axis2-...

    Java+Axis2调用Web Services 网络接口

    总的来说,Java和Axis2的结合提供了一种强大而灵活的方式来调用Web服务,允许开发者轻松地集成远程功能到自己的应用程序中。通过理解这些概念和实践,你可以更好地利用Web服务接口,提升应用的扩展性和互操作性。

    axis插件生成客户端

    3. 使用Axis插件生成客户端:在命令行中,你可以使用Axis的wsdl2java工具,输入Web服务的WSDL URL或本地WSDL文件路径,该工具会自动生成对应的客户端Java stubs(存根类)。这些存根类包含了调用Web服务所需的所有...

    AXIS开发Web Service.docx

    在本文中,我们将深入探讨如何使用 AXIS 在 Tomcat 6.0.26 上进行配置,并详细介绍三种部署和调用 Web Service 的方法:Dynamic Invocation Interface (DII)、Stubs 方式以及 Dynamic Proxy 方式。 首先,配置 AXIS...

    Java WebService 简单实例 方式三(axis1接口调用方式)

    本实例将介绍如何使用Apache Axis1库来创建和调用Web服务,这是一种常见的Java WebService实现方式。 一、WebService基本概念 1. WebService是一种基于XML(可扩展标记语言)的协议,它允许应用程序通过HTTP协议...

    Axis学习详细资料

    3. **Stubs方式**:这是最常用的开发方式之一,通过WSDL(Web Services Description Language)自动生成客户端和服务器端的代码(即Stubs和Skeletons)。这种方式使得开发人员可以专注于业务逻辑,而将底层的通信...

    axis 1.4 .zip 运行包

    - **服务消费**:它还提供了客户端 stubs,使得调用远程Web服务如同调用本地方法一样简单。 - **WSDL生成**:能够自动生成服务的WSDL文档,供其他系统发现和使用。 - **协议支持**:除了基本的SOAP,Axis 1.4还...

    axis开发web服务的两种典型方法示例和比较分析

    在本文中,我们将探讨使用Apache Axis开发Web服务的两种典型方法:Dynamic Invocation Interface (DII) 和 Stubs方式,并对它们进行详细的说明和比较。 一、Axis安装与配置 Apache Axis是一个开源的Java Web服务...

    axis2相关文件

    7. **编码和数据绑定**:Axis2支持多种编码方式,如SOAP 1.1、SOAP 1.2等,以及数据绑定技术如Aegis、JAXB、XMLBeans等,将Java对象与XML消息进行映射。 在实际使用中,生成Web服务服务端的步骤通常包括: 1. 定义...

    非常实用的axis教程集合

    1. 生成客户端 stubs:使用wsimport或axis的wsdl2java工具,从服务的WSDL生成客户端代码。 2. 调用服务:在生成的客户端代码中,实例化Stub类并调用对应方法,实现对Web服务的调用。 五、 Axis的安全与管理 1. 安全...

Global site tag (gtag.js) - Google Analytics