Example #1
0
 /**
  * Converts the inbound body to a {@link Source}, if the body is <b>not</b> already a {@link
  * Source}.
  *
  * <p>This implementation will prefer to source in the following order:
  *
  * <ul>
  *   <li>StAX - If StAX is allowed
  *   <li>SAX - SAX as 2nd choice
  *   <li>Stream - Stream as 3rd choice
  *   <li>DOM - DOM as 4th choice
  * </ul>
  */
 protected Source getSource(Exchange exchange, Object body) {
   // body may already be a source
   if (body instanceof Source) {
     return (Source) body;
   }
   Source source = null;
   if (body != null) {
     if (isAllowStAX()) {
       // try StAX if enabled
       source =
           exchange.getContext().getTypeConverter().tryConvertTo(StAXSource.class, exchange, body);
     }
     if (source == null) {
       // then try SAX
       source =
           exchange.getContext().getTypeConverter().tryConvertTo(SAXSource.class, exchange, body);
       tryAddEntityResolver((SAXSource) source);
     }
     if (source == null) {
       // then try stream
       source =
           exchange
               .getContext()
               .getTypeConverter()
               .tryConvertTo(StreamSource.class, exchange, body);
     }
     if (source == null) {
       // and fallback to DOM
       source =
           exchange.getContext().getTypeConverter().tryConvertTo(DOMSource.class, exchange, body);
     }
     // as the TypeConverterRegistry will look up source the converter differently if the type
     // converter is loaded different
     // now we just put the call of source converter at last
     if (source == null) {
       TypeConverter tc =
           exchange.getContext().getTypeConverterRegistry().lookup(Source.class, body.getClass());
       if (tc != null) {
         source = tc.convertTo(Source.class, exchange, body);
       }
     }
   }
   if (source == null) {
     if (isFailOnNullBody()) {
       throw new ExpectedBodyTypeException(exchange, Source.class);
     } else {
       try {
         source = converter.toDOMSource(converter.createDocument());
       } catch (ParserConfigurationException e) {
         throw new RuntimeTransformException(e);
       }
     }
   }
   return source;
 }