一、环境搭建

下载axis2-1.6.2-war.zip/axis2-1.6.2-bin.zip等。

参考axis2-1.6.2-war\README.txt以及axis2-1.6.2-war\axis2\WEB-INF\services\version-1.6.2\META-INF\services.xml的写法,可以通过编写webservice类并打包成jar的形式放在Tomcat容器的axis2 webapp下的services目录进行发布。

测试:把axis2目录拷贝到%TOMCAT_HOME%/webapps目录下面,启动tomcat,并访问http://localhost:8080/axis2,正常。

二、编写webservice server端

1 bean

package com.test.entity;

public class Student {

private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
}

2 webservice class

package com.test;

import com.test.entity.Student;

public class HelloWorld {

public String sayHello() {
        return "saying hellooooooooooooo----2----";
    }
    
    public Student query() {
        Student s = new Student();
        s.setId("1");
        s.setName("wsc123");
        return s;
    }
    
    public Integer addTowNumbers(int a, int b) {
        return a+b;
    }
}
3 services.xml

<service name="HelloWorld">
    <description>
        This service is to get the running Axis version
    </description>
    <parameter name="ServiceClass">com.test.HelloWorld</parameter>
    <operation name="sayHello">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
    <operation name="query">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
    <operation name="addTowNumbers">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
</service>

<!--
<service name="HelloWorld" scope="application">
    <description>
        POJO: HelloWorld Service
    </description>
    <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>
    <parameter name="ServiceClass">com.test.HelloWorld</parameter>
</service>
 -->

4 build.xml

<project name="helloworldservice" basedir="." default="deploy">

<property name="src.dir" value="src">
    </property>
    <property name="build.dir" value="${basedir}/build">
    </property>

<path id="build.classpath">
    </path>

<target name="init">
        <delete dir="${build.dir}">
        </delete>
        <mkdir dir="${build.dir}" />
        <mkdir dir="${build.dir}/classes" />
        <mkdir dir="${build.dir}/jar" />
    </target>

<target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${build.dir}\classes">
            <classpath refid="build.classpath">
            </classpath>
        </javac>
    </target>

<target name="makejar" depends="compile">
        <jar destfile="${build.dir}\jar\${ant.project.name}.jar">
            <fileset dir="${build.dir}/classes">
                <include name="**/*.class"/>
            </fileset>
            <metainf dir="${basedir}">
                <include name="services.xml"/>
            </metainf>
        </jar>
    </target>
    
    <target name="deploy" depends="makejar">
        <copy file="${build.dir}/jar/${ant.project.name}.jar" todir="D:\wsc\software\apache-tomcat-6.0.41\webapps\axis2\WEB-INF\services"></copy>
    </target>

</project>

5 readme.txt

通过POJO的方式发布一个WebService到tomcat容器中。
这里需要注意的是:
Ant打成的Jar的格式,META-INF目录下必须包括services.xml,
以及services.xml的写法,可以认为每个方法就是一对operation标签。。

三、编写RPC client端

1 需要引用axis2-1.6.2-war\axis2\WEB-INF\lib\*.jar

2 bean/entity

package com.test.entity;

public class Student {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
}
3 rpc client类

package sample.addressbook.rpcclient;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

import com.test.entity.Student;

public class HelloWorldRPCClient {

public static void main(String[] args1) throws AxisFault {
        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();
        EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/axis2/services/HelloWorld");
        options.setTo(targetEPR);
        // QName of the target method
        QName qName = new QName("http://test.com", "sayHello");
        // Constructing the arguments array for the method invocation
        Object[] opArgs = new Object[] {};
        Class[] returnTypes = new Class[] { String.class };
        // Invoking the method
        Object[] response = serviceClient.invokeBlocking(qName, opArgs, returnTypes);
        System.out.println(response[0]);
        
        //如何返回一个对象??
        //
        qName = new QName("http://test.com", "query");
        opArgs = new Object[]{};
        returnTypes = new Class[] {Student.class};
        response = serviceClient.invokeBlocking(qName, opArgs, returnTypes);
        System.out.println(response[0]);
        
        //如何传递参数到web service方法中?
        qName = new QName("http://test.com", "addTowNumbers");
        //opArgs = new Object[]{Integer.valueOf(3), Integer.valueOf(4)};
        opArgs = new Object[]{33, 44};
        returnTypes = new Class[]{Integer.class};
        response = serviceClient.invokeBlocking(qName, opArgs, returnTypes);
        System.out.println(response[0]);
        
        
    }
}

