use of org.xml.sax.XMLReader in project bnd by bndtools.
the class SAXUtil method buildPipeline.
public static XMLReader buildPipeline(Result output, ContentFilter... filters) throws Exception {
SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler();
handler.setResult(output);
ContentHandler last = handler;
if (filters != null)
for (ContentFilter filter : filters) {
filter.setParent(last);
last = filter;
}
XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
reader.setContentHandler(last);
return reader;
}
use of org.xml.sax.XMLReader in project opennms by OpenNMS.
the class JaxbUtils method getXMLFilterForClass.
public static <T> XMLFilter getXMLFilterForClass(final Class<T> clazz) throws SAXException {
final String namespace = getNamespaceForClass(clazz);
XMLFilter filter = namespace == null ? new SimpleNamespaceFilter("", false) : new SimpleNamespaceFilter(namespace, true);
LOG.trace("namespace filter for class {}: {}", clazz, filter);
final XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
filter.setParent(xmlReader);
return filter;
}
use of org.xml.sax.XMLReader in project opennms by OpenNMS.
the class RrdtoolXportFetchStrategy method fetchMeasurements.
/**
* {@inheritDoc}
*/
@Override
protected FetchResults fetchMeasurements(long start, long end, long step, int maxrows, Map<Source, String> rrdsBySource, Map<String, Object> constants) throws RrdException {
String rrdBinary = System.getProperty("rrd.binary");
if (rrdBinary == null) {
throw new RrdException("No RRD binary is set.");
}
final long startInSeconds = (long) Math.floor(start / 1000d);
final long endInSeconds = (long) Math.floor(end / 1000d);
long stepInSeconds = (long) Math.floor(step / 1000d);
// The step must be strictly positive
if (stepInSeconds <= 0) {
stepInSeconds = 1;
}
final CommandLine cmdLine = new CommandLine(rrdBinary);
cmdLine.addArgument("xport");
cmdLine.addArgument("--step");
cmdLine.addArgument("" + stepInSeconds);
cmdLine.addArgument("--start");
cmdLine.addArgument("" + startInSeconds);
cmdLine.addArgument("--end");
cmdLine.addArgument("" + endInSeconds);
if (maxrows > 0) {
cmdLine.addArgument("--maxrows");
cmdLine.addArgument("" + maxrows);
}
// Use labels without spaces when executing the xport command
// These are mapped back to the requested labels in the response
final Map<String, String> labelMap = Maps.newHashMap();
int k = 0;
for (final Map.Entry<Source, String> entry : rrdsBySource.entrySet()) {
final Source source = entry.getKey();
final String rrdFile = entry.getValue();
final String tempLabel = Integer.toString(++k);
labelMap.put(tempLabel, source.getLabel());
cmdLine.addArgument(String.format("DEF:%s=%s:%s:%s", tempLabel, Utils.escapeColons(rrdFile), Utils.escapeColons(source.getEffectiveDataSource()), source.getAggregation()));
cmdLine.addArgument(String.format("XPORT:%s:%s", tempLabel, tempLabel));
}
// Use commons-exec to execute rrdtool
final DefaultExecutor executor = new DefaultExecutor();
// Capture stdout/stderr
final ByteArrayOutputStream stdout = new ByteArrayOutputStream();
final ByteArrayOutputStream stderr = new ByteArrayOutputStream();
executor.setStreamHandler(new PumpStreamHandler(stdout, stderr, null));
// Fail if we get a non-zero exit code
executor.setExitValue(0);
// Fail if the process takes too long
final ExecuteWatchdog watchdog = new ExecuteWatchdog(XPORT_TIMEOUT_MS);
executor.setWatchdog(watchdog);
// Export
RrdXport rrdXport;
try {
LOG.debug("Executing: {}", cmdLine);
executor.execute(cmdLine);
final XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
final SAXSource source = new SAXSource(xmlReader, new InputSource(new StringReader(stdout.toString())));
final JAXBContext jc = JAXBContext.newInstance(RrdXport.class);
final Unmarshaller u = jc.createUnmarshaller();
rrdXport = (RrdXport) u.unmarshal(source);
} catch (IOException e) {
throw new RrdException("An error occured while executing '" + StringUtils.join(cmdLine.toStrings(), " ") + "' with stderr: " + stderr.toString(), e);
} catch (SAXException | JAXBException e) {
throw new RrdException("The output generated by 'rrdtool xport' could not be parsed.", e);
}
final int numRows = rrdXport.getRows().size();
final int numColumns = rrdXport.getMeta().getLegends().size();
final long xportStartInMs = rrdXport.getMeta().getStart() * 1000;
final long xportStepInMs = rrdXport.getMeta().getStep() * 1000;
final long[] timestamps = new long[numRows];
final double[][] values = new double[numColumns][numRows];
// Convert rows to columns
int i = 0;
for (final XRow row : rrdXport.getRows()) {
// Derive the timestamp from the start and step since newer versions
// of rrdtool no longer include it as part of the rows
timestamps[i] = xportStartInMs + xportStepInMs * i;
for (int j = 0; j < numColumns; j++) {
if (row.getValues() == null) {
// NMS-7710: Avoid NPEs, in certain cases the list of values may be null
throw new RrdException("The output generated by 'rrdtool xport' was not recognized. Try upgrading your rrdtool binaries.");
}
values[j][i] = row.getValues().get(j);
}
i++;
}
// Map the columns by label
// The legend entries are in the same order as the column values
final Map<String, double[]> columns = Maps.newHashMapWithExpectedSize(numColumns);
i = 0;
for (String label : rrdXport.getMeta().getLegends()) {
columns.put(labelMap.get(label), values[i++]);
}
return new FetchResults(timestamps, columns, xportStepInMs, constants);
}
use of org.xml.sax.XMLReader in project jangaroo-tools by CoreMedia.
the class ExmlToConfigClassParser method parseFileWithHandler.
public static void parseFileWithHandler(File source, ContentHandler handler) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(source);
XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setContentHandler(handler);
if (handler instanceof LexicalHandler) {
xr.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
}
xr.parse(new org.xml.sax.InputSource(inputStream));
} catch (ExmlcException e) {
// Simply pass our own exceptions.
e.setFile(source);
throw e;
} catch (Exception e) {
throw new ExmlcException("could not parse EXML file", source, e);
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
// never happened
}
}
}
use of org.xml.sax.XMLReader in project cayenne by apache.
the class CompatibilityDataChannelDescriptorLoader method load.
@Override
public ConfigurationTree<DataChannelDescriptor> load(Resource configurationResource) throws ConfigurationException {
if (configurationResource == null) {
throw new NullPointerException("Null configurationResource");
}
if (!(upgradeServiceProvider.get() instanceof CompatibilityUpgradeService)) {
throw new ConfigurationException("CompatibilityUpgradeService expected");
}
CompatibilityUpgradeService upgradeService = (CompatibilityUpgradeService) upgradeServiceProvider.get();
UpgradeMetaData metaData = upgradeService.getUpgradeType(configurationResource);
if (metaData.getUpgradeType() == UpgradeType.UPGRADE_NOT_NEEDED) {
return super.load(configurationResource);
}
if (metaData.getUpgradeType() == UpgradeType.DOWNGRADE_NEEDED) {
throw new ConfigurationException("Unable to load configuration from %s: " + "It was created using a newer version of the Modeler", configurationResource.getURL());
}
if (metaData.getUpgradeType() == UpgradeType.INTERMEDIATE_UPGRADE_NEEDED) {
throw new ConfigurationException("Unable to load configuration from %s: " + "Open the project in the older Modeler to do an intermediate upgrade.", configurationResource.getURL());
}
URL configurationURL = configurationResource.getURL();
upgradeService.upgradeProject(configurationResource);
Document projectDocument = documentProvider.getDocument(configurationURL);
if (projectDocument == null) {
throw new ConfigurationException("Unable to upgrade " + configurationURL);
}
logger.info("Loading XML configuration resource from " + configurationURL);
final DataChannelDescriptor descriptor = new DataChannelDescriptor();
descriptor.setConfigurationSource(configurationResource);
descriptor.setName(nameMapper.configurationNodeName(DataChannelDescriptor.class, configurationResource));
try {
DOMSource source = new DOMSource(projectDocument);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
TransformerFactory transFactory = TransformerFactory.newInstance();
transFactory.newTransformer().transform(source, new StreamResult(baos));
InputSource isource = new InputSource(source.getSystemId());
isource.setByteStream(new ByteArrayInputStream(baos.toByteArray()));
XMLReader parser = Util.createXmlReader();
LoaderContext loaderContext = new LoaderContext(parser, handlerFactory);
loaderContext.addDataMapListener(new DataMapLoaderListener() {
@Override
public void onDataMapLoaded(DataMap dataMap) {
descriptor.getDataMaps().add(dataMap);
}
});
DataChannelHandler rootHandler = new DataChannelHandler(this, descriptor, loaderContext);
parser.setContentHandler(rootHandler);
parser.setErrorHandler(rootHandler);
parser.parse(isource);
} catch (Exception e) {
throw new ConfigurationException("Error loading configuration from %s", e, configurationURL);
}
// Finally upgrade model, if needed
upgradeService.upgradeModel(configurationResource, descriptor);
return new ConfigurationTree<>(descriptor, null);
}
Aggregations