передача данных из очереди на мыльный сервер с помощью apache camel

У меня есть JSON в очереди: {"user":'Alex', "times": 34}. Я хочу из этих данных отправить запрос на мыло на сервер

WSDL:

wsdl

мой маршрут:

<route>
    <from uri="rabbitmq://10.0.62.201/exchange1?queue=from-lanbilling" />
    <to uri="cxf://http://0.0.0.0:8000?wsdlURL=http://localhost:8000/?wsdl" />
    <log message="message ${body}" />
</route>

как я могу преобразовать данные JSON из очереди для запроса мыла?

ОБНОВЛЕНИЕ

Мне пришлось использовать camel-http с принудительной мыльной строкой xml:

план:

<camelContext
    xmlns="http://camel.apache.org/schema/blueprint">

    <route>
        <from uri="rabbitmq://10.0.62.201/exchange1?queue=from-lanbilling" />
            <process ref="jTos" />      
            <log message="message ${body}" />
        <!--  <to uri="cxf://http://0.0.0.0:8000?dataFormat=PAYLOAD" />  -->
                    <setHeader headerName="Content-Type">
            <constant>application/xml; charset=utf-8</constant>
        </setHeader>
        <to uri="http://0.0.0.0:8000"/>
        <log message="message ${body}" />
    </route>


</camelContext>

Джсонтосоап:

public class JsonToSoap implements Processor {

public void process(Exchange exchange) throws Exception {

    String json = exchange.getIn().getBody(String.class);
    JSONObject obj = new JSONObject(json);

    String name = obj.getString("name");
    Integer timer = obj.getInt("timer");

    String soap_xml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:spy=\"spyne.examples.hello\">\r\n" + 
            "   <soapenv:Header/>\r\n" + 
            "   <soapenv:Body>\r\n" + 
            "      <spy:say_hello>\r\n" + 
            "         <spy:name>" + name +"</spy:name>\r\n" + 
            "         <spy:times>" + timer + "</spy:times>\r\n" + 
            "      </spy:say_hello>\r\n" + 
            "   </soapenv:Body>\r\n" + 
            "</soapenv:Envelope>";


    exchange.getOut().setBody(soap_xml);


}
}

как сделать то же самое только через camel-cxf? Я думаю, что есть более элегантное решение.


person D. Batmanov    schedule 22.02.2019    source источник


Ответы (1)


Проверьте AtlasMap! (https://atlasmap.io) содержит компонент Camel. Он поддерживает преобразование данных в объекты XML, JSON и Java и обратно.

Отказ от ответственности: я создал AtlasMap

person Matt Pavlovich    schedule 22.02.2019
comment
Как это сделать обычными инструментами? Как вообще создать запрос на мыло из верблюда? - person D. Batmanov; 22.02.2019
comment
Запрос SOAP — это просто XML-документ по протоколу HTTP. Camel предоставляет вам несколько вариантов: вы можете отправить XML и использовать компонент camel-http4 или сгенерировать объект Java из SOAP WSDL и использовать конечную точку CXF. CXF преобразует объект Java в XML и отправит его вам по протоколу HTTP. - person Matt Pavlovich; 22.02.2019
comment
Кроме того, если вы используете Eclipse, у него есть инструменты для генерации XML из XSD. Погуглите, и вы можете довольно быстро сгенерировать образец XML. .. и всегда есть SOAP-UI.. подайте ему WSDL, и он тоже будет генерировать запросы - person Matt Pavlovich; 23.02.2019
comment
пожалуйста, посмотрите на мое ОБНОВЛЕНИЕ, есть идеи? - person D. Batmanov; 25.02.2019
comment
@MattPavlovich Я использую AtlasMap, но у меня есть несколько вопросов. Не могли бы вы внимательно изучить мой пост stackoverflow. ком/вопросы/56605561/ - person Mohammad Hasan; 15.06.2019
comment
@MohammadHasan на ваш вопрос ответил один из основных участников AtlasMap, так что вы получили хороший ответ =). Потоковой обработки еще нет в atlasmap. Что вы можете сделать в верблюде, так это разбить поток (разветвитель) в верблюде, прежде чем передать его в AtlasMap, а затем (необязательно) повторно собрать верблюд, если требуется повторная сборка. Если вам не нужна повторная сборка, Camel — лучшее место для разделения до того, как AtlasMap выполнит преобразование. - person Matt Pavlovich; 17.06.2019
comment
@Matt Pavlovich да, я именно так и думал использовать сплиттер, а затем использовать atlasMap. Я попробую. В любом случае, это хороший инструмент для преобразования. - person Mohammad Hasan; 17.06.2019