0

Spring Bean で受信した交換オブジェクトから SOAP メッセージを取得する必要があります。

サービス エンドポイントから Java Bean にルーティングするキャメル ルートがあります。春に宣言された 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 メッセージを取得できないことです。Web サイトをキャメルしました。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

私はここで立ち往生しています。多分誰かがどこに問題があるのか​​ 知っていますか?

4

1 に答える 1

2

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);
于 2012-07-27T14:22:08.803 に答える