代码规范 自定义 Exception

代码规范 自定义 Exception

很多规范中都提到,自定义Exception 要求使用一种统一的构造函数,比如默认实现以下四个构造函数。

None.gif
    [Serializable ]
None.gif    

public
 
class
 XXXException:ApplicationException
ExpandedBlockStart.gifContractedBlock.gif    

dot.gif
{
InBlock.gif        
public XXXException():base()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public XXXException(string message):base(message)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public XXXException(string message,Exception innerException):base(message,innerException)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
protected XXXException ( System.Runtime.Serialization.SerializationInfo info , System.Runtime.Serialization.StreamingContext context ):base(info,context)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedBlockEnd.gif    }

这样做有几个好处
1. 前三个构造函数可以提供一直的实现方式
2. 最后一个构造函数是对象使用 soap 或者binary formattor 反序列化的时候比不可少的构造函数。否则你的remoting 对象服务端抛出的异常,无法bubble 到客户端。

我写一个简单的soap formattor 的例子来模拟remoting 对象的传递

None.gif
    
//
TODO 1 soap 序列化

None.gif

            XXXException ex
=
new
 XXXException(

invaliddot.gif.

);
None.gif            
None.gif
None.gif            FileStream fs

=
new
 FileStream(

soap.xml

,FileMode.Create );
None.gif
None.gif            
None.gif            System.Runtime.Serialization.Formatters.Soap.SoapFormatter sr

=
new
 System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
None.gif             
None.gif            sr.Serialize(fs,ex);
None.gif            fs.Flush();
None.gif            fs.Close();
None.gif
None.gif            

//
TODO 2 soap 翻序列化

None.gif

            XXXException exp;
None.gif
None.gif            FileStream fs1

=
new
 FileStream(

soap.xml

,FileMode.Open);
None.gif            
None.gif            System.Runtime.Serialization.Formatters.Soap.SoapFormatter dsr

=
new
 System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
None.gif             
None.gif            exp

=
(XXXException)dsr.Deserialize(fs1);
None.gif            
None.gif            fs1.Close();
None.gif            MessageBox.Show(exp.Message);

如果没有xxxexception 的第四个构造函数,可能会有

An unhandled exception of type ‘System.Runtime.Serialization.SerializationException’ occurred in mscorlib.dll

Additional information: The constructor to deserialize an object of type ExceptionDemo.XXXException was not found.

当然这个是针对 remoting,web service 走得是 xml serilizer,目前这个版本对 属性中有申明权限要求的字段无法序列化。所以web service 中,你是无法直接讲 exception 传递给客户端。

比如一下例子

  [WebMethod]
  public string HelloWorld(string s,out Exception ex)
  {
   ex=new FormatException(“fasdf”);
   return “Hello World”;
  }

你会发现这个例子无法在客户端调用,呵呵。

转载于:https://www.cnblogs.com/montaque/archive/2004/12/06/73358.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111171.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IE阻止了此网站安装ActiveX控件

    IE阻止了此网站安装ActiveX控件解决方法:工具——Internet选项——安全受信任站点,然后点击站点,把地址(这个你自己确定该站点是不是可信任的)复制进去,然后点添加,再点关闭然后继续点可信任站点,再点下面的自定义级别,在弹出的对话框里面对所有关于activex的选项做如下操作1:如果之前是启用或者提示的,不修改2:如果之前是禁用的,改成启用或提示重新访问此站点,即可。

  • 什么样的黑客能用python盗QQ号[通俗易懂]

    什么样的黑客能用python盗QQ号[通俗易懂]目录一科普二、为何Python会被选用为黑客语言呢?三、Python对于黑客攻击的优点四、Python对于黑客攻击用途五、那么,Python难学么?六、精通Python需要多长时间?七、Python主要应用领域有哪些?一科普注:以下“爬虫”均指“垂直爬虫”1.非爬虫方向的技术转行做爬虫是否可行?可行,而且有一定的基础会很容易上手,至于深入的部分就看自己了。2.非技术转行做爬虫是否可行?可行,但我认为较难,因为爬虫做深了以后是需要你了解各种相关领

  • 浅谈Servlet与JSP

    浅谈Servlet与JSP前言    提高JavaWeb开发,不得不说http协议,接下来就说Servlet和Jsp这两个java类。正文1、什么是JSP?    JSP(JavaServerPages)是Sun公司指定的一种服务器端动态页面技术的组件规范,Jsp是以“.jsp”为后缀的文件,在该文件中主…

  • UCOSII操作系统 第3课—UCOSII启动过程

    UCOSII操作系统 第3课—UCOSII启动过程1、初始化UCOSII(1)在调用UCOSII在任何的其他的服务之前,UCOSII要求首先调用初始化函数OSInit();这个函数的目的就是在整个系统启动之前,初始化所有的变量和数据结构。(2)其中,在OSInit()函数中建立空闲任务OS_TaskIdle();这个任务总是处于就绪态的,空闲任务的优先级是设置为最低的。(3)调用OSInit以后,任务控制块缓冲池中有OS_MAX_TASKS个任务控制块,事件控制缓冲区中有OS_MAX_EVENTS个事件控制块,消息队列缓冲池OS_Q中有OS_MAX

  • 华硕路由器、LEDE、梅林,阿里DDNS教程

    华硕路由器、LEDE、梅林,阿里DDNS教程转自我的博客:sleele.com/2019/04/17/…教程华硕路由器官方固件,梅林,LEDE大体一致,下面我以华硕路由器官改固件为例展开教程首先安装阿里DDNS插件,在阿里注册一个域名,买最便宜的即可,购买域名后进入控制台设置域名解析按照图标顺序操作之后后让你输入手机验证码,之后就可以得到AccessKeyID、AccessKey…

  • 正在接入或无法接入认证服务器(服务器未运行怎么解决)

    迷你版云服务器未启动内容精选换一换企业主机安全(HostSecurityService,HSS)是提升服务器整体安全性的服务,通过主机管理、风险防御、入侵检测、安全运营、网页防篡改功能,可全面识别并管理云服务器中的信息资产,实时监测云服务器中的风险,降低服务器被入侵的风险。使用主机安全需要在云服务器中安装Agent。安装Agent后,您的云服务器将受到HSS云端防护中企业主机安全(Host…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号