Axis2学习笔记

 

AXIS学习笔记

 

1、所需软件

 

Tomcat 5

Axis标准包:http://ftp.wayne.edu/apache/ws/axis2/1_0/axis2-std-1.0-bin.zip

Axis War包:http://ftp.wayne.edu/apache/ws/axis2/1_0/axis2.war

Axis Eclipse plug-in(代码生成工具和打包工具):

http://apache.justdn.org/ws/axis2/tools/1_0/Axis2_Code_Generator.zip

http://apache.justdn.org/ws/axis2/tools/1_0/Axis2_Service_Archiver.zip

 

1.1 安装Axis的Eclipse插件

采用link方式

1.1.1 解压与更名

将下载到的eclipse插件axis2-eclipse-codegen-wizard.zip和axis2-eclipse-service-archiver-wizard.zip文件解压,解压后得到Axis2_Service_Archiver_1.3.0文件夹和Axis2_Codegen_Wizard_1.3.0文件夹,将Axis2_Service_Archiver_1.3.0更名为org.apache.axis2.tool.Axis_Service_Archiver_1.3.0,将Axis2_Codegen_Wizard_1.3.0文件夹更名为org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin,

1.1.2 新建axis2插件

在Myeclipse的安装目录(如:D:\Program Files\MyEclipse 6.5)下,新建文件夹axis2,在axis2下新建eclipse文件夹,再在eclipse下新建plugins和features文件夹,将刚才那两个文件夹org.apache.axis2.tool.Axis_Service_Archiver_1.3.0和org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin拷贝到plugins目录下,

1.1.3 建立Link文件

在%MyEclipse 6.5%\eclipse\links文件夹下,新建axis-eclipse-plugin.link文件,文件内容为path=D:/Program Files/MyEclipse 6.5/axis2,即加载eclipse插件。

1.1.4 删除org.eclipse.update目录

新建Link文件后,删除%MyEclipse%/eclipse/configuration文件夹下的org.eclipse.update目录,启动eclipse,在file->new->other中即可看到Axis2 Wizards,表示安装成功。

如下图:

 

2、创建Axis Service

 

2.1 新建web项目

           新建一java项目,名为AxisTest

           新建一java类,代码如下:

package com.server;

 

public class AxisServer {

        public String say(String name) {

                  return "Hello," + name;

        }

}

2.2 利用Axis2 Service Archiver生成Axis发布包

选择该项目,点右键(注意你项目的编译环境(一般是1.5),要与你项目相符合,不然会暴bad version class错误),选择File->new ->Other-> Axis2 Wizards->Axis2 Service Archiver

 

点下一步,在这个页面中的Class File Location选择框中选择类所在的文件夹。

 

 

 

 

点下一步,再选择Skip WSDL,点下一步,这个项目没有用到外部包,所以不选择,再点下一步,是选择生成wsdl文件存放的地址,自己手动建

勾选Generate the service xml automatically ,

点下一步,一般会自动出现class类(无则手工输入,点load)

 

点下一步,进入的是输出artiver文件的页面,先要在output File location 中选择要输出的路径,

   在output  File Name中输入artiver文件的名称。我起的名字是axisWebServer

 

 

点击finish,成功生成发布文件,在D:\workspace下,名字为axisWebService.aar的发布包。

 

2.3 发布Axis War包

Axis War包是专门用来跑Axis 服务用的。将下载的Axis War包发布到tomcat目录下,启动tomcat,项目会自动发布Axis War包,起完后,访问http://localhost:8877/axis2/

(我本机的tomcat访问端口是8877),如果一切正常,看到如下页面,则表示发布Axis War包成功。

 

 

 

 

 

 

2.4发布Axis服务

 

将2.2节中生成的axisWebService.aar包扔进tomcat的webapps目录下的axis2\WEB-INF\services下,重启tomcat,访问http://localhost:8877/axis2/services/listServices

即列出所有服务,你会看到刚刚发布的axis service,

 

 

 

点击那个AxisServer或者访问

http://localhost:8877/axis2/services/AxisServer?wsdl

就可以看到发布的AxisServer了。

 

 

 

至此,axis发布成功。

 

3、调用Axis Service

 

         3.1、新建java项目

        

         新建AxisClientTest项目。新建com.client包

 

 

         3.2、根据wsdl,生成axis客户端

        

用eclispe的axis2的插件来生成stub代码。

在eclispe 的package Explorer 中点击右键,在菜单中选择File->new ->Other-> Axis2 Wizards->Axis2 Code Generator

 

