문제

봄 콩에서받는 Exchange 개체에서 SOAP 메시지를 가져와야합니다.

서비스 엔드 포인트에서 Java Bean으로 노선하는 낙타 경로가 있습니다.Spring에서 선언 된 Java Bean 및 Camel Route는 다음과 같습니다.

<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>
.

My Java Bean에서 Exchange 객체를받습니다.

@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;
}
.

문제는 내가 Exchange에서 SOAP 메시지를 가져올 수 없다는 것입니다.I Camel 웹 사이트, 여기 여기를 사용해야한다는 것을 알아야합니다.:

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

하지만 그분은 나에게 Exchange 어딘가에 깊은 곳에서 나에게주는 것입니다.

나는 디버깅을 시도하고 개체 트리를 볼 수 있습니다.나는 이것과 같이 메시지를 얻을 수 있다는 것을 발견했다 :

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
.

여기에 갇혀 있습니다.어쩌면 누군가가 어디에서 문제가 될 수 있는지 알고 있습니까?

도움이 되었습니까?

해결책

페이로드 모드는 쉬운 방법이 아니며 CXF 용 POJO 모드를 사용해야하며 SOAPMessage를 제거해야합니다.

와 같은 jaxb 주석으로 POJO를 선언해야합니다.
@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