Axis2:服务级别上所有异常的异常处理程序

托斯滕·舍宁(ThorstenSchöning)

我有不同的Axis2服务,这些服务公开了一些方法,并希望将这些服务及其所有方法包装在try catch之类的东西中,以便能够在Axis2将它们发送给客户端之前过滤所有发生的异常。我已经阅读了有关阶段和流程,处理程序以及OutFaultFlow等的信息,但是我想了解的是服务级别的东西,可以在启动时由服务本身进行配置。我的服务应尽可能地自给自足。每个服务我已经有一些东西需要在启动时进行初始化,因此已经实现了ServiceLifeCycle Axis2提供的接口。

但是我似乎无法从提供的ConfigurationContext或AxisService到服务周围的“更高”的东西,并为任何可以拦截异常并决定如何进行处理的流程注册新的处理程序。

是否有任何方法可以在启动时注册流处理程序或此类服务级别?除了在我所有公开的方法中添加try catch之外,您还有其他想法吗?

谢谢!

托斯滕·舍宁(ThorstenSchöning)

一点也不难:只需使用ConfigurationContext.getAxisConfigurationAxisConfiguration.getOutFaultFlowPhases来迭代startUp方法中的已注册阶段。我目前正在搜索一个始终存在的阶段,例如“ MessageOut”,并在其末尾添加一个带有我自己的逻辑的处理程序注册处理程序的逻辑只需要考虑到另一项服务可能已经注册了处理程序,因此首先将所有已注册处理程序的名称与您自己提供的名称进行比较。

这种方法保证了处理程序仅在服务启动时注册,并且根本不会在方法调用期间引入任何开销。但这当然是全球性的。

我未测试的另一种方法是使用MessageContext获取OutTransport并在其上注册一个处理程序那可能不是本地消息,但也许值得一试。

synchronized static void register(ConfigurationContext context)
{
    Phase hookPhase = null;
    for (Phase phase: context.getAxisConfiguration().getOutFaultFlowPhases())
    {
        for (Handler handler : phase.getHandlers())
        {
            if (WsExceptionFilter.isMe(handler))
            {
                return;
            }
        }

        if (phase.getPhaseName().equals("MessageOut"))
        {
            hookPhase = phase;
        }
    }
    if (hookPhase == null)
    {
        throw new UnsupportedOperationException("Missing hook phase.");
    }

    hookPhase.addHandler(new WsExceptionFilter());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

来自分类Dev

等待带有异常处理的所有任务的完成

来自分类Dev

处理多个流中的所有异常

来自分类Dev

如何捕获Web API 2中的所有异常?

来自分类Dev

等待Task.WhenAll(tasks)异常处理,记录任务中的所有异常

来自分类Dev

Scala:静默捕获所有异常

来自分类Dev

Java线程捕获所有异常?

来自分类Dev

在 Unity 中捕获所有异常

来自分类Dev

Laravel 404 的所有异常

来自分类Dev

捕获类中的所有异常

来自分类Dev

在Java中进行错误处理时,应该捕获异常以捕获所有异常还是单独捕获异常?

来自分类Dev

如何处理node.js中的所有异常

来自分类Dev

处理Asp.Net Core 3.1中SignalR集线器中的所有异常

来自分类Dev

如何处理node.js中的所有异常

来自分类Dev

如何处理Web Java项目中的所有异常

来自分类Dev

将文件上传到服务器时出现的所有异常

来自分类Dev

如何在使用try / catch的应用程序中记录所有异常?

来自分类Dev

.NET在第三方应用程序中获取所有异常

来自分类Dev

如何在使用try / catch的应用程序中记录所有异常?

来自分类Dev

.NET在第三方应用程序中获取所有异常

来自分类Dev

如果我们已经在使用捕获所有异常处理程序,我们是否从添加空检查中获得任何好处?

来自分类Dev

记录所有处理异常

来自分类Dev

在没有异常处理的方法中使用SemaphoreSlim

来自分类Dev

Java覆盖带有异常处理的compareTo

来自分类Dev

带有异常处理的generator.close()的说明

来自分类Dev

Ruby一行if语句具有异常处理

来自分类Dev

在具有异常处理的函数中返回类

来自分类Dev

为什么catch语句不能捕获所有异常?

来自分类Dev

列出所有异常及其发生次数的脚本

Related 相关文章

  1. 1

    捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

  2. 2

    等待带有异常处理的所有任务的完成

  3. 3

    处理多个流中的所有异常

  4. 4

    如何捕获Web API 2中的所有异常?

  5. 5

    等待Task.WhenAll(tasks)异常处理,记录任务中的所有异常

  6. 6

    Scala:静默捕获所有异常

  7. 7

    Java线程捕获所有异常?

  8. 8

    在 Unity 中捕获所有异常

  9. 9

    Laravel 404 的所有异常

  10. 10

    捕获类中的所有异常

  11. 11

    在Java中进行错误处理时,应该捕获异常以捕获所有异常还是单独捕获异常?

  12. 12

    如何处理node.js中的所有异常

  13. 13

    处理Asp.Net Core 3.1中SignalR集线器中的所有异常

  14. 14

    如何处理node.js中的所有异常

  15. 15

    如何处理Web Java项目中的所有异常

  16. 16

    将文件上传到服务器时出现的所有异常

  17. 17

    如何在使用try / catch的应用程序中记录所有异常?

  18. 18

    .NET在第三方应用程序中获取所有异常

  19. 19

    如何在使用try / catch的应用程序中记录所有异常?

  20. 20

    .NET在第三方应用程序中获取所有异常

  21. 21

    如果我们已经在使用捕获所有异常处理程序,我们是否从添加空检查中获得任何好处?

  22. 22

    记录所有处理异常

  23. 23

    在没有异常处理的方法中使用SemaphoreSlim

  24. 24

    Java覆盖带有异常处理的compareTo

  25. 25

    带有异常处理的generator.close()的说明

  26. 26

    Ruby一行if语句具有异常处理

  27. 27

    在具有异常处理的函数中返回类

  28. 28

    为什么catch语句不能捕获所有异常?

  29. 29

    列出所有异常及其发生次数的脚本

热门标签

归档