Axis2项目开发和部署发布

本文将介绍Axis2项目开发及部署详细内容,在讲解之前先介绍一下axis2以及优缺点(都是自己在开发javaweb接口API的时候自己总结的,另外在其他两篇文章会介绍一下用axis1和xfire发布webservice,以及三种发布的优缺点)


Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者。Axis2 具有模块化体系结构,由核心模块和非核心模块组成。据说,Axis2核心是纯SOAP处理引擎,并没有包含 Java™ API forXML-based RPC (JAX-RPC) 概念作为其核心的一部分。同时,Axis2体系结构的设计充分考虑了以下原则:

1.逻辑和状态分离,以提供无状态处理机制,因为 Web 服务是无状态的。
2.所有信息位于一个信息模型中,允许对系统进行挂起和恢复。
3. 能够在不更改核心体系结构的情况下扩展功能,能以最小或没有核心更改的情况下直接支持新 Web 服务规范。

Axis2 核心体系结构包括以下核心和非核心组件:核心组件 ◦ XML对象模型 (AXIOM),SOAP处理模型:处理程序框架,信息处理模型:上下文和描述,其他组件,部署模型,传输,客户机API,核心生成模型。
Axis2 优点:它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码
内存占用低 热部署 异步web 服务
灵活性 - Axis 体系结构使开发者可以自由的向引擎中插入扩展
稳定性 - Axis 定义了一组公共的接口。
面向组件的部署 - 可以简单地定义可复用的处理机网络,来实现应用程序的通用处理方式 或分发给合作者。
支持WSDL - Axis 支持WSDL1.1 ,可以简单的构建访问远程服务的桩(stub ), 还可以自动将部署的服务从Axis 导出为机器可识别的描述。
插件
组成和可扩展性
缺点:
Axis2重量级框架和支持多语言的特性不可避免的导致了Axis2的复杂性,开发所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。
Axis2的开发者太急于推出1.0版本,所以1.0还不是一个稳定的版本。

开发工具:Myeclipse2014,JDK_1.7,tomcat_1.6,下图是开发完成之后的工程目录:
工程目录

开发步骤:
第一步:创建一个普通的java web工程,下载axis2_.1.6.2的jar包,下载解压,将所有jar包复制到lib目录,将modules和conf文件夹及文件夹下所有文件拷贝到WEB_INF目录下

第二部:编写测试类TestService,包名:com.wingsoft.webservice,提供两个测试接口方法,如下图:

测试类方法

第三步:编辑web.xml文件,添加以下配置信息:
<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>
第四步:在WEB_INF目录下新建services文件夹(文件夹名称不允许修改),在services目录下建立TestService(名称最好和测试类名字保持一致)文件夹,在该TestService目录下建立META_INF文件夹,最后在META_INF文件夹下建立名字为services的XML文件(名称不允许修改),在services.xml文件中添加以下配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<service name="TestService" >
    <description> TestService </description>
     <!--ServiceClass的值为测试类包名+类名-->
    <parameter name="ServiceClass">com.wingsoft.webservice.TestService</parameter>

    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
            class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </messageReceivers>

</service>

二.Axis2项目部署和发布

将开发好的项目,通过Myeclipse部署到tomcat中,启动tomcat,启动成功之后在浏览器中输入http://主机名:8080/项目名称/services/TestService?Wsdl,如果浏览器返回WSDL信息,表示webservice项目已经发布成功

wsdl信息

三.Axis2项目接口调用示例(java语言)
示例1

public class Test {
     //设置调用地址,不能带?WSDL 
    private static EndpointReference targetEPR = new EndpointReference(
            "http://localhost:8080/项目名称/services/TestService/");

    public static void main(String[] args) {
        try {
            // 对请求的接口方法设置参数,返回OMElement对象
            // 创建OMFactory对象
            OMFactory fac = OMAbstractFactory.getOMFactory();
              // 命名空间,根据测试类包名反过来写即可,或者在service.xml配置文件中自定义
              // 命名空间,后面的参数为调用的方法名
            OMNamespace omNs = fac.createOMNamespace(
                    "http://webservice.wingsoft.com", "sayHello");

            // 接口方法和参数设置
            OMElement method = fac.createOMElement("sayHello", omNs);
              // 此处设置参数名称一定要和方法中定义的变量名name保持一致,否则调用会报错
            OMElement param = fac.createOMElement("name", omNs);
              // 此处设置参数值
            param.addChild(fac.createOMText(param, "Axis2"));
            method.addChild(param);

            Options options = new Options();
            options.setTo(targetEPR);
            ServiceClient sender = new ServiceClient();
            sender.setOptions(options);
            OMElement result=sender.sendReceive(method);
            System.out.println(result);

        } catch (AxisFault e) {
            e.printStackTrace();
        }
    }
}

调用成功之后会返回xml格式结果,

<ns:sayHelloRespons xmlns:ns="http://webservice.wingsoft.com"><ns:return>hello, Axis2</ns:return></ns:sayHelloResponse>

示例2(RPC方式调用)

public class Test {
    // 设置调用地址,不能带?WSDL
    private static EndpointReference targetEPR = new EndpointReference(
            "http://主机IP:8080/项目名称/services/TestService/"); 
    public static void main(String[] args) {
        try {
            // 使用RPC方式调用WebService
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            // 确定目标服务地址
            options.setTo(targetEPR);
            // 指定调用方法
            options.setAction("urn:sayHello");
            // 指定要调用的方法GetStioDetailByTxt及WSDL文件的命名空间
            QName qname = new QName("http://webservice.wingsoft.com",
                    "sayHello");
            // 指定方法的参数值
            Object[] parameters = new Object[] { "world!" };
            // 指定方法返回值的数据类型的Class对象
            Class[] returnTypes = new Class[] { String.class };
            // 传递参数,调用服务,获取服务返回结果集
            Object[] result = serviceClient.invokeBlocking(qname, parameters,returnTypes);
            // 因为调用的方法只有一个返回值,所以取object数组第一个元素值
            System.out.println((String)result[0]);      } 
          catch (AxisFault e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值