Клиент Camel CXF Soap, вызывающий веб-службу с несколькими входными параметрами

Я использую Camel и сгенерировал код из WSDL с использованием CXF. Я сгенерировал клиентскую заглушку, и реализация выглядит так:

    SetDeviceDetailsv4 port = ss.getSetDeviceDetailsv4Port();  

    com.vodafone.gdsp.ws.SetDeviceDetailsv4_Type _setDeviceDetailsv4_parameters = null;
    com.vodafone.gdsp.ws.GdspHeader _setDeviceDetailsv4_gdspHeader = null;

    com.vodafone.gdsp.ws.SetDeviceDetailsv4Response _setDeviceDetailsv4__return = port.setDeviceDetailsv4(_setDeviceDetailsv4_parameters, _setDeviceDetailsv4_gdspHeader);

    System.out.println("setDeviceDetailsv4.result=" + _setDeviceDetailsv4__return);

Как видите, порт принимает два параметра и возвращает ответ, который я хочу делегировать обратно в свой Camel Route. Каков наилучший способ реализовать это в Camel? Я уже определил свой CXF Enpoint, я просто борюсь с его частью маршрутизации DSL. Должен ли я добавить процессор, подобный тому, что находится в этой ссылке? Apache Camel и веб-службы

Спасибо


person Joe    schedule 26.05.2016    source источник
comment
Вы написали верблюжий маршрут. Если да, поделитесь этим.   -  person Pratiyush Kumar Singh    schedule 27.05.2016


Ответы (2)


Вы можете использовать клиент jax-ws (реализовать как bean-компонент) и использовать его в Camel DSL. Определение клиентского компонента JAX-WS принимает класс/интерфейс службы и позволяет настраивать дополнительные свойства, такие как конфигурация SSL и т. д. В маршруте мы можем использовать его как компонент. Он принимает сгенерированный JAXB объект запроса (объект запроса WSDL) в качестве входных данных и возвращает сгенерированный JAXB объект ответа (объект ответа WSDL). Чтобы преобразовать вас в классы JAXB, можно использовать структуру Dozer или пользовательское сопоставление. Клиент Jax-WS также гибко принимает XML как запрос и ответ. В этом случае свойства должны быть установлены как DATAFORMAT как PAYLOAD.

person Balakumar Narayanasamy    schedule 30.05.2016
comment
Я не уверен, что это потому, что мы находимся в Karaf (OSGI) и используем Blueprint вместо контекста Spring, но я получаю ошибки синтаксического анализа XML, когда загружаю свое приложение, заявляя, что параметр dataFormat недействителен. Мы используем CXF 2.7.7 и camel 2.12.4, так что это тоже может быть проблемой. - person Joe; 10.06.2016
comment
Можете ли вы опубликовать свой файл конфигурации? В идеале DATAFORMAT должен быть установлен в свойствах jax-ws. - person Balakumar Narayanasamy; 11.06.2016

Я не уверен, что это правильный способ сделать это, но я добавил оба моих «входных» объекта в качестве заголовка Camel, затем я написал процессор, который взял то, что мне было нужно, и поместил два объекта, которые нужны сервисному вызову, как параметры.

public void process(Exchange exchange) throws Exception {
        Message inMessage = exchange.getIn();
        gdspHeader = inMessage.getHeader(GDSP_HEADER, com.vodafone.gdsp.ws.GdspHeader.class);
        commModule = inMessage.getHeader(COMM_MODULE_HEADER, resmed.hi.ngcs.datastore.model.CommModule.class);
        SetDeviceDetailsv4_Type deviceDetails = createSetDeviceDetailsv4(commModule);

        List<Object> params = new ArrayList<>();
        params.add(deviceDetails);
        params.add(gdspHeader);

        inMessage.setBody(params);

    }
`
person Joe    schedule 01.06.2016