[jboss-svn-commits] JBL Code SVN: r29310 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/internal/soa/esb/listeners/war and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 11 07:43:25 EDT 2009


Author: tfennelly
Date: 2009-09-11 07:43:24 -0400 (Fri, 11 Sep 2009)
New Revision: 29310

Added:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java
Modified:
   labs/jbossesb/trunk/product/install/esb-deployers-jboss-beans.xml
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/HttpGatewayMapper.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployer.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployerUnitTest.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2827
Add support for new HttpGateway on AS5 deployer code

Modified: labs/jbossesb/trunk/product/install/esb-deployers-jboss-beans.xml
===================================================================
--- labs/jbossesb/trunk/product/install/esb-deployers-jboss-beans.xml	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/install/esb-deployers-jboss-beans.xml	2009-09-11 11:43:24 UTC (rev 29310)
@@ -38,7 +38,9 @@
 		<property name="actionArtifactsFile">/actionArtifactMap.properties</property>
 	</bean>
 
-	<bean name="EsbWebServiceDeployer" class="org.jboss.soa.esb.listeners.deployers.mc.EsbWebServiceDeployer"/>
+	<bean name="EsbWebServiceDeployer" class="org.jboss.soa.esb.listeners.deployers.mc.EsbWebServiceDeployer">
+        <depends>jboss.esb:service=PropertyService</depends>
+    </bean>
 
 	<bean name="EsbWsdlDeployer" class="org.jboss.soa.esb.listeners.deployers.mc.EsbWsdlDeployer"/>
 

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -37,9 +37,9 @@
     public static final String AUTH_METHOD = "authMethod";
     public static final String AUTH_DOMAIN = "authDomain";
 
