Search in sources :

Example 1 with Resources

use of org.jboss.testharness.impl.packaging.Resources 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;
}
Also used : HashMap(java.util.HashMap) ZipInputStream(java.util.zip.ZipInputStream) ZipEntry(java.util.zip.ZipEntry) Resource(org.jboss.testharness.impl.packaging.Resource) OpenEJBTckDeploymentRuntimeException(org.apache.openejb.tck.OpenEJBTckDeploymentRuntimeException) URL(java.net.URL) OpenEJBTckDeploymentRuntimeException(org.apache.openejb.tck.OpenEJBTckDeploymentRuntimeException) DeploymentException(org.jboss.testharness.api.DeploymentException) EJBException(javax.ejb.EJBException) ValidationException(javax.validation.ValidationException) ZipInputStream(java.util.zip.ZipInputStream) ValidationXml(org.jboss.testharness.impl.packaging.jsr303.ValidationXml) ZipOutputStream(java.util.zip.ZipOutputStream) Resources(org.jboss.testharness.impl.packaging.Resources) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

URL (java.net.URL)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 ZipEntry (java.util.zip.ZipEntry)1 ZipInputStream (java.util.zip.ZipInputStream)1 ZipOutputStream (java.util.zip.ZipOutputStream)1 EJBException (javax.ejb.EJBException)1 ValidationException (javax.validation.ValidationException)1 OpenEJBTckDeploymentRuntimeException (org.apache.openejb.tck.OpenEJBTckDeploymentRuntimeException)1 DeploymentException (org.jboss.testharness.api.DeploymentException)1 Resource (org.jboss.testharness.impl.packaging.Resource)1 Resources (org.jboss.testharness.impl.packaging.Resources)1 ValidationXml (org.jboss.testharness.impl.packaging.jsr303.ValidationXml)1