4 运行结果

log4j:WARN No appenders could be found for logger (org.apache.axis2.context.AbstractContext).
log4j:WARN Please initialize the log4j system properly.
saying hellooooooooooooo----2----
Student [id=1, name=wsc123]
77

5 readme.txt

参考Axis2的samples目录下的pojo示例
重点是sample.addressbook.rpcclient.HelloWorldRPCClient这个类,用于访问自己发布的HelloWorld这个WebService。

四、问题

客户端可以用多种形式,如adb访问?

Axis2支持多种协议,http应该是最常用的。还有?

Axis2测试webservice server以及client的更多相关文章

  1. Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用

    第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...

  2. TCP server和client的一些测试

    一.TCP server和client测试   socket设置 测试项/测试情景 send recv 测             server block           client bloc ...

  3. axis2开发webservice程序

    一.环境 eclipse + jdk 6.0 + win7 64位 +tomcat7.0 二.创建服务端程序 1.新建web项目,webserviceTest 2.下载axis2,将lib目录下的ja ...

  4. Java借助axis2发布WebService

    Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...

  5. Python 开发与测试 Webservice(SOAP)

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理解WebService 1.从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是 ...

  6. axis2之webservice

    Axis2之webservice超详细教程 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的 ...

  7. [转]Axis2创建WebService实例

    以下文章来自http://clq9761.iteye.com/blog/976029,作者clq9761 一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下 ...

  8. 转载 使用axis2构建webservice

    axis2是可以实现webservice的一个插件,使用这个插件可以发布webservice 1:可以使用这个插件来发布webservice,可以看网址:http://clq9761.iteye.co ...

  9. Axis2创建WebService实例

      一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:      可以下载如下两个zip包:      axis2-1.5.4-bi ...

随机推荐

  1. AxureRP8实战手册(基础31-40)

    AxureRP8实战手册(基础31-40) 本文目录 基础31.     切换元件库 第2章          页面设置 基础32.     设置页面居中 基础33.     设置页面背景(图片/颜色 ...

  2. NodeJS中的异步I/O、事件驱动

    nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在 ...

  3. Asp.net有关访问页面权限的限制和错误页面配置

    一.访问页面权限的限制 一个小项目,涉及到用户登录. 在用户没登录访问内容也时,对页面做一定限制,没登录的则不能访问,直接跳转到登录界面. /// <summary> /// 对没有登录用 ...

  4. HTML页面优化

    第一步:加载优化 减少HTTP请求. 因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个.a) 合并CS ...

  5. 并发编程 20—— AbstractQueuedSynchronizer 深入分析

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  6. 深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)>我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根 ...

  7. TranslateAnimation 运行动画后实际位置不正确问题

    最近在调试android 动画时候发现一个很奇怪问题,网上搜索都说TranslateAnimation 动画运行后,实际位置要在动画结束的监听里面重新设置才会正确,不然物体位置还是在原位. 我根据网上 ...

  8. [IOS 开发] 自定义(重写) UITableViewCell的高亮背景色

    IOS的sdk中,对UITableViewCell的高亮背景色只支持两种颜色,分别为UITableViewCellSelectionStyleBlue和UITableViewCellSelection ...

  9. sql sever跨数据库复制数据的方法【转】

    1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...

  10. STC12C5A60S2 双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...