#jaxb #spring-ws #apache-camel #mtom
#jaxb #spring-ws #apache-camel #mtom
Вопрос:
1) Есть ли способ отменить обработку MTOM-сообщения с помощью компонента Camel Spring-WS?
2) Я попробовал с Camel JAXB dataformat. Это не сработало. У Datahandler нет никакого содержимого. Поддерживает ли JAXB dataformat 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 dataformat. Итак, я создал пользовательский формат данных, используя Jaxb2Marshaller с поддержкой MTOM. Но все еще сталкивается с той же проблемой.
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);
}
}
Конфигурация Spring
<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>
Комментарии:
1. JAXB был разработан для поддержки MTOM и делает это без проблем при использовании с реализацией JAX-WS. Надеюсь, Spring-WS использует эту функциональность.
2. @Sujee: Я не вижу ничего плохого в вашем подходе к формату данных. Какую именно ошибку вы получаете? Выполняется ли ваш метод разархивирования? Похоже, что он возвращает объект (экземпляр DataHandler?) это не null? Если это так, разархиватор выполняет свою основную работу — создает объекты из XML. Какие свойства отсутствуют в результирующем объекте? Все они?