use of org.jboss.shrinkwrap.api.ArchivePath in project tomee by apache.
the class OpenEJBArchiveProcessor method analyzeLibs.
private static CompositeArchive analyzeLibs(final ClassLoader parent, final List<URL> additionalPaths, final Map<URL, List<String>> earMap, final List<Archive> earLibsArchives, final CompositeBeans earBeans, final Map<ArchivePath, Node> jars, final Map<String, Object> altDD) {
final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<>(jars.size());
for (final Map.Entry<ArchivePath, Node> node : jars.entrySet()) {
final Asset asset = node.getValue().getAsset();
if (ArchiveAsset.class.isInstance(asset)) {
final Archive<?> libArchive = ArchiveAsset.class.cast(asset).getArchive();
if (!isExcluded(libArchive.getName())) {
earLibsArchives.add(libArchive);
final List<Class<?>> earClasses = new ArrayList<>();
final List<String> earClassNames = new ArrayList<>();
final Map<ArchivePath, Node> content = libArchive.getContent(new IncludeRegExpPaths(".*.class"));
for (final Map.Entry<ArchivePath, Node> classNode : content.entrySet()) {
final String classname = name(classNode.getKey().get());
try {
earClasses.add(parent.loadClass(classname));
earClassNames.add(classname);
} catch (final ClassNotFoundException e) {
LOGGER.fine("Can't load class " + classname);
} catch (final NoClassDefFoundError ncdfe) {
// no-op
}
}
try {
// ends with !/META-INF/beans.xml to force it to be used as a cdi module *with bda*
final Node beansNode = libArchive.get(META_INF + BEANS_XML);
final URL arUrl = new URL("jar:file://!/lib/" + libArchive.getName() + (beansNode != null ? "!/META-INF/beans.xml" : ""));
if (beansNode != null) {
try {
DeploymentLoader.doMerge(arUrl, earBeans, ReadDescriptors.readBeans(beansNode.getAsset().openStream()));
} catch (final OpenEJBException e) {
throw new IllegalArgumentException(e);
}
}
earMap.put(arUrl, earClassNames);
} catch (final MalformedURLException e) {
// no-op
}
archives.add(new ClassesArchive(earClasses));
}
final Node ejbJarXml = libArchive.get(META_INF + EJB_JAR_XML);
if (ejbJarXml != null) {
// not super, we should merge them surely but ok for use cases we met until today
altDD.put("ejb-jar.xml", new AssetSource(ejbJarXml.getAsset(), null));
}
}
if (UrlAsset.class.isInstance(asset) || FileAsset.class.isInstance(asset)) {
try {
final URL url = UrlAsset.class.isInstance(asset) ? get(URL.class, "url", asset) : get(File.class, "file", asset).toURI().toURL();
final List<String> classes = new ArrayList<String>();
archives.add(new FilteredArchive(new JarArchive(parent, url), new WebappAggregatedArchive.ScanXmlSaverFilter(false, null, classes, null)));
additionalPaths.add(url);
final URLClassLoader loader = new URLClassLoader(new URL[] { url }, EMPTY_LOADER);
for (final String beans : asList("META-INF/beans.xml", "/META-INF/beans.xml")) {
final URL u = loader.getResource(beans);
if (u != null) {
try {
DeploymentLoader.doMerge(u, earBeans, ReadDescriptors.readBeans(u.openStream()));
} catch (final OpenEJBException e) {
throw new IllegalArgumentException(e);
} catch (final IOException e) {
// no-op
}
earMap.put(u, classes);
}
}
try {
loader.close();
} catch (final IOException e) {
// no-op
}
} catch (final MalformedURLException e) {
throw new IllegalArgumentException(e);
}
}
}
return new CompositeArchive(archives);
}
use of org.jboss.shrinkwrap.api.ArchivePath in project tomee by apache.
the class OpenEJBArchiveProcessor method finderArchive.
private static org.apache.xbean.finder.archive.Archive finderArchive(final Node beansXml, final Archive<?> archive, final ClassLoader cl, final CompositeArchive libs, final Map<URL, List<String>> webAppClassesByUrl, final CompositeBeans compositeBeans) {
final List<Class<?>> classes = new ArrayList<>();
final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths(".*.class"));
for (final Map.Entry<ArchivePath, Node> node : content.entrySet()) {
final String classname = name(node.getKey().get());
try {
classes.add(cl.loadClass(classname));
} catch (final ClassNotFoundException e) {
LOGGER.fine("Can't load class " + classname);
if (LOGGER.isLoggable(Level.FINEST)) {
e.printStackTrace(System.err);
}
} catch (final NoClassDefFoundError ncdfe) {
// no-op
}
}
final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<>();
archives.add(new ClassesArchive(classes));
if (beansXml != null) {
try {
// no host avoid host resolution in hashcode()
final URL key = new URL("jar:file://!/WEB-INF/beans.xml");
try {
DeploymentLoader.doMerge(key, compositeBeans, ReadDescriptors.readBeans(beansXml.getAsset().openStream()));
} catch (final OpenEJBException e) {
throw new IllegalArgumentException(e);
}
final List<String> mainClasses = new ArrayList<>();
for (final Class<?> clazz : classes) {
mainClasses.add(clazz.getName());
}
webAppClassesByUrl.put(key, mainClasses);
} catch (final MalformedURLException mue) {
// no-op
}
}
if (libs != null) {
archives.add(libs);
}
return new SimpleWebappAggregatedArchive(cl, new CompositeArchive(archives), webAppClassesByUrl);
}
use of org.jboss.shrinkwrap.api.ArchivePath in project hibernate-orm by hibernate.
the class PackagingTestCase method buildExplodedPar.
protected File buildExplodedPar() {
String fileName = "explodedpar";
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, fileName);
archive.addClasses(Elephant.class, Carpet.class);
ArchivePath path = ArchivePaths.create("META-INF/persistence.xml");
archive.addAsResource("explodedpar/META-INF/persistence.xml", path);
path = ArchivePaths.create("org/hibernate/jpa/test/pack/explodedpar/Elephant.hbm.xml");
archive.addAsResource("explodedpar/org/hibernate/jpa/test/pack/explodedpar/Elephant.hbm.xml", path);
path = ArchivePaths.create("org/hibernate/jpa/test/pack/explodedpar/package-info.class");
archive.addAsResource("org/hibernate/jpa/test/pack/explodedpar/package-info.class", path);
File testPackage = new File(packageTargetDir, fileName);
archive.as(ExplodedExporter.class).exportExploded(packageTargetDir);
return testPackage;
}
use of org.jboss.shrinkwrap.api.ArchivePath in project hibernate-orm by hibernate.
the class PackagingTestCase method buildLargeJar.
protected File buildLargeJar() {
String fileName = "large.jar";
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, fileName);
// Build a large jar by adding a lorem ipsum file repeatedly.
for (int i = 0; i < 100; i++) {
ArchivePath path = ArchivePaths.create("META-INF/file" + i);
archive.addAsResource("org/hibernate/jpa/test/packaging/loremipsum.txt", path);
}
File testPackage = new File(packageTargetDir, fileName);
archive.as(ZipExporter.class).exportTo(testPackage, true);
return testPackage;
}
use of org.jboss.shrinkwrap.api.ArchivePath in project hibernate-orm by hibernate.
the class PackagingTestCase method buildCfgXmlPar.
protected File buildCfgXmlPar() {
String fileName = "cfgxmlpar.par";
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, fileName);
archive.addClasses(Morito.class, Item.class);
ArchivePath path = ArchivePaths.create("META-INF/persistence.xml");
archive.addAsResource("cfgxmlpar/META-INF/persistence.xml", path);
path = ArchivePaths.create("org/hibernate/jpa/test/pack/cfgxmlpar/hibernate.cfg.xml");
archive.addAsResource("cfgxmlpar/org/hibernate/jpa/test/pack/cfgxmlpar/hibernate.cfg.xml", path);
File testPackage = new File(packageTargetDir, fileName);
archive.as(ZipExporter.class).exportTo(testPackage, true);
return testPackage;
}
Aggregations