`
liumiao2011
  • 浏览: 53124 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[原创]Axis2入门学习心得

 
阅读更多

这两天由于工作需要,需要使用Axis2组件,上网搜了好多资料,发现看起来都很吃力,还是同事小虞同学总结的比较好,让我对Axis2有了一些入门级别的了解。现在我将小虞同学总结的内容二次加工分享给大家。

1.首先什么是Web Service?
    当你编写程序时遇到一个情况:你的应用程序需要调用一个远程程序的方法,或一个远程的应用程序需要调用你的应用程序的方法时,就需要使用Web Service。我们一般把Web Service看成这个提供服务的方法,于是我们说“我调他的Web Service”或“他调我的Web Service”。其实Web Service是一套标准,它定义了应用程序如何在互联网上实现互操作。所以“我调他的Web Service”的意思是我是客户端,他是服务器端,反之亦然。你可以用任何语言写Web Service,只要双方遵守共同的标准就行。

2.axis2是干啥的?
    Axis2是实现Web Service的一种技术框架(架构)。肿么说呢,他就是一些Java类和配置文件,其他的我也不知道了。总之你去网上下载一个axis2.war文件,然后把它部署到Tomcat下,启动Tomcat,就可以在浏览器里访问它了。你可能会说:“这样的话axis2不就是一个很普通的Web应用吗”。对,它是一个Web应用,这个应用默认提供了一个Service(Web Service的服务器端)叫Version。

    部署成功之后,在浏览器访问http://localhost:8088/axis2/,点击Services可以看到所有的服务器端。
我们可以看到这个默认的服务端名是Version,而getVersion是服务提供的方法。点击服务名可以看到有关该服务的描述。
千万别被这个xml给吓到了,因为我从来不看。
 
通过观察应用的目录结构可以发现:
一个服务器端其实就是WEB-INF/services/目录下的一个aar文件而已。所以以后咱们写服务器端只需要写一个aar文件放到WEB-INF/services/目录下即可。
这时候你可能会问:这和我自己的程序没关系啊,难道我必须得在axis2这个应用下写我自己的应用吗?不用担心后面我会讲如何把axis2整合到你的应用下。
 
3.写一个服务器端程序
小虞的服务器端程序写的很好,很有代表性,直接粘过来。
先写服务器的类:
AxisDemoService.java
package com.neusoft.axis2demo.services;
import com.neusoft.axis2demo.common.AxisClientRequestInfo;
import com.neusoft.axis2demo.common.AxisServiceResponseInfo;
public class AxisDemoService {
  public AxisServiceResponseInfo nameConvertToContext(
    AxisClientRequestInfo clientrequest) {
    System.out.println("进入服务器端!");
    AxisServiceResponseInfo axisServiceresponseinfo = new AxisServiceResponseInfo();
    String name = clientrequest.getName();
    if (name.equals("红豆")) {
      axisServiceresponseinfo.setPoemcontent("红豆生南国,春来发几枝?愿君多采撷,此物最相思!");
    } else if (name.equals("无题")) {
      axisServiceresponseinfo.setPoemcontent("相见时难别亦难,东风无力百花残。春蚕到死丝方尽,蜡炬成灰泪始干。"
         + "晓镜但愁云鬓改,夜吟应觉月光寒。蓬山此去无多路,青鸟殷勤为探看。");
    } else if (name.equals("无名诗词"))
        axisServiceresponseinfo.setPoemcontent("繁星烁闪浩月天,恰似嫦娥舞翩翩.可怜吴刚空对酒,相思泪洒孤枕边");
    else if (name.equals("草")) {
      axisServiceresponseinfo.setPoemcontent("离离原上草 一岁一枯荣. 野火烧不尽 春风吹又生.");
    } else {
      axisServiceresponseinfo.setPoemcontent("对不起,你要找的诗词没有存储!");
    }
    return axisServiceresponseinfo;
  }
}
 
这个类的作用就是在客户端传来一个AxisClientRequestInfo类型的bean里边存储一个诗词的题目,该类取出诗词的题目和服务器类里存储的题目比较如果有相同的就把它的内容放到AxisServiceResponseInfo这个bean里返回给客户端。
下边是上个类中用到的传递参数的两个bean他们都在com.neusoft.axis2demo.common这个包中。
AxisClientRequestInfo.java
package com.neusoft.axis2demo.common;
public class AxisClientRequestInfo
{
    private String name;
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
}
 
AxisServiceResponseInfo.java
package com.neusoft.axis2demo.common;
public class AxisServiceResponseInfo
{
    private String poemcontent;
    public String getPoemcontent()
    {
        return poemcontent;
    }
    public void setPoemcontent(String poemcontent)
    {
        this.poemcontent = poemcontent;
    }
}
 
再写服务器端的描述文件:
下面是解析该服务器类AxisDemoService的services.xml文件,该文件的内容如下:
<service name="Axis2Demo">
 <parameter name="ServiceClass" locked="false">
  com.neusoft.axis2demo.services.AxisDemoService
 </parameter>
 <operation name="nameConvertToContext">
  <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
 </operation>
</service>
服务器类AxisDemoService中有几个方法就需要配置几个<operation></operation>。nameConvertToContext为AxisDemoService类中的方法。
Axis2Demo为服务的名字也就是后边的打包服务器端Axis2Demo.aar的名字。
最后把以上三个类的class文件和一个xml文件打包成aar文件(aar文件其实就是把jar文件的后缀名改成aar)。
目录结构如下:
Axis2Demo.aar下有两个目录一个就是META-INF/services.xml 另一个就是com/neusoft/axis2demo/.../AxisDemoService.class 
 

 
图中只显示了文件夹。
 
把这个aar文件放到放到WEB-INF/services/目录下,这个服务就可以被远程调用了。
 
4.写一个客户端程序调用刚才的服务器端程序(重点难点)
首先我们不可能在我们的应用程序中直接调远程的方法,因为我们的Java编译器会因为找不到该方法而报错。所以我们想要调用一个我们本地工程没有的方法,而且还不让Java编译器报错,使用的肯定是Java的反射机制!
 
想写一个反射机制调用远程的代码真是比登天还难啊。还好,我有代码自动生成器。他帮助我只需要写一点代码就可以调用远程了。
请下载Axis2_Codegen_Wizard,我用的是1.3.0版本。

在此之前请在浏览器访问刚才的服务器的描述文件,访问方法是刚才讲过的先访问http://localhost:8088/axis2,然后点击services,最后点击刚才的服务名。然后保存描述服务的网页(是个xml文件),保存在任意位置。
 
最后把保存后的文件后缀名改成wsdl,我们就用Axis2_Codegen_Wizard通过这个wsdl文件去生成代码。

现在回到Axis2_Codegen_Wizard,下载好后,把下载好的代码生成工具Axis2_Codegen_Wizard拷贝到eclipse下的plugins下。
以我机器为例拷贝到D:\eclipse3.2\plugins里,然后删除D:\eclipse3.2\configuration下的org.eclipse.update文件夹里的内容或者在eclipse的快捷方式里加上-clean以使插件生效。然后重启eclipse,选择“File->New->Other”可以看到如下的界面。
 

 
下面,根据wsdl文件生成客户端代码。

生成代码的具体步骤如下: 选择菜单“File->New->Other”,从对话框中选取“Axis2 Wizards”下面的“Axis2 Code Generator”,点next。
 
选择Generate Java source code from a WSDL file,点next。
然后选择刚才保存的wsdl文件,点next。


 


注意,在图中选中custom和Generate Both with all classes for every elements on Shemas。很重要!

在Output Path这项选中工程的根目录作为这些自动生成代码的目录。
然后点击 finish 完成代码生成工作.下图为生成代码后的工程目录结构。
 

 

我标记的都是生成的文件。
下面咱们自己只需要写一点程序就可以调用远程的方法了。
 
5.完善客户端程序
下面写一个Test类,去调用远程的方法。
TestAxis2Demo.java
package com.neusoft.axis2demo.test;
import java.rmi.RemoteException;
import com.neusoft.axis2demo.services.Axis2DemoStub;
import com.neusoft.axis2demo.common.xsd.AxisClientRequestInfo;
import com.neusoft.axis2demo.common.xsd.AxisServiceResponseInfo;
import com.neusoft.axis2demo.services.NameConvertToContext;
import com.neusoft.axis2demo.services.NameConvertToContextResponse;
public class TestAxis2Demo {
 public static void main(String args[]) throws RemoteException
    {
        //axis2demostub是方法调度器
        Axis2DemoStub axis2demostub = new Axis2DemoStub();
        //nameConvertToContext是方法
        NameConvertToContext nameConvertToContex = new NameConvertToContext();
        //nameConvertToContextResponse是方法的执行结果
        NameConvertToContextResponse nameConvertToContextResponse = new NameConvertToContextResponse();
        //axisClientRequestInfo是方法的参数
        AxisClientRequestInfo axisClientRequestInfo = new AxisClientRequestInfo();
        //axisServiceResponseInfo是方法的返回值(方法的返回值.get_return())
        AxisServiceResponseInfo axisServiceResponseInfo = new AxisServiceResponseInfo();
       
        //给方法的参数添加上内容
        axisClientRequestInfo.setName("无名诗词");
        //给方法添加上参数
        nameConvertToContex.setClientrequest(axisClientRequestInfo);
        //执行方法
        nameConvertToContextResponse = axis2demostub.nameConvertToContext(nameConvertToContex);
        //得到返回值
        axisServiceResponseInfo = nameConvertToContextResponse.get_return();
        String poemcontent = axisServiceResponseInfo.getPoemcontent();
        System.out.println("您输入的诗词题目是===="+axisClientRequestInfo.getName());
        System.out.println("下边是根据您所输入的诗词的题目从服务器端返回的诗词内容!");
        System.out.println(poemcontent);
    }
}
6.关于axis2服务器和我们现有系统的集成
下边我们只要把Tomcat目录下的\webapps\axis2下的内容copy到我们现有eclipse工程的应用目录下(这里我的web应用是D:\eclipse3.2\workspace\Axis2Demo\WebContext)就可以把刚才的Web Service和我们现有的工程集成一起了。

写这个总结真是累死我了,回去的车都少了。希望能给大家提供帮助,欢迎高手指点。

  • 大小: 7 KB
  • 大小: 48.5 KB
  • 大小: 101.1 KB
  • 大小: 50.5 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    axis2入门学习程序

    用于入门学习axis2,部署好即可用! //初始化文件 AxisProjectStub stub = new AxisProjectStub(); AxisProjectStub.Showname request = new AxisProjectStub.Showname(); request.setName("张三"); String name =...

    axis2入门及简单例子

    Axis2 入门及简单例子 Axis2 是一个基于 Java 的 Web 服务框架,它提供了一个灵活、可扩展、可靠的方式来创建、部署和管理 Web 服务。Axis2 是 Apache 软件基金会的一个开源项目,是基于 SOAP 和 WSDL 的 Web 服务...

    axis2学习资料

    这个“axis2学习资料”压缩包很可能是包含了关于Axis2的各种教程、文档、示例代码和其他学习资源,旨在帮助开发者深入理解和掌握Axis2的使用。 Axis2的核心特性包括: 1. **模块化设计**:Axis2采用了模块化的...

    Axis2 入门

    这个简明教程将引导你入门Axis2的使用。 首先,我们创建一个名为`StockQuoteService`的Java类,它包含了获取股票价格(`getPrice`)和更新股票价格(`update`)的方法。这里的`StockQuoteService`是一个简单的POJO...

    Axis2学习文档

    在本"Axis2学习文档"中,我们将深入探讨 Axis2 的核心概念、功能特性以及如何使用它来创建和部署Web服务。 首先,让我们了解什么是Web服务。Web服务是一种通过网络进行通信的应用程序,允许不同系统之间的数据交换...

    Axis2包括axis2入门文档,新手教程,Myeclipse下的安装

    1. **Axis2入门文档**:Axis2的核心概念包括模块、服务、消息引擎和服务部署。模块是Axis2的基本构建块,可以包含服务、消息处理器和服务间的数据共享逻辑。服务是Web服务的基本单元,定义了对外提供的功能。消息...

    axis2入门实例

    总结来说,"Axis2入门实例"涵盖了从安装环境、创建服务到运行客户端的全过程,对于希望学习或已经在使用Axis2的人来说,这是一个宝贵的资源。通过深入研究提供的源代码和实践操作,你可以掌握使用Axis2构建和使用Web...

    Axis2 入门教程

    【Axis2入门教程】是针对想要学习和了解Axis2这一Web服务引擎的基础教程,特别适合初学者。Axis2是广泛使用的Web服务引擎,它在服务导向架构(SOA)中扮演着重要角色,用于发布和调用服务端的Java方法,促进了不同...

    Axis2版本学习笔记

    - Axis2拥有活跃的社区,提供丰富的文档、教程和论坛讨论,便于学习和求助。 总之,Axis2是一个强大的Web服务框架,通过理解和掌握其核心概念、版本特性以及配置方法,开发者能够有效地利用它构建高效、安全的Web...

    axis2开发webservice心得

    本文将结合实践经验,分享在使用Axis2进行WebService开发时的一些心得和解决方案,希望能够帮助正在学习的朋友少走弯路。 #### 一、搭建环境 **1. 安装配置** - **安装Tomcat:** 首先需要安装并配置好Tomcat...

    AXIS2快速学习资料

    在这个名为"AXIS2快速学习资料"的压缩包中,包含两份宝贵的资源:一份是中文的Word文档,标题为"Axis2--Java访问Axis2接口.doc",另一份是英文的PDF,标题为"Axis2--Dev_Web_Services_With_Apache_Axis2.pdf"。...

    webservice的Axis2入门教程java版

    通过这篇Java版的Axis2入门教程,我们了解到如何轻松地利用Axis2构建和发布WebService,无需繁琐的配置文件。这种简化的方法使得开发人员可以更加专注于服务逻辑,而不用过于关心服务的底层实现。同时,由于Axis2的...

    SOAP与AXIS2入门教程附带实例

    本入门教程将帮助你理解如何使用AXIS2来创建、发布和调用SOAP Web服务。首先,你需要了解AXIS2的架构,它主要由以下几个部分组成: 1. **Service Archive (AAR)**:这是AXIS2中服务的打包格式,类似于Java的JAR文件...

    axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_

    标题中的"axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_"提到了几个关键元素,分别是"axis2"、"idea-plugin"和"idea导入axis2",这暗示了这个压缩包是用于在IntelliJ IDEA这款集成开发环境...

    AXIS2 入门文档

    ### AXIS2 入门文档知识点概述 #### 一、AXIS2 概述 - **定义**:AXIS2作为Apache Axis的后继版本,旨在提供一个更为灵活、高效且易于扩展的SOAP引擎。 - **架构特点**: - 基于全新的体系结构设计,与之前的Axis1...

    axis2相关的jar包

    axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-...

    Axis2学习教程-全面学习AXIS

    【Axis2学习教程-全面学习AXIS】是一个针对Java开发者的教程,专注于教授如何使用Axis2这一流行的WebService引擎。Axis2是Apache软件基金会开发的Web服务框架,它为创建和部署Web服务提供了一种高效且灵活的方式。在...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL生成java文件。 1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_...

    axis2开发Web Services入门

    ### Axis2 开发 Web Services 入门 #### 知识点概述 本文旨在介绍如何使用 Axis2 开发 Web Services 的全过程,包括环境搭建、插件安装等基础准备工作,以及具体的开发流程与实例演示。 #### 1. 环境搭建 ##### ...

Global site tag (gtag.js) - Google Analytics