- 浏览: 639941 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ssxszt:
...
解决PopUpManager弹出窗口RangeError: Error #2006: 提供的索引超出范围 -
lijiajia:
木子佳 写道楼主,想要源码学习,谢谢。kajiamuzi@16 ...
DataGrid和AdvancedDataGrid CheckBox全选功能 -
juedi:
很好,是我需要的东东
Flex异常处理设计 -
暖暖fh:
大神,我想要源码,这个功能我折腾了好我啊 fuhan247@1 ...
DataGrid和AdvancedDataGrid CheckBox全选功能 -
chenzi:
一样的代码,两台机器上面,完全不同的报错。。Flex实现htt ...
Flex使用Https协议
Flex与服务器交互一般需要监听ResultEvent.RESULT事件和FaultEvent.FAULT事件。很多时候关注的是RESULT事件,FAULT事件在出现异常的情况下显得很有用。FAULT事件分为客户端和服务器端两大类。
下图是一个客户端的错误信息,代码如下:
private function onFault(event:FaultEvent):void{ Alert.show(event.toString()); }
从弹出的信息中可以看出是因为amf的url地址不对造成的。
下面来分析下FaultEvent对象。
FaultEvent对象的一个重要属性就是fault,Fault 类表示远程过程调用 (RPC) 服务调用中存在错误。
Fault的常用属性如下表:
下面是服务器端的异常信息。
与客户端异常信息对比可以发现:客户端的faultCode以Client开头,服务器端的faultCode以Server开头。
在java端可能用的比较多的异常处理类似于:new Exception("用户ID不能为空");这些异常是受检验的异常,用户很容易知道该如何办,但是如果抛出一个运行时异常,例如:java.lang.NullPointerException。用户就傻了,我改如何处理呢?是我操作有误还是系统出现问题了。业务用户现在能做的就是在bug系统上报一个bug。
一个好的异常处理架构应遵循以下规则:
1 任何异常都不会导致应用系统的崩溃。
2 在发生异常时,允许应用程序进行相应的处理。
3 显示给用户的错误信息要清晰的描述发生了什么错误以及应该采取什么样的处理。
4 如果需要辅助信息,错误信息还要帮助用户与帮助部门交互,为帮助部门团队提供必要的信息, 使他们能够快速的容易的重现错误。
5 日志信息能为开发团队人员在识别错误、在应用程序代码中定位错误产生的位置以及修正错误提供必要的信息。
6 错误处理代码不会降低应用程序代码的可读性。我们经常在网上查询oracle错误代码的处理方法。
在来回顾下,Fault对象的faultCode、faultDetail、faultString、rootCause。可以根据错误代码(faultCode)让用户做不同的处理,当然系统也可以记录下一些重要的异常信息作为系统优化的依据,文本说明(faultString)表示那个字段不能为空等提示信息,详细错误信息(faultDetail)可以知道错误更详细的信息,那个类的那个方法发生了什么异常。堆栈信息(rootCause)可以让我们更加清晰的看到错误的堆栈信息。
下面是一个很常用的异常信息提示框,点击详细信息的时候,开发人员可以很容易的定位异常。
我们知道了客户端Fault对象的数据结构后,就需要知道java端如何将java.lang.Exception转化为Fault的。以下主要说的是blazeds。
flex.messaging.MessageException继承自LocalizedException,LocalizedException继承自RuntimeException。
public class LocalizedException extends RuntimeException { /** @exclude - transient, the resourceLoader for localized strings doesn't need to serialize. */ protected transient ResourceLoader resourceLoader; /** @exclude */ protected int number; /** @exclude */ protected String message; /** @exclude */ protected String details; /** @exclude */ protected Throwable rootCause; }
可以很清晰的看到message对应Fault对象的faultString,details对应Fault对象的faultDetail,rootCause对应Fault对象的rootCause,number和Fault对象的code的对应还需要ResourceLoader从blazeds的errors.properties文件中加载相应的错误代码信息。例如:
10000=There was an unhandled failure on the server. {0} 10001=Null endpoint id arrived on message. 10002=No such endpoint: {0} 10003=No configured channel has an endpoint path ''{0}''. 10004=No destination with id ''{0}'' is registered with any service. 10005=Destination ''{0}'' not accessible over channel ''{1}''. 10006=Error occurred while attempting to convert an input argument''s type. 10007=Cannot invoke method ''{0}''. 10007-0-details=Method ''{0}'' not found. 10007-1-details={0} arguments were sent but {1} were expected. 10007-2-details=The expected argument types are ({0}) but the supplied types were ({1}) and converted to ({2}). 10007-3-details=The expected argument types are ({0}) but the supplied types were ({1}) with none successfully converted. 10007-4-details=The expected argument types are ({0}) but no arguments were provided. 10007-5-details=No arguments were expected but the following types were supplied ({0}). 10008=Cannot create class of type ''{0}''. 10008-0-details=Type ''{0}'' not found.
将整个系统的异常进行分类是一个很难的事情,优秀的异常分类能让我们快速的定位错误发生的位置,该如何处理。
如果系统中用到了spring那么很容易的用ApplicationContext加载资源文件,从资源文件中获得相应code的值。
知道了以上的知识后,我们就可以很容易的实现flex的异常处理了,new出一个MessageException,设置messageException的各个属性就可以了。简单的代码如下;
MessageException flex=new MessageException(); flex.setCode("错误代码"); flex.setMessage("我的测试数据"); flex.setDetails("详细信息"); flex.setRootCause(flex.getCause()); throw flex;
如果你的系统用到了SPRING BLAZEDS INTEGRATION,那么请继续往下看。
我们的系统中也许有自己的异常处理类,不想每次抛出异常都是flex的MessageException,如果有一个转化器将会大大降低j2ee与blazeds的耦合度。
其实在SPRING BLAZEDS INTEGRATION中我们很容易实现异常信息转化。
配置如下:
<bean id="sdpExceptionTranslator" class="org.sdp.flex.SdpExceptionTranslator"/> <flex:message-broker id="_messageBroker" services-config-path="/WEB-INF/flex/services-config.xml"> <!-- 异常转化类 --> <flex:exception-translator ref="sdpExceptionTranslator" /> </flex:message-broker>
exception-translator 属性定义了异常转化类的bean。该java只需要实现ExceptionTranslator 接口就可以了。handles方法判断要拦截的异常类,translate方法负责将一个java异常转化为blazeds异常。
public class SdpExceptionTranslator implements ExceptionTranslator { /** * * {@inheritDoc} */ public boolean handles(Class<?> clazz) { //判断要拦截的exception类型 return ClassUtils.isAssignable(SdpException.class, clazz); } /** * * {@inheritDoc} */ public MessageException translate(Throwable t) { if (t instanceof SdpException) { SdpException sdp=(SdpException) t; MessageException se = new MessageException(); se.setCode(""+sdp.getNumber()); se.setMessage(sdp.getMessage()); se.setDetails(sdp.getDetails()); se.setRootCause(t); return se; } return null; } }
限于时间限制,flex异常就先写到这里,有什么疑问可以给我留言。以后我会将自己的flex4+blazeds4+SPRING BLAZEDS INTEGRATION1.5+spring开发平台贡献出来,当然里面有更加详细的异常处理方法了,请大家多多关注我的博客。
评论
自定义一个titlewindow就可以了
我是 想问如何拿到 distnation,method,param 等信息
自定义一个titlewindow就可以了
谢谢你的关注,目前还不能与大家一起共享,以后会开源的。
:)碰到问题在咨询你
谢谢你的关注,目前还不能与大家一起共享,以后会开源的。
发表评论
-
图片背景使用九宫格
2012-07-24 10:20 0[Embed(source="../ass ... -
Flex弹出窗口做为Module
2012-07-23 18:00 0今天才知道原来TitleWindow也可以单独编译 ... -
Repeater使用简介
2012-05-09 19:26 1595mx组件中的Repeater类似与sprak中的Da ... -
Flex失效机制
2012-02-29 17:19 2966一、什么是失效机 ... -
Image倒影效果
2012-02-20 10:11 1674利用spark的BitmapImage实现倒影效果 ... -
Flex设置z轴的index
2012-02-13 14:58 4735flex4的UIComponent新增了dept ... -
得到一个字符的Unicode编码
2012-02-09 12:59 1961ActionScript 3.0String类中函数charC ... -
解决PopupManager.createPopup报错:状态“inactive”未定义
2012-02-04 21:27 2193出现这种的场景是在Module中使用弹出窗口Pop ... -
用chrome浏览器调试flex程序
2012-02-04 18:55 6872开发flex程序难免需要debug,但是IE8浏 ... -
Flash Player11不能输入中文,请谨慎升级
2011-12-18 01:04 2639很多时候,Flash的程序需要集成到其他系统中 ... -
优化Flash Builder
2011-12-18 00:54 2628Flash Builder4中新增了一个ASDO ... -
设置DataGrid的DataGridColumn的width
2011-12-18 00:42 5132DataGrid的column的width属性不 ... -
RollOver和MouseOver的不同
2011-12-12 15:03 2998共同点:都是针对鼠标的进入和进出事件。 ... -
转 Adobe移动战略失败的幕后
2011-12-08 15:56 1326最近一段时间,Adobe和Apple两个昔日的好伙 ... -
Flash Builder该这样编译,希望adboe的人能看到
2011-12-06 12:17 0从3.0开始使用flash builder,对f ... -
List或DataGrid可变行高
2011-11-29 21:57 3122默认情况下List组件是每行的行高是固定的,但 ... -
访问flex sdk版本和Flash player版本
2011-11-16 15:52 1322下面的代码将flex sdk的版本号和Fla ... -
设置TitleWindow的closeButton的mode
2011-11-16 15:42 1171默认情况下,TitleWindow的closeBu ... -
DataGrid header显示tooltip
2011-11-15 17:18 2497有时需要在DataGrid的header上显示 ... -
flash右键菜单项关键字
2011-11-15 16:26 1196有时需要在flash的右键菜单中添加 删除 ...
相关推荐
2.6异常和错误处理 13 3.Flex组件 15 3.1布局设计 15 3.3 MXML Module模块应用 16 3.4 表单 16 3.5 对话框 17 3.6 列表 18 3.7弹出菜单 19 3.8复杂用户交互应用结构 21 3.8.1 Tree高级应用 21 3.8.2 DataGrid 22 3.9...
基础篇主要介绍基本程序设计、语法结构、面向对象程序设计、继承和多态、异常处理和文本I/O、抽象类和接口等内容。 本书可作为高等院校相关专业程序设计课程的基础教材,也可作为Java语言及编程爱好者的参考资料
全书内容包括ActionScript 3.0 语言介绍、ActionScript3.0基本语法、事件机制、面向对象、数组、正则表达式、XML应用、常用的内置类、基本组件、...DataGrid组件、文本处理、绘图、几何结构、音频、视频、网络、异常处理...
异常处理。 安装 使用Symfony Flex的应用程序 打开命令控制台,输入项目目录并执行: composer require nijens/openapi-bundle 不使用Symfony Flex的应用程序 步骤1:下载套件 打开命令控制台,输入项目目录并执行...
第8章ActionScript3.0异常处理 150 8.1ActionScript3.0异常 150 8.1.1异常概述 150 8.1.2异常分类 150 8.2ActionScript3.0调试方法 152 8.2.1FlashPlayer的调试版本 152 8.2.2在FlashCS3IDE中调试 152 8.2.3在Flex...
响应未捕获的JavaScript异常 使用JavaScript处理运行时事件 第章:在移动应用程序中显示HTML内容 StageWebView对象 内容 导航事件 历史记录 焦点 位图捕获 第章:安全性 FlashPlatform安全概述 安全沙箱 权限控制 限制...
利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文...
修复了刚度Flex设计在等轴测视图和具有真几何的Board装配视图中显示不正确的问题。 22669 改进了Dimension对象点的捕捉行为。 24616 修复了(特定用户的设计)导出到PDF (BC:9184)后出现“绘图员文档已过期”的...
■基于FLex弹性布局重写前端(OA平台因要支持传统业务暂不涉及)。 ■提供全新的Bootstrap 4.0技术文档,并获得Bootstrap官方认同,访问http://code.z01.com/v4 ■前后端全面引入scss(sass)技术,与Bootstrap官方...
8.8 映射异常视图 312 8.8.1 问题 312 8.8.2 解决方案 312 8.8.3 工作原理 312 8.9 用@Value在控制器中赋值 314 8.9.1 问题 314 8.9.2 解决方案 314 8.9.3 工作原理 314 8.10 用控制器处理表单 ...
8.8 映射异常视图 312 8.8.1 问题 312 8.8.2 解决方案 312 8.8.3 工作原理 312 8.9 用@Value在控制器中赋值 314 8.9.1 问题 314 8.9.2 解决方案 314 8.9.3 工作原理 314 8.10 用控制器处理表单 ...
1.2 重新设计Web应用····· 5 1.2.1 RIA应用·········· 5 1.2.2 异步发送请求并避免等待···················· 7 1.2.3 使用Ajax·········· 7 1.3 Ajax简介··· 8 ...