in repository/service/src/main/java/org/apache/karaf/cave/repository/service/bundlerepository/StaxParser.java [190:253]
public static XmlRepository parse(URI repositoryUrl, InputStream is, XmlRepository previous) throws XMLStreamException {
XMLStreamReader reader = getInputFactory().createXMLStreamReader(is);
try {
int event = reader.nextTag();
if (event != START_ELEMENT || !REPOSITORY.equals(reader.getLocalName())) {
throw new IllegalStateException("Expected element 'repository' at the root of the document");
}
XmlRepository repo = new XmlRepository();
for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++) {
String attrName = reader.getAttributeLocalName(i);
String attrValue = reader.getAttributeValue(i);
switch (attrName) {
case REPO_NAME:
repo.name = attrValue;
break;
case INCREMENT:
repo.increment = Long.parseLong(attrValue);
break;
default:
throw new IllegalStateException("Unexpected attribute '" + attrName + "'");
}
}
if (previous != null && repo.increment == previous.increment) {
return previous;
}
while ((event = reader.nextTag()) == START_ELEMENT) {
String element = reader.getLocalName();
switch (element) {
case REFERRAL:
Referral referral = new Referral();
for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++) {
String attrName = reader.getAttributeLocalName(i);
String attrValue = reader.getAttributeValue(i);
switch (attrName) {
case DEPTH:
referral.depth = Integer.parseInt(attrValue);
break;
case URL:
referral.url = attrValue;
break;
default:
throw new IllegalStateException("Unexpected attribute '" + attrName + "'");
}
}
if (referral.url == null) {
throw new IllegalStateException("Expected attribute '" + URL + "'");
}
repo.referrals.add(referral);
sanityCheckEndElement(reader, reader.nextTag(), REFERRAL);
break;
case RESOURCE:
repo.resources.add(parseResource(repositoryUrl, reader));
break;
default:
throw new IllegalStateException("Unsupported element '" + element + "'. Expected 'referral' or 'resource'");
}
}
// Sanity check
sanityCheckEndElement(reader, event, REPOSITORY);
return repo;
} finally {
reader.close();
}
}