InputSource input = new InputSource((new File(jars[i].getName())).toURI().toURL().toExternalForm());
input.setByteStream(is);
synchronized (fragmentOrderingDigester) {
try {
fragmentOrderingDigester.parse(input);
WebOrdering ordering = (WebOrdering) fragmentOrderingDigester.peek();
if (ordering != null) {
ordering.setJar(jars[i].getName());
orderings.add(ordering);
}
} finally {
fragmentOrderingDigester.reset();
}
}
} catch (Exception e) {
log.error(sm.getString("contextConfig.fragmentOrderingParse", jars[i].getName()), e);
ok = false;
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
// Ignore
}
}
} else {
// If there is no fragment, still consider it for ordering as a
// fragment specifying no name and no order
WebOrdering ordering = new WebOrdering();
ordering.setJar(jars[i].getName());
orderings.add(ordering);
}
}
if (!fragmentFound) {
// Drop the order as there is no fragment in the webapp
orderings.clear();
}
// Generate web fragments parsing order
if (absoluteOrdering != null) {
// Absolute ordering from web.xml, any relative fragment ordering is ignored
List<String> fragmentNames = absoluteOrdering.getOrder();
int otherPos = -1;
for (int i = 0; i < fragmentNames.size(); i++) {
String fragmentName = fragmentNames.get(i);
if (fragmentName.equals("*")) {
if (otherPos >= 0) {
log.error(sm.getString("contextConfig.invalidAbsoluteOrder"));
ok = false;
}
otherPos = i;
} else {
Iterator<WebOrdering> orderingsIterator = orderings.iterator();
while (orderingsIterator.hasNext()) {
WebOrdering ordering = orderingsIterator.next();
if (fragmentName.equals(ordering.getName())) {
order.add(ordering.getJar());
jarsSet.remove(ordering.getJar());
break;
}
}
}
}