使用@WebService批注可以将无状态EJB bean发布为Web服务。但是,有没有办法发布几个具有相同实现类的Web服务,而不会为此目的定义子类?
即。如果我们定义空白类A1,A2,A3,A4都具有@WebService注释并且是实际实现逻辑的A的后代,那么它是可以实现的。然后,JAX-WS将准确发布4个具有不同名称但实际上具有相同实现的Web服务。
但是,我想要的是让JAX-WS 注册几个具有相同实现的Web服务,并且在实现中能够获得Web的名称 - 调用此实现的服务。
修改 目前正在尝试使用JAX-WS Endpoint类(运行时发布者)来实现结果。
答案 0 :(得分:0)
我使用了这样的解决方案:
@Startup
@Singleton
@LocalBean
public class WSPublisher
{
@PostConstruct
void publishAll()
{
Reflections reflections = new Reflections("abc.de.f");
Set<Class<? extends MyBean>> myBeans = reflections.getSubTypesOf(MyBean.class);
for(Class<? extends MyBean> myBean: myBeans)
Endpoint.publish("http://localhost:9090/project/" + myBean.getSimpleName() + "WS", new MyBean());
}
}
现在所有的Web服务前端都是动态注册的,其中任何一个的方法调用都会重定向到一个通用的实现类。