如何定义一个以透明方式拦截所有服务的全局 JAX-WS 消息处理程序?

2022-09-02 14:12:23

我们有一组在 JAX-WS 中实现的 Web 服务,以及在 SOAP 标头中添加控件属性的 Web 服务。今天,我们需要在创建的每个新服务中添加注释。SOAPHandler@HandlerChain

这个想法是,新的服务实现者不需要知道存在。@HandlerChain

有没有办法配置一个全局变量来拦截在我的 WAR 中运行的所有服务?Handler


答案 1

一个可能有效的选项是aspectj。使用字节码编织(或者如果您愿意,可以与spring结合使用),您可以创建单个处理程序作为方面,并通过maven插件编织到所有类(以及WAR文件)中。我自己还没有尝试过,我想唯一的挑战是从各个方面处理SOAP头。


答案 2

我认为没有两岸前进的方法来做到这一点。但是加入预览注释,也许你可以创建一个包含所有处理程序的 jar,然后在每个 war 项目中,定义一个具有所需链的抽象类,并在服务中继承它。或者,与其包含 WAR,不如尝试查看 JNDI 以在运行时中包含。


推荐