/* * JBoss, Home of Professional Open Source. * Copyright 2006, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.wsf.container.jboss50.deployment.metadata; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jboss.deployers.structure.spi.DeploymentUnit; import org.jboss.logging.Logger; import org.jboss.metadata.common.jboss.WebserviceDescriptionMetaData; import org.jboss.metadata.common.jboss.WebserviceDescriptionsMetaData; import org.jboss.metadata.ear.jboss.JBossAppMetaData; import org.jboss.metadata.ear.spec.ModuleMetaData; import org.jboss.metadata.ear.spec.WebModuleMetaData; import org.jboss.metadata.javaee.spec.ParamValueMetaData; import org.jboss.metadata.web.jboss.JBossServletsMetaData; import org.jboss.metadata.web.jboss.JBossWebMetaData; import org.jboss.metadata.web.spec.SecurityConstraintMetaData; import org.jboss.metadata.web.spec.ServletMappingMetaData; import org.jboss.metadata.web.spec.ServletMetaData; import org.jboss.metadata.web.spec.WebResourceCollectionMetaData; import org.jboss.metadata.web.spec.WebResourceCollectionsMetaData; import org.jboss.wsf.spi.deployment.Deployment; import org.jboss.wsf.spi.metadata.j2ee.JSEArchiveMetaData; import org.jboss.wsf.spi.metadata.j2ee.JSESecurityMetaData; import org.jboss.wsf.spi.metadata.j2ee.JSEArchiveMetaData.PublishLocationAdapter; import org.jboss.wsf.spi.metadata.j2ee.JSESecurityMetaData.JSEResourceCollection; /** * Build container independent web meta data * * @author Thomas.Diesler@jboss.org * @since 05-May-2006 */ public class JSEArchiveMetaDataAdapter { // logging support private static Logger log = Logger.getLogger(JSEArchiveMetaDataAdapter.class); public JSEArchiveMetaData buildMetaData(Deployment dep, DeploymentUnit unit) { String contextRoot = null; JBossWebMetaData jbossWebMetaData = unit.getAttachment(JBossWebMetaData.class); dep.addAttachment(JBossWebMetaData.class, jbossWebMetaData); if (unit.getParent() != null) { JBossAppMetaData appmd = unit.getParent().getAttachment(JBossAppMetaData.class); if (appmd != null) { ModuleMetaData module = appmd.getModule(dep.getSimpleName()); if (module != null) { WebModuleMetaData web = (WebModuleMetaData) module.getValue(); contextRoot = web.getContextRoot(); } } } if (contextRoot == null) contextRoot = jbossWebMetaData.getContextRoot(); JSEArchiveMetaData umd = new JSEArchiveMetaData(); umd.setContextRoot(contextRoot); umd.setServletMappings(getServletMappings(jbossWebMetaData)); umd.setServletClassNames(getServletClassMap(jbossWebMetaData)); umd.setSecurityDomain(jbossWebMetaData.getSecurityDomain()); umd.setPublishLocationAdapter(getPublishLocationAdpater(jbossWebMetaData)); umd.setSecurityMetaData(getSecurityMetaData(jbossWebMetaData.getSecurityContraints())); setConfigNameAndFile(umd, jbossWebMetaData); return umd; } private void setConfigNameAndFile(JSEArchiveMetaData umd, JBossWebMetaData jbossWebMetaData) { String configName = null; String configFile = null; WebserviceDescriptionsMetaData wsDescriptions = jbossWebMetaData.getWebserviceDescriptions(); if (wsDescriptions != null && wsDescriptions.size() > 1) log.warn("Multiple <webservice-description> elements not supported"); if (wsDescriptions != null && wsDescriptions.size() > 0) { WebserviceDescriptionMetaData wsd = wsDescriptions.iterator().next(); configName = wsd.getConfigName(); configFile = wsd.getConfigFile(); } List<ParamValueMetaData> contextParams = jbossWebMetaData.getContextParams(); if (contextParams != null) { for (ParamValueMetaData ctxParam : contextParams) { if (ctxParam.getParamName().equals("jbossws-config-name")) configName = ctxParam.getParamValue(); if (ctxParam.getParamName().equals("jbossws-config-file")) configFile = ctxParam.getParamValue(); } } umd.setConfigName(configName); umd.setConfigFile(configFile); } private PublishLocationAdapter getPublishLocationAdpater(final JBossWebMetaData wmd) { return new PublishLocationAdapter() { public String getWsdlPublishLocationByName(String name) { WebserviceDescriptionsMetaData wsdmd = wmd.getWebserviceDescriptions(); WebserviceDescriptionMetaData wsmd = wsdmd.get(name); String location = null; if (wsmd != null) location = wsmd.getWsdlPublishLocation(); return location; } }; } protected List<JSESecurityMetaData> getSecurityMetaData(final List<SecurityConstraintMetaData> securityConstraints) { ArrayList<JSESecurityMetaData> unifiedsecurityMetaData = new ArrayList<JSESecurityMetaData>(); if (securityConstraints != null) { for (SecurityConstraintMetaData securityMetaData : securityConstraints) { JSESecurityMetaData current = new JSESecurityMetaData(); unifiedsecurityMetaData.add(current); current.setTransportGuarantee(securityMetaData.getTransportGuarantee().name()); WebResourceCollectionsMetaData resources = securityMetaData.getResourceCollections(); for (WebResourceCollectionMetaData webResource : resources) { JSEResourceCollection currentResource = current.addWebResource(webResource.getName()); for (String currentPattern : webResource.getUrlPatterns()) { currentResource.addPattern(currentPattern); } } } } return unifiedsecurityMetaData; } private Map<String, String> getServletMappings(JBossWebMetaData wmd) { Map<String, String> mappings = new HashMap<String, String>(); List<ServletMappingMetaData> smappings = wmd.getServletMappings(); if (smappings != null) { for(ServletMappingMetaData mapping : smappings) { // FIXME - Add support for multiple mappings mappings.put(mapping.getServletName(), mapping.getUrlPatterns().get(0)); } } return mappings; } private Map<String, String> getServletClassMap(JBossWebMetaData wmd) { Map<String, String> mappings = new HashMap<String, String>(); JBossServletsMetaData servlets = wmd.getServlets(); if (servlets != null) { for (ServletMetaData servlet : servlets) { // Skip JSPs if (servlet.getServletClass() == null || servlet.getServletClass().length() == 0) continue; mappings.put(servlet.getName(), servlet.getServletClass()); } } return mappings; } }