code: protected Object unmarshalDomSource(DOMSource domSource) throws XmlMappingException {
  		if (domSource.getNode() == null) {
  			try {
  				synchronized (this.documentBuilderFactoryMonitor) {
  					if (this.documentBuilderFactory == null) {
  						this.documentBuilderFactory = createDocumentBuilderFactory();
  					}
  				}
  				DocumentBuilder documentBuilder = createDocumentBuilder(this.documentBuilderFactory);
  				domSource.setNode(documentBuilder.newDocument());
  			}
  			catch (ParserConfigurationException ex) {
  				throw new UnmarshallingFailureException(
  						"Could not create document placeholder for DOMSource: " + ex.getMessage(), ex);
  			}
  		}
  		return unmarshalDomNode(domSource.getNode());
  	}
docs: Template method for handling {@code DOMSource}s.
  <p>This implementation delegates to {@code unmarshalDomNode}.
  If the given source is empty, an empty source {@code Document}
  will be created as a placeholder.
  @param domSource the {@code DOMSource}
  @return the object graph
  @throws XmlMappingException if the given source cannot be mapped to an object
  @throws IllegalArgumentException if the {@code domSource} is empty
  @see #unmarshalDomNode(org.w3c.dom.Node)