1

使用 @WebService 注释可以将无状态 EJB bean 发布为 Web 服务。但是,有没有办法发布多个具有相同实现类的 Web 服务,而无需为此目的定义其子类?

即,如果我们定义空白类 A1、A2、A3、A4 都具有 @WebService 注释并且是实际实现逻辑的 A 的后代,那么这是可以实现的。然后 JAX-WS 将准确发布 4 个 Web 服务,它们都有不同的名称,但实际上具有相同的实现。

但是,我想要的是让 JAX-WS注册几个具有相同实现的 Web 服务,并且在实现内部能够获取调用该实现的 Web 服务的名称。

编辑: 目前试图通过使用 JAX-WS Endpoint 类(运行时发布者)来实现结果。

4

1 回答 1

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 服务前端都是动态注册的,来自它们中的任何一个的方法调用都被重定向到一个公共的实现类。

于 2013-04-03T16:45:56.850 回答