/**
* Parse fragments order.
*/
protected void createFragmentsOrder() {
WebAbsoluteOrdering absoluteOrdering = context.getWebAbsoluteOrdering();
List<WebOrdering> orderings = new ArrayList<WebOrdering>();
HashSet<String> jarsSet = new HashSet<String>();
boolean fragmentFound = false;
// Parse the ordering defined in web fragments
JarRepository jarRepository = context.getJarRepository();
JarFile[] jars = jarRepository.findJars();
for (int i = 0; i < jars.length; i++) {
// Find webapp descriptor fragments
jarsSet.add(jars[i].getName());
JarFile jarFile = jars[i];
InputStream is = null;
ZipEntry entry = jarFile.getEntry(Globals.WEB_FRAGMENT_PATH);
if (entry != null) {
fragmentFound = true;
try {
webFragments.add(jars[i].getName());
is = jarFile.getInputStream(entry);
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) {