JAX-WS / CXF中的多个@WebService注释

时间:2010-03-10 20:10:59

标签: java web-services interface jax-ws cxf

我正在尝试在JAX-WS中实现次要版本,如下所示:

@WebService(targetNamespace="http://mycompany.com/api/Service/v1_0")
public interface ServiceRev0 {
    public void initialMethod();
}

@WebService(targetNamespace="http://mycompany.com/api/Service/v1_1")
public interface ServiceRev1 {
    public void newMethod();
}

public class Service implements ServiceRev0, ServiceRev1 {
    ...
}

Endpoint.publish("api", new Service());

不幸的是,CXF似乎只能“看到”第一个界面及其相关方法。有可能做我想做的事情,还是应该采取另一种方法?

3 个答案:

答案 0 :(得分:0)

逻辑似乎是错误的,当你在类上添加@WebService注释时它意味着它是一个webservice实现,如果在接口上它意味着定义一个Web服务接口。

您的上述定义导致两个不同的WSDL具有不同的操作,您最好定义两个不同的Web服务接口并提供适当的实现。

答案 1 :(得分:0)

嗯。这看起来很像通过CXF引导的Deadly Diamond of Death problem!我知道这是旧的,但我会尝试明确地声明具体的方法,如this question的第二和第三个答案,然后再试一次。

(我希望我对这样一个旧项目的评论并不邪恶!)

答案 2 :(得分:0)

我使用cxf 3时遇到了同样的问题。
解决方案/解决方法是创建扩展需要公开的接口的第三个接口。

@WebService(targetNamespace="http://mycompany.com/api/Service/v2")
public interface ServiceRev extends ServiceRev1, ServiceRev2
{
}

揭露:

public class ServiceRevImpl implements ServiceRev
{
....
}