使用Flex与java简单访问在Axis上即时发布型的WebService服务

        在异构系统中常常会使用到WebService,从其本身的含义上其更多展现的是一种标准。既然是标准,就像java世界的其他框架一样,其产品并不是唯一的。WebService的实现框架包括Axis,Axis2,XXFie,CXF等等。本文不进行深入探讨WebService,仅举一简单例子,让大家一方面对WebService有个简单认识,另一方面在Flex和Java客户端进行简单访问WebService服务,这也许是在项目中常做的事情。

        对于Axis来讲,它支持两种发布WebService服务的方式:一种是即时发布;另一种是定制发布。本例使用前者,只因其简单,足可达到本文简介目的,但同时要强调一点,它在正规的项目中是不适用用。原因是即时发布太简单,简单到有了服务的源码,将其放到Tomcat等上即可使用,这点却导致了其不够灵活,一旦我们仅有jar包等却没有源码时,则不可用了。言归正传,先发布一个WebService服务。

        在下载下来的axis-bin-1_4.zip中找到webapps\axis(,将axis整个文件夹拷贝到Tomcat的webapps下,然后将下面的WebService服务类HelloFlexToWebService.jws,放到Tomcat\webapps\axis下。

            
public class HelloFlexToWebService{
    public String getReturn(String userName)
    {
        return "you are accessing  WebService, " + userName;
    }
}

        运行tomcat,访问 http://localhost:8080/axis/HelloFlexToWebService.jws?wsdl,我们会发现tomcat已经为我们自动将上面的服务解析为WSDL文件了,简单截取部分代码如下所示,对比上面的服务类,相信我们会发先其对应关系。

     

<wsdl:message name="getReturnResponse">
  <wsdl:part name="getReturnReturn" type="xsd:string" /> 
  </wsdl:message>
- <wsdl:message name="getReturnRequest">
  <wsdl:part name="userName" type="xsd:string" /> 
  </wsdl:message>
- <wsdl:portType name="HelloFlexToWebService">
- <wsdl:operation name="getReturn" parameterOrder="userName">
  <wsdl:input message="impl:getReturnRequest" name="getReturnRequest" /> 
  <wsdl:output message="impl:getReturnResponse" name="getReturnResponse" /> 
  </wsdl:operation>
  </wsdl:portType>


        对此WSDL文件本文不多做解释,总之它是就是我们对外发布的服务,客户端通过Axis引擎访问服务获取相应数据。下面展示java客户端访问此服务的代码示例。

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class WSClient {

	public static void main(String[] args){
		String wsdlUrl = "http://localhost:8080/axis/HelloFlexToWebService.jws?wsdl";
		Service service = new Service();
		try {
			Call call = (Call)service.createCall();
			call.setTargetEndpointAddress(wsdlUrl);
			call.setOperationName(new QName(wsdlUrl,"getReturn"));
			try {
				String result = (String)call.invoke(new Object[]{"ChenWeiDong"});
				System.out.println(result);
			} catch (RemoteException e) {
				e.printStackTrace();
			}
			System.out.println();
		} catch (ServiceException e) {
			e.printStackTrace();
		}
	}
}


        对比下面使用Flex访问WebService服务的代码如下所示:

<?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">
	
	<fx:Declarations>
		<s:WebService id="webService" wsdl="http://localhost:8080/axis/HelloFlexToWebService.jws?wsdl"
					  showBusyCursor="true" result="onLoad(event)" fault="faultHandler(event)"/>
	</fx:Declarations>
	
	<mx:VBox>
		<mx:TextInput id="cityname" text="ChenWeiDong"/>
		<mx:Button label="CallWebService" click="callWebService(event)"/>
		<mx:TextInput id="myWeatherReport" height="30" width="260" editable="false" />
	</mx:VBox>
	
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			/* 
			*访问webService服务
			*/
			protected function callWebService(event:MouseEvent):void
			{
				webService.getReturn(cityname.text);
			}
			/* 
			 *访问webService成功
			*/
			private function onLoad(event:ResultEvent):void{
					myWeatherReport.text = String(event.result);
			}
			/* 
			*访问webService失败
			*/
			private function faultHandler(event:FaultEvent):void{
				Alert.show(event.fault.toString(),'WebService Error');
			}
		]]>
	</fx:Script>
</s:Application>

        从Flex和java的客户端代码可以发现,访问Webservice服务,都是先定位到服务,然后访问服务对外提供的接口,获取相应的数据。

        本文简单描述了发布WebService服务和使用Java和Flex访问所发布的服务。通过本文主要了解此WebService的原理性内容以及其实现框架的多样化,为工作中使用它提供点基本思路,同时了解不同语言在访问WebService上其实是大同小异的,原因是Webservice是一种标准,自然在使用上不会有过于偏离的地方。深刻掌握理解仍需要阅读相应文献。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值