use of org.jboss.shrinkwrap.api.Archive in project wildfly-swarm by wildfly-swarm.
the class OpenApiDeploymentProcessorTest method doTest.
/**
* Common test method.
* @throws Exception
*/
protected void doTest(Class modelReaderClass, String staticResource, boolean disableAnnotationScanning, Class filterClass, String expectedResource) throws Exception {
System.setProperty(OASConfig.SCAN_DISABLE, "" + disableAnnotationScanning);
System.setProperty(OASConfig.MODEL_READER, modelReaderClass != null ? modelReaderClass.getName() : "");
System.setProperty(OASConfig.FILTER, filterClass != null ? filterClass.getName() : "");
TestConfig cfg = new TestConfig();
OpenApiConfig config = new OpenApiConfig(cfg);
Archive archive = archive(staticResource);
OpenApiDocument.INSTANCE.reset();
OpenApiDeploymentProcessor processor = new OpenApiDeploymentProcessor(config, archive);
processor.process();
new OpenApiServletContextListener(cfg).contextInitialized(null);
String actual = OpenApiSerializer.serialize(OpenApiDocument.INSTANCE.get(), Format.JSON);
String expected = loadResource(getClass().getResource(expectedResource));
assertJsonEquals(expected, actual);
}
use of org.jboss.shrinkwrap.api.Archive in project wildfly-swarm by wildfly-swarm.
the class DefaultDeploymentScenarioGenerator method generate.
@Override
public List<DeploymentDescription> generate(TestClass testClass) {
DefaultDeployment anno = testClass.getAnnotation(DefaultDeployment.class);
if (anno == null) {
return super.generate(testClass);
}
String classPrefix = (anno.type() == DefaultDeployment.Type.JAR ? "" : "WEB-INF/classes");
Archive<?> archive;
if (DefaultDeployment.Type.WAR.equals(anno.type())) {
WebArchive webArchive = ShrinkWrap.create(WebArchive.class, testClass.getJavaClass().getSimpleName() + ".war");
// Add the marker to also include the project dependencies
MarkerContainer.addMarker(webArchive, DependenciesContainer.ALL_DEPENDENCIES_MARKER);
archive = webArchive;
} else {
archive = ShrinkWrap.create(JavaArchive.class, testClass.getJavaClass().getSimpleName() + ".jar");
}
ClassLoader cl = testClass.getJavaClass().getClassLoader();
Set<CodeSource> codeSources = new HashSet<>();
URLPackageScanner.Callback callback = (className, asset) -> {
ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className);
ArchivePath location = new BasicPath(classPrefix, classNamePath);
archive.add(asset, location);
try {
Class<?> cls = cl.loadClass(className);
codeSources.add(cls.getProtectionDomain().getCodeSource());
} catch (ClassNotFoundException | NoClassDefFoundError e) {
// e.printStackTrace();
}
};
URLPackageScanner scanner = URLPackageScanner.newInstance(true, cl, callback, testClass.getJavaClass().getPackage().getName());
scanner.scanPackage();
Set<String> prefixes = codeSources.stream().map(e -> e.getLocation().toExternalForm()).collect(Collectors.toSet());
try {
List<URL> resources = Collections.list(cl.getResources(""));
resources.stream().filter(e -> {
for (String prefix : prefixes) {
if (e.toExternalForm().startsWith(prefix)) {
return true;
}
}
return false;
}).filter(e -> e.getProtocol().equals("file")).map(e -> getPlatformPath(e.getPath())).map(e -> Paths.get(e)).filter(e -> Files.isDirectory(e)).forEach(e -> {
try {
Files.walkFileTree(e, new SimpleFileVisitor<Path>() {
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (!file.toString().endsWith(".class")) {
String location = javaSlashize(handleExceptionalCases(archive, e.relativize(file)));
archive.add(new FileAsset(file.toFile()), location);
}
return super.visitFile(file, attrs);
}
});
} catch (IOException e1) {
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
/*
Map<ArchivePath, Node> content = archive.getContent();
for (ArchivePath each : content.keySet()) {
System.err.println(" --> " + each);
}
*/
DeploymentModules deploymentModules = testClass.getAnnotation(DeploymentModules.class);
if (deploymentModules != null) {
for (DeploymentModule each : deploymentModules.value()) {
archive.as(JARArchive.class).addModule(each.name(), each.slot());
}
}
DeploymentModule deploymentModule = testClass.getAnnotation(DeploymentModule.class);
if (deploymentModule != null) {
archive.as(JARArchive.class).addModule(deploymentModule.name(), deploymentModule.slot());
}
DeploymentDescription description = new DeploymentDescription(testClass.getName(), archive);
Class<?> mainClass = anno.main();
if (mainClass != Void.class) {
archive.add(new StringAsset(mainClass.getName()), "META-INF/arquillian-main-class");
}
description.shouldBeTestable(anno.testable());
return Collections.singletonList(description);
}
use of org.jboss.shrinkwrap.api.Archive in project wildfly-swarm by wildfly-swarm.
the class DefaultJAXRSWarDeploymentFactory method create.
@Override
public Archive create() throws Exception {
Archive archive = super.create();
// jaxrs-api classes are on the classpath.
if (JAXRSArchive.isJAXRS(archive)) {
archive = archive.as(JAXRSArchive.class).staticContent();
setup(archive);
}
return archive;
}
use of org.jboss.shrinkwrap.api.Archive in project wildfly-swarm by wildfly-swarm.
the class MavenPluginTest method doBuildUberjarAndRunTests.
public void doBuildUberjarAndRunTests() throws IOException, VerificationException, InterruptedException {
String goal = "package";
if (testingProject.canRunTests()) {
goal = "verify";
// a lot of these fail because of SWARM-873
if (testingProject.additionalDependency == AdditionalDependency.USING_JAVA_EE) {
goal = "package";
}
}
try {
verifier.executeGoal(goal);
} catch (VerificationException e) {
if (testingProject.dependencies == Dependencies.JAVA_EE_APIS && testingProject.autodetection == Autodetection.NEVER) {
// the only situation when build failure is expected
String log = new String(Files.readAllBytes(logPath), StandardCharsets.UTF_8);
assertThat(log).contains("No WildFly Swarm Bootstrap fraction found");
return;
}
throw e;
}
verifier.assertFilePresent("target/testing-project." + testingProject.packaging.fileExtension());
verifier.assertFilePresent("target/testing-project-swarm.jar");
String log = new String(Files.readAllBytes(logPath), StandardCharsets.UTF_8);
assertThat(log).doesNotContain("[ERROR]");
if (testingProject.packaging.hasCustomMain()) {
int count = 0;
int index = 0;
while ((index = log.indexOf("[WARNING]", index)) != -1) {
count++;
index++;
}
assertThat(log).contains("Custom main() usage is intended to be deprecated in a future release");
// 1st warning for wildfly-swarm:package
// 2nd warning possibly for wildfly-swarm:start for tests
// 3rd warning possibly for wildfly-swarm:stop for tests
assertThat(count).as("There should only be 1 to 3 warnings").isIn(1, 2, 3);
} else {
assertThat(log).doesNotContain("[WARNING]");
}
assertThat(log).contains("BUILD SUCCESS");
checkFractionAutodetection(log);
File uberjarFile = new File(verifier.getBasedir(), "target/testing-project-swarm.jar");
Archive uberjar = ShrinkWrap.createFromZipFile(GenericArchive.class, uberjarFile);
checkFractionsPresent(uberjar);
checkMainClass(uberjar);
}
use of org.jboss.shrinkwrap.api.Archive in project tomee by apache.
the class OpenEJBArchiveProcessor method createModule.
public static AppModule createModule(final Archive<?> archive, final TestClass testClass, final Closeables closeables) {
final Class<?> javaClass;
if (testClass != null) {
javaClass = testClass.getJavaClass();
} else {
javaClass = null;
}
final ClassLoader parent;
if (javaClass == null) {
parent = Thread.currentThread().getContextClassLoader();
} else {
parent = javaClass.getClassLoader();
}
final List<URL> additionalPaths = new ArrayList<>();
CompositeArchive scannedArchive = null;
final Map<URL, List<String>> earMap = new HashMap<>();
final Map<String, Object> altDD = new HashMap<>();
final List<Archive> earLibsArchives = new ArrayList<>();
final CompositeBeans earBeans = new CompositeBeans();
final boolean isEar = EnterpriseArchive.class.isInstance(archive);
final boolean isWebApp = WebArchive.class.isInstance(archive);
final String prefix = isWebApp ? WEB_INF : META_INF;
if (isEar || isWebApp) {
final Map<ArchivePath, Node> jars = archive.getContent(new IncludeRegExpPaths(isEar ? "/.*\\.jar" : "/WEB-INF/lib/.*\\.jar"));
scannedArchive = analyzeLibs(parent, additionalPaths, earMap, earLibsArchives, earBeans, jars, altDD);
}
final URL[] urls = additionalPaths.toArray(new URL[additionalPaths.size()]);
final URLClassLoaderFirst swParent = new URLClassLoaderFirst(urls, parent);
closeables.add(swParent);
if (!isEar) {
earLibsArchives.add(archive);
}
final SWClassLoader loader = new SWClassLoader(swParent, earLibsArchives.toArray(new Archive<?>[earLibsArchives.size()]));
closeables.add(loader);
final URLClassLoader tempClassLoader = ClassLoaderUtil.createTempClassLoader(loader);
closeables.add(tempClassLoader);
final AppModule appModule = new AppModule(loader, archive.getName());
if (WEB_INF.equals(prefix)) {
appModule.setDelegateFirst(false);
appModule.setStandloneWebModule();
final WebModule webModule = new WebModule(createWebApp(archive), contextRoot(archive.getName()), loader, "", appModule.getModuleId());
webModule.setUrls(additionalPaths);
appModule.getWebModules().add(webModule);
} else if (isEar) {
// mainly for CDI TCKs
final FinderFactory.OpenEJBAnnotationFinder earLibFinder = new FinderFactory.OpenEJBAnnotationFinder(new SimpleWebappAggregatedArchive(tempClassLoader, scannedArchive, earMap));
appModule.setEarLibFinder(earLibFinder);
final EjbModule earCdiModule = new EjbModule(appModule.getClassLoader(), DeploymentLoader.EAR_SCOPED_CDI_BEANS + appModule.getModuleId(), new EjbJar(), new OpenejbJar());
earCdiModule.setBeans(earBeans);
earCdiModule.setFinder(earLibFinder);
final EjbJar ejbJar;
final AssetSource ejbJarXml = AssetSource.class.isInstance(altDD.get(EJB_JAR_XML)) ? AssetSource.class.cast(altDD.get(EJB_JAR_XML)) : null;
if (ejbJarXml != null) {
try {
ejbJar = ReadDescriptors.readEjbJar(ejbJarXml.get());
} catch (final Exception e) {
throw new OpenEJBRuntimeException(e);
}
} else {
ejbJar = new EjbJar();
}
// EmptyEjbJar would prevent to add scanned EJBs but this is *here* an aggregator so we need to be able to do so
earCdiModule.setEjbJar(ejbJar);
appModule.getEjbModules().add(earCdiModule);
for (final Map.Entry<ArchivePath, Node> node : archive.getContent(new IncludeRegExpPaths("/.*\\.war")).entrySet()) {
final Asset asset = node.getValue().getAsset();
if (ArchiveAsset.class.isInstance(asset)) {
final Archive<?> webArchive = ArchiveAsset.class.cast(asset).getArchive();
if (WebArchive.class.isInstance(webArchive)) {
final Map<String, Object> webAltDD = new HashMap<>();
final Node beansXml = findBeansXml(webArchive, WEB_INF);
final List<URL> webappAdditionalPaths = new LinkedList<>();
final CompositeBeans webAppBeansXml = new CompositeBeans();
final List<Archive> webAppArchives = new LinkedList<Archive>();
final Map<URL, List<String>> webAppClassesByUrl = new HashMap<URL, List<String>>();
final CompositeArchive webAppArchive = analyzeLibs(parent, webappAdditionalPaths, webAppClassesByUrl, webAppArchives, webAppBeansXml, webArchive.getContent(new IncludeRegExpPaths("/WEB-INF/lib/.*\\.jar")), webAltDD);
webAppArchives.add(webArchive);
final SWClassLoader webLoader = new SWClassLoader(parent, webAppArchives.toArray(new Archive<?>[webAppArchives.size()]));
closeables.add(webLoader);
final FinderFactory.OpenEJBAnnotationFinder finder = new FinderFactory.OpenEJBAnnotationFinder(finderArchive(beansXml, webArchive, webLoader, webAppArchive, webAppClassesByUrl, webAppBeansXml));
final String contextRoot = contextRoot(webArchive.getName());
final WebModule webModule = new WebModule(createWebApp(webArchive), contextRoot, webLoader, "", appModule.getModuleId() + "_" + contextRoot);
webModule.setUrls(Collections.<URL>emptyList());
webModule.setScannableUrls(Collections.<URL>emptyList());
webModule.setFinder(finder);
final EjbJar webEjbJar = createEjbJar(prefix, webArchive);
final EjbModule ejbModule = new EjbModule(webLoader, webModule.getModuleId(), null, webEjbJar, new OpenejbJar());
ejbModule.setBeans(webAppBeansXml);
ejbModule.getAltDDs().putAll(webAltDD);
ejbModule.getAltDDs().put("beans.xml", webAppBeansXml);
ejbModule.setFinder(finder);
ejbModule.setClassLoader(webLoader);
ejbModule.setWebapp(true);
appModule.getEjbModules().add(ejbModule);
appModule.getWebModules().add(webModule);
addPersistenceXml(archive, WEB_INF, appModule);
addOpenEJbJarXml(archive, WEB_INF, ejbModule);
addValidationXml(archive, WEB_INF, new HashMap<String, Object>(), ejbModule);
addResourcesXml(archive, WEB_INF, ejbModule);
addEnvEntries(archive, WEB_INF, appModule, ejbModule);
}
}
}
}
if (isEar) {
// adding the test class as lib class can break test if tested against the web part of the ear
addTestClassAsManagedBean(javaClass, tempClassLoader, appModule);
return appModule;
}
// add the test as a managed bean to be able to inject into it easily
final Map<String, Object> testDD;
if (javaClass != null) {
final EjbModule testEjbModule = addTestClassAsManagedBean(javaClass, tempClassLoader, appModule);
testDD = testEjbModule.getAltDDs();
} else {
// ignore
testDD = new HashMap<>();
}
final EjbJar ejbJar = createEjbJar(prefix, archive);
if (ejbJar.getModuleName() == null) {
final String name = archive.getName();
if (name.endsWith("ar") && name.length() > 4) {
ejbJar.setModuleName(name.substring(0, name.length() - ".jar".length()));
} else {
ejbJar.setModuleName(name);
}
}
final EjbModule ejbModule = new EjbModule(ejbJar);
ejbModule.setClassLoader(tempClassLoader);
final Node beansXml = findBeansXml(archive, prefix);
final FinderFactory.OpenEJBAnnotationFinder finder = new FinderFactory.OpenEJBAnnotationFinder(finderArchive(beansXml, archive, loader, scannedArchive, earMap, earBeans));
ejbModule.setFinder(finder);
ejbModule.setBeans(earBeans);
ejbModule.getAltDDs().put("beans.xml", earBeans);
if (appModule.isWebapp()) {
// war
appModule.getWebModules().iterator().next().setFinder(ejbModule.getFinder());
}
appModule.getEjbModules().add(ejbModule);
addPersistenceXml(archive, prefix, appModule);
addOpenEJbJarXml(archive, prefix, ejbModule);
addValidationXml(archive, prefix, testDD, ejbModule);
addResourcesXml(archive, prefix, ejbModule);
addEnvEntries(archive, prefix, appModule, ejbModule);
if (!appModule.isWebapp()) {
appModule.getAdditionalLibraries().addAll(additionalPaths);
}
if (archive.getName().endsWith(".jar")) {
// otherwise global naming will be broken
appModule.setStandloneWebModule();
}
return appModule;
}
Aggregations