代码规范 自定义 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

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

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

(0)
上一篇 2021年7月21日 下午10:00
下一篇 2021年7月22日 上午8:00


相关推荐

  • windows server2003 web服务器搭建

    windows server2003 web服务器搭建在控制面板中点击添加或删除程序,打开如下界面:勾选并打开应用程序服务器-Internet信息服务(IIS)-万维网服务依次点击确定后,开始下载服务,完成后打开IIS管理器然后进行如下设置在主目录下创建一个文本文档,输入内容,并保存为index.htm打开浏览器,输入IP地址,即可看到刚才输入的内容用物理机访问同理…

    2022年5月27日
    34
  • resultMap和resultType区别

    resultMap和resultType区别resultType:指定输出结果的类型(pojo、简单类型、hashmap..),将sql查询结果映射为java对象。使用resultType注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性名全部不相同,list中无法创建pojo对象的。resultMap:将sql查询结…

    2025年8月14日
    7
  • 语义分割和实例分割的区别_FPN运用在语义分割上

    语义分割和实例分割的区别_FPN运用在语义分割上目前的分割任务主要有两种:(1)像素级别的语义分割(2)实例分割这个有意思,什么叫实例分割呢?它与语义分割有什么区别与联系呢?顾名思义,像素级别的语义分割,对图像中的每个像素都划分出对应的类别,即实现像素级别的分类;而类的具体对象,即为实例,那么实例分割不但要进行像素级别的分类,还需在具体的类别基础上区别开不同的实例。比如说图像有多个人甲、乙、丙,那边他们的语义分割结果都是人,而实例

    2022年8月23日
    9
  • 91p.wido.ws_tttzzzvipAPP

    91p.wido.ws_tttzzzvipAPP104.27.179.100北美地区IP网段:104.16.0.0-104.31.255.255更新时间:2014年07月19日18:47:41NetRange:104.16.0.0-104.31.255.255CIDR:104.16.0.0/12OriginAS:AS13335NetName:CLOUDFLARENETNetHandle:NET-104-16-0-0-1P…

    2025年6月23日
    4
  • vs2019键盘钩子_低级键盘钩子回调函数「建议收藏」

    vs2019键盘钩子_低级键盘钩子回调函数「建议收藏」与SetWindowsHookEx函数一起使用的应用程序定义的或库定义的回调函数。每当一个新的键盘输入事件即将被提交到线程输入队列中时,系统都会调用这个函数。当调用此回调函数以响应键状态的更改时,将在更新键的异步状态之前调用回调函数。因此,不能通过在回调函数中调用GetAsyncKeyState来确定键的异步状态。HOOKPROC类型定义了指向这个回调函数的指针。LowLevelKeyboard…

    2022年6月1日
    55
  • automation 服务器不能创建对象

    automation 服务器不能创建对象1 如果是 ajax 调用 使用了 ActiveXObjec Microsoft XMLHTTP 运行命令 regsvr32msxm dll2 如果是 Scripting FileSystemOb FSO 文本文件读写 被关闭了 开启 FSO 功能即可 在 运行 中执行 regsvr32scrr dll 即可 3 安全模式设置成 中 如果 javascript 脚本中报这

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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