camel unmarshal Json в параметр метода bean-компонента

У меня действительно плохие времена, когда тело сообщения превращается в pojo во время вызова.

У меня есть очень простой маршрут, определяемый с демаршалингом тела в мой пользовательский pojo:

    <dataFormats>
        <json id="json" library="Jackson" unmarshalTypeName="com.trumin.domain.model.result.Result" />
    </dataFormats>


    <camel:route>
        <camel:from
            uri="activemq:topic:result?clientId=sswric_01&amp;durableSubscriptionName=sendSMSWhenResultIsCalculated" />
        <marshal ref="json" />
        <bean beanType="com.trumin.communications.sms.TimeResultSMSSender"
            method="sendTextToUserAfterTimeResultBeingSaved(${body})" />
    </camel:route>
</camelContext>

the method I'm trying to invoke here:

sendTextToUserAfterTimeResultBeingSaved(Result r);

получает параметр типа Result, как определено в формате данных json, и не вызывается при доставке сообщения.

Если я изменю подпись метода, чтобы принять строку вместо результата:

sendTextToUserAfterTimeResultBeingSaved(String s);

затем он вызывается, и строка содержит json-представление результата.

Есть ли способ, которым то, чего я пытаюсь достичь, работает?

Я также попытался удалить спецификацию ($ {body}) из маршрута, я пробовал другие немаршалированные библиотеки, я пробовал читать все учебники по верблюдам и ссылки на привязку параметров, я читал большую часть верблюда в главы действий по этому поводу, но до сих пор не могу найти свой ответ.


person ricardoespsanto    schedule 02.02.2016    source источник
comment
Я думаю, вам нужно сменить маршала на демаршала на вашем маршруте. (если это не опечатка при вводе вопроса!) Насколько я понимаю, вы отправляете строку JSON в тему activemq и хотите, чтобы объект Result прибыл в метод?   -  person fiw    schedule 02.02.2016


Ответы (1)


В конце концов ... Это исправило:

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

    <camel:dataFormats>
        <camel:json id="jsonToResult" library="Jackson" unmarshalTypeName="com.trumin.domain.model.result.Result" />
    </camel:dataFormats>


    <camel:route>
        <camel:from
            uri="activemq:topic:result?clientId=sswric_01&amp;durableSubscriptionName=sendSMSWhenResultIsCalculated" />
        <camel:unmarshal ref="jsonToResult" />
        <camel:bean beanType="com.trumin.communications.sms.TimeResultSMSSender"
            method="sendTextToUserAfterTimeResultBeingSaved" />
    </camel:route>
</camelContext>
person ricardoespsanto    schedule 02.02.2016