in archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/archiva/jarinfo/model/io/JarDetailsReader.java [41:113]
public JarDetails read(Reader reader) throws IOException {
Digester digester = new Digester();
digester.setNamespaceAware(false);
ConvertUtils.register(new TimestampConverter(), Calendar.class);
String path;
digester.addObjectCreate(DOC_ROOT, JarDetails.class);
// Base variables
path = DOC_ROOT;
addNestedElem(digester, path, FILENAME, "setFilename", String.class);
addNestedElem(digester, path, TIMESTAMP, "setTimestamp", Calendar.class);
addNestedElem(digester, path, SIZE, "setSize", Long.class);
addNestedElem(digester, path, SIZE_UNCOMPRESSED, "setSizeUncompressed", Long.class);
addNestedElem(digester, path, SEALED, "setSealed", Boolean.class);
addHashes(digester, path);
// Assigned Id
path = DOC_ROOT + "/" + ASSIGNED_ID;
digester.addObjectCreate(path, AssignedId.class);
digester.addSetNestedProperties(path);
digester.addSetNext(path, "setAssignedId", AssignedId.class.getName());
// Entries
path = DOC_ROOT + "/" + ENTRIES + "/" + DIRECTORY;
digester.addObjectCreate(path, EntryDetail.class);
digester.addSetProperties(path);
digester.addSetNext(path, "addDirectory", EntryDetail.class.getName());
path = DOC_ROOT + "/" + ENTRIES + "/" + FILE;
digester.addObjectCreate(path, EntryDetail.class);
digester.addSetProperties(path);
addHashes(digester, path);
digester.addSetNext(path, "addFile", EntryDetail.class.getName());
// Bytecode
path = DOC_ROOT + "/" + BYTECODE;
digester.addObjectCreate(path, BytecodeDetails.class);
addHashes(digester, path);
addNestedElem(digester, path, "jdk", "setRequiredJdk", String.class);
addNestedElem(digester, path, "debug", "setDebug", Boolean.class);
digester.addSetNext(path, "setBytecode", BytecodeDetails.class.getName());
// Bytecode / Class
path = DOC_ROOT + "/" + BYTECODE + "/" + CLASS;
digester.addObjectCreate(path, ClassDetail.class);
digester.addSetProperties(path);
digester.addSetProperties(path, "jdk", "targetJdk");
digester.addSetProperties(path, "version", "classVersion");
addHashes(digester, path);
digester.addCallMethod(path + "/" + IMPORT, "addImport", 1, new Class[] {String.class });
digester.addCallParam(path + "/" + IMPORT, 0);
digester.addCallMethod(path + "/" + METHOD, "addMethod", 1, new Class[] {String.class });
digester.addCallParam(path + "/" + METHOD, 0);
digester.addSetNext(path, "addClass", ClassDetail.class.getName());
// Inspected
path = DOC_ROOT + "/" + INSPECTED;
digester.addObjectCreate(path, InspectedIds.class);
addIdValueList(digester, path, "addGroupId", GROUP_IDS, GROUP_ID);
addIdValueList(digester, path, "addArtifactId", ARTIFACT_IDS, ARTIFACT_ID);
addIdValueList(digester, path, "addVersion", VERSIONS, VERSION);
addIdValueList(digester, path, "addName", NAMES, NAME);
addIdValueList(digester, path, "addVendor", VENDORS, VENDOR);
digester.addSetNext(path, "setInspectedIds", InspectedIds.class.getName());
// Parse it
try {
return (JarDetails) digester.parse(reader);
} catch (SAXException e) {
throw new IOException("Unable to parse jardetails: " + e.getMessage(), e);
}
}