Получить SoapMessage от org.apache.camel.exchange
-
12-12-2019 - |
Вопрос
Мне нужно получить сообщение 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&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);
.