CN101853189B - 一种基于Java的异常处理装置及其异常处理方法 - Google Patents
一种基于Java的异常处理装置及其异常处理方法 Download PDFInfo
- Publication number
- CN101853189B CN101853189B CN2010101841044A CN201010184104A CN101853189B CN 101853189 B CN101853189 B CN 101853189B CN 2010101841044 A CN2010101841044 A CN 2010101841044A CN 201010184104 A CN201010184104 A CN 201010184104A CN 101853189 B CN101853189 B CN 101853189B
- Authority
- CN
- China
- Prior art keywords
- exception
- exception handler
- abnormality processing
- interface
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明是一种基于Java的异常处理的装置及其异常处理方法,其中异常处理装置主要包括异常管理器、XML解析器、类反射器、异常处理器、异常处理结果信息封装器及日志记录器,并提供异常处理框架接口、异常处理器接口和日志记录器接口,将异常处理封装在一个框架中,并为用户提供了统一的调用接口和格式化的配置文件。基于Java的异常处理方法,是将异常处理与系统逻辑分离,通过提供异常处理框架接口与异常处理器接口,使传入的异常封装在一个框架内处理。本发明使用户能够集中更多力量处理逻辑实现部分,同时用户可根据实际需要对框架进行扩展。本发明具有通用性,且采用多种异常处理返回结果相结合的方式,满足项目开发不同阶段对异常信息的不同需求。
Description
技术领域
本发明涉及软件异常处理领域,具体涉及一种基于Java的异常处理装置及其异常处理方法。
背景技术
近年来,随着软件系统规模的增大和复杂度的提高,软件质量的保证和提高也越来越难。软件质量是软件的生命。高质量的软件必须具有一定的容错性以提高软件的可靠性、健壮性,最大限度地降低异常造成的损失。如何提高软件的容错性是目前软件开发领域亟待解决的问题。
Java具体的异常处理结构由try…throw/throws…catch…finally块来实现。try块用来存放可能出现异常的java语句,throw/throws用来抛出这些出现的异常,catch用来捕获发生的异常,并对异常进行处理,Finally块用来清除程序中未释放的资源。不管理try块的代码如何返回,finally块都总是被执行。Java有两种异常处理机制,分别是声明异常和捕获异常。
XML(Extensible Markup Language,可扩展标记语言),是描述数据信息的一种标准语言。它是从SGML(标准通用标记语言)发展而来的。XML本身是一套定义语义标记的规则,通过规则对文档进行说明,使文档包含语义信息。XML数据主要由五部分组成:XML文件头说明部分、文档类型定义部分、XML文件中的元素、XML文件中的属性以及元素和属性的取值。元素和属性是XML数据文件的核心部分。
SAX(Simple API for XML),在XML中对SAX的应用广泛,几乎所有的XML解析器都会支持它。SAX解析器是一个专门用于解析XML配置文件的“推”模型,它在读取文档时激活一系列事件,比如当发现元素开始、元素结束、文本、文档的开始或结束等时,SAX解析器都会发送事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问并保存需要的数据。事件处理器中响应事件的代码是由程序员编写的。
反射是动态发现类型信息的能力。反射机制是在运行状态中,对于任意的类都能够知道这个类的所有属性和方法,对于任意的对象都能任意调用它的方法,这种动态获取信息以及动态调用对象方法的功能称为反射机制。Java语言提供的反射功能都在java.reflect包里实现并提供相应的API方便用户调用。
接口设计模式是通过引入接口来间接获得服务的设计模式。接口模式直接体现了面向对象的系统设计的原则之一:“针对接口编程,而不是针对实现编程”。“让调用者通过接口间接使用服务者”,这是面向对象设计的基础——多态性正是从这样的设计中产生的。接口将服务独立出来,服务的提供者就可以发生变化。使用接口模式,可以保证需要服务的类不与任何提供服务的类发生耦合,从而提高代码的复用性。但是,和其他任何间接性一样,接口模式会让程序变得更加难以理解,还有可能造成对继承的滥用。但是,通过接口模式可以从接口的角度考虑设计思想。
当前,对于软件中的异常处理,通常采用Java异常处理机制,它可以检测出程序运行时的异常状况并使系统恢复到正常状态,但是现有的Java异常处理机制在可配置性、可扩展性、灵活性、信息的友好性等方面还不能很好地满足高质量软件的要求。具体而言,存在以下问题:
(1)如果异常处理方式不当,容易造成严重的性能下降问题。
(2)一个系统中各层对异常处理的方式不同,不同的层需要编写不同的代码,工作量大且复用性差,更新代码引起的改动较大。
(3)在系统不同阶段对异常处理有不同的需求:在开发阶段,开发人员需要得到完整的详细的异常信息以便分析BUG;在发布阶段,用户希望看到的是比较友好的异常信息提示。一种健全的异常处理机制应该能够通过简单的配置达到这样的效果。
(4)异常处理返回的异常信息不够详细,不利于开发人员对BUG进行准确定位,查找BUG产生原因将耗费大量时间。
(5)异常记录方式和位置可能会在不同环境下有不同的要求,每次为不同的应用编写代码降低了开发效率。
(6)异常报告信息没有统一管理。很多项目中报告给用户的错误消息,都是程序员在开发中自己编写的,对用户而言,常常不是友好的提示信息。而清晰友好(user friendly)的异常信息会让用户获得很好体验。
另外,当前应用较多的是Struts框架的异常处理机制,它是以JVM(Java虚拟机)的异常处理机制为基础的,尽管它提供了强大的通用错误处理机制,但是不能保证捕获到所有的异常或者错误。
因此目前的异常处理技术难以满足高质量软件的异常处理需求,无法提供统一的异常处理接口,异常处理效率低下,异常处理代码的可复用性、可扩展性、可维护性差。
发明内容
本发明提供了一种基于Java的异常处理装置及其异常处理方法,采用了Java异常处理技术和面向框架的设计思想,把异常处理封装在一个框架中,该框架为用户提供了统一的调用接口、格式化的配置文件,具有日志记录功能,不仅可以达到统一协调程序员对异常处理的目的,还极大地提高了异常处理代码的可复用性、可扩展性、可配置性、交互性以及灵活性。
一种基于Java的异常处理装置,包括异常处理框架接口、异常管理器、XML解析器、类反射器、异常处理器接口、异常处理模块、异常处理结果信息封装器、日志记录器接口、日志记录模块,以及日志记录器工厂;其中,异常处理模块中包含有默认异常处理器,扩展包括i个异常处理器,日志记录模块中包含有默认日志记录器,扩展包括j个日志记录器,i、j为非负整数。
异常处理框架接口接收上层应用程序中的异常对象,将异常对象传递给异常管理器;异常管理器接收传入的异常对象,读取默认的XML配置文件,调用XML解析器解析该XML配置文件,提取出与产生异常对应的异常处理器的名称,XML解析器将解析得到的异常处理器的名称传递给类反射器,类反射器根据该名称生成异常处理器实例,并将该异常处理器实例传递给异常处理器接口;异常处理器接口根据读入的异常处理器实例,调用异常处理模块中对应的异常处理器进行异常处理;异常处理器将异常处理后的结果信息经异常处理结果信息封装器进行封装后传递给异常处理器接口,异常处理器接口通过异常管理器将该结果信息返回给上层应用程序。
日志记录器工厂从异常管理器中接收异常对象,读取日志记录配置文件,根据日志记录配置文件获取所要调用的日志记录器,通过日志记录器接口调用日志记录模块中对应的日志记录器对异常进行日志记录;所述日志记录器接口为日志记录器提供统一接口。
一种基于Java的异常处理方法,具体包括如下步骤:
步骤一:当上层应用程序中出现异常的时候,异常处理框架接口接收从上层应用程序中传入的异常对象。
步骤二:异常管理器收到来自异常处理框架接口传入的异常对象,加载异常处理装置中默认的XML配置文件,并将该XML配置文件传递给XML解析器,同时,异常管理器将异常对象传递给日志记录器工厂,日志记录器工厂读取日志记录配置文件,根据日志记录配置文件获取对应于传入的异常对象的日志记录器名称,通过日志记录接口在日志记录模块中生成对应的日志记录器进行日志记录。
步骤三:XML解析器对默认的XML配置文件进行解析,解析出该异常对象所属异常对象类型所对应的异常处理器的名称、异常处理返回模式及异常信息报告方式,并将提取出的异常处理器的名称传递给类反射器。
步骤四:判断异常对象类型是否为系统定义异常对象类型,如果是,则由类反射器生成相应的默认异常处理器实例,如果不是,类反射器以传入的异常处理器名称为参数生成相应的自定义异常处理器实例;类反射器将生成的异常处理器实例传递给异常处理器接口;传入的异常对象没有在XML配置文件中描述的情况下,由类反射器生成默认异常处理器实例。
步骤五:异常处理器接口根据读入的异常处理器实例,调用异常处理模块中对应的异常处理器进行异常处理,异常处理器调用其异常处理方法对异常进行处理,并将处理完毕的结果信息提交至异常处理结果信息封装器进行封装。
步骤六:异常处理结果信息封装器将封装好的结果信息返回给异常处理器接口,再通过异常管理器和异常处理框架接口,最终返回给上层应用软件。
本发明一种基于Java的异常处理装置及其异常处理方法的优点与积极效果在于:
(1)由于本发明的方法和装置中提供有日志记录功能,因此能在程序员调试时对BUG进行准确定位和分析提供更全面的参考;
(2)由于本发明为用户提供了统一的调用接口,如异常处理框架接口,用户只需要直接调用接口中的方法就可以进行异常处理,因此具有通用性;
(3)由于本发明采用配置文件定义了异常和异常处理方式之间的对应关系,用户可以方便地通过修改配置文件来控制异常处理的方式,因此具有高度的灵活性;
(4)由于本发明采用多种异常处理返回结果相结合的方式,因此能够满足项目开发不同阶段对异常信息的不同需求,如重新抛出包装后的异常对象、返回详细精确的异常信息(调试阶段)、返回清晰友好的异常提示信息(对话框,发布阶段)以及异常编号;
(5)由于本发明为用户提供了异常处理器接口,用户可以根据实际应用需求自定义异常,并通过扩展框架提供的接口来实现自定义异常处理器,因此具有开放的可扩展性。其中默认异常管理器和各种自定义异常处理器必须实现各自的接口,以保证框架的通用性。
附图说明
图1为本发明一种基于Java的异常处理装置的总体结构图;
图2为本发明一种基于Java的异常处理方法的总体流程图;
图3为本发明XML配置文件的示例图;
图4为本发明XML解析器响应事件的流程图;
图5为本发明实施例中航天器自动化测试系统执行软件中异常继承关系图。
具体实施方式
下面将结合附图,对本发明作进一步的详细说明。
本发明的目的是提出一种基于Java的异常处理的方法及其装置,通过本发明把异常处理封装在框架中,将异常处理与系统逻辑分离,使用户能够集中更多力量处理逻辑实现部分,同时用户可根据实际需要,对框架进行扩展和完善。
本发明一种基于Java的异常处理的装置,如图1所示,包括以下几个部分:异常处理框架接口1、异常管理器2、XML解析器3、类反射器4、异常处理器接口5、异常处理模块6、异常处理结果信息封装器7、日志记录器接口8、日志记录模块9以及日志记录器工厂11。异常处理模块6中包含有默认异常处理器,也可自定义扩展包括i个异常处理器:异常处理器N1~异常处理器Ni,i为非负整数。日志记录模块9中包含有默认日志记录器,也可自定义扩展包括j个日志记录器:日志记录器M1~日志记录器Mj,j为非负整数。
异常处理框架接口1,是提供给用户调用的唯一接口,由该接口提供对上层应用程序10中异常对象的处理方法,通过多态和反射机制,实现对处理异常方法模块的调用。系统捕获异常时,用户只需直接调用该异常处理框架接口1,而无需清楚地了解框架内部是怎样进行异常处理的。异常处理框架接口1接收上层应用程序10中的异常对象,将异常对象传递给异常管理器2,将从异常管理器2接收的异常处理结果信息返回给上层应用程序10。
本发明装置中的默认配置文件是一个XML格式的文件,它描述了异常和异常处理之间的对应关系,如图3所示,为一段XML配置文件config.xml,本发明的异常处理装置在配置文件中定义了如下节点:(1)异常对象类型节点exceptionType,用于标记异常的类型,其值是异常的完整路径名;(2)异常处理器节点exceptionHandler,用于标记与异常对象类型相对应的异常处理器,异常处理器节点又包含多项属性,它们是:处理器名称子节点handlerName,用于标记异常处理器的类型,其值也是完整的路径名;返回模式子节点returnMode,用于标记异常处理返回的模式,有四种选择:ErrorCode、ErrorString、ExceptionString和Exception,分别表示:返回异常编号、详细的异常信息、清晰友好的异常信息和抛出异常;报告方式子节点alertType,用于标记异常的信息报告方式,有两种选择:可以配置其值为Dialog,它表示以清晰友好(user friendly)可交互的对话框的形式向用户报告异常信息;另一种是默认的方式,该方式向控制台显示清晰友好的信息。
返回模式子节点returnMode的四种模式使用的时机不同,当需要根据异常编号来查找自定义异常处理器的时候,则配置该参数的值为ErrorCode;当异常处理装置处于调试阶段,需要对异常进行准确识别和定位的时候,详细的异常信息能够为装置用户提供有效的参考,此时配置该参数的值为ErrorString;当异常处理装置处于发布阶段,需要向用户显示友好、一目了然的信息,此时配置该参数的值为ExceptionString;当程序不知道该怎样处理出现的异常时,配置该参数的值为Exception。
异常管理器2是本发明的异常处理装置的核心。异常管理器2的主要功能是读入从异常处理框架接口1中传入的异常对象,读取默认的XML配置文件,调用XML解析器3解析该XML配置文件,提取出用户指定的与产生异常对应的异常处理器的名称,调用类反射器4根据该名称生成异常处理器实例,从而调用该异常处理模块6中对应异常处理器中的异常处理方法对异常进行处理。异常管理器2使本发明的异常处理装置具有可配置性,其关键在于它能够调用具有解析配置文件的能力的XML解析器3,如图1所示。如果没有扩展异常处理模块6来自定义新的异常处理器,那么当上层应用程序出现异常的时候,调用默认异常处理器进行异常处理。
XML解析器3对现有的SAX解析器进行了封装,并提供了便于异常管理器2获取信息的方法。XML解析器3解析的具体过程:首先获得一个SAX解析器工厂实例,再由该SAX解析器工厂实例获得SAX解析器实例,SAX解析器实例会调用其现成的方法parse(FilexmlFile,ContentHandler contentHandler),将系统中定义好的XML配置文件config.xml和实现了ContentHandler接口的事件处理器对象传递给该方法parse,就可以实现对框架配置文件内容的解析,提取用户需要的配置信息。其中,parse是定义的用来实现对XML配置文件内容进行解析、提取用户需要的方法;参数xmlFile是类型为File的要解析的XML配置文件;参数contentHandler是实现ContentHandler接口的事件处理器对象;ContentHandler是SAX应用程序实施的主要接口:如果需要通知应用程序基本解析事件,则它将实现此接口并且使用设置事件处理器方法setContentHandler,向SAX解析器注册一个实例。XML解析器3将解析得到的异常处理器的名称传递给类反射器4。
类反射器4根据XML解析器3提取出来的异常处理器的名称生成对应的异常处理器实例,从而实现由异常处理器名称来定位某个异常处理器。
异常处理器接口5,将各异常处理器所能够提供的服务抽象出来,定义为异常处理器接口5中的方法,使得异常处理器接口5根据类反射器4中传递的异常处理器实例来调用异常处理模块6中对应的异常处理器,并将异常处理后的结果信息传递给异常管理器2。由于不同的系统对异常处理的要求不同,所以将各异常处理器所能够提供的服务抽象出来,定义为异常处理器接口5中的方法,这样,当本发明的异常处理装置应用于不同的系统的时候,根据需要自定义异常处理器,在这些自定义异常处理器里实现这些异常处理的方法,便于用户对本发明的异常处理装置的框架进行扩展。异常处理器接口5中定义了必须能够接受表示异常对象类型、异常处理返回模式和异常信息报告方式的参数的方法。程序员只需要按照异常处理器接口5中所规定的方法在异常处理器中实现该方法即可。异常对象类型、异常处理返回模式和异常信息报告方式这三个参数的值由XML解析器3从XML配置文件中提取得,XML解析器3在解析配置文件时对配置信息进行了保存,然后传递给类反射器4,由类反射器4提供给异常处理器接口5。
异常处理模块6的主要功能是进行异常处理和结果信息报告。异常处理模块6包括异常处理框架的默认异常处理器和用户自定义的若干异常处理器Ni。如果捕获的异常在默认XML配置文件中没有描述,则调用默认异常处理器,然后由用户对默认XML配置文件的内容进行修改,添加未被描述的异常对象与相应的异常处理器节点的信息,并对该异常对象的处理进行重新配置,所述的配置指由类反射器4重新生成对应的异常处理器实例传递给异常处理器接口5,异常处理器接口5调用相应的异常处理器进行异常处理。异常处理器必须实现异常处理器接口5,重写异常处理器接口5中的异常处理方法,同时提供显示异常信息对话框的方法。异常处理器将异常处理后的结果信息传递给异常处理结果信息封装器7进行封装。
异常处理结果信息封装器7对异常处理器中传送的异常处理结果信息进行封装,将之封装为一个对象。异常处理结果信息所封装的对象属性包括isSuccessful和returnString,分别表示是否成功处理异常和异常处理器返回的异常相关信息,例如包括异常对象类型、出现时间以及出现在程序中的位置等信息。异常处理结果信息封装器7将封装好的结果信息对象返回给异常处理器,异常处理器再通过异常处理器接口5将这些结果信息返回至异常管理器2。
日志记录器接口8为日志记录提供统一接口,在该接口中定义了日志记录的方法。
日志记录模块9实现日志记录器接口8,其主要功能是对异常出现时的相关信息进行日志记录。在XML配置文件中规定日志记录方式,有默认和用户自定义两种,一般采用默认日志记录器进行日志记录,当用户需要自定义日志记录方式时也可以自定义日志记录器Mj。用户自定义的日志记录方式通过修改XML配置文件来实现。
日志记录器工厂11,采用工厂方法的设计模式,用于一次多个地获取日志记录器实例。当本发明的异常处理装置接受到异常对象参数时,日志记录器工厂11获取日志记录配置文件,根据从异常管理器2中传入的异常对象,生成日志记录器工厂11的实例。日志记录器工厂11读取日志记录配置文件,并根据该配置文件中的参数值,获取对应于传入异常对象所要调用的日志记录器的名称,最后通过日志记录接口8调用日志记录模块9中对应的日志记录器对异常进行日志记录。
本发明一种基于Java的异常处理的方法,总体流程如图2所示,包括如下步骤:
步骤一:当上层应用程序10中出现异常的时候,异常处理框架接口1接收从上层应用程序10中传入的异常对象。
步骤二:异常管理器2收到来自异常处理框架接口1传入的异常对象,加载本发明的异常处理装置中默认的XML配置文件,将XML配置文件传递给XML解析器3,同时,异常管理器2将异常对象传递给日志记录器工厂11,日志记录器工厂11读取日志记录配置文件,日志记录器工厂11根据日志记录配置文件获取对应于传入的异常对象的日志记录器名称,通过日志记录接口8在日志记录模块9生成对应的日志记录器进行日志记录。
步骤三:XML解析器3对XML配置文件进行解析,解析出该异常对象所属异常对象类型所对应的异常处理器的名称、异常处理返回模式及异常信息报告方式,并将提取出的异常处理器的名称传递给类反射器4。
步骤四:根据异常对象类型判断是否为本发明装置所默认的异常对象类型,如果是,则由类反射器4生成框架默认的异常处理器实例,如果不是,类反射器4以传入的异常处理器名称为参数生成相应的自定义异常处理器实例。对于在XML配置文件中没有描述传入的异常对象的情况下,由类反射器生成默认异常处理器实例。
步骤五:异常处理模块6中相应异常处理器调用其异常处理方法对异常进行处理,并将处理完毕的结果提交至异常处理结果信息封装器7进行封装。
步骤六:异常处理结果信息封装器7将封装好的结果返回给异常处理器,再由异常处理器通过异常管理器2和异常处理器接口5,将异常处理的结果信息返回给上层应用程序,最后结束本次异常处理。
步骤三中,XML解析器采用SAX解析技术对配置文件进行内容解析。SAX解析技术首先读入XML配置文件,采用边读取边解析的方式来解析内容。解析开始之前,需要向解析器注册一个事件监听器,当解析器读到一个标签时,就会调用监听器中的方法,并把标签名作为参数传递给该方法,在该方法中实现有在读到该标签时需要做的相应的动作,作为事件的响应。各个事件包括遇到元素开始标签、遇到元素值、遇到元素结束标签,随着文件的读入一个个顺序地被抛出,相应的方法也会被顺序地调用,最后,当读入完成,方法都被调用后,对文件的解析也就完成了。SAX解析技术具体解析流程如图3所示。开始读取文档头,再读取标签名,并将该标签名保存在元素名称变量elementName中,然后读取标签内容,将其保存在元素内容变量elementContent中,判断elementName的值是否与异常对象类型exceptionType的值相等,如果相等,则将elementContent的值赋给变量key,所述key是哈希表handlers中的字段,然后继续读取后面的标签,循环直到读取文档结尾。如果不相等,继续判断elementName的值是否等于处理器名称子节点handlerName的值,如果不相等,则提示用户配置文件格式错误信息,如果相等则将elementContent的值赋给变量handlerName,继续判断elementName的值是否等于返回模式子节点returnMode的值,如果不相等,则提示用户配置文件格式错误信息,如果相等则将elementContent的值赋给变量returnMode,继续判断elementName的值是否等于exceptionType的值,如果不相等,则提示用户配置文件格式错误信息,如果相等则将elementContent的值赋给报告方式子节点alertType,然后将handlerName,returnMode,alertType的值保存到哈希表handlers中,并与之前解析出来的key值相对应。最后读取文档结尾,结束解析流程,在本解析流程中当出现提示用户配置文件格式错误信息时,同样结束本解析流程。
步骤一中所述的XML配置文件具体定义了如下节点:
(1)异常对象类型节点exceptionType,用于标记异常的类型,其值是异常的完整路径名;
(2)异常处理器节点exceptionHandler,用于标记与异常对象类型相对应的异常处理器,异常处理器节点又包含多项属性,它们是:
处理器名称子节点handlerName,用于标记异常处理器的类型,其值也是完整的路径名;
返回模式子节点returnMode,用于标记异常处理返回的模式,有四种选择:ErrorCode、ErrorString、ExceptionString和Exception,分别表示:返回异常编号、详细的异常信息、清晰友好的异常信息和抛出异常;
报告方式子节点alertType,用于标记异常的信息报告方式,有两种选择:可以配置其值为Dialog,它表示以清晰友好(user friendly)可交互的对话框的形式向用户报告异常信息;另一种是默认的方式,该方式向控制台显示清晰友好的信息。
返回模式子节点returnMode的四种模式使用的时机不同,当需要根据异常编号来查找自定义异常处理器的时候,则配置该参数的值为ErrorCode;当异常处理装置处于调试阶段,需要对异常进行准确识别和定位的时候,详细的异常信息能够为装置用户提供有效的参考,此时配置该参数的值为ErrorString;当异常处理装置处于发布阶段,需要向用户显示友好、一目了然的信息,此时配置该参数的值为ExceptionString;当程序不知道该怎样处理出现的异常时,配置该参数的值为Exception。
步骤三中对XML配置文件中未描述所传入的异常对象的情况下,用户可以通过在XML配置文件添加未被描述的异常对象与相应的异常处理器信息,来对该异常的处理进行重新配置。所述配置指重新根据该异常的异常对象类型来进行异常处理,包括生成对应异常对象实例,然后调用对应异常处理器进行异常处理。
由于较大型的系统中异常繁杂,需要对系统做深入的需求分析和测试,尽可能地归纳出系统中所有可能出现的异常。如果不对系统进行深入的分析和测试,很可能的结果是某个关键异常没有对应的处理措施,从而导致异常发生时系统没有招架之术;或者是对异常的类型欠缺深入的了解,导致不当的异常处理方式。以一个航天器自动化测试系统执行程序中的异常处理为例说明,经过对上层应用程序的分析,归纳总结出的可能出现的各种异常之间的继承关系图如图5所示。异常首先分为系统定义异常和自定义异常。
本实施例中将上层应用程序中所有可能出现的自定义异常划分为三大类,分别是:连接服务器相关异常、脚本相关异常、ITS(智能测试系统)运行时异常。连接服务器相关异常主要包括MtpException、RtsException、CurveException,它们分别表示连接主测试服务器异常、连接遥测服务器异常、连接曲线服务器异常;异常原因可能是:服务器本身存在问题而连接不上,创建和服务器之间的session(会话对象)时出现问题,和服务器之间通信(收发消息)时出现问题;脚本相关异常主要包括脚本解析器异常ScriptParserException和脚本解释执行时异常EvalError。当脚本解析器ScriptParser在将准备软件中输入数据的表格解析为脚本的时候可能会产生脚本解析器异常ScriptParserException,在解释器Interpretor对脚本进行解释执行的时候可能会产生赋值错误EvalError;ITS运行时异常主要包括不良操作异常BadOperationException和ITS运行异常ITSRuntimeException。
上层应用程序在运行时可能出现的系统定义异常包括未找到类异常ClassNotFoundException、未找到方法异常NoSuchMethodException、非法参数异常IllegalArgumentException、非法访问异常IllegalAccessException、调用目标异常InvocationTargetException、安全异常SecurityException、实例化异常InstantiationException、原生异常NativeException、中断异常和数字格式异常等。其中,前面七种异常可以归纳为非法操作引起的异常,它们出现时将被包装成自定义的不良操作异常BadOperationException后重新抛出。在处理动态链接库DLL文件时可能出现原生异常NativeException。
本实施例中根据异常的严重程度划将执行软件中所有可能出现的异常划分为三个等级,分别是:错误ERROR、警告WARN、信息提示INFO。脚本解析异常ScriptException和赋值错误EvalError属于ERROR级别,中断异常InterrptedException属于INFO级别,其它的所有异常都被划分为WARN级别,如图5所示。
对于不同级别的异常采取不同的处理措施:对于ERROR级别的异常,采取处理措施是,中止并退出当前程序,并通知用户;对于WARN级别的异常,采取的处理措施是,向用户报告警告提示信息,并继续运行当前程序;对于INFO级别的异常,程序不受影响,正常运行,只是向用户提供一些用户需要了解的信息。
比如,当航天器自动化测试系统执行程序中出现连接服务器相关异常MtpException时,它表示连接主测试服务器异常,该异常被划分为WARN级别。由于该异常是在进行航天器自动化测试应用中可能产生的异常,因此应用本发明的异常处理装置及其异常处理方法前,用户在进行航天器自动化测试应用前会自定义异常MtpException,并将符合用户需求的异常处理方式自定义地添加到默认的XML配置文件中。当该异常被异常处理装置捕获后,异常处理装置会自动加载用户定义的配置文件,通过对配置文件的解析,找到值为MtpException的异常对象类型节点exceptionType对应的处理器节点exceptionHandler,读取该节点handlerName、returnMode和alertType子节点的值,从而依次确定MtpException异常的处理器,返回模式及报告类型,最后通过反射机制生成异常处理器的实例,来对异常进行相关处理。
Claims (8)
1.一种基于Java的异常处理装置,包括日志记录器工厂,其特征在于,还包括异常处理框架接口、异常管理器、XML解析器、类反射器、异常处理器接口、异常处理模块、异常处理结果信息封装器、日志记录器接口和日志记录模块;其中,异常处理模块中包含有默认异常处理器,扩展包括i个异常处理器,日志记录模块中包含有默认日志记录器,扩展包括j个日志记录器,i、j为非负整数;
异常处理框架接口接收上层应用程序中的异常对象,将异常对象传递给异常管理器;
异常管理器接收传入的异常对象,读取默认的XML配置文件,调用XML解析器解析该XML配置文件,提取出与产生异常对应的异常处理器的名称,XML解析器将解析得到的异常处理器的名称传递给类反射器,类反射器根据该名称生成异常处理器实例,并将该异常处理器实例传递给异常处理器接口;
所述的默认XML配置文件,描述了异常和异常处理之间的对应关系,定义了以下节点:异常对象类型节点exceptionType,用于标记异常的类型,其值是异常的完整路径名;异常处理器节点exceptionHandler,用于标记与异常对象类型相对应的异常处理器,该异常处理器节点又包含多项属性:处理器名称子节点handlerName,用于标记异常处理器的类型,其值也是完整的路径名;返回模式子节点returnMode,用于标记异常处理返回的模式,有四种选择:返回异常编号ErrorCode、详细的异常信息ErrorString、清晰友好的异常信息ExceptionString和抛出异常Exception;报告方式子节点alertType,用于标记异常的信息报告方式,以对话框的形式向用户报告异常信息,或向控制台显示异常信息;
所述的XML解析器解析的具体过程是:首先获得一个SAX解析器工厂实例,再由该SAX解析器工厂实例获得SAX解析器实例,SAX解析器实例会调用其现成的方法parse(File xmlFile,ContentHandler contentHandler),将定义好的XML配置文件和实现了ContentHandler接口的事件处理器对象传递给该方法parse,实现对框架配置文件内容的解析,提取用户需要的配置信息;其中,parse是定义的用来实现对XML配置文件内容进行解析、提取用户需要的方法;参数contentHandler是实现ContentHandler接口的事件处理器对象;ContentHandler是SAX应用程序实施的主要接口:如果需要通知应用程序基本解析事件,则它将实现此接口并且使用设置事件处理器方法setContentHandler,向SAX解析器注册一个实例;
异常处理器接口根据读入的异常处理器实例,调用异常处理模块中对应的异常处理器进行异常处理;异常处理器将处理后的结果信息经异常处理结果信息封装器封装后传递给异常处理器接口,异常处理器接口将该结果信息经异常管理器,返回给上层应用程序;
日志记录器工厂从异常管理器中接收异常对象,读取日志记录配置文件,根据日志记录配置文件获取所要调用的日志记录器,通过日志记录器接口调用日志记录模块中对应的日志记录器对异常进行日志记录;所述日志记录器接口为日志记录器提供统一接口。
2.根据权利要求1所述的一种基于Java的异常处理装置,其特征在于,所述异常处理器接口,将各异常处理器所能够提供的服务抽象出来,定义了能够接受异常对象类型、异常处理返回模式和异常信息报告方式三个参数的方法,这三个参数通过XML解析器解析默认XML配置文件得到,通过类反射器传递给异常处理器接口。
3.根据权利要求1所述的一种基于Java的异常处理装置,其特征在于,所述异常处理模块,在XML配置文件中对传入的异常对象没有描述的情况下,调用默认异常处理器进行异常处理,用户在默认XML配置文件中添加未被描述的异常对象与相应的异常处理器节点信息,并对该异常的处理进行重新配置。
4.根据权利要求1所述的一种基于Java的异常处理装置,其特征在于,所述异常处理结果信息封装器,封装异常处理后的结果信息,该信息包括是否成功处理异常和异常处理器返回的异常结果信息,异常结果信息主要包括异常对象类型、异常出现时间以及异常出现在程序中的位置。
5.应用权利要求1所述的基于Java的异常处理装置的一种基于Java的异常处理方法,其特征在于,包括如下步骤:
步骤一:当上层应用程序中出现异常的时候,异常处理框架接口接收从上层应用程序中传入的异常对象;
步骤二:异常管理器收到来自异常处理框架接口传入的异常对象,加载默认的XML配置文件,并将该XML配置文件传递给XML解析器,同时,异常管理器将异常对象传递给日志记录器工厂,日志记录器工厂读取日志记录配置文件,根据日志记录配置文件获取对应于传入的异常对象的日志记录器名称,通过日志记录接口在日志记录模块中生成对应的日志记录器进行日志记录;
所述的默认的XML配置文件,描述了异常和异常处理之间的对应关系,定义了以下节点:异常对象类型节点exceptionType,用于标记异常的类型,其值是异常的完整路径名;异常处理器节点exceptionHandler,用于标记与异常对象类型相对应的异常处理器,该异常处理器节点又包含多项属性:处理器名称子节点handlerName,用于标记异常处理器的类型,其值也是完整的路径名;返回模式子节点returnMode,用于标记异常处理返回的模式,有四种选择:返回异常编号ErrorCode、详细的异常信息ErrorString、清晰友好的异常信息ExceptionString和抛出异常Exception;报告方式子节点alertType,用于标记异常的信息报告方式,以对话框的形式向用户报告异常信息,或向控制台显示异常信息;
步骤三:XML解析器对默认的XML配置文件进行解析,解析出该异常对象所属异常对象类型所对应的异常处理器的名称、异常处理返回模式及异常信息报告方式,并将提取出的异常处理器的名称传递给类反射器;
具体XML解析器采用SAX解析技术对配置文件进行内容解析:首先读入XML配置文件,采用边读取边解析的方式来解析内容,具体解析流程是:开始读取文档头,再读取标签名,并将该标签名保存在元素名称变量elementName中,然后读取标签内容,将其保存在元素内容变量elementContent中,判断elementName的值是否与异常对象类型exceptionType的值相等,如果相等,则将elementContent的值赋给变量key,所述key是哈希表handlers中的字段,然后继续读取后面的标签,循环直到读取文档结尾;如果不相等,继续判断elementName的值是否等于处理器名称子节点handlerName的值,如果不相等,则提示用户配置文件格式错误信息,如果相等则将elementContent的值赋给变量handlerName,继续判断elementName的值是否等于返回模式子节点returnMode的值,如果不相等,则提示用户配置文件格式错误信息,如果相等则将elementContent的值赋给变量returnMode,继续判断elementName的值是否等于exceptionType的值,如果不相等,则提示用户配置文件格式错误信息,如果相等则将elementContent的值赋给报告方式子节点alertType,然后将handlerName,returnMode,alertType的值保存到哈希表handlers中,并与之前解析出来的key值相对应;最后读取文档结尾,结束解析流程,在本解析流程中当出现提示用户配置文件格式错误信息时,同样结束本解析流程;
步骤四:判断异常对象类型是否为异常处理装置定义的默认异常对象类型,如果是,则由类反射器生成默认异常处理器实例,如果不是,类反射器以传入的异常处理器名称为参数生成相应的自定义异常处理器实例;传入的异常对象没有在XML配置文件中描述的情况下,由类反射器生成默认异常处理器实例;
类反射器将生成的异常处理器实例传递给异常处理器接口;
步骤五:异常处理器接口根据读入的异常处理器实例,调用异常处理模块中对应的异常处理器进行异常处理,异常处理器调用其异常处理方法对异常进行处理,并将处理完毕的结果信息提交至异常处理结果信息封装器进行封装;
步骤六:异常处理结果信息封装器将封装好的结果信息返回给异常处理器接口,再通过异常管理器和异常处理框架接口,最终返回给上层应用软件,结束本次异常处理。
6.根据权利要求5所述的一种基于Java的异常处理方法,其特征在于,步骤四中所述的传入的异常对象没有在XML配置文件中描述的情况下,用户通过对默认XML配置文件中添加未被描述的异常对象与相应的异常处理器节点信息,来对该异常的处理进行重新配置。
7.根据权利要求5所述的一种基于Java的异常处理方法,其特征在于,步骤五中所述的异常处理器接口,是将各异常处理器所能够提供的服务抽象出来,定义了能够接收异常对象类型、异常处理返回模式和异常信息报告方式三个参数的方法,这三个参数通过XML解析器解析默认XML配置文件得到,通过类反射器传递给异常处理器接口。
8.根据权利要求5所述的一种基于Java的异常处理方法,其特征在于,步骤五中所述的异常处理结果信息封装器封装异常处理后的结果信息,该信息包括是否成功处理异常和异常处理器返回的异常结果信息,异常结果信息主要包括异常对象类型、异常出现时间以及异常出现在程序中的位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101841044A CN101853189B (zh) | 2010-05-26 | 2010-05-26 | 一种基于Java的异常处理装置及其异常处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101841044A CN101853189B (zh) | 2010-05-26 | 2010-05-26 | 一种基于Java的异常处理装置及其异常处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101853189A CN101853189A (zh) | 2010-10-06 |
CN101853189B true CN101853189B (zh) | 2012-07-11 |
Family
ID=42804695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101841044A Expired - Fee Related CN101853189B (zh) | 2010-05-26 | 2010-05-26 | 一种基于Java的异常处理装置及其异常处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101853189B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004694B (zh) * | 2010-11-26 | 2013-04-24 | 北京握奇数据系统有限公司 | 一种基于Java的异常处理方法和异常处理装置 |
CN103365672B (zh) * | 2012-03-29 | 2016-04-06 | 宇龙计算机通信科技(深圳)有限公司 | 一种处理应用程序的描述信息的方法和系统 |
CN102938038B (zh) * | 2012-10-23 | 2015-04-08 | 南京大学 | 一种基于cop的增强软件安全性的方法 |
CN103731430A (zh) * | 2014-01-09 | 2014-04-16 | 北京哈工大计算机网络与信息安全技术研究中心 | 一种基于struts2架构文件上传安全控制方法 |
CN105119899B (zh) * | 2015-07-17 | 2019-01-11 | 世纪龙信息网络有限责任公司 | 非入侵式客户端运行时数据采集方法与系统 |
CN105701016B (zh) * | 2016-03-03 | 2018-06-29 | 南京大学 | 一种针对异常处理代码的测试方法 |
CN106020836B (zh) * | 2016-05-27 | 2019-07-26 | 浪潮(北京)电子信息产业有限公司 | 一种下层异常继承上层异常的异常处理方法及装置 |
CN108984120B (zh) * | 2018-06-29 | 2021-11-09 | 郑州云海信息技术有限公司 | 存储设备路径错误的处理方法以及相关装置 |
CN110838929B (zh) * | 2018-08-16 | 2022-08-02 | 阿里巴巴集团控股有限公司 | 系统错误排查方法和系统错误排查装置 |
CN109376025A (zh) * | 2018-09-03 | 2019-02-22 | 平安普惠企业管理有限公司 | 异常处理方法、装置、计算机设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452420A (zh) * | 2008-12-30 | 2009-06-10 | 中兴通讯股份有限公司 | 一种嵌入式软件异常监控和处理装置及其方法 |
CN101599039A (zh) * | 2008-06-03 | 2009-12-09 | 华为技术有限公司 | 嵌入式c语言环境下异常处理方法及装置 |
CN101639803A (zh) * | 2008-07-30 | 2010-02-03 | 株式会社日立制作所 | 多线程应用系统的异常处理方法和异常处理装置 |
-
2010
- 2010-05-26 CN CN2010101841044A patent/CN101853189B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599039A (zh) * | 2008-06-03 | 2009-12-09 | 华为技术有限公司 | 嵌入式c语言环境下异常处理方法及装置 |
CN101639803A (zh) * | 2008-07-30 | 2010-02-03 | 株式会社日立制作所 | 多线程应用系统的异常处理方法和异常处理装置 |
CN101452420A (zh) * | 2008-12-30 | 2009-06-10 | 中兴通讯股份有限公司 | 一种嵌入式软件异常监控和处理装置及其方法 |
Non-Patent Citations (1)
Title |
---|
赵霞,马世龙,吴朝军,程洪杰.一种动态JAVA构件模型的开发和应用.《中国科技信息》.2005,(第24期),第8-9页. * |
Also Published As
Publication number | Publication date |
---|---|
CN101853189A (zh) | 2010-10-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101853189B (zh) | 一种基于Java的异常处理装置及其异常处理方法 | |
US11868226B2 (en) | Load test framework | |
US9460417B2 (en) | Using dynamic object modeling and business rules to dynamically specify and modify behavior | |
KR100453824B1 (ko) | 이기종 네트워크 장비의 구성 관리를 위한 엑스엠엘 기반망 관리 시스템 및 방법 | |
US20030225774A1 (en) | Conversion of an object model to a source file generation model | |
US20030182625A1 (en) | Language and object model for describing MIDlets | |
CN108519952A (zh) | 一种分布式的web自动化测试系统及方法 | |
CN110069259B (zh) | 基于idl文件的解析方法、装置、电子设备和存储介质 | |
CN107807878A (zh) | 基于关键字的自动化测试引擎 | |
KR100845234B1 (ko) | 통신 소프트웨어 구조에서의 도메인 프로파일 파싱 장치 및그 방법 | |
CN101996132A (zh) | 公用对象请求代理程序体系结构接口自动测试方法和装置 | |
US20040006608A1 (en) | Flexible network element interface | |
CN101488085A (zh) | 软件接口测试方法和装置 | |
CN104168250B (zh) | 基于cgi框架的业务流程控制方法及装置 | |
EP3462330A1 (en) | Fault tolerant adapter system to consume database as a service | |
US20090063395A1 (en) | Mapping log sets between different log analysis tools in a problem determination environment | |
CN106411970A (zh) | 一种基于服务调用的故障处理方法、装置和系统 | |
US7340725B1 (en) | Smart test attributes and test case scenario in object oriented programming environment | |
CN116974620A (zh) | 应用程序的生成方法、运行方法以及相应的装置 | |
WO2020151209A1 (zh) | 一种基于多维数据变量的数据交互方法及平台 | |
CN107957871A (zh) | 一种基于jsr303的前后端同步正则校验方法 | |
CN111104122B (zh) | 一种xml业务逻辑映射到java业务逻辑的方法 | |
US6313768B1 (en) | System and method for trace diagnostics of telecommunications systems | |
US20110246967A1 (en) | Methods and systems for automation framework extensibility | |
US20080059975A1 (en) | Message processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120711 Termination date: 20140526 |