Search in sources :

Example 1 with DeploymentDescriptorFile

use of com.sun.enterprise.deployment.io.DeploymentDescriptorFile in project Payara by payara.

the class ApplicationArchivist method readModulesDescriptors.

/**
 * read the modules deployment descriptor from this application object using the passed archive
 *
 * @param app
 *            application containing the list of modules.
 * @param appArchive
 *            containing the sub modules files.
 * @return true if everything went fine
 */
public boolean readModulesDescriptors(Application app, ReadableArchive appArchive) throws IOException, SAXParseException {
    List<ModuleDescriptor> nonexistentModules = new ArrayList<>();
    List<ModuleDescriptor> sortedModules = sortModules(app);
    for (ModuleDescriptor aModule : sortedModules) {
        if (aModule.getArchiveUri().indexOf(' ') != -1) {
            throw new IllegalArgumentException(localStrings.getLocalString("enterprise.deployment.unsupporturi", "Unsupported module URI {0}, it contains space(s)", new Object[] { aModule.getArchiveUri() }));
        }
        if (getDefaultLogger().isLoggable(FINE)) {
            getDefaultLogger().fine("Opening sub-module " + aModule);
        }
        BundleDescriptor descriptor = null;
        Archivist newArchivist = archivistFactory.get().getArchivist(aModule.getModuleType());
        newArchivist.initializeContext(this);
        newArchivist.setRuntimeXMLValidation(this.getRuntimeXMLValidation());
        newArchivist.setRuntimeXMLValidationLevel(this.getRuntimeXMLValidationLevel());
        newArchivist.setAnnotationProcessingRequested(annotationProcessingRequested);
        ReadableArchive embeddedArchive = appArchive.getSubArchive(aModule.getArchiveUri());
        if (embeddedArchive == null) {
            throw new IllegalArgumentException(localStrings.getLocalString("enterprise.deployment.nosuchmodule", "Could not find sub module [{0}] as defined in application.xml", new Object[] { aModule.getArchiveUri() }));
        }
        embeddedArchive.setParentArchive(appArchive);
        setExtensionArchivistForSubArchivist(habitat, embeddedArchive, aModule, app, newArchivist);
        if (aModule.getAlternateDescriptor() != null) {
            // The module use alternate deployement descriptor, ignore the DDs in the archive.
            InputStream is = appArchive.getEntry(aModule.getAlternateDescriptor());
            DeploymentDescriptorFile ddFile = newArchivist.getStandardDDFile();
            ddFile.setXMLValidation(newArchivist.getXMLValidation());
            ddFile.setXMLValidationLevel(newArchivist.getXMLValidationLevel());
            if (appArchive.getURI() != null) {
                ddFile.setErrorReportingString(appArchive.getURI().getSchemeSpecificPart());
            }
            descriptor = (BundleDescriptor) ddFile.read(is);
            descriptor.setApplication(app);
            is.close();
            // TODO : JD need to be revisited for EAR files with Alternative descriptors, what does
            // it mean for sub components.
            Map<ExtensionsArchivist, RootDeploymentDescriptor> extensions = new HashMap<>();
            List<ExtensionsArchivist> extensionsArchivists = newArchivist.getExtensionArchivists();
            if (extensionsArchivists != null) {
                for (ExtensionsArchivist extension : extensionsArchivists) {
                    Object rdd = extension.open(newArchivist, embeddedArchive, descriptor);
                    if (rdd instanceof RootDeploymentDescriptor) {
                        extensions.put(extension, (RootDeploymentDescriptor) rdd);
                    }
                }
            }
            newArchivist.postStandardDDsRead(descriptor, embeddedArchive, extensions);
            newArchivist.readAnnotations(embeddedArchive, descriptor, extensions);
            newArchivist.postAnnotationProcess(descriptor, embeddedArchive);
            newArchivist.postOpen(descriptor, embeddedArchive);
            // Now reads the runtime deployment descriptor...
            if (isHandlingRuntimeInfo()) {
                readAlternativeRuntimeDescriptor(appArchive, embeddedArchive, newArchivist, descriptor, aModule.getAlternateDescriptor());
                // Read extensions runtime deployment descriptors if any
                for (Map.Entry<ExtensionsArchivist, RootDeploymentDescriptor> extension : extensions.entrySet()) {
                    // After standard DD and annotations are processed we should have an extension descriptor now
                    if (extension.getValue() != null) {
                        extension.getKey().readRuntimeDeploymentDescriptor(newArchivist, embeddedArchive, extension.getValue());
                    }
                }
            }
        } else {
            // Open the subarchive to get the deployment descriptor...
            descriptor = newArchivist.open(embeddedArchive, app);
        }
        embeddedArchive.close();
        if (descriptor != null) {
            descriptor.getModuleDescriptor().setArchiveUri(aModule.getArchiveUri());
            aModule.setModuleName(descriptor.getModuleDescriptor().getModuleName());
            aModule.setDescriptor(descriptor);
            descriptor.setApplication(app);
            aModule.setManifest(newArchivist.getManifest());
            // For optional application.xml case, set the context root as module name for web modules
            if (!appArchive.exists("META-INF/application.xml")) {
                if (aModule.getModuleType().equals(DOLUtils.warType())) {
                    WebBundleDescriptor wbd = (WebBundleDescriptor) descriptor;
                    if (wbd.getContextRoot() != null && !wbd.getContextRoot().equals("")) {
                        aModule.setContextRoot(wbd.getContextRoot());
                    } else {
                        aModule.setContextRoot(aModule.getModuleName());
                    }
                }
            }
        } else {
            // Display a message only if we had a handle on the sub archive
            return false;
        }
    }
    // don't get processed further
    for (ModuleDescriptor nonexistentModule : nonexistentModules) {
        app.removeModule(nonexistentModule);
    }
    return true;
}
Also used : DOLUtils.setExtensionArchivistForSubArchivist(com.sun.enterprise.deployment.util.DOLUtils.setExtensionArchivistForSubArchivist) HashMap(java.util.HashMap) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) DeploymentDescriptorFile(com.sun.enterprise.deployment.io.DeploymentDescriptorFile) ApplicationDeploymentDescriptorFile(com.sun.enterprise.deployment.io.ApplicationDeploymentDescriptorFile) ConfigurationDeploymentDescriptorFile(com.sun.enterprise.deployment.io.ConfigurationDeploymentDescriptorFile) ModuleDescriptor(org.glassfish.deployment.common.ModuleDescriptor) BundleDescriptor(com.sun.enterprise.deployment.BundleDescriptor) WebBundleDescriptor(com.sun.enterprise.deployment.WebBundleDescriptor) RootDeploymentDescriptor(org.glassfish.deployment.common.RootDeploymentDescriptor) WebBundleDescriptor(com.sun.enterprise.deployment.WebBundleDescriptor) ReadableArchive(org.glassfish.api.deployment.archive.ReadableArchive) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with DeploymentDescriptorFile

