in vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSInstallState.java [189:250]
public static FSInstallState fromStream(InputStream in, String systemId) throws IOException {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setEntityResolver(new RejectingEntityResolver());
Document document = builder.parse(in, systemId);
Element doc = document.getDocumentElement();
if (!TAG_REGISTRY_METADATA.equals(doc.getNodeName())) {
return null;
}
String packageId = doc.getAttribute(ATTR_PACKAGE_ID);
Path filePath = Paths.get(doc.getAttribute(ATTR_FILE_PATH));
Long installTime = null;
if (doc.hasAttribute(ATTR_INSTALLATION_TIME)) {
installTime = Long.valueOf(doc.getAttribute(ATTR_INSTALLATION_TIME));
}
boolean external = Boolean.parseBoolean(doc.getAttribute(ATTR_EXTERNAL));
long size = 0;
if (doc.hasAttribute(ATTR_SIZE)) {
size = Long.valueOf(doc.getAttribute(ATTR_SIZE));
}
FSPackageStatus status = FSPackageStatus.valueOf(doc.getAttribute(ATTR_PACKAGE_STATUS).toUpperCase(Locale.ROOT));
NodeList nl = doc.getChildNodes();
Set<Dependency> dependencies = new HashSet<>();
Map<PackageId, SubPackageHandling.Option> subPackages = new HashMap<>();
WorkspaceFilter filter = null;
Properties properties = new Properties();
for (int i = 0; i < nl.getLength(); i++) {
Node child = nl.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
String childName = child.getNodeName();
if (TAG_DEPENDENCY.equals(childName)) {
dependencies.add(readDependency((Element) child));
} else if (TAG_SUBPACKAGE.equals(childName)) {
subPackages.put(readPackageId((Element) child), readSubPackgeHandlingOption((Element) child));
} else if (TAG_WORKSPACEFILTER.equals(childName)) {
filter = readWorkspaceFilter((Element) child);
} else if (TAG_PACKAGEPROPERTIES.equals(childName)) {
properties = readProperties((Element) child);
} else {
throw new IOException("<" + TAG_DEPENDENCY + "> or <" + TAG_SUBPACKAGE + "> or <" + TAG_WORKSPACEFILTER + "> expected.");
}
}
}
return new FSInstallState(PackageId.fromString(packageId), status, filePath)
.withExternal(external)
.withSize(size)
.withFilter(filter)
.withDependencies(dependencies)
.withSubPackages(subPackages)
.withProperties(properties)
.withInstallTime(installTime);
} catch (ParserConfigurationException e) {
throw new IOException("Unable to create configuration XML parser", e);
} catch (SAXException e) {
throw new IOException("Configuration file syntax error.", e);
} catch (ConfigurationException e) {
throw new IOException("Configuration file syntax error.", e);
}
}