@Override @SuppressWarnings("unchecked") protected T readFromSource(Class<? extends T> clazz, HttpHeaders headers, Source source) throws IOException { try { if (DOMSource.class.equals(clazz)) { DOMResult domResult = new DOMResult(); transform(source, domResult); return (T) new DOMSource(domResult.getNode()); } else if (SAXSource.class.equals(clazz)) { ByteArrayInputStream bis = transformToByteArrayInputStream(source); return (T) new SAXSource(new InputSource(bis)); } else if (StreamSource.class.equals(clazz) || Source.class.equals(clazz)) { ByteArrayInputStream bis = transformToByteArrayInputStream(source); return (T) new StreamSource(bis); } else { throw new HttpMessageConversionException("Could not read class [" + clazz + "]. Only DOMSource, SAXSource, and StreamSource are supported."); } } catch (TransformerException ex) { throw new HttpMessageNotReadableException("Could not transform from [" + source + "] to [" + clazz + "]", ex); } }