指向同一实现的多个Web服务名称

时间:2013-04-02 14:51:29

标签: web-services wsdl jax-ws

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

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

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

修改 目前正在尝试使用JAX-WS Endpoint类(运行时发布者)来实现结果。

1 个答案:

答案 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服务前端都是动态注册的,其中任何一个的方法调用都会重定向到一个通用的实现类。