[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