如果只是想使用Axis2编写一个WebService程序的话,非常简单。

工程的目录结构以及所需要的jar包(这里只是编写一个简单的服务端,因此并没有引入所有的jar,只是必须的一些jar)

axis2-1.6.2 HelloWorld_xml

A.编写服务器端:

1.新建一个Web工程Axis2Demo02,在WEB-INF目录下面建立services文件夹,并将所需的jar包拷贝到lib目录下

 

2.修改web.xml文件,添加如下内容:



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>Apache-Axis2</display-name>
    <servlet>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet> 

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>index.html</welcome-file>
    </welcome-file-list>
  
</web-app>


 

2.编写符合axis2的服务端代码,目录结构如下:

axis2-1.6.2 HelloWorld_xml_02


 

说明:

       a)MANIFEST.MF在此可以省略,因为我们在此并不是想弄一个可以执行的jar,而只是一个可发布的服务。

 

       b)services.xml配置,核心文件,必须有,配置如下:        


<service name="helloServer" ><!--这个与URL相关:http://localhost:8089/Axis2Demo02/services/helloServer?wsdl-->	<description>
		Please Type your service description here
	</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">server.HelloServer</parameter> <!--类的全名-->
</service>


       c)编写服务类HelloServer,并将eclipse自动编译的class文件放到server目录下 (该步骤可以省略) 

package server;
import model.Student;
public class HelloServer {

    public String sayHello(String name){	
		return "Hello, "+name;	
	}
    /**
     * 
     * @param studentNo
     * @return student
     */
   public Student queryStudentByNo(String stuNo){
	   
	     Student stu = new Student();
	     stu.setStuNo(stuNo);
	     stu.setName("boredStudent");
	     stu.setAge(22);
		 return stu;
		
	}
}

 

        c)编写Student,并且将eclipse自动编译生成的class文件放到model中(该步骤可以省略)

package model;

public class Student {
	
	private String stuNo;//学号
	
	private String name;
	
	private int age;
	
	public String getStuNo() {
		return stuNo;
	}

	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	

	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;
	}

	
	

}

 

      e)使用jar命令,打包成helloServer.jar,并将jar文件的后缀名改为helloServer.aar

           i) cd  HelloServer   进入HelloServer目录

          ii) jar cvfM helloServer.jar META-INF  将 META-INF文件夹打包成jar(文件名helloServer),这是不要添加M(大写)选项,不需要帮我们生成MANIFEST.MF文件。因为我们已经有了已经手动创建的MANIFEST.MF文件

 

jar命令行选项说明:c=创建新的存档;

                                f=指定存档文件名,在这里为helloServer.jar;

                               v=生成详细输出到标准输出上,你可以看见生成jar的过程;

                              M=不产生所有项的清单文件,即MANIFEST.MF文件。如果不配置该参数,则jar命令会自动帮我们生成MANIFEST.MF文件

 

总结:最后我们可以发现只有b和e步骤是必要的,其他的都可以省略。使用axis2开发webService,我们只需要配置一下services.xml文件就可以了,axis2就会自动将src目录下的HelloServer作为服务类。helloServer.aar的目录结构如下:

axis2-1.6.2 HelloWorld_web.xml_03


 

 

4.将helloServer.aar文件放入WEB-INF/services目录下,然后重启服务

 

 

5.访问:http://localhost:8089/Axis2Demo02/services/helloServer?wsdl,出现如下内容则说明部署成功

axis2-1.6.2 HelloWorld_java_04


 

B.编写客户端测试代码:在src目录下新建RPCClient.java

import javax.xml.namespace.QName;

import model.Student;

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


public class RPCClient {
	public static void main(String[] args) throws Exception  
    {
        //  使用RPC方式调用WebService        
        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();
        //  指定调用WebService的URL
        EndpointReference targetEPR = new EndpointReference(
                "http://localhost:8089/Axis2Demo02/services/helloServer");
        options.setTo(targetEPR);
        
        //  指定sayHello方法的参数值
        Object[] opAddEntryArgs = new Object[] {"高伟刚"};
        
        //  指定sayHello方法返回值的数据类型的Class对象
        Class[] classes = new Class[] {String.class};
        
        //  指定要调用的sayHello方法及WSDL文件的命名空间
        QName opAddEntry = new QName("http://server", "sayHello");
//
        // 调用sayHello方法并输出该方法的返回值
       System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);
       
   //  指定queryStudentByNo方法的参数值
       Object[] stuNo = new Object[] {"201004070117"};
       
       //  指定queryStudentByNo方法返回值的数据类型的Class对象
       Class[] studentClass = new Class[] {Student.class};
       
       //  指定要调用的queryStudentByNo方法及WSDL文件的命名空间
       QName queryStudentEnty = new QName("http://server", "queryStudentByNo");
//
       // 调用queryStudentByNo方法并输出该方法的返回值
       Student student = (Student)serviceClient.invokeBlocking(queryStudentEnty, stuNo, studentClass)[0];
       System.out.println(student.getName());
       
    } 

}