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;
+ }
}
}