Несколько аннотаций @WebService в JAX-WS / CXF - PullRequest
0 голосов
/ 10 марта 2010

Я пытаюсь реализовать второстепенные версии в 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 голосов
/ 24 апреля 2012

Хммм. Это очень похоже на проблему Смертельный алмаз смерти , направляемую через CXF! Я знаю, что это старо, но я попытался бы явно объявить конкретные методы, как во втором и третьем ответе на этот вопрос , и попытаться снова.

(Надеюсь, я не злой, чтобы комментировать такой старый предмет!)

0 голосов
/ 11 декабря 2014

У меня была такая же проблема при использовании cxf 3.
Решение / обходной путь заключается в создании 3-го интерфейса, расширяющего интерфейсы , которые должны быть доступны

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

Защита:

public class ServiceRevImpl implements ServiceRev
{
....
}
0 голосов
/ 11 марта 2010

Логически это кажется неправильным. Когда вы добавляете аннотацию @WebService, если она для класса, это означает реализацию веб-сервиса, если для интерфейса это означает определение интерфейса веб-службы.

Приведенное выше определение приводит к двум различным WSDL с различными операциями в нем, лучше определить два различных интерфейса веб-сервиса и предоставить соответствующие реализации.

...