点下一步,选择从wsdl文件中生成客户端代码(即第一个)

点下一步,选择wsdl文件地址,可以是url,也可以是wsdl文件

 

 

         点下一步,保持默认

 

 

点下一步,选择输出文件路径

 

 

 

生成代码成功。

 

如果在MyEclipse6.5中报错:
An error ocurred while completing process
-java.lang.reflect.InvocationTargetException

主要的问题在于 Code Generator plugin 内缺少了 backport-util-concurrent-3.1.jar 包和geronimo-stax-api_1.0_spec-1.0.1.jar 包。

         在下载的Axis标准包axis2-std-1.0-bin.zip里,搜索这两个包,然后拷贝到%MyEclipse%\ axis2\eclipse\plugins\org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin下的lib下,然后再修改%MyEclipse%\ axis2\eclipse\plugins\org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin下的plugin.xml文件,注册此jar包,修改内如如下:

在 <runtime> 內加入下面的字串
    <library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
       <export name="*"/>
   </library>
    <library name="lib/backport-util-concurrent-3.1.jar">
          <export name="*"/>
    </library>



  此外,在plugin.xml中在<plugin>中 把Axis2_Codegen_wizard的version="1.3.0"改成version="1.4.0",保存后重新启动Eclipse即可。

 

生成代码成功后,刷新客户端那项目,会发现多了com.server包,包下有定义服务类,刚生成代码,代码会报错,那是因为项目没有引入axis相关jar包,引入即可。具体是axis2-1.4.1\lib下的所有Jar包导入即可。

 

具体项目图如下:

 

 

3.3、调用webservice

 

定义该类调用即可。 

package com.client;

 

import com.server.AxisServerStub;

 

public class TestClient {

    public static void main(String[] args) {

       try {

           AxisServerStub stub = new AxisServerStub();

           //传入request

           AxisServerStub.Say request = new AxisServerStub.Say();

           request.setName("liangbinny");

           System.out.println(stub.say(request).get_return());

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}

 

4、综合实例

 

         4.1 定义Bean

在AxisWebTest项目,定义Person的bean类

package com.server;

 

public class Person {

    // 姓名

    private String name;

    // 年龄

    private int age;

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public int getAge() {

       return age;

    }

 

    public void setAge(int age) {

       this.age = age;

    }

 

}

 

         4.2 定义服务,服务使用bean

 

package com.server;

 

public class BaseServer {

    public Person callPerson(String name,int age) {

       Person person = new Person();

       person.setAge(age);

       person.setName("liangbinny");

       return person;

    }

}

 

         4.3 发布服务

具体步骤可参考第二节,选择BaseServer类,新建axis服务,选择类路径,一直点下一步,点到定义ServiceName,配置如下图:

 

再点下一步,选择生成服务包输出的路径和包名。

 

 

 

 

点finish,完成,在D:\workspace里有PersonWebService.aar包,将此包扔进之前发布好的webservice发布区(%TOMCAT%\webapps\axis2\WEB-INF\services)重启tomcat

 

 

之后,访问http://localhost:8877/axis2/services/listServices

可以看到刚刚发布的PersonServer

 

 

 

 

点击PersonServer可以看到wsdl。

 

         4.4 调用服务

 

参考第三节,在eclispe 的package Explorer 中点击右键,在菜单中选择File->new ->Other-> Axis2 Wizards->Axis2 Code Generator

点下一步,选择从wsdl文件中生成客户端代码(即第一个)

点下一步,选择wsdl文件地址,可以是url,也可以是wsdl文件

点下一步,这里外加选择输出包的路径,如下图:

 

点击下一步,选择输出java文件的地址,点finish。

完成后,在项目下就自动生成了webservice类了

 

再新建个测试类TestPersonClient.java


 

package com.client;

 

import com.personserver.PersonServerStub;

import com.personserver.PersonServerStub.Person;

 

public class TestPersonClient {

    public static void main(String[] args) {

       try {

           PersonServerStub stub = new PersonServerStub();

           PersonServerStub.CallPerson request = new PersonServerStub.CallPerson();

           request.setAge(24);

           request.setName("liangbinny");

           Person person = stub.callPerson(request).get_return();

           System.out.println("Hello,"+person.getName()+",I am "+person.getAge()+" years old");

       } catch (Exception e) {

           e.printStackTrace();

       }

   

    }

}

 

运行,结果如图:

 

调用成功。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值