Распаковка сообщения MTOM с использованием формата данных Camel Spring-WS и JAXB - PullRequest
1 голос
/ 30 октября 2011

1) Есть ли способ отмены вызова сообщения MTOM с использованием компонента Camel Spring-WS?

2) Я пытался использовать формат данных Camel JAXB. Это не сработало. Datahandler не имеет никакого контента. Поддерживает ли формат данных JAXB MTOM?

<dataFormats>
    <jaxb id="jaxb" contextPath="com.mycompany.hr.jaxb"/>
</dataFormats>

<route>
    <from uri="spring-ws:rootqname:{http://mycompany.com/hr/schemas}HolidayRequest?endpointMapping=#endpointMapping" />
    <unmarshal ref="jaxb"/>
    <process ref="testProcessor" />
</route>

3) Я думал, что MTOM не включен в формате данных JAXB. Поэтому я создал пользовательский формат данных с использованием MTA JAXB2Marshaller. Но все еще сталкиваются с той же проблемой.

import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.transform.Source;

import org.apache.camel.Exchange;
import org.apache.camel.spi.DataFormat;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

public class MtomDataFormat implements DataFormat {

    public void marshal(Exchange arg0, Object arg1, OutputStream arg2)
            throws Exception {
        // TODO Auto-generated method stub

    }

    public Object unmarshal(Exchange exchange, InputStream is) throws Exception {
        Source source = exchange.getContext().getTypeConverter().mandatoryConvertTo(Source.class, is);

        Jaxb2Marshaller mar = new Jaxb2Marshaller();
        mar.setContextPath("com.mycompany.hr.jaxb");
        mar.setMtomEnabled(true);
        return mar.unmarshal(source);
    }

}

Пружинная конфигурация

<bean id="endpointMapping"
    class="org.apache.camel.component.spring.ws.bean.CamelEndpointMapping">
</bean>

<bean id="testProcessor" class="TestProcessor" />

<bean id="mtomDataFormat" class="MtomDataFormat" />

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="spring-ws:rootqname:{http://mycompany.com/hr/schemas}HolidayRequest?endpointMapping=#endpointMapping" />
        <unmarshal ref="mtomDataFormat"/>
        <process ref="testProcessor" />
    </route>
</camelContext>
...