Вопрос

Мне нужно получить сообщение SOAP из Exchange Object, я получаю в мой весенний боб.

У меня есть верблюдный маршрут, который маршрутирует от конечной точки сервиса к моим фанам Java.Маршрут Java Bean и верблюда, объявленный весной, выглядит так:

<bean id="processor" class="com.groupgti.esb.camel.wrapper.gradireland.userregistration.UserRegistrationProcessor">

<camel:route id="route">
    <camel:from uri="cxf:bean:myListenerEndpoint?dataFormat=PAYLOAD&amp;synchronous=true" />
    <camel:bean ref="processor" />
    <camel:to uri="cxf:bean:myTargetEndpoint"/>
</camel:route>
.

в моем фасоле Java я получаю объект обмена:

@Override
public SOAPMessage processMessage(Exchange exchange) {
    Object object = exchange.getIn().getHeaders().get("CamelCxfMessage");
    LOGGER.debug("Object: " + object);
    SOAPMessage message = null;

    if (object instanceof SOAPMessage) {
        message = (SOAPMessage) object;
        LOGGER.debug("Got message: " + message);
    }

    LOGGER.debug("Sending message...");
    return message;
}
.

Проблема в том, что я не могу получить сообщение SOAP из обмена.Я верблюжий веб-сайт, Здесь Я обнаружил, что я должен использовать это, чтобы получить сообщение SOAP:

SOAPMessage soapMessage = (SOAPMessage) exchange.getIn().getBody(List.class).get(0);
.

Но его дает мне генеракодицетагкод где-то глубоко в обмен.

Я пытался отладить и увидеть дерево объекта.Я обнаружил, что могу получить сообщение подобное:

SOAPMessage soapMessage = (SOAPMessage) exchange.getIn().getHeaders().get("CamelCxfMessage");
.

Но это дает мне это исключение:

org.apache.camel.ExpectedBodyTypeException: Could not extract IN message body as type: interface javax.xml.transform.Source body is: null
.

Я застрял здесь.Может быть, кто-то знает, где может быть проблема?

Это было полезно?

Решение

Режим полезной нагрузки не совсем простой способ, возможно, вы должны попробовать режим POJO для CXF, и избавиться от SoapMessage.Вам придется объявить POJO с аннотациями JAXB, как

@XmlAccessorType(XmlAccessType.FIELD)
public class Registration {

    private Long roomNumber;
    ...

}
.

Это позволит вам работать непосредственно на регистрационном классе в ваших процессорах (которые я предполагаю, это ваша конечная цель).

Registration registration = exchange.getIn().getBody(Registration.class);
.

Если вы сохранитесь с режимом полезной нагрузки, обратите внимание, что вы можете написать

SOAPMessage soapMessage = exchange.getIn().getHeader(CxfConstants.CAMEL_CXF_MESSAGE, SOAPMessage.class);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top