in axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/StAXDialectDetector.java [225:289]
private static StAXDialect detectDialectFromJarManifest(URL rootUrl) {
if (rootUrl.getProtocol().equals("jrt")) {
// We get here for the StAX implementation in the JRE for Java 9 and above. There is no
// manifest for the runtime classes, so stop here.
return null;
}
Manifest manifest;
try {
URL metaInfUrl = new URL(rootUrl, "META-INF/MANIFEST.MF");
InputStream is = metaInfUrl.openStream();
try {
manifest = new Manifest(is);
} finally {
is.close();
}
} catch (IOException ex) {
log.warn("Unable to load manifest for StAX implementation at " + rootUrl);
return UnknownStAXDialect.INSTANCE;
}
Attributes attrs = manifest.getMainAttributes();
String title = attrs.getValue(IMPLEMENTATION_TITLE);
String symbolicName = attrs.getValue(BUNDLE_SYMBOLIC_NAME);
if (symbolicName != null) {
int i = symbolicName.indexOf(';');
if (i != -1) {
symbolicName = symbolicName.substring(0, i);
}
}
String vendor = attrs.getValue(IMPLEMENTATION_VENDOR);
if (vendor == null) {
vendor = attrs.getValue(BUNDLE_VENDOR);
}
String versionString = attrs.getValue(IMPLEMENTATION_VERSION);
if (versionString == null) {
versionString = attrs.getValue(BUNDLE_VERSION);
}
if (log.isDebugEnabled()) {
log.debug("StAX implementation at " + rootUrl + " is:\n" +
" Title: " + title + "\n" +
" Symbolic name: " + symbolicName + "\n" +
" Vendor: " + vendor + "\n" +
" Version: " + versionString);
}
if (title != null && title.toLowerCase(Locale.ENGLISH).contains("woodstox")) {
Version version = new Version(versionString);
return version.getComponent(0) >= 4 ? Woodstox4Dialect.INSTANCE : null;
} else if (title != null && title.indexOf("SJSXP") != -1) {
return new SJSXPDialect(false);
} else if ("com.bea.core.weblogic.stax".equals(symbolicName)) {
// Weblogic's StAX implementation doesn't support CDATA section reporting and there are
// a couple of additional test cases (with respect to BEA's reference implementation)
// that fail.
log.warn("Weblogic's StAX implementation is unsupported and some Axiom features will not work " +
"as expected! Please use Woodstox instead.");
// This is the best match we can return in this case.
return BEADialect.INSTANCE;
} else if ("BEA".equals(vendor)) {
return BEADialect.INSTANCE;
} else if ("com.ibm.ws.prereq.banshee".equals(symbolicName)) {
return XLXP2Dialect.INSTANCE;
} else {
return null;
}
}