一、准备工作
首先需要下载axis2的相关jar包,下载地址:
axis2-1.6.2-war.zip http://download.youkuaiyun.com/detail/flyhigh200703/5192812
axis2-1.5.3-bin.zip
下载下来的axis2的依赖库,其中有一个axis2-1.5.3-bin.zip的库文件,目录结构如下:
bin文件夹是axis2的常用工具,其中有将wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具
conf是axis2的配置文件
lib运行所要的依赖库
repository是发布过的axis服务和文件
sample是示例
webapp是web文件和jsp页面等。
将下载下来的axis2-1.6.2-war.zip中的axis2.war文件放到Tomcat的安装目录webapp下,启动Tomcat,就会自动的将war文件解压,生成axis2文件夹,之后,在浏览器中输入http://localhost:8080/axis2 你就可以看到如下结果
下面,我们来使用axis2在Eclipse中创建一个简单的java web project
注:之前我的Eclipse中不能创建Web Project,网上说需要下载J2EE版本的Eclipse,网址如下:http://www.eclipse.org/downloads/
一、Java服务端(发布WebService) 新建一个Java Project
新建一个class,代码如下:
import java.util.Random;
public class HelloWorldService {
public String sayHello(String name) {
return name + " say: hello [axis2]";
}
public int getAge(int i) {
return i + new Random().nextInt(100);
}
}
二、Flex4客户端 这个客户端是我自己摸索着写出来的,我对于java端返回的数据在flex中显示有些不明白,比如从java代码可以看出,getAge方法返回的是int类的数据,我在flex中将定义返回的数据类型是number类型,而我又需要在Labe上显示,Label的text属性是String类型,所以我就在Label显示的时候将Number进行了.toString()转换。
在Flex4中新建一个flex项目,取名AxisClient,在主程序文件AxisClient.mxml中输入如下代码:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
pageTitle="AxisClient01">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
[Bindable]
private var mName:String;
[Bindable]
private var mAge:Number;
private function operation1_resultHandler(event:ResultEvent):void
{
// TODO Auto-generated method stub
mName = axisclient01.sayHello.lastResult;
}
protected function operation1_faultHandler(event:FaultEvent):void
{
// TODO Auto-generated method stub
Alert.show(event.fault.message,"提示");
}
protected function operation2_resultHandler(event:ResultEvent):void
{
// TODO Auto-generated method stub
mAge = axisclient01.getAge.lastResult;
//mAge = event.result as String;
}
protected function button1_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
//axisclient01.sayHello.send();
axisclient01.getAge.send();
//sayhello.text = mName;
//getage.text = mAge;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:WebService id="axisclient01" wsdl="http://localhost:8080/axis2/services/HelloWorldService?wsdl">
<s:operation name="sayHello" result="operation1_resultHandler(event)" fault="operation1_faultHandler(event)">
<s:request xmlns="">
<name>{Name.text}</name>
</s:request>
</s:operation>
<s:operation name="getAge" result="operation2_resultHandler(event)" fault="operation1_faultHandler(event)">
<s:request xmlns="">
<i>{age.text}</i>
</s:request>
</s:operation>
</s:WebService>
</fx:Declarations>
<s:Form id="formid" x="205" y="60" width="323" height="240" backgroundAlpha="0.5"
backgroundColor="#ED1818" contentBackgroundColor="#F5E4E4" fontSize="15">
<s:Label text="姓名:"/>
<s:TextInput id="Name"/>
<s:Label text="年龄:"/>
<s:TextInput id="age"/>
<s:Button click="button1_clickHandler(event)" label="Click"/>
<s:Label text="这是从webservice端返回的数据哦"/>
<s:Label id="sayhello" text="{mName}"/>
<s:Label id="getage" text="{mAge.toString()}"/>
</s:Form>
</s:Application>
运行之后有些问题:在function button1_clickHandler中,定义的分别显示sayHello和getAge返回的数据显示,在点击按钮之后只能一次显示一个,奇怪,我不知道为什么,请知道的留个信儿,谢谢了。
未完待续,明再来补完整