Генерация реализации сервера веб-сервиса с использованием wsdl2java в CXF

Фон:

У меня есть предыдущий опыт использования веб-служб Apache CXF, но я немного новичок в создании интерфейса конечной точки службы (SEI) и реализации службы с помощью инструмента wsdl2java, который поставляется вместе с дистрибутивом Apache CXF.

Задача:

В настоящее время я работаю над реализацией веб-службы на основе SOAP, которая будет использоваться внешними системами. Я уже определил сообщения (XSD) и файл WSDL. Я попытался создать SEI с помощью инструмента wsdl2java из Apache CXF. SEI правильно генерируется с типами JAXB в качестве входных параметров и типов возврата для методов веб-службы.

Когда я смотрю на код, созданный для класса реализации службы, я вижу, что он расширяет класс javax.xml.ws.Service. Кроме того, создается множество перегруженных методов, которые имеют то же имя, что и методы в интерфейсе конечной точки службы, с добавлением «Soap12Http» к имени метода. Некоторые из этих методов принимают параметр типа WebServiceFeature... features, тогда как другие не принимают никаких параметров. Пример :

public class Query extends Service {

        @WebEndpoint(name = "product_query-soap12-http")
    public IQuery getProductsSoap12Http(WebServiceFeature... features) {
        return super.getPort(getProductsSoap12Http, IQuery.class,features);
    }
}

*где IQuery — это интерфейс конечной точки службы.

Проблема:

  1. Я ожидал, что класс реализации службы реализует интерфейс конечной точки службы вместо расширения javax.xml.ws.Service. Это обоснованное ожидание?
  2. Я ожидал, что класс реализации службы реализует методы из интерфейса конечной точки службы. Это обоснованное ожидание?
  3. Я также хотел бы знать, можно ли попросить команду wsdl2java создать банку для JAXB POJOS вместо того, чтобы создавать их как файлы классов.

person CKing    schedule 11.03.2013    source источник


Ответы (1)


Для 1 и 2 ответ - нет. Сгенерированный класс XXXXService в значительной степени является фабрикой для прокси-серверов различных SEI в WSDL. Каждая комбинация конечной точки/привязки/типа порта в wsdl должна привести к серии вызовов «getXYZPort(...)» для объекта службы, чтобы вернуть экземпляр этого конкретного SEI.

Для версии 3 на прошлой неделе в инструменты cxf была добавлена ​​опция -clientjar (еще не выпущенная, потребуются последние снимки), которая может быть близка к тому, что необходимо.

person Daniel Kulp    schedule 11.03.2013
comment
Означает ли это, что мне нужно вручную написать свой собственный класс с именем Query, который реализует IQuery и определяет методы веб-службы, или мне следует использовать сгенерированный класс реализации службы непосредственно в качестве реализации моей веб-службы? - person CKing; 11.03.2013