axis2 容易入手

axis2 简单入手

准备工作:

1.下载了axis2-eclipse-service-archiver-wizard.zip

axis2-eclipse-codegen-wizard.zip

两个eclipse插件,貌似要1.3版本的才能支持在用java类生成wsdl时选择skip wsdl

 

2.下载axis2-1.4.1和axis2-1.4.1-war

 

一.简单入门

1.编写服务端代码

package simple;

public class HelloService {

	public String sayHello(String name) {
		return "Hello, " + name + ".";
	}

	public String saySorry(String name) {
		return "Sorry, " + name + ".";
	}

	public String getOk() {
		return "ok";
	}
}

 

2.用axis2-eclipse-service-archiver 生成,new - other,选择axis2 service archiver ,然后进入向导,注意第二步“add the wsdl file”的时候选择“skip wsdl”,最后生成aar。生成的aar已经包含了services.xml。

services.xml内容如下:

<service name="MyService">
	<description>Hello world</description>
	<parameter name="ServiceClass">simple.HelloService</parameter>
	<operation name="sayHello">
		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</operation>
	<operation name="saySorry">
		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</operation>
	<operation name="getOk">
		<messageReceiver
			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
	</operation>
</service>

 

 

 

3.先把下载的axis2.war放到[tomcat_home]\webapps下。启动tomcat解压axis2.war。

然后把刚才生成的aar放在[tomcat_home]\webapps\axis2\WEB-INF\services下,重新启动tomcat

就可以在http://localhost:8888/axis2/services/MyService?wsdl 访问。

 

4.生成客户端访问。用axis2-eclipse-codegen生成客户端代码。

-------------------------------------------------

如果用插件生成时,有如下错误,java.lang.reflect.InvocationTargetException

 

,解决办法如下

Axis2_Codegen_Wizard_1.3.0从wsdl生产java客户端代码(首先要保证webservice已经启动)时候出现invocationTargetException,解决办法如下:

 

1). Download the following jar files:
stax-api-1.0.1.jar
backport-util-concurrent-3.1.jar
and save them to eclipse/plugins/[Axis2 Codegen Wizard]/lib (replace [Axis2 Codegen Wizard] with the real plugin directory).
2). Add to the eclipse/plugins/[Axis2 Codegen Wizard]/plugin.xml the followings (to the <runtime> element), if they are missing:
<library name="lib/stax-api-1.0.1.jar">
<export name="*"/>
</library>


<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>

 

或者还是直接用命令吧:

在cmd下运行:
[your_axis2_home]\bin> wsdl2java.bat -uri http://localhost:8888/axis2/services/MyService?wsdl -o D:\输出目录

-------------------------------------------------------

通过上面办法顺利生成客户端代码之后,可以看到生成了MyServiceCallbackHandler和MyServiceStub

【xxxxxxStub和xxxxxxxCallbackHandler】的package 默认为service类的所在package

QName也为所在package

xxxxxxStub默认wsdl为你生成wsdl2java时使用的wsdl

 

利用生成的MyServiceCallbackHandler和MyServiceStub,编写调用代码如下(编译时要先引入axis2的jar)

package simple;

public class Client {
	public static void main(String[] args) throws Exception {
		MyServiceStub stub = new MyServiceStub();
		MyServiceStub.SayHello sayHello = new MyServiceStub.SayHello();
		sayHello.setName(" yoyo ");
		System.out.println(stub.sayHello(sayHello).get_return());
	}

}
//会输出hello yoyo 

 

二.不用aar发布web service的方法。

1.在web.xml中配置AxisServlet。如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<servlet>
		<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>/services/*</url-pattern>
	</servlet-mapping>
</web-app>

 2.在[yourWebProject]\WebRoot\WEB-INF下新建services目录,在在services目录新建 deployService目录(名字随便,真正的webservice的服务名是services.xml里面定义的),在deployService 下新建META-INF目录,在META-INF下放置你的services.xml。

目录结构如下:

axis2 容易入手

 

3.访问http://localhost:8080/[yourWebProject]/services/MyService?wsdl 即可