JAX-WS装饰器

时间:2018-03-22 15:31:59

标签: jax-ws cdi decorator

我已经实现了用@WebService注释的接口,并通过类实现了它,该类也使用@WebService注释(endpointInterface =" .. package.interface")。 一切正常。

现在,我想装饰这个Web服务,所以我实现了用@Decorator注释的类,并按照JavaEE教程(https://docs.oracle.com/javaee/7/tutorial/cdi-adv-examples005.htm#GKPAX)的建议完成。 我还在beans.xml中包含了这个装饰器。

除非我尝试使用哪种注释组合,否则不会调用装饰器方法。装饰类上的@WebService ......

我是否遗漏了建筑方面的内容,或者是否有关于网络服务装饰的规则?

需要指出的是,我在网上找到了正在装饰JAX-RS服务的例子。

这是我的代码:

@WebService
public interface IAppointer {
    String requestAppointment(AppointmentRequest request)
            throws AppointmentRequestValidationException, AppointmentException;
}

@Stateless
@WebService(endpointInterface = "appointment.services.IAppointer")
public class Appointer implements IAppointer {
   public String requestAppointment(AppointmentRequest request)
            throws AppointmentRequestValidationException, AppointmentException {}
}

@Decorator
@WebService(endpointInterface = "appointment.services.IAppointer")
public class AppointmentValidationDecorator implements IAppointer {

    @Inject
    @Delegate
    private IAppointer appointer;

    @Override
    public String requestAppointment(AppointmentRequest request)
            throws AppointmentRequestValidationException, AppointmentException {}
}



回答我自己的问题

解决方案是在界面上放置@Local注释,然后将@Local(IAppointer.class)放在已修饰的类上。不知何故,EJB容器为Web服务bean创建了一个新接口,尽管@WebService指定了它的接口。这样,我们指定哪个本地接口EJB容器应该用于此bean。

0 个答案:

没有答案