-    public void updateDeployment(ConfigTree webEndpointConfig, WebDeploymentArchive webDeployment) throws ConfigurationException {
+    public void updateWebModel(ConfigTree webEndpointConfig, WebModel webModel) throws ConfigurationException {
         String servletName = webEndpointConfig.getRequiredAttribute("name");
-        Servlet servlet = new Servlet(servletName, HttpGatewayServlet.class.getName(), webDeployment.getWebModel());
+        Servlet servlet = new Servlet(servletName, HttpGatewayServlet.class.getName(), webModel);
 
         // Set the endpoint urlPattern so as to map requests from that namespace into
         // this servlet instance...
@@ -66,8 +66,8 @@
         // and reset by multiple listeners, but the auth method source config should be the
         // same for them all.  Also, we throw an exception from inside the WebModel if an attempt
         // is made to reset it to something else...
-        webDeployment.getWebModel().setAuthMethod(webEndpointConfig.getAttribute(AUTH_METHOD));
-        webDeployment.getWebModel().setAuthDomain(webEndpointConfig.getAttribute(AUTH_DOMAIN));
+        webModel.setAuthMethod(webEndpointConfig.getAttribute(AUTH_METHOD));
+        webModel.setAuthDomain(webEndpointConfig.getAttribute(AUTH_DOMAIN));
     }
 
     private void addSecurityConstraints(ConfigTree webEndpointConfig, Servlet servlet) {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -22,9 +22,7 @@
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.internal.soa.esb.listeners.war.HttpGatewayDeploymentFactory;
-import org.jboss.soa.esb.listeners.config.DeploymentResourceLocator;
 import org.jboss.logging.Logger;
-import org.jboss.internal.soa.esb.listeners.war.WebDeploymentArchive;
 
 /**
  * Web Gateway Deployment Factory.
@@ -33,13 +31,13 @@
 public interface WebGatewayDeploymentFactory {
 
     /**
-     * Get the deployment archives to be deployed.
+     * Update the {@link WebModel} based on the supplied web endpoint configuration.
      * @param webEndpointConfig The web endpoint configuration.
-     * @param webDeployment The web deployment archive to be updated.
+     * @param webModel The Web Model to be updated.
      * @return The deployment archives.
      * @throws ConfigurationException Failed to create the Deployment Archives. 
      */
-    public void updateDeployment(ConfigTree webEndpointConfig, WebDeploymentArchive webDeployment) throws ConfigurationException;
+    public void updateWebModel(ConfigTree webEndpointConfig, WebModel webModel) throws ConfigurationException;
 
     /**
      * Factory builder.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -45,11 +45,7 @@
 import org.jboss.internal.soa.esb.webservice.ESBServiceContractPublisher;
 import org.jboss.internal.soa.esb.webservice.ESBServiceEndpointInfo;
 import org.jboss.internal.soa.esb.webservice.JAXWSProviderClassGenerator;
-import org.jboss.internal.soa.esb.assertion.AssertArgument;
-import org.jboss.internal.soa.esb.listeners.war.WebDeploymentArchive;
-import org.jboss.internal.soa.esb.listeners.war.WebGatewayDeploymentFactory;
-import org.jboss.internal.soa.esb.listeners.war.Servlet;
-import org.jboss.internal.soa.esb.listeners.war.Filter;
+import org.jboss.internal.soa.esb.listeners.war.*;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.MetaData;
 import org.jboss.metadata.XmlFileLoader;
@@ -59,18 +55,13 @@
 import org.jboss.soa.esb.Service;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.helpers.ConfigTree;
-import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.lifecycle.LifecycleResourceManager;
 import org.jboss.soa.esb.listeners.config.model.ModelAdapter;
-import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.util.FileUtil;
 import org.jboss.soa.esb.util.DeploymentArchive;
 import org.jboss.system.ServiceControllerMBean;
 import org.jboss.web.AbstractWebContainer;
 import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
 
 /**
  * comment
@@ -492,32 +483,17 @@
     private void deployWebGateways(JBoss4ESBDeployment deployment, ModelAdapter model, DeploymentInfo di) throws ConfigurationException, DeploymentException, JMException {
         final String deploymentName = deployment.getDeploymentName() ;
         final List<ContractReferencePublisher> publishers = new ArrayList<ContractReferencePublisher>() ;
-        Map<String, List<ConfigTree>> listenerGroups = getListenerGroups(model);
-        Set<Map.Entry<String, List<ConfigTree>>> listenerGroupEntries = listenerGroups.entrySet();
         WebDeploymentArchive webDeployment = new WebDeploymentArchive(getESBWarFileName(di));
+        WebModel webModel = webDeployment.getWebModel();
 
         // Add the EBWS components...
         createWebserviceWars(di, model, deploymentName, publishers, webDeployment);
 
-        // Add the webDeployment...
-        for(Map.Entry<String, List<ConfigTree>> listenerGroup : listenerGroupEntries) {
-            String busIdRef = listenerGroup.getKey();
-            List<ConfigTree> listeners = listenerGroup.getValue();
+        // Add the web deployments info to the WebModel...
+        ModelUtil.updateWebModel(ModelUtil.getListenerGroups(model), webModel);
 
-            String gatewayClass = listeners.get(0).getAttribute(ListenerTagNames.GATEWAY_CLASS_TAG);
-            if(gatewayClass != null) {
-                WebGatewayDeploymentFactory deploymentFactory = WebGatewayDeploymentFactory.FactoryBuilder.createInstance(gatewayClass);
-
-                if(deploymentFactory != null) {
-                    // For each listener...
-                    for(ConfigTree listenerConfig : listeners) {
-                        deploymentFactory.updateDeployment(listenerConfig, webDeployment);
-                    }
-                }
-            }
-        }
-
-        if(!webDeployment.getWebModel().getServlets().isEmpty()) {
+        // Add a sub-deloyment for the web model...
+        if(!webModel.getServlets().isEmpty()) {
             // Finalize the webDeployment...
             webDeployment.finalizeArchive();
 
@@ -540,41 +516,6 @@
         }
     }
 
-    /**
-     * Get the lister groups (by busIdRef) in this configuration model.
-     * <p/>
-     * Only looks at gateways at the moment.
-     *
-     * @param model The configuration model.
-     * @return A {@link Map} containing Lists of listener configurations, by busIdRef.
-     * @throws org.jboss.soa.esb.ConfigurationException Unable to convert the model to a DOM.
-     */
-    private Map<String, List<ConfigTree>> getListenerGroups(ModelAdapter model) throws ConfigurationException {
-        Map<String, List<ConfigTree>> listenerGroups = new LinkedHashMap<String, List<ConfigTree>>();
-        Document gatewayConfig = model.generateGatewayConfig();
-        NodeList nodeList = gatewayConfig.getDocumentElement().getChildNodes();
-        int count = nodeList.getLength();
-
-        for(int i = 0; i < count; i++) {
-            Node child = nodeList.item(i);
-
-            if(child.getNodeType() == Node.ELEMENT_NODE) {
-                Element listenerElement = (Element) child;
-                String busIdRef = listenerElement.getAttribute(ListenerTagNames.BUSIDREF_ATTRIBUTE_TAG);
-
-                List<ConfigTree> listenerGroup = listenerGroups.get(busIdRef);
-
-                if(listenerGroup == null) {
-                    listenerGroup = new ArrayList<ConfigTree>();
-                    listenerGroups.put(busIdRef, listenerGroup);
-                }
-                listenerGroup.add(ConfigTree.fromElement(listenerElement));
-            }
-        }
-
-        return listenerGroups;
-    }
-
     private File createGatewayTempDeployment(DeploymentArchive deploymentArchive, DeploymentInfo di) throws ConfigurationException {
 
         File gatewayDeployFile = createTempDeploymentFile(esbWarFiles, deploymentArchive.getArchiveName(), true);

Added: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -0,0 +1,103 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.listeners.config;
+
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.config.model.ModelAdapter;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.internal.soa.esb.listeners.war.WebModel;
+import org.jboss.internal.soa.esb.listeners.war.WebGatewayDeploymentFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.w3c.dom.Element;
+
+import java.util.*;
+
+/**
+ * ESB configuration model utility methods.
+ * 
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public abstract class ModelUtil {
+
+    /**
+     * Get the lister groups (by busIdRef) in the supplied configuration model.
+     * <p/>
+     * Only looks at gateways at the moment.
+     *
+     * @param model The configuration model.
+     * @return A {@link java.util.Map} containing Lists of listener configurations, by busIdRef.
+     * @throws org.jboss.soa.esb.ConfigurationException Unable to convert the model to a DOM.
+     */
+    public static Map<String, List<ConfigTree>> getListenerGroups(ModelAdapter model) throws ConfigurationException {
+        Map<String, List<ConfigTree>> listenerGroups = new LinkedHashMap<String, List<ConfigTree>>();
+        Document gatewayConfig = model.generateGatewayConfig();
+        NodeList nodeList = gatewayConfig.getDocumentElement().getChildNodes();
+        int count = nodeList.getLength();
+
+        for(int i = 0; i < count; i++) {
+            Node child = nodeList.item(i);
+
+            if(child.getNodeType() == Node.ELEMENT_NODE) {
+                Element listenerElement = (Element) child;
+                String busIdRef = listenerElement.getAttribute(ListenerTagNames.BUSIDREF_ATTRIBUTE_TAG);
+
+                List<ConfigTree> listenerGroup = listenerGroups.get(busIdRef);
+
+                if(listenerGroup == null) {
+                    listenerGroup = new ArrayList<ConfigTree>();
+                    listenerGroups.put(busIdRef, listenerGroup);
+                }
+                listenerGroup.add(ConfigTree.fromElement(listenerElement));
+            }
+        }
+
+        return listenerGroups;
+    }
+
+    /**
+     * Update the supplied {@link org.jboss.internal.soa.esb.listeners.war.WebModel} based on the supplied listener group
+     * configurations.
+     * @param listenerGroups Listener group configurations, keyed by busrefid.
+     * @param webModel The webmodel to be updated.
+     * @throws org.jboss.soa.esb.ConfigurationException A Configuration exception occured mapping data onto
+     * the WebModel.
+     */
+    public static void updateWebModel(Map<String, List<ConfigTree>> listenerGroups, WebModel webModel) throws ConfigurationException {
+        Set<Map.Entry<String, List<ConfigTree>>> listenerGroupEntries = listenerGroups.entrySet();
+        for(Map.Entry<String, List<ConfigTree>> listenerGroup : listenerGroupEntries) {
+            List<ConfigTree> listeners = listenerGroup.getValue();
+
+            String gatewayClass = listeners.get(0).getAttribute(ListenerTagNames.GATEWAY_CLASS_TAG);
+            if(gatewayClass != null) {
+                WebGatewayDeploymentFactory deploymentFactory = WebGatewayDeploymentFactory.FactoryBuilder.createInstance(gatewayClass);
+
+                if(deploymentFactory != null) {
+                    // For each listener...
+                    for(ConfigTree listenerConfig : listeners) {
+                        deploymentFactory.updateWebModel(listenerConfig, webModel);
+                    }
+                }
+            }
+        }
+    }
+}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/HttpGatewayMapper.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/HttpGatewayMapper.java	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/HttpGatewayMapper.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -179,15 +179,8 @@
         // The mappings file is a .properties file containing exception-to-status-code mappings...
         String mappingsFile = exceptionConfig.getMappingsFile();
         if(mappingsFile != null) {
-            Properties mappings = loadExceptionMappings(mappingsFile);
-            Set<Map.Entry<Object, Object>> entries = mappings.entrySet();
-
-            for(Map.Entry<Object, Object> entry : entries) {
-                exceptionMappingsAttrBuilder.append(entry.getKey().toString().trim());
-                exceptionMappingsAttrBuilder.append("=");
-                exceptionMappingsAttrBuilder.append(entry.getValue().toString().trim());
-                exceptionMappingsAttrBuilder.append(",");
-            }
+            exceptionMappingsAttrBuilder.append(mappingsFile);
+            exceptionMappingsAttrBuilder.append(",");
         }
 
         // We add the exception mappings as a CSV list of exception class name and status
@@ -211,21 +204,24 @@
 
         for(String mappingDecl : mappingDecls) {
             String[] mappingTokens = mappingDecl.split("=");
-            if(mappingTokens.length != 2) {
-                throw new ConfigurationException("Invalid Exception Status Mapping mapping declaration '" + mappingDecl + "'.  Expected a '<exception>=<status>' Key Value Pair.");
+            if(mappingTokens.length == 1) {
+                loadExceptionMappings(mappingTokens[0], mappings);
+            } else if(mappingTokens.length == 2) {
+                try {
+                    mappings.put(mappingTokens[0], Integer.valueOf(mappingTokens[1]));
+                } catch(NumberFormatException e) {
+                    throw new ConfigurationException("Invalid Exception Status Mapping mapping declaration '" + mappingDecl + "'.  Status code value '" + mappingTokens[1] + "' not a valid integer.");
+                }
+            } else {
+                throw new ConfigurationException("Invalid Exception Status Mapping mapping declaration '" + mappingDecl + "'.  Expected either an exception mapping file name, or a '<exception>=<status>' Key Value Pair.");
             }
-            try {
-                mappings.put(mappingTokens[0], Integer.valueOf(mappingTokens[1]));
-            } catch(NumberFormatException e) {
-                throw new ConfigurationException("Invalid Exception Status Mapping mapping declaration '" + mappingDecl + "'.  Status code value '" + mappingTokens[1] + "' not a valid integer.");
-            }
         }
 
         return mappings;
     }
 
-    private static Properties loadExceptionMappings(String mappingsFile) throws ConfigurationException {
-        Properties mappings = new Properties();
+    private static void loadExceptionMappings(String mappingsFile, Map<String, Integer> mappings) throws ConfigurationException {
+        Properties mappingProperties = new Properties();
         InputStream stream = ClassUtil.getResourceAsStream(mappingsFile, HttpGatewayMapper.class);
 
         if(stream == null) {
@@ -233,7 +229,7 @@
         }
 
         try {
-            mappings.load(stream);
+            mappingProperties.load(stream);
         } catch (IOException e) {
             throw new ConfigurationException("Error reading Exception to HTTP Status code mappings file '" + mappingsFile + "'.", e);
         } finally {
@@ -244,6 +240,13 @@
             }
         }
 
-        return mappings;
+        Set<Map.Entry<Object, Object>> entries = mappingProperties.entrySet();
+        for(Map.Entry<Object, Object> entry : entries) {
+            try {
+                mappings.put((String) entry.getKey(), Integer.valueOf((String) entry.getValue()));
+            } catch(NumberFormatException e) {
+                throw new ConfigurationException("Invalid Exception Status Mapping mapping '" + entry.getKey() + "=" + entry.getValue() + "'.  Status code value '" + entry.getValue() + "' not a valid integer.");
+            }
+        }
     }
 }
\ No newline at end of file

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployer.java	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployer.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -37,17 +37,24 @@
 import org.jboss.internal.soa.esb.webservice.ESBServiceEndpointInfo;
 import org.jboss.internal.soa.esb.webservice.JAXWSProviderClassGenerator;
 import org.jboss.internal.soa.esb.webservice.WebServicePublishException;
+import org.jboss.internal.soa.esb.listeners.war.WebModel;
+import org.jboss.internal.soa.esb.listeners.war.Filter;
+import org.jboss.internal.soa.esb.listeners.war.Servlet;
+import org.jboss.internal.soa.esb.listeners.war.SecurityConstraints;
 import org.jboss.metadata.common.jboss.WebserviceDescriptionMetaData;
 import org.jboss.metadata.common.jboss.WebserviceDescriptionsMetaData;
 import org.jboss.metadata.javaee.spec.ParamValueMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRolesMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRoleMetaData;
 import org.jboss.metadata.web.jboss.JBossServletMetaData;
 import org.jboss.metadata.web.jboss.JBossServletsMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
-import org.jboss.metadata.web.spec.FilterMetaData;
-import org.jboss.metadata.web.spec.FiltersMetaData;
-import org.jboss.metadata.web.spec.ServletMappingMetaData;
+import org.jboss.metadata.web.spec.*;
 import org.jboss.soa.esb.Service;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.listeners.config.WebserviceInfo;
+import org.jboss.soa.esb.listeners.config.ModelUtil;
 import org.jboss.soa.esb.listeners.deployers.mc.util.VfsUtil;
 import org.jboss.virtual.MemoryFileFactory;
 import org.jboss.virtual.VirtualFile;
@@ -111,18 +118,22 @@
     @Override
     public void deploy(final VFSDeploymentUnit unit, final EsbMetaData esbMetaData) throws DeploymentException
     {
+        boolean webMetaDataCreated = false;
+        final JBossWebMetaData webMetaData = new JBossWebMetaData();
+        final JBossServletsMetaData servlets = new JBossServletsMetaData();
+        final List<ServletMappingMetaData> servletMappings = new ArrayList<ServletMappingMetaData>();
+        final FiltersMetaData filters = new FiltersMetaData();
+        final List<FilterMappingMetaData> filterMappings = new ArrayList<FilterMappingMetaData>();
+        final List<ContractReferencePublisher> publishers = new ArrayList<ContractReferencePublisher>() ;
+        final List<SecurityConstraintMetaData> securityConstraintsMDs = new ArrayList<SecurityConstraintMetaData>();
+        final WebserviceDescriptionsMetaData descriptions = new WebserviceDescriptionsMetaData();
+
         final List<WebserviceInfo> webServices = esbMetaData.getModel().getWebserviceServices();
         if (hasWebServices(webServices))
         {
-            log.debug("Deploying webservices for : " + esbMetaData.getDeploymentName());
-            
-            final JBossWebMetaData webMetaData = new JBossWebMetaData();
-            final JBossServletsMetaData servlets = new JBossServletsMetaData();
-            final List<ServletMappingMetaData> servletMappings = new ArrayList<ServletMappingMetaData>();
-            final FiltersMetaData filters = new FiltersMetaData();
-            final List<ContractReferencePublisher> publishers = new ArrayList<ContractReferencePublisher>() ;
-            final WebserviceDescriptionsMetaData descriptions = new WebserviceDescriptionsMetaData();
-                
+            webMetaDataCreated = true;
+            log.debug("Deploying webservices for : " + esbMetaData.getDeploymentName());            
+
             try
             {
                 // Create an in-memory file system.
@@ -161,7 +172,9 @@
                         
                     if (serviceInfo.isOneWay())
                     {
-                        filters.add(createFilter(serviceInfo));
+                        FilterMetaData filter = createFilter(serviceInfo);
+                        filters.add(filter);
+                        filterMappings.add(createFilterMapping(serviceInfo, filter));
                     }
                     
                     final Service service = wsInfo.getService();
@@ -175,7 +188,7 @@
                     VfsUtil.addFile(classesUrl, servletClassName, servletClass);
                     log.debug("Generated ServletImpl '" + servletClassUrl + "'");
                         
-                    servlets.add(createServlets(service, serviceInfo, generator, includeHandlers));
+                    servlets.add(createServlets(serviceInfo, generator, includeHandlers));
                     servletMappings.add(createServletMapping(serviceInfo));
                     
                     final WebserviceDescriptionMetaData description = new WebserviceDescriptionMetaData();
@@ -192,26 +205,101 @@
             {
                 throw new DeploymentException("Failed to create webservice artifact", e);
             }
-                
+        }
+
+        WebModel webModel = new WebModel(esbMetaData.getArchiveName());
+        try {
+            ModelUtil.updateWebModel(ModelUtil.getListenerGroups(esbMetaData.getModel()), webModel);
+        } catch (ConfigurationException e) {
+            throw new DeploymentException("Failed to capture web metadata from ESB configuration.", e);
+        }
+        
+        // Add the filters...
+        for(Filter filter : webModel.getFilters()) {
+            webMetaDataCreated = true;
+            filters.add(createFilter(filter));
+            filterMappings.add(createFilterMapping(filter));
+        }
+
+        // Add the Servlets...
+        for(Servlet servlet : webModel.getServlets()) {
+            webMetaDataCreated = true;
+            servlets.add(createServlet(servlet));
+            servletMappings.add(createServletMapping(servlet));
+
+            SecurityConstraints securityConstraints = servlet.getSecurityConstraints();
+            if(securityConstraints != null) {
+                SecurityConstraintMetaData securityConstraintMD = new SecurityConstraintMetaData();
+
+                securityConstraintsMDs.add(securityConstraintMD);
+                securityConstraintMD.setDisplayName("Constraints for servlet '" + servlet.getName() + "'.");
+
+                // Add the resource details...
+                WebResourceCollectionsMetaData resources = new WebResourceCollectionsMetaData();
+                WebResourceCollectionMetaData resource = new WebResourceCollectionMetaData();
+                resources.add(resource);
+                securityConstraintMD.setResourceCollections(resources);
+                resource.setHttpMethods(new ArrayList(securityConstraints.getProtectedMethods()));
+                resource.setUrlPatterns(servlet.getUrlMappings());
+
+                // Add the Auth Constraint...
+                if(!securityConstraints.getAllowedRoles().isEmpty()) {
+                    AuthConstraintMetaData constraint = new AuthConstraintMetaData();
+                    constraint.setRoleNames(new ArrayList(securityConstraints.getAllowedRoles()));
+                    securityConstraintMD.setAuthConstraint(constraint);
+                }
+
+                // Add the User Constraint...
+                if(securityConstraints.getTransportGuarantee() != null) {
+                    UserDataConstraintMetaData constraint = new UserDataConstraintMetaData();
+                    constraint.setTransportGuarantee(TransportGuaranteeType.valueOf(securityConstraints.getTransportGuarantee()));
+                    securityConstraintMD.setUserDataConstraint(constraint);
+                }
+            }
+        }
+
+        if(webModel.getAuthMethod() != null) {
+            LoginConfigMetaData loginConfig = new LoginConfigMetaData();
+            loginConfig.setAuthMethod(webModel.getAuthMethod());
+            loginConfig.setRealmName("Authentication Realm for '" + esbMetaData.getArchiveName() + "'");
+            webMetaData.setLoginConfig(loginConfig);
+        }
+        if(webModel.getAuthDomain() != null) {
+            webMetaData.setSecurityDomain(webModel.getAuthDomain());
+        }
+        if(!webModel.getSecurityRoles().isEmpty()) {
+            SecurityRolesMetaData secRolesMetaData = new SecurityRolesMetaData();
+            webMetaData.setSecurityRoles(secRolesMetaData);
+            for(String role : webModel.getSecurityRoles()) {
+                SecurityRoleMetaData secRoleMetaData = new SecurityRoleMetaData();
+                secRoleMetaData.setRoleName(role);
+                secRolesMetaData.add(secRoleMetaData);
+            }
+        }
+
+        if(webMetaDataCreated) {
             webMetaData.setContextRoot(esbMetaData.getDeploymentName());
             webMetaData.setServlets(servlets);
             webMetaData.setServletMappings(servletMappings);
             webMetaData.setFilters(filters);
+            webMetaData.setFilterMappings(filterMappings);
             webMetaData.setWebserviceDescriptions(descriptions);
+            webMetaData.setSecurityContraints(securityConstraintsMDs);
+
             esbMetaData.setPublishers(publishers);
-            
+
             unit.addAttachment(JBossWebMetaData.class, webMetaData);
         }
     }
-    
+
     @Override
-    public void undeploy(final VFSDeploymentUnit unit, final EsbMetaData esbMetaData) 
+    public void undeploy(final VFSDeploymentUnit unit, final EsbMetaData esbMetaData)
     {
         try
         {
             removeVirtualFile(unit, DYNAMIC_CL_DIR_KEY);
             removeVirtualFile(unit, DYNAMIC_WEBINF_CL_DIR_KEY);
-        } 
+        }
         finally
         {
             try
@@ -225,7 +313,7 @@
             }
         }
     }
-    
+
     private void removeVirtualFile(final VFSDeploymentUnit unit, final String attachmenKey)
     {
         final VirtualFile file = unit.removeAttachment(attachmenKey, VirtualFile.class);
@@ -234,7 +322,7 @@
             unit.removeClassPath(file);
         }
     }
-    
+
     private void removeFromClassPath(final VFSDeploymentUnit unit, final String attachmentKey)
     {
         final URL url = unit.removeAttachment(attachmentKey, URL.class);
@@ -243,7 +331,7 @@
             MemoryFileFactory.delete(url);
         }
     }
-    
+
     private boolean hasWebServices(final List<WebserviceInfo> endpointServices)
     {
         return endpointServices != null && endpointServices.size() > 0;
@@ -253,11 +341,11 @@
     {
         final ServletMappingMetaData mapping = new ServletMappingMetaData();
         mapping.setServletName(serviceInfo.getServletName());
-        mapping.setUrlPatterns(Arrays.asList(new String[] { serviceInfo.getServletPath()}));
+        mapping.setUrlPatterns(Arrays.asList(new String[] { "/ebws" + serviceInfo.getServletPath()}));
         return mapping;
     }
 
-    private JBossServletMetaData createServlets(final Service service, final ESBServiceEndpointInfo serviceInfo, final JAXWSProviderClassGenerator generator, final boolean includeHandlers) throws WebServicePublishException
+    private JBossServletMetaData createServlets(final ESBServiceEndpointInfo serviceInfo, final JAXWSProviderClassGenerator generator, final boolean includeHandlers) throws WebServicePublishException
     {
         final JBossServletMetaData servlet = new JBossServletMetaData();
         servlet.setServletName(serviceInfo.getServletName());
@@ -272,7 +360,7 @@
         final FilterMetaData filter = new FilterMetaData();
         filter.setFilterName(serviceInfo.getServletName() + "_Filter");
         filter.setFilterClass(ESBResponseFilter.class.getName());
-                            
+
         // Set up the initparam 'OneWay'
         final ParamValueMetaData oneWayInitParam = new ParamValueMetaData();
         oneWayInitParam.setParamName("OneWay");
@@ -280,4 +368,70 @@
         filter.setInitParam(Arrays.asList(new ParamValueMetaData[] {oneWayInitParam}));
         return filter;
     }
+
+    private FilterMappingMetaData createFilterMapping(ESBServiceEndpointInfo serviceInfo, FilterMetaData filter) {
+        FilterMappingMetaData mapping = new FilterMappingMetaData();
+        mapping.setFilterName(filter.getFilterName());
+        mapping.setServletNames(Arrays.asList(new String[] {serviceInfo.getServletName()}));
+        return mapping;
+    }
+
+    private JBossServletMetaData createServlet(Servlet servlet) {
+        JBossServletMetaData servletMD = new JBossServletMetaData();
+
+        servletMD.setServletName(servlet.getName());
+        servletMD.setServletClass(servlet.getRuntimeClass());
+        servletMD.setLoadOnStartup(1);
+
+        List<ParamValueMetaData> initParamsMetaData = createParamsMetaData(servlet.getParams());
+        if(initParamsMetaData != null) {
+            servletMD.setInitParam(initParamsMetaData);
+        }
+
+        return servletMD;
+    }
+
+    private ServletMappingMetaData createServletMapping(Servlet servlet) {
+        final ServletMappingMetaData mapping = new ServletMappingMetaData();
+        mapping.setServletName(servlet.getName());
+        mapping.setUrlPatterns(servlet.getUrlMappings());
+        return mapping;
+    }
+
+    private FilterMetaData createFilter(final Filter filter)
+    {
+        FilterMetaData filterMetaData = new FilterMetaData();
+
+        filterMetaData.setFilterName(filter.getName());
+        filterMetaData.setFilterClass(filter.getRuntimeClass());
+
+        List<ParamValueMetaData> initParamsMetaData = createParamsMetaData(filter.getParams());
+        if(initParamsMetaData != null) {
+            filterMetaData.setInitParam(initParamsMetaData);
+        }
+
+        return filterMetaData;
+    }
+
+    private List<ParamValueMetaData> createParamsMetaData(List<KeyValuePair> initParams) {
+        List<ParamValueMetaData> initParamsMetaData = null;
+        if(!initParams.isEmpty()) {
+            initParamsMetaData = new ArrayList<ParamValueMetaData>();
+            for(KeyValuePair initParam : initParams) {
+                ParamValueMetaData initParamMetaData = new ParamValueMetaData();
+
+                initParamMetaData.setParamName(initParam.getKey());
+                initParamMetaData.setParamValue(initParam.getValue());
+                initParamsMetaData.add(initParamMetaData);
+            }
+        }
+        return initParamsMetaData;
+    }
+
+    private FilterMappingMetaData createFilterMapping(Filter filter) {
+        FilterMappingMetaData mapping = new FilterMappingMetaData();
+        mapping.setFilterName(filter.getName());
+        mapping.setServletNames(Arrays.asList(new String[] {filter.getTargetServlet().getName()}));
+        return mapping;
+    }
 }

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployerUnitTest.java	2009-09-11 10:14:24 UTC (rev 29309)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/deployers/mc/EsbWebServiceDeployerUnitTest.java	2009-09-11 11:43:24 UTC (rev 29310)
@@ -85,7 +85,7 @@
         assertEquals(1, mappings.size());
         assertEquals("FirstServiceESB_SimpleListener", mappings.get(0).getServletName());
         assertEquals(1, mappings.get(0).getUrlPatterns().size());
-        assertEquals("/FirstServiceESB/SimpleListener", mappings.get(0).getUrlPatterns().get(0));
+        assertEquals("/ebws/FirstServiceESB/SimpleListener", mappings.get(0).getUrlPatterns().get(0));
     }
     
     public void testServletAddedToClassPath() throws Throwable



More information about the jboss-svn-commits mailing list