[jboss-svn-commits] JBL Code SVN: r28495 - in labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss: soa/esb/listeners/config and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 27 09:50:28 EDT 2009


Author: tfennelly
Date: 2009-07-27 09:50:28 -0400 (Mon, 27 Jul 2009)
New Revision: 28495

Modified:
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/Servlet.java
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/web.xml.ftl
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java
   labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/util/DeploymentArchive.java
Log:
changing EBWS to use WebModel

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java	2009-07-27 13:50:28 UTC (rev 28495)
@@ -50,7 +50,7 @@
 
     public void updateDeployment(ConfigTree webEndpointConfig, WebDeploymentArchive webDeployment) throws ConfigurationException {
         String servletName = webEndpointConfig.getRequiredAttribute("name");
-        Servlet servlet = new Servlet(servletName, HttpGatewayServlet.class);
+        Servlet servlet = new Servlet(servletName, HttpGatewayServlet.class.getName());
 
         // Set the endpoint urlPattern so as to map requests from that namespace into
         // this servlet instance...

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/Servlet.java
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/Servlet.java	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/Servlet.java	2009-07-27 13:50:28 UTC (rev 28495)
@@ -37,13 +37,13 @@
 public class Servlet {
 
     private String name;
-    private Class<? extends HttpServlet> runtimeClass;
+    private String runtimeClass;
     private List<KeyValuePair> params = new ArrayList<KeyValuePair>();
     private List<String> urlMappings = new ArrayList<String>();
 
-    public Servlet(String name, Class<? extends HttpServlet> runtimeClass) {
+    public Servlet(String name, String runtimeClass) {
         AssertArgument.isNotNullAndNotEmpty(name, "name");
-        AssertArgument.isNotNull(runtimeClass, "runtimeClass");
+        AssertArgument.isNotNullAndNotEmpty(runtimeClass, "runtimeClass");
         this.name = name;
         this.runtimeClass = runtimeClass;
     }
@@ -52,7 +52,7 @@
         return name;
     }
 
-    public Class<? extends HttpServlet> getRuntimeClass() {
+    public String getRuntimeClass() {
         return runtimeClass;
     }
 

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebDeploymentArchive.java	2009-07-27 13:50:28 UTC (rev 28495)
@@ -79,16 +79,21 @@
         }
     }
 
-    public void addEntry(String path, InputStream data) {
+    public final void addEntry(String path, InputStream data) {
         assertNotFinalized();
         super.addEntry(path, data);
     }
 
-    public void addEntry(String path) {
+    public final void addEntry(String path, byte[] data) {
+        assertNotFinalized();
+        super.addEntry(path, data);
+    }
+
+    public final void addEntry(String path) {
         super.addEntry(path);
     }
 
-    public void addEntry(String path, String resource) throws IOException {
+    public final void addEntry(String path, String resource) throws IOException {
         super.addEntry(path, resource);
     }
 

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebModel.java	2009-07-27 13:50:28 UTC (rev 28495)
@@ -31,8 +31,13 @@
  */
 public class WebModel {
 
+    private List<Servlet> filters = new ArrayList<Servlet>();
     private List<Servlet> servlets = new ArrayList<Servlet>();
 
+    public List<Servlet> getFilters() {
+        return filters;
+    }
+
     public List<Servlet> getServlets() {
         return servlets;
     }

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/web.xml.ftl
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/web.xml.ftl	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/web.xml.ftl	2009-07-27 13:50:28 UTC (rev 28495)
@@ -4,12 +4,37 @@
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          version="2.5">
 
+    <#list webModel.filters as filter>
+
+    <!-- Filter '${filter.name}' configuration... -->
+    <filter>
+        <filter-name>${filter.name}</filter-name>
+        <filter-class>${filter.runtimeClass}</filter-class>
+
+        <#list filter.params as param>
+        <init-param>
+            <param-name>${param.key}</param-name>
+            <param-value>${param.value}</param-value>
+        </init-param>
+        </#list>
+
+    </filter>
+
+    <#list filter.urlMappings as urlMapping>
+    <filter-mapping>
+        <filter-name>${filter.name}</filter-name>
+        <url-pattern>${urlMapping}</url-pattern>
+    </filter-mapping>
+    </#list>
+    </#list>
+
+
     <#list webModel.servlets as servlet>
 
     <!-- Servlet '${servlet.name}' configuration... -->
     <servlet>
         <servlet-name>${servlet.name}</servlet-name>
-        <servlet-class>${servlet.runtimeClass.name}</servlet-class>
+        <servlet-class>${servlet.runtimeClass}</servlet-class>
 
         <#list servlet.params as param>
         <init-param>

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/listeners/config/JBoss4ESBDeployer.java	2009-07-27 13:50:28 UTC (rev 28495)
@@ -28,7 +28,6 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
 
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
@@ -49,6 +48,7 @@
 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.logging.Logger;
 import org.jboss.metadata.MetaData;
 import org.jboss.metadata.XmlFileLoader;
@@ -58,6 +58,7 @@
 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;
@@ -92,7 +93,7 @@
     
    /**
     * The path the the directory that will be used to generate the war file
-    * for EBWS deployments.
+    * for all web gateway deployments (EBWS and HTTP Gateways).
     */
    private String warFilesDir;
    
@@ -267,28 +268,8 @@
          // invoke super-class initialization
          super.init(di);
 
-         // create webservice WAR
-         final ClassLoader origCL = Thread.currentThread().getContextClassLoader() ;
-         final List<ContractReferencePublisher> publishers = new ArrayList<ContractReferencePublisher>() ;
-         final File warFile ;
-         try
-         {
-             Thread.currentThread().setContextClassLoader(di.localCl) ;
-             warFile = createWebserviceWars(di, model, deploymentName, publishers);
-         }
-         finally
-         {
-             Thread.currentThread().setContextClassLoader(origCL) ;
-         }
-         if (warFile != null)
-         {
-             deployment.setPublishers(publishers) ;
-             final URL warFileURL = warFile.toURL() ;
-             deployUrl(di, warFileURL, warFile.getName()) ;
-         }
-
-          // Deploy web gateways...
-          deployWebGateways(model, di);
+         // Deploy web gateways...
+         deployWebGateways(deployment, model, di);
       }
       catch (Exception e)
       {
@@ -431,24 +412,15 @@
       }
    }
 
-   private File createWebserviceWars(final DeploymentInfo di, final ModelAdapter model, final String deploymentName,
-       final List<ContractReferencePublisher> publishers)
+   private void createWebserviceWars(final DeploymentInfo di, final ModelAdapter model, final String deploymentName,
+                                     final List<ContractReferencePublisher> publishers, WebDeploymentArchive webDeployment)
        throws DeploymentException
    {
-       final String esbName = di.shortName;
        final List<WebserviceInfo> endpointServices =  model.getWebserviceServices() ;
        if (endpointServices != null)
        {
            if (endpointServices.size() > 0)
            {
-               final StringWriter filterDefinitions = new StringWriter() ;
-               final StringWriter filterMappings = new StringWriter() ;
-               final StringWriter servletDefinitions = new StringWriter() ;
-               final StringWriter servletMappings = new StringWriter() ;
-               
-               final ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
-               final ZipOutputStream zos = new ZipOutputStream(baos) ;
-               zos.setComment("ESB war file for exposing webservices: " + esbName) ;
                try
                {
                    final JAXWSProviderClassGenerator generator = new JAXWSProviderClassGenerator() ;
@@ -456,103 +428,54 @@
                    for(WebserviceInfo webserviceInfo: endpointServices)
                    {
                        final Service service = webserviceInfo.getService() ;
-                       
+
                        // Copy all schemas to the wsdl directory to support imports.
                        final File esbArchive = new File(di.watch.getFile());
                        final Map<String, String> schemasMap = JBoss4ESBDeployer.getSchemas(esbArchive);
                        final String wsdlDir = "WEB-INF/wsdl/" + service.getCategory().replace('/', '_') + "/";
                        for (Entry<String, String> schemaEntry : schemasMap.entrySet())
                        {
-                           try 
-                           {
-                               addFile(zos, wsdlDir + schemaEntry.getKey(), schemaEntry.getValue()) ;
-                               log.debug("Added schema " + wsdlDir + schemaEntry.getKey());
-                           }
-                           catch (final ZipException e)
-                           {
-                               log.debug(e.getMessage(), e);
-                           }
+                           webDeployment.addEntry(wsdlDir + schemaEntry.getKey(), schemaEntry.getValue().getBytes("UTF-8"));
+                           log.debug("Added schema " + wsdlDir + schemaEntry.getKey());
                        }
                        
                        final ESBServiceEndpointInfo serviceInfo = new ESBServiceEndpointInfo(webserviceInfo) ;
                        final String wsdl = ESBContractGenerator.generateWSDL(webserviceInfo, serviceInfo) ;
-                       addFile(zos, serviceInfo.getWSDLFileName(), wsdl) ;
-                       
+                       webDeployment.addEntry(serviceInfo.getWSDLFileName(), wsdl.getBytes("UTF-8"));
+
                        final String handlers = JBossDeployerUtil.getHandlers(serviceInfo) ;
                        final boolean includeHandlers = (handlers != null) ;
                        if (includeHandlers)
                        {
                            final String wsHandlerName = "WEB-INF/classes/" + serviceInfo.getPackageName().replace('.', '/') + "/esb-jaxws-handlers.xml" ;
-                           addFile(zos, wsHandlerName, handlers) ;
+                           webDeployment.addEntry(wsHandlerName, handlers.getBytes("UTF-8"));
                        }
                        
                        final byte[] wsClass = generator.generate(service.getCategory(),
                            service.getName(), serviceInfo, includeHandlers) ;
                        final String wsClassName = serviceInfo.getClassName().replace('.', '/') + ".class" ;
-                       addFile(zos, "WEB-INF/classes/" + wsClassName, wsClass) ;
+                       webDeployment.addEntry("WEB-INF/classes/" + wsClassName, wsClass);
 
                        // Filter...
                        // At the moment we only need the filter to overcome a bug in JBossWS re In-Only endpoints, so
                        // we only include for one way services...
                        if(serviceInfo.isOneWay()) {
                            String filterName = serviceInfo.getServletName() + "_Filter";
+                           Servlet filter = new Servlet(filterName, ESBResponseFilter.class.getName());
 
-                           filterDefinitions.append("<filter><filter-name>") ;
-                           filterDefinitions.append(filterName)  ;
-                           filterDefinitions.append("</filter-name><filter-class>") ;
-                           filterDefinitions.append(ESBResponseFilter.class.getName()) ;
-                           filterDefinitions.append("</filter-class>") ;
-                           filterDefinitions.append("<init-param><param-name>OneWay</param-name><param-value>true</param-value></init-param>") ;
-                           filterDefinitions.append("</filter>") ;
-
-                           filterMappings.append("<filter-mapping><filter-name>") ;
-                           filterMappings.append(filterName)  ;
-                           filterMappings.append("</filter-name><servlet-name>") ;
-                           filterMappings.append(serviceInfo.getServletName()) ;
-                           filterMappings.append("</servlet-name></filter-mapping>") ;
+                           filter.getParams().add(new KeyValuePair("OneWay", "true"));
+                           filter.getUrlMappings().add(serviceInfo.getServletName());
+                           webDeployment.getWebModel().getFilters().add(filter);
                        }
 
                        // Servlet....
-                       servletDefinitions.append("<servlet><servlet-name>") ;
-                       servletDefinitions.append(serviceInfo.getServletName())  ;
-                       servletDefinitions.append("</servlet-name><servlet-class>") ;
-                       servletDefinitions.append(serviceInfo.getClassName()) ;
-                       servletDefinitions.append("</servlet-class></servlet>") ;
+                       final Servlet servlet = new Servlet(serviceInfo.getServletName(), serviceInfo.getClassName());
+                       servlet.getUrlMappings().add(serviceInfo.getServletPath());
+                       webDeployment.getWebModel().getServlets().add(servlet);
                        
-                       servletMappings.append("<servlet-mapping><servlet-name>") ;
-                       servletMappings.append(serviceInfo.getServletName())  ;
-                       servletMappings.append("</servlet-name><url-pattern>") ;
-                       servletMappings.append(serviceInfo.getServletPath()) ;
-                       servletMappings.append("</url-pattern></servlet-mapping>") ;
-                       
                        final ContractReferencePublisher publisher = new ESBServiceContractPublisher(service, webserviceInfo.getDescription(), serviceInfo.getServletName()) ;
                        publishers.add(publisher) ;
                    }
-                   
-                   final StringWriter webXml = new StringWriter() ;
-                   webXml.append("<web-app xmlns=\"http://java.sun.com/xml/ns/j2ee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"") ;
-                   webXml.append(" xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\" version=\"2.4\">") ;
-                   webXml.append(filterDefinitions.getBuffer()) ;
-                   webXml.append(filterMappings.getBuffer()) ;
-                   webXml.append(servletDefinitions.getBuffer()) ;
-                   webXml.append(servletMappings.getBuffer()) ;
-                   webXml.append("</web-app>") ;
-                   
-                   addFile(zos, "WEB-INF/web.xml", webXml.toString()) ;
-                   
-                   final File warFile = getESBWarFile(deploymentName, esbName, true) ;
-                   
-                   zos.close() ;
-                   
-                   final FileOutputStream fos = new FileOutputStream(warFile) ;
-                   fos.write(baos.toByteArray()) ;
-                   fos.close() ;
-
-                   // Maintain a list of sub deployments so we can clean them
-                   // up on undeploy...
-                   getSubDeployments(di).add(warFile);
-
-                   return warFile ;
                }
                catch (final Exception ex)
                {
@@ -560,16 +483,29 @@
                }
            }
        }
-       return null ;
    }
 
-    private void deployWebGateways(ModelAdapter model, DeploymentInfo di) throws ConfigurationException, DeploymentException, JMException {
+    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();
         ClasspathDeploymentResourceLocator diResourceLocator = new ClasspathDeploymentResourceLocator(di.localCl);
-        WebDeploymentArchive webDeployment = new WebDeploymentArchive(di.shortName + "-http.war"); // TODO: update after merging EBWS !!
+        WebDeploymentArchive webDeployment = new WebDeploymentArchive(getESBWarFileName(di));
 
-        // Add everything to the webDeployment...
+        // Add the EBWS components...
+        final ClassLoader origCL = Thread.currentThread().getContextClassLoader() ;
+        try
+        {
+            Thread.currentThread().setContextClassLoader(di.localCl) ;
+            createWebserviceWars(di, model, deploymentName, publishers, webDeployment);
+        }
+        finally
+        {
+            Thread.currentThread().setContextClassLoader(origCL) ;
+        }
+
+        // Add the webDeployment...
         for(Map.Entry<String, List<ConfigTree>> listenerGroup : listenerGroupEntries) {
             String busIdRef = listenerGroup.getKey();
             List<ConfigTree> listeners = listenerGroup.getValue();
@@ -608,6 +544,8 @@
                 }
                 throw new ConfigurationException("Error deploying '" + file.getAbsolutePath() + "'.", throwable);
             }
+
+            deployment.setPublishers(publishers) ;
         }
     }
 
@@ -690,39 +628,13 @@
         return file;
     }
    
-   private File getESBWarFile(final String deploymentName, final String esbName, final boolean createDir)
+    private String getESBWarFileName(final DeploymentInfo di)
     {
-        final File esbDir = new File(esbWarFiles, deploymentName) ;
-        if (!esbDir.exists())
-        {
-            if (!createDir)
-            {
-                return null ;
-            }
-            esbDir.mkdir() ;
-        }
-        
+        final String esbName = di.shortName;
         final int lastSeparator = esbName.lastIndexOf('.') ;
-        final String warFileName = ((lastSeparator >= 0) ? esbName.substring(0, lastSeparator) : esbName) + ".war" ;
-        
-        return new File(esbDir, warFileName) ;
+        return ((lastSeparator >= 0) ? esbName.substring(0, lastSeparator) : esbName) + ".war" ;
     }
 
-   private void addFile(final ZipOutputStream zos, final String filename, final String contents)
-       throws IOException
-   {
-       addFile(zos, filename, contents.getBytes()) ;
-   }
-   
-   private void addFile(final ZipOutputStream zos, final String filename, final byte[] contents)
-       throws IOException
-   {
-       final ZipEntry entry = new ZipEntry(filename) ;
-       zos.putNextEntry(entry) ;
-       zos.write(contents) ;
-       zos.closeEntry() ;
-   }
-
    public synchronized void start(DeploymentInfo di)
            throws DeploymentException
    {

Modified: labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/util/DeploymentArchive.java
===================================================================
--- labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/util/DeploymentArchive.java	2009-07-27 13:49:49 UTC (rev 28494)
+++ labs/jbossesb/workspace/tfennelly/httpg2/product/rosetta/src/org/jboss/soa/esb/util/DeploymentArchive.java	2009-07-27 13:50:28 UTC (rev 28495)
@@ -81,6 +81,19 @@
     }
 
     /**
+     * Add the supplied data as an entry in the deployment.
+     *
+     * @param path The target path of the entry when added to the archive.
+     * @param data The data.
+     */
+    public void addEntry(String path, byte[] data) {
+        AssertArgument.isNotNullAndNotEmpty(path, "path");
+        AssertArgument.isNotNull(data, "data");
+
+        entries.put(trimLeadingSlash(path.trim()), data);
+    }
+
+    /**
      * Add an "empty" entry in the deployment.
      * <p/>
      * Equivalent to adding an empty folder.



More information about the jboss-svn-commits mailing list