use of org.jboss.testharness.impl.packaging.Resource in project tomee by apache.
the class ContainersImpl method writeToFile.
private File writeToFile(final InputStream archive, final String name) throws IOException {
File file;
try {
file = File.createTempFile("deploy", "-" + name);
} catch (Throwable e) {
final File tmp = new File("tmp");
if (!tmp.exists() && !tmp.mkdirs()) {
throw new IOException("Failed to create local tmp directory: " + tmp.getAbsolutePath());
}
file = File.createTempFile("deploy", "-" + name, tmp);
}
file.deleteOnExit();
try {
final Map<String, URL> resources = new HashMap<String, URL>();
final Class<?> clazz = this.getClass().getClassLoader().loadClass(name.replace(".jar", ""));
if (clazz.isAnnotationPresent(EjbJarXml.class)) {
final URL resource = getResource(clazz, clazz.getAnnotation(EjbJarXml.class).value());
if (resource != null)
resources.put("META-INF/ejb-jar.xml", resource);
}
if (clazz.isAnnotationPresent(PersistenceXml.class)) {
final URL resource = getResource(clazz, clazz.getAnnotation(PersistenceXml.class).value());
if (resource != null)
resources.put("META-INF/persistence.xml", resource);
}
if (clazz.isAnnotationPresent(ValidationXml.class)) {
String path = clazz.getAnnotation(ValidationXml.class).value();
if (path.contains(".jar")) {
path = path.substring(path.indexOf("!") + 2);
}
final URL resource = getResource(clazz, path);
if (resource != null) {
resources.put("META-INF/validation.xml", resource);
} else {
throw new OpenEJBTckDeploymentRuntimeException("can't find validation descriptor file " + path);
}
}
if (clazz.isAnnotationPresent(Resource.class)) {
final Resource resourceAnn = clazz.getAnnotation(Resource.class);
final URL resource = getResource(clazz, resourceAnn.source());
if (resource != null) {
resources.put(resourceAnn.destination().replaceFirst("WEB-INF/classes/", ""), resource);
}
}
if (clazz.isAnnotationPresent(Resources.class)) {
final Resources resourcesAnn = clazz.getAnnotation(Resources.class);
for (final Resource resourceAnn : resourcesAnn.value()) {
final URL resource = getResource(clazz, resourceAnn.source());
if (resource != null) {
resources.put(resourceAnn.destination().replaceFirst("WEB-INF/classes/", ""), resource);
}
}
}
final boolean isJar = name.endsWith(".jar");
final ZipInputStream zin = new ZipInputStream(archive);
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(524288);
final ZipOutputStream zout = new ZipOutputStream(byteArrayOutputStream);
for (ZipEntry entry; (entry = zin.getNextEntry()) != null; ) {
String entryName = entry.getName();
if (isJar && entryName.startsWith("WEB-INF/classes/")) {
entryName = entryName.replaceFirst("WEB-INF/classes/", "");
}
InputStream src = zin;
if (resources.containsKey(entryName)) {
src = IO.read(resources.get(entryName));
}
resources.remove(entryName);
zout.putNextEntry(new ZipEntry(entryName));
ZipUtil.copy(src, zout);
}
for (final Map.Entry<String, URL> entry : resources.entrySet()) {
zout.putNextEntry(new ZipEntry(entry.getKey()));
final InputStream in = IO.read(entry.getValue());
ZipUtil.copy(in, zout);
in.close();
}
if (System.getProperty("force.deployment") != null && !resources.containsKey("META-INF/beans.xml")) {
zout.putNextEntry(new ZipEntry("META-INF/beans.xml"));
final InputStream in = new ByteArrayInputStream("<beans />".getBytes());
ZipUtil.copy(in, zout);
in.close();
}
close(zin);
close(zout);
writeToFile(file, byteArrayOutputStream);
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
Aggregations