use of com.sun.enterprise.deployment.io.DeploymentDescriptorFile in project Payara by payara.

the class RegistrationSupport method getDeploymentDescriptor.

private String getDeploymentDescriptor(final BundleDescriptor bundleDesc) {
    final ArchivistFactory archivistFactory = J2EEInjectedValues.getInstance().getArchivistFactory();
    String dd = "unavailable";
    ByteArrayOutputStream out = null;
    try {
        final Archivist moduleArchivist = archivistFactory.getArchivist(bundleDesc.getModuleDescriptor().getModuleType());
        final DeploymentDescriptorFile ddFile = moduleArchivist.getStandardDDFile();
        out = new ByteArrayOutputStream();
        ddFile.write(bundleDesc, out);
        final String charsetName = "UTF-8";
        dd = out.toString(charsetName);
    } catch (final Exception e) {
        dd = null;
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (Exception ee) {
            }
        }
    }
    return dd;
}
Also used : Archivist(com.sun.enterprise.deployment.archivist.Archivist) ByteArrayOutputStream(java.io.ByteArrayOutputStream) DeploymentDescriptorFile(com.sun.enterprise.deployment.io.DeploymentDescriptorFile) ArchivistFactory(com.sun.enterprise.deployment.archivist.ArchivistFactory)

Aggregations

DeploymentDescriptorFile (com.sun.enterprise.deployment.io.DeploymentDescriptorFile)2 BundleDescriptor (com.sun.enterprise.deployment.BundleDescriptor)1 WebBundleDescriptor (com.sun.enterprise.deployment.WebBundleDescriptor)1 Archivist (com.sun.enterprise.deployment.archivist.Archivist)1 ArchivistFactory (com.sun.enterprise.deployment.archivist.ArchivistFactory)1 ApplicationDeploymentDescriptorFile (com.sun.enterprise.deployment.io.ApplicationDeploymentDescriptorFile)1 ConfigurationDeploymentDescriptorFile (com.sun.enterprise.deployment.io.ConfigurationDeploymentDescriptorFile)1 DOLUtils.setExtensionArchivistForSubArchivist (com.sun.enterprise.deployment.util.DOLUtils.setExtensionArchivistForSubArchivist)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 ReadableArchive (org.glassfish.api.deployment.archive.ReadableArchive)1 ModuleDescriptor (org.glassfish.deployment.common.ModuleDescriptor)1 RootDeploymentDescriptor (org.glassfish.deployment.common.RootDeploymentDescriptor)1