code: @Override
      public final Object unmarshal(Source source) throws IOException, XmlMappingException {
  		if (source instanceof DOMSource) {
  			return unmarshalDomSource((DOMSource) source);
  		}
  		else if (StaxUtils.isStaxSource(source)) {
  			return unmarshalStaxSource(source);
  		}
  		else if (source instanceof SAXSource) {
  			return unmarshalSaxSource((SAXSource) source);
  		}
  		else if (source instanceof StreamSource) {
  			return unmarshalStreamSource((StreamSource) source);
  		}
  		else {
  			throw new IllegalArgumentException("Unknown Source type: " + source.getClass());
  		}
  	}
docs: Unmarshals the given provided {@code javax.xml.transform.Source} into an object graph.
  <p>This implementation inspects the given result, and calls {@code unmarshalDomSource},
  {@code unmarshalSaxSource}, or {@code unmarshalStreamSource}.
  @param source the source to marshal from
  @return the object graph
  @throws IOException if an I/O Exception occurs
  @throws XmlMappingException if the given source cannot be mapped to an object
  @throws IllegalArgumentException if {@code source} is neither a {@code DOMSource},
  a {@code SAXSource}, nor a {@code StreamSource}
  @see #unmarshalDomSource(javax.xml.transform.dom.DOMSource)
  @see #unmarshalSaxSource(javax.xml.transform.sax.SAXSource)
  @see #unmarshalStreamSource(javax.xml.transform.stream.StreamSource)