geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rex Wang <rwo...@gmail.com>
Subject Re: svn commit: r1142379 - /geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
Date Mon, 04 Jul 2011 07:23:19 GMT
Thanks Ivan!

I use the identifySpecDDSchemaVersion to replace the new added one in
TomcatModuleBuilder. commit at rev 1142573

2011/7/3 Ivan <xhhsld@gmail.com>

> Hi, Rex,  my two cents :-)
> a. Is it possible to move those common codes to the
> AbstractWebModuleBuilder, so that both Tomcat and Jetty could use it ?
> b. We have some util methods for IO operation, it might be used for close
> the stream, e.g. IOUtils.close(in);
>
> 2011/7/3 <rwonly@apache.org>
>
> Author: rwonly
>> Date: Sun Jul  3 06:18:02 2011
>> New Revision: 1142379
>>
>> URL: http://svn.apache.org/viewvc?rev=1142379&view=rev
>> Log:
>> GERONIMO-6024 support dd schema validation when deploy web app
>>
>> Modified:
>>
>>  geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
>>
>> Modified:
>> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
>> URL:
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?rev=1142379&r1=1142378&r2=1142379&view=diff
>>
>> ==============================================================================
>> ---
>> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
>> (original)
>> +++
>> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
>> Sun Jul  3 06:18:02 2011
>> @@ -30,6 +30,8 @@ import java.util.HashSet;
>>  import java.util.Map;
>>  import java.util.Set;
>>  import java.util.jar.JarFile;
>> +import java.util.regex.Matcher;
>> +import java.util.regex.Pattern;
>>
>>  import javax.servlet.Servlet;
>>  import javax.xml.bind.JAXBException;
>> @@ -99,6 +101,7 @@ import org.apache.geronimo.xbeans.geroni
>>  import
>> org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppDocument;
>>  import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppType;
>>  import
>> org.apache.geronimo.xbeans.geronimo.web.tomcat.config.GerTomcatDocument;
>> +import org.apache.openejb.jee.JavaeeSchema;
>>  import org.apache.openejb.jee.JaxbJavaee;
>>  import org.apache.openejb.jee.WebApp;
>>  import org.apache.xbean.osgi.bundle.util.BundleUtils;
>> @@ -269,6 +272,18 @@ public class TomcatModuleBuilder extends
>>         return module;
>>     }
>>
>> +    private boolean isSchemaDefined(String xmlFile, String definedTag){
>> +        // we need remove the comments first
>> +        Pattern commentsPattern = Pattern.compile("<!--(.*)-->",
>> Pattern.DOTALL);
>> +        Matcher commentsMatcher = commentsPattern.matcher(xmlFile);
>> +
>> +        Pattern schemaPattern = Pattern.compile("<(\\w*:)?" + definedTag
>> + "(.*)schemaLocation(.*)>", Pattern.DOTALL);
>> +        Matcher schemaMatcher =
>> schemaPattern.matcher(commentsMatcher.replaceAll(""));
>> +
>> +        return schemaMatcher.find();
>> +
>> +    }
>> +
>>     protected Module createModule(Object plan, JarFile moduleFile, String
>> targetPath, URL specDDUrl, Environment earEnvironment, String contextRoot,
>> Module parentModule, Naming naming, ModuleIDBuilder idBuilder) throws
>> DeploymentException {
>>         assert moduleFile != null : "moduleFile is null";
>>         assert targetPath != null : "targetPath is null";
>> @@ -285,21 +300,41 @@ public class TomcatModuleBuilder extends
>>             // read in the entire specDD as a string, we need this for
>> getDeploymentDescriptor
>>             // on the J2ee management object
>>             specDD = JarUtils.readAll(specDDUrl);
>> +
>> +            InputStream in = null;
>> +
>> +            // firstly validate the DD xml file, if it is defined by a
>> schema.
>> +            if (isSchemaDefined(specDD, "web-app")){
>> +                in = specDDUrl.openStream();
>> +                try {
>> +                    JaxbJavaee.validateJavaee(JavaeeSchema.WEB_APP_3_0,
>> in);
>> +                } catch (Exception e) {
>> +                    throw new DeploymentException("Error validate web.xml
>> for " + targetPath, e);
>> +                } finally {
>> +                    if (in != null)
>> +                        in.close();
>> +                }
>> +            }
>>
>>             // we found web.xml, if it won't parse that's an error.
>> -            InputStream in = specDDUrl.openStream();
>> +            in = specDDUrl.openStream();
>>             try {
>>                 webApp = (WebApp) JaxbJavaee.unmarshalJavaee(WebApp.class,
>> in);
>> +            } catch (Exception e) {
>> +                // Output the target path in the error to make it clearer
>> to the user which webapp
>> +                // has the problem. The targetPath is used, as moduleFile
>> may have an unhelpful
>> +                // value such as
>> C:\geronimo-1.1\var\temp\geronimo-deploymentUtil22826.tmpdir
>> +                throw new DeploymentException("Error unmarshal web.xml
>> for " + targetPath, e);
>>             } finally {
>> -                in.close();
>> +                if (in != null)
>> +                    in.close();
>>             }
>>
>> -        } catch (JAXBException e) {
>> -            // Output the target path in the error to make it clearer to
>> the user which webapp
>> -            // has the problem.  The targetPath is used, as moduleFile
>> may have an unhelpful
>> -            // value such as
>> C:\geronimo-1.1\var\temp\geronimo-deploymentUtil22826.tmpdir
>> -            throw new DeploymentException("Error parsing web.xml for " +
>> targetPath, e);
>>         } catch (Exception e) {
>> +            if (e instanceof DeploymentException) {
>> +                throw new DeploymentException(e);
>> +            }
>> +
>>             if (!moduleFile.getName().endsWith(".war")) {
>>                 //not for us
>>                 return null;
>>
>>
>>
>
>
> --
> Ivan
>



-- 
Lei Wang (Rex)
rwonly AT apache.org

Mime
View raw message