in connectfeaturelauncher/src/main/java/org/apache/sling/feature/launcher/extensions/connect/impl/PojoSRLauncher.java [49:121]
public void prepare(LauncherPrepareContext context, ArtifactId frameworkId, Feature app) throws Exception
{
context.addAppJar(context.getArtifactFile(frameworkId));
String filter = "";
if (frameworkId.getArtifactId().equals("org.apache.felix.connect"))
{
for (List<Artifact> bundles : app.getBundles().getBundlesByStartOrder().values())
{
for (Artifact artifact : bundles)
{
URL url = context.getArtifactFile(artifact.getId());
try (JarFile jar = IOUtils.getJarFileFromURL(url, true, null)) {
Manifest mf = jar.getManifest();
String bsn = mf.getMainAttributes() != null ? mf.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME) : null;
if (bsn != null)
{
String cp = mf.getMainAttributes().getValue(Constants.BUNDLE_CLASSPATH);
if (cp != null)
{
for (String entry : cp.split(","))
{
int idx = entry.indexOf(';');
if (idx != -1)
{
entry = entry.substring(0, idx);
}
entry = entry.trim();
if (!entry.isEmpty() && !entry.equals("."))
{
JarEntry content = jar.getJarEntry(entry);
if (content != null && !content.isDirectory())
{
try
{
String urlString = "jar:" + IOUtils.getFileFromURL(getJarFileURL(url, content), true, null).toURI().toURL() + "!/";
context.addAppJar(new URL(urlString));
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
else
{
context.addAppJar(url);
filter += "(" + Constants.BUNDLE_SYMBOLICNAME + "=" + bsn + ")";
}
}
}
else
{
context.addAppJar(url);
filter += "(" + Constants.BUNDLE_SYMBOLICNAME + "=" + bsn + ")";
}
}
else {
context.addAppJar(url);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
if (!filter.isEmpty()) {
filter = "(|" + filter + ")";
app.getFrameworkProperties().put("pojosr.filter", filter);
}
}
}