You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/11/11 15:04:58 UTC

svn commit: r1407990 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys: SaxOpenejb.java StackHandler.java

Author: dblevins
Date: Sun Nov 11 14:04:57 2012
New Revision: 1407990

URL: http://svn.apache.org/viewvc?rev=1407990&view=rev
Log:
TOMEE-567 - Check for invalid attributes in tomee.xml file

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java?rev=1407990&r1=1407989&r2=1407990&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java Sun Nov 11 14:04:57 2012
@@ -17,6 +17,7 @@
 package org.apache.openejb.config.sys;
 
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.Join;
 import org.apache.openejb.util.Saxs;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -32,6 +33,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Plain Java code for parsing a tomee.xml or openejb.xml file
@@ -83,7 +86,8 @@ class SaxOpenejb extends StackHandler {
         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             if (localName.equals("openejb")) push(new Root());
             else if (localName.equals("tomee")) push(new Root());
-            else throw new IllegalStateException("Unsupported Element: " + localName);
+            else throw new SAXException("Unsupported Element: " + localName);
+            checkAttributes(attributes);
         }
     }
 
@@ -95,6 +99,7 @@ class SaxOpenejb extends StackHandler {
         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             deployments.setDir(attributes.getValue("dir"));
             deployments.setJar(attributes.getValue("jar"));
+            checkAttributes(attributes, "dir", "jar");
         }
 
         @Override
@@ -110,7 +115,7 @@ class SaxOpenejb extends StackHandler {
         }
 
         @Override
-        public void startElement(String uri, String localName, String qName, Attributes attributes) {
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             super.startElement(uri, localName, qName, attributes);
             final String ctype = attributes.getValue("ctype");
             if (ctype != null) service.setType(ctype);
@@ -121,6 +126,13 @@ class SaxOpenejb extends StackHandler {
             openejb.getContainer().add(service);
             super.endElement(uri, localName, qName);
         }
+
+        @Override
+        protected List<String> getAttributes() {
+            final List<String> attributes = super.getAttributes();
+            attributes.add("ctype");
+            return attributes;
+        }
     }
 
     public class SecurityServiceElement extends ServiceElement<SecurityService> {
@@ -194,6 +206,7 @@ class SaxOpenejb extends StackHandler {
         @Override
         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             path = attributes.getValue("path");
+            checkAttributes(attributes, "path");
         }
 
         @Override

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java?rev=1407990&r1=1407989&r2=1407990&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java Sun Nov 11 14:04:57 2012
@@ -17,10 +17,13 @@
  */
 package org.apache.openejb.config.sys;
 
+import org.apache.openejb.util.Join;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
@@ -38,6 +41,26 @@ public class StackHandler extends Defaul
         return handlers.remove(0);
     }
 
+    protected void checkAttributes(Attributes attributes, String... allowed) throws SAXException {
+        checkAttributes(attributes, new ArrayList(Arrays.asList(allowed)));
+    }
+
+    protected void checkAttributes(Attributes attributes, List<String> allowed) throws SAXException {
+
+        final List<String> invalid = new ArrayList<String>();
+
+        for (int i = 0; i < attributes.getLength(); i++) {
+            if (!allowed.contains(attributes.getLocalName(i))) {
+                invalid.add(attributes.getLocalName(i));
+            }
+        }
+
+        if (invalid.size() > 0) {
+            throw new SAXException("Unsupported Attribute(s): "+ Join.join(", ", invalid) +".  Supported Attributes are: "+Join.join(", ", allowed) + ".  If the setting is a configuration property it must be placed inside the element body.");
+        }
+    }
+
+
     protected void push(DefaultHandler handler) {
         if (DEBUG) {
             for (int i = 0; i < handlers.size(); i++) {
@@ -81,7 +104,7 @@ public class StackHandler extends Defaul
 
         private StringBuilder characters = new StringBuilder();
 
-        public void startElement(String uri, String localName, String qName, Attributes attributes) {
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             characters = new StringBuilder();
         }
 
@@ -106,7 +129,7 @@ public class StackHandler extends Defaul
         }
 
         @Override
-        public void startElement(String uri, String localName, String qName, Attributes attributes) {
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{
             if (attributes.getValue("type") != null) service.setType(attributes.getValue("type"));
             if (attributes.getValue("jar") != null) service.setJar(attributes.getValue("jar"));
             if (attributes.getValue("provider") != null) service.setProvider(attributes.getValue("provider"));
@@ -114,6 +137,19 @@ public class StackHandler extends Defaul
             if (attributes.getValue("class-name") != null) service.setClassName(attributes.getValue("class-name"));
             if (attributes.getValue("constructor") != null) service.setConstructor(attributes.getValue("constructor"));
             if (attributes.getValue("factory-name") != null) service.setFactoryName(attributes.getValue("factory-name"));
+            checkAttributes(attributes, getAttributes());
+        }
+
+        protected List<String> getAttributes() {
+            List<String> attributes = new ArrayList<String>();
+            attributes.add("type");
+            attributes.add("jar");
+            attributes.add("provider");
+            attributes.add("id");
+            attributes.add("class-name");
+            attributes.add("constructor");
+            attributes.add("factory-name");
+            return attributes;
         }
 
         @Override
@@ -135,7 +171,7 @@ public class StackHandler extends Defaul
         }
 
         @Override
-        public void startElement(String uri, String localName, String qName, Attributes attributes) {
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             super.startElement(uri, localName, qName, attributes);
             service.setJndi(attributes.getValue("jndi"));
         }
@@ -145,6 +181,13 @@ public class StackHandler extends Defaul
             resources.add(service);
             super.endElement(uri, localName, qName);
         }
+
+        @Override
+        protected List<String> getAttributes() {
+            final List<String> attributes = super.getAttributes();
+            attributes.add("jndi");
+            return attributes;
+        }
     }
 
     public class DeclaredServiceElement extends ServiceElement<Service> {
@@ -156,7 +199,7 @@ public class StackHandler extends Defaul
         }
 
         @Override
-        public void startElement(String uri, String localName, String qName, Attributes attributes) {
+        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
             super.startElement(uri, localName, qName, attributes);
             service.setClazz(attributes.getValue("class"));
         }
@@ -166,5 +209,12 @@ public class StackHandler extends Defaul
             services.add(service); // TODO: add it only once
             super.endElement(uri, localName, qName);
         }
+
+        @Override
+        protected List<String> getAttributes() {
+            final List<String> attributes = super.getAttributes();
+            attributes.add("class");
+            return attributes;
+        }
     }
 }