使用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中找到webappsaxis(,将axis整个文件夹拷贝到Tomcat的webapps下,然后将下面的WebService服务类HelloFlexToWebService.jws,放到Tomcatwebappsaxis下。 ????????????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>
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(); } } }
<?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是一种标准,自然在使用上不会有过于偏离的地方。深刻掌握理解仍需要阅读相应文献。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |