You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by rw...@apache.org on 2011/07/03 08:18:03 UTC
svn commit: r1142379 -
/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
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;
Re: svn commit: r1142379 - /geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
Posted by Rex Wang <rw...@gmail.com>.
Thanks Ivan!
I use the identifySpecDDSchemaVersion to replace the new added one in
TomcatModuleBuilder. commit at rev 1142573
2011/7/3 Ivan <xh...@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 <rw...@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
Re: svn commit: r1142379 - /geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
Posted by Ivan <xh...@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 <rw...@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