处理Web服务错误代码(除了常规soapfaultexceptions之外)

时间:2011-04-21 15:54:55

标签: java web-services exception-handling error-handling

我目前正在为JSF / Richfaces应用程序添加功能,现在我们正在与外部Web服务集成。

使用这些服务完成的操作包括:获取用户,获取帐户,更新用户,更新帐户,创建用户,创建帐户。

这些服务以及意外的soapfaultexceptions可以在其响应类型中返回错误代码。主要表现为:登录已存在,密码不符合条件,帐号已存在,未找到用户。

调用如下:BackingBean>经理级别课程(主要是通过)> Web服务客户端(进行实际的WS调用)。对于GET操作,传递ID(用户名或帐号)并传回帐户或用户对象。更新传递用户/帐户对象,与创建相同。

将这些错误备份到backbean的最佳方法是什么,以便我可以通过UI处理它们?

  1. 当然我可以检查响应中的错误代码,抛出一个异常并继续将它抛给我在那里处理它的支持bean。
  2. 我可以实现一个Result类型,该类型包含我从服务中填充的错误类型和POJO / DTO。
  3. 我的一位同事建议我使用装饰器用我还需要创建的验证器来装饰我的USER或ACCOUNT对象。基本上我认为我的装饰器只会持有自定义错误类型,而Validate()只会检查是否(List!= null&&!(Size> 0))。正确的吗?
  4. 您对提议的方法有何看法? #1是最简单的,#2似乎更优雅,更简单,#3对我来说是“最难的”,因为我从未使用装饰模式。然而,#3似乎是最优雅的,同时也是最耗时的实现。

    如果您需要进一步澄清,请与我们联系。

    谢谢,SO!

2 个答案:

答案 0 :(得分:1)

最好使用异常(When to throw an exception)以编程方式进行限制。

首先问问自己这是一种特殊的情况吗?在您的情况下,它不仅仅是一个验证错误。例外情况会带来成本,并且无法保证您能够在链中进一步捕获异常。

两个2/3都是类似的解决方案,因为您只是想将其他信息返回给控制器。

选项3可以被认为更干净,但如果您有权访问用户/帐户类,则可以随时向该类添加可能包含验证错误的其他属性。

这种模式的一个很好的例子是ruby中的ActiveRecord,相同类型的模型。您在模型对象上调用save,如果发生错误,则会填充错误属性。

答案 1 :(得分:0)

抛出自定义异常或一组自定义异常,并在更高级别处理它。这是我处理它的首选方式,而不是Java中的状态代码,其中所有内容都按值传递,并为其他目的释放返回变量。

关于“继续投掷它”,不要在每个级别捕获并重新投掷,而只是捕捉到你可以对它做某事的级别,即。在这种情况下支持bean / UI。