【问题标题】:Get SOAPMessage from org.apache.camel.Exchange从 org.apache.camel.Exchange 获取 SOAPMessage
【发布时间】:2012-07-27 10:37:28
【问题描述】:

我需要从我在 spring bean 中收到的交换对象获取 SOAP 消息。

我有一个骆驼路由,它从服务端点路由到我的 java bean。 Spring 中声明的 Java Bean 和 Camel 路由如下所示:

<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 bean 中,我收到了交换对象:

@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 消息。我骆驼的网址,here发现必须用这个来获取SOAP消息:

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

但他给了我NullPointerException 某处深层次的交换。

我尝试调试并查看对象树。我发现我可以得到这样的消息:

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

我被困在这里了。也许有人知道问题出在哪里?

【问题讨论】:

    标签: java soap cxf apache-camel apache-karaf


    【解决方案1】:

    PAYLOAD 模式不是很简单的方法,也许你应该尝试 CXF 的 POJO 模式,并摆脱 SoapMessage。您必须使用 JAXB 注释声明 POJO,例如

    @XmlAccessorType(XmlAccessType.FIELD)
    public class Registration {
    
        private Long roomNumber;
        ...
    
    }
    

    这将允许您直接处理处理器中的注册类(我认为这是您的最终目标)。

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

    如果你坚持使用PAYLOAD模式,注意可​​以写

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

    【讨论】:

    • 还有一件事。注册只是一项操作。我怎么知道我在 mu processMessage 方法中得到了什么操作?无论如何我可以用骆驼检查它吗?
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多