`

使用自己发布的WebService与Flex通信

阅读更多

前几天发了个Flex利用HttpService和XML与后台的Servlet通信的例子,今天再给大家展示下本人近几天的学习成果----发布一个WebService,并利用其做为Flex与Java通信的桥梁。最后,我会给出在做这个例子时遇到的一些困难和解决方案。希望对大家有些帮助!

The First Step:

利用Apache的AXIS引擎发布WebService。(本文假设您已经下载了AXIS)

1 利用MyEclipse新建一个Web工程,把AXIS_HOME/webapps/axis/web-inf下的web.xml和lib目录拷贝到你所建的工程的相应目录。

2 创建一个Web服务的提供类,这里展示下我创建的类。

java 代码
  1. /**  
  2.  * Web服务提供类  
  3.  *   
  4.  * 编写者:王景辉 湖南农业大学&湖南爱瑞洁投资管理公司  
  5.  */  
  6. package com.wjh;   
  7. import java.util.HashMap;   
  8. public class WebServiceClass {   
  9.     HashMap data = new HashMap() ;   
  10.     public void init() {   
  11.         data.put("百度""李彦宏") ;   
  12.         data.put("腾讯""马化腾") ;   
  13.         data.put("网易""丁磊") ;   
  14.     }   
  15.        
  16.     public String get(String key) {   
  17.         init() ;   
  18.         return data.get(key) ;   
  19.     }   
  20.        
  21.     public void put(String key,String value) {   
  22.         data.put(key, value) ;   
  23.     }   
  24. }   

 

然后把此类编译。

3 把此工程部署到Tomcat,然后转到Tomcat_HOME/webapps/你的工程/web-inf下面,建立一个wsdd文件,本例创建的文件名称为dep.wsdd。

xml 代码
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"         
  2.             xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">         
  3.             <service name="wjhService" provider="java:RPC">         
  4.                      <parameter name="className" value="com.wjh.WebServiceClass"/>         
  5.                       <parameter name="allowedMethods" value="*"/>         
  6.             service>         
  7. deployment>    

 

注意,这里面的className值和上面所建的类的包名一致,其中service的name取值任意,代表的在当前Web应用服务器唯一的WebService标识。

4 运用AXIS的AdminClient工具生成server-config.wsdd文件,即服务器端WebService的声明(行使到这一步,本文假设你已经正确的把AXIS的必须jar文件和其依赖库设置到了classpath,具体设置方式看看JavaEye的AXIS-http://www.iteye.com/subject/Axis-Webservice打开命令行窗口,进入dep.wsdd文件所在的目录,运行java org.apache.axis.client.AdminClient  undeploy.wsdd,如果出现<Admin>Done processing则表明发布成功。

5 在FlexBuilder2中画出Flex界面,本例的界面代码如下:

xml 代码
  1. <!---->xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.     <mx:WebService id="ws" wsdl="http://localhost:8080/ws/services/wjhService?wsdl" useProxy="false" showBusyCursor="true">  
  4.         <mx:operation name="put" result="Alert.show('恭喜!添加成功','返回框',3)" fault="Alert.show('添加失败','失败',3)">  
  5.                
  6.         mx:operation>  
  7.     <mx:operation name="get" result="showInfo(event)" fault="Alert.show('失败','tile',2)">  
  8.                
  9.         mx:operation>    
  10.     mx:WebService>  
  11.  
  12.    
  13.        
  14.     <mx:Panel title="DataGrid Control Example" height="100%" width="100%"    
  15.         paddingTop="10" paddingLeft="10" paddingRight="10">  
  16.         <mx:Label x="10" y="10" text="公司" height="39" width="55" fontSize="21" fontWeight="bold"/>  
  17.         <mx:TextInput x="61" y="10" height="31" id="company"/>  
  18.         <mx:Label x="10" y="66" text="老大" width="55" height="49" fontSize="21" fontWeight="bold"/>  
  19.         <mx:TextInput x="61" y="75" height="31" id="ceo"/>  
  20.         <mx:Button label="添加" height="37" fontSize="17" id="add" click="addCompany();"/>  
  21.         <mx:Button  label="查看" height="29" fontSize="17" id="see" click="seeCeo();"/>  
  22.            
  23.     mx:Panel>  
  24. >  
 

上面代码的<mx:webservice>标签的wsdl属性是我们前面发布的WebService。</mx:webservice>

大致的流程是这个样子的:添加个功能基本上没有什么作用(具体原因我会在后面阐述),主要是查看功能,因为我们前面的服务提供类定义了一个HashMap,并存储了一些数值,所以当我们输入键值时,服务期会返回相应的value。

6 打完收工,尽情的享受WebService吧!!!

Important:

这个例子虽然简单,但是确遇到了很多问题。

1  问题描述:生成server-config.wsdd文件时,AdminClient不会报错,也出现发布成功的信号,但是web-inf下就是没有server-config.wsdd文件生成。

   解决方案:Tomcat版本过低,更换Tomcat版本,最好是Tomcat5.5及以上版本。我的是5.0就出现了此问题。

2  问题描述:Flex在运行时一篇深绿色,自己写上去的组件全部“潜水”,消失了!这个问题是最诡异的。

    解决方案:本人一行一行代码的测,结果终于解决了这个问题。但是我不敢确定是不是这里的问题。我在自己的<mx:script>标签里面写下了这么两句话public var s1:String=company.text; public var s2:String=ceo.text;结果界面就如问题描述一样,当我把这两句话去掉以后,界面就显示正常。是不是Flex里不允许把文本框之类组件的值直接赋刚定义的变量呢???哪位兄弟可以解开我这个疑问???</mx:script>

3  大家看到我的服务提供类里面的get方法体第一句话是init方法的调用,刚开始写的时候我是直接return的,但是这样做时,当我点击界面的查看按钮时,Flex不会报错,但也没有任何值返回来,于是我先进行添加再进行查看,也没有任何效果,最后我把init方法调用放在了get的方法体,这样才能成功。

在此我有个疑问:是不是Flex在调用后台Web服务提供类的时候,是不是每次请求都要进行一次类的实例化?但是我自己都不太相信这个假想,假如不是这样,那我遇到的问题又怎么解释呢?欢迎道友给出见解!!!

附件是本例的源代码!!!

  • source.rar (1.6 KB)
  • 描述: 类源代码,dep.wsdd,Flex界面
  • 下载次数: 480
分享到:
评论
2 楼 lwz7512 2007-11-09  
,虽然例子小,但是很详细!
1 楼 mhqawjh 2007-11-03  
哦  还有 假如各位在发布Web服务时碰到了这样的问题:
Processing file delopy.wsdd
Exception: AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (404)/axis/services/AdminService
faultActor:
faultNode:
faultDetail:
{}:return code: 404
<html><head><title>Apache Tomcat/5.5.16 - Error report</tit
le><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;ba
ckground-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;
color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Ari
al,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-f
amily:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-famil
y:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:
Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color :
black;}A.name {color : black;}HR {color : #525D76;}--></style> </hea
d><body><h1>HTTP Status 404 - /axis/services/AdminService</h1&
gt;<HR size="1" noshade="noshade"><p><b>ty
pe</b> Status report</p><p><b>message</b> <u>
;/axis/services/AdminService</u></p><p><b>description<
;/b> <u>The requested resource (/axis/services/AdminService) is not ava
ilable.</u></p><HR size="1" noshade="noshade"
><h3>Apache Tomcat/5.5.16</h3></body></html>
{http://xml.apache.org/axis/}HttpErrorCode:404


可以这样解决:
java org.apache.axis.client.AdminClient -lhttp://地址:端口/context模块/services/AdminService dep.wsdd

例如本例发布Web服务的命令为:
java org.apache.axis.client.AdminClient -lhttp://localhost:8080/ws/services/AdminService dep.wsdd

相关推荐

    Flex4.0 如何通过 HttpService和WebService与服务器进行通信

    flex通过Http和WebService与服务器通信交互,交互后台采用java的Struts2做为处理后台.

    flex4与Java通信实例

    flex4出来一段时间了,去年看了一段时间flex3,后来由于暂时没有项目需求.所以flex遗忘了很多.这次使用flex4+myeclipse8.5录制了一个视频.以免时间长了遗忘. 软件环境:windows7+... 3 flex与webservice交互WebService

    Flex和.NET通信

    可以实现FLEX和.NET的通信,是通过.NET的WEBSERVICE来通信的.本例子只提供学习

    Flex调用WebService的例子(完形填空考试系统)

    Flex通过WebService与java通信读取数据库中的试题。当时不懂WebService,在论坛里发了帖子询问,后来解决了,几个热心的朋友询问解决方法,这里共享出来,希望对初学的朋友们有些帮助。PS:现在已经不做Flex了,呵呵...

    flex与java通信,通过插件blazed

    --flex与webservice交互这里调用一个天气预报的webservice--&gt; &lt;s:WebService id="ws" wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl" fault="ws_faultHandler(event)" result="ws_...

    Flex与处部的数据通信和图表

    4.1 Flex与处部的数据通信 4.1.1 使用HTTPService 4.1.2 使用WebService 4.1.3 使用Remoting 4.2 Flex图表 4.2.1 使用饼形图呈现数据 4.2.2 使用折线图呈现数据 4.2.3 使用柱形图呈现数据 4.2.4 向图表添加动画 ...

    flexdemo示例有兴趣可以看看

    flexdemo示例有兴趣可以看看 1 flex 与普通java类通信RemoteObject 2 flex 与服务器交互HTTPService 3 flex与webservice交互WebService

    Flex新手教程_入门级学习笔记

    5.Flex通信 30 5.1 与HTTPService交互 30 5.2 与WEBService交互 30 5.2.1WebService简介 30 5.2.2 Flex访问WebService 32 6 BlazeDS与服务端通信 33 6.1什么是BlazeDS 33 6.2配置BlazeDS,并使之正常运作 34 6.3创建...

    flex之低数据量通信实例源码

    flex之低数据量通信实例源码,包括上传、下载、HTTPservice、webservice等

    如何做好Flex与Java交互

     当大家尝试使用flex与普通java类通信时,一般用RemoteObject,具体的代码段如下:  package com.flex.demo; /** *第一种 功能描述:该类用来实现flex与普通java类中的方法通信 * @author Administrator */ ...

    FLEX数据与通讯

    介绍flex的通信方面的知识,有关httpservice,webservice服务相关方面的知识。

    flex和asp.net的一个简单的通信例子

    flex利用webservice和asp.net通信的一个简单的例子。flex客户端将登录用的名字和密码传递给后台服务器端。在vs2008中新建web服务。即后缀名为.asmx的文件。

    ExtJs与Java通信

    最完善的ExtJS与Java后台通信,两种数据传输第一种采用的是JSon,第二种是采用直接提交Form表单,个人觉得ExtJS比Flex与Java通信要简单写,呵呵。谁有WebService学习资料告诉我啊,要自己写WebService了哈。

    FLEX AIR天气预报查询

    为了学习flex 的webservice通信做的一个小程序,基于air的,分享出来方便大家学习。 有问题联系QQ:282771471

    flex3的cookbook书籍完整版dpf(包含目录)

    使用发布/订阅消息 18.8节. 注册服务端数据类型 18.9节. 与WebService通信 18.10节. 添加SOAP头到WebSerice请求 18.11节. 解析WeBService的返回的SOAP响应 18.12节. 使用SecureAMFChannel进行AMF的安全通信 18.13节...

    基于WebService的数据访问(上) Flex与.NET互操作(二)

    Flex提供了、和标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如WebService)进行数据交互通信显得更加容易.

    Flex HTTPService with ASP.NET.zip

    帶有ASP.NET的Flex HTTPService ... Adobe Flex中有許多方法可以與ASP.NET(或簡單地說,服務器端語言)進行通信。 HttpService,WebService,WebORB,FluorineFx等。在本教程中,我僅關注HTTPService。

    ArcGIS WebApp Builder--JavaScript Viewer 1.0

    用过flex、silverlight的viewer吧,现在js的viewer终于出了...5 与服务器的通信方式,需要你自己考虑,webservice,rest,websocket看着办吧 6 如果以后考虑到使用web3d,建议马上来尝试这产品 7 beta版本嘛,bug自己消化

    cocoaAMF使用指南.zip

    AMF是Action Message Format协议的简称,AMF协议是Adobe公司自己的协议,主要用于数据交互和远程过程调用,在功能上相当于WebService,但是AMF与WebService中的XML不同的是AMF是二进制数据,而XML是文本数据,AMF的...

    MXML.doc MXML语言是专门用于Flex程序中

    MXML语言是专门用于Flex程序中,描述界面表现的一中XML标记语言。我们可以用它来管理程序的整体布局,控制组件的样式和外观,也可以构建非可视化的对象,比如XML数据、与服务器端通信的WebService、组件的数据源等。

Global site tag (gtag.js) - Google Analytics