我已经实现了用@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。