use of com.helger.xml.serialize.read.DOMReader in project ph-schematron by phax.
the class SchematronResourceHelper method getNodeOfSource.
/**
* Convert the passed transform source into a DOM node. Currently on
* {@link DOMSource} and {@link StreamSource} can be handled.
*
* @param aSource
* The transform source to use. May not be <code>null</code>.
* @param aDRS
* DOMReader settings to use. May not be <code>null</code>.
* @return The DOM node and never <code>null</code>.
* @throws SAXException
* In case XML parsing fails
* @throws IllegalArgumentException
* in case an unsupported {@link Source} implementation is provided.
*/
@Nullable
public static Node getNodeOfSource(@Nonnull final Source aSource, @Nonnull final DOMReaderSettings aDRS) throws SAXException {
ValueEnforcer.notNull(aSource, "Source");
ValueEnforcer.notNull(aDRS, "DOMReaderSettings");
if (aSource instanceof DOMSource) {
// Node is already in DOMSource
return ((DOMSource) aSource).getNode();
}
if (aSource instanceof StreamSource) {
// In StreamSource it can either be a byte stream or a character stream or
// a system ID
final StreamSource aStreamSource = (StreamSource) aSource;
final InputStream aIS = aStreamSource.getInputStream();
if (aIS != null) {
// Byte stream
final Document aDoc = DOMReader.readXMLDOM(aIS, aDRS != null ? aDRS : new DOMReaderSettings());
if (aDoc == null)
throw new IllegalArgumentException("Failed to read source " + aSource + " as XML from InputStream " + aIS);
return aDoc;
}
final Reader aReader = aStreamSource.getReader();
if (aReader != null) {
// CHaracter stream
final Document aDoc = DOMReader.readXMLDOM(aReader, aDRS);
if (aDoc == null)
throw new IllegalArgumentException("Failed to read source " + aSource + " as XML from Reader " + aReader);
return aDoc;
}
final String sSystemID = aStreamSource.getSystemId();
if (StringHelper.hasText(sSystemID)) {
// System ID
try {
final URLResource aURL = new URLResource(sSystemID);
final Document aDoc = DOMReader.readXMLDOM(aURL, aDRS);
if (aDoc == null)
throw new IllegalArgumentException("Failed to read source " + aSource + " as XML from SystemID '" + sSystemID + "'");
return aDoc;
} catch (final MalformedURLException ex) {
throw new IllegalArgumentException("Failed to read source " + aSource + " as XML from SystemID '" + sSystemID + "': " + ex.getMessage());
}
}
// Neither InputStream nor Reader present
s_aLogger.error("StreamSource contains neither InputStream nor Reader nor SystemID - cannot handle!");
return null;
}
final String sMsg = "Can only handle DOMSource and StreamSource - having " + aSource + " with system ID '" + aSource.getSystemId() + "'";
s_aLogger.error(sMsg);
throw new IllegalArgumentException(sMsg);
}
Aggregations