Axis2 + Eclipse 第一个webservice

1.编写服务代码

首先创建一个web项目Axis2Service,我是用maven创建的,

创建完项目后,编写服务代码,创建Service,起名Axis2ServiceTest.java

代码如下


package com.lei.axis2;

public class Axis2ServiceTest {
	
	/** 
     * 提供了一个说Hello的服务 
     * @return 
     */  
    public String sayHello(String name){  
        return "Hello "+name;  
    }  
      
    /** 
     * 提供了一个做加法的服务 
     * @param a 
     * @param b 
     * @return 
     */  
    public int add(int a,int b){  
        return a + b;  
    }  
}



2.将服务代码打包成arr文件

Eclipse菜单- New - File - Other -Axis2 Service Archiver,见下图

Axis2 + Eclipse 第一个webservice_第1张图片

填写刚才的class的路径后,这个路径为刚才写的Service的bin目录,next,见下图

Axis2 + Eclipse 第一个webservice_第2张图片

选择跳过 WSDL文件,见下图

Axis2 + Eclipse 第一个webservice_第3张图片

如果你的Service有引用jar包,则在这里选择。我写的没有,所以next,见下图

Axis2 + Eclipse 第一个webservice_第4张图片

由于我们没有编写service.xml,所以勾选让它自动生成,next

Axis2 + Eclipse 第一个webservice_第5张图片

输入Service name(随意)、Class name、点击Load后,会加载Service中的Method,勾选要发布的Method后、next

Axis2 + Eclipse 第一个webservice_第6张图片

最后一步,设置aar文件输出目录Output file location为E:\Axis2,和输出的文件名Output File Name为lei_service,然后点Finish:

Axis2 + Eclipse 第一个webservice_第7张图片

完成后,找到E:\Axis2目录下的lei_service.aar文件,可以用rar打开后,看到目录结构如下,

Axis2 + Eclipse 第一个webservice_第8张图片

进入META-INF目录后,可以看到插件给我们生成的一个service.xml,你可以自己研究下这个自动生成的service.xml了。

3.发布webservice

首先要部署一个axis2服务,将之前下载的axis2-1.6.3-war.zip文件解压后,得到一个axis2.war文件,将这个文件放到tomcat下的webapps文件夹下,然后启动tomcat,

会生自动部署一个axis2项目,可以访问http://localhost:8080/axis2/,看到以下欢迎界面后,证明axis2部署成功,

Axis2 + Eclipse 第一个webservice_第9张图片

然后将上一步生成的lei_service.aar文件放到axis2项目下的 WEB-INF\services目录下,然后点击上图中的Services后,进入webservice列表,

在列表中即可找到你要发布的webservice,见下图

Axis2 + Eclipse 第一个webservice_第10张图片

从上图中,可以看到刚才的两个方法add和sayHello,证明webservice发布成功。

4.客户端测试

测试代码如下,需要引用axis2-1.6.3-bin\lib下的相应jar包。

package client;

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;

public class Test {

	public static void main(String[] args) throws AxisFault {
		// TODO Auto-generated method stub
		
	//  使用RPC方式调用WebService          
	    RPCServiceClient serviceClient = new RPCServiceClient(); 
	    Options options = serviceClient.getOptions();
	    
	    //指定调用WebService的URL
	    EndpointReference targetEPR = new EndpointReference(  
	            "http://localhost:8080/axis2/services/LeiService");
	    options.setTo(targetEPR);
	    
	    //指定sayHello方法的参数值
	    Object[] opAddEntryArgs = new Object[] {"第一个Axis2"};
	    //指定sayHello方法返回值的数据类型的Class对象
	    Class[] classes = new Class[]{String.class};
	    //指定要调用的sayHello方法及WSDL文件的命名空间,其中命名空间为wsdl中的targetNamespace值
	    QName opAddEntry = new QName("http://axis2.lei.com", "sayHello");
	    
	    
	    System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);
		
	}

}



输出结果:

Axis2 + Eclipse 第一个webservice_第11张图片

测试另一个方法,只要改一下方法名以及传入的参数即可,类似于如下,

            //指定sayHello方法的参数值
	    Object[] opAddEntryArgs = new Object[] {100,201};
	    //指定sayHello方法返回值的数据类型的Class对象
	    Class[] classes = new Class[]{int.class,int.class};
	    //指定要调用的sayHello方法及WSDL文件的命名空间,其中命名空间为wsdl中的targetNamespace值
	    QName opAddEntry = new QName("http://axis2.lei.com", "add");
	    
	    
	    System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);



运行结果显示301

你可能感兴趣的:(Axis2 + Eclipse 第一个webservice)