Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2015-05-07 22:47:14 +0000
committerGreg Wilkins2015-05-07 22:47:38 +0000
commitdf61317f849c411ac8c5bfe5ac817a27cd086bfd (patch)
tree185b7f7612c9dad391e58769b29fd262f866877e /jetty-xml
parent33f153073c84e4ade76c7ffe75467bccb51fedce (diff)
downloadorg.eclipse.jetty.project-df61317f849c411ac8c5bfe5ac817a27cd086bfd.tar.gz
org.eclipse.jetty.project-df61317f849c411ac8c5bfe5ac817a27cd086bfd.tar.xz
org.eclipse.jetty.project-df61317f849c411ac8c5bfe5ac817a27cd086bfd.zip
466645 Allow XmlConfiguration Properties to use Elements or Attributes
implemented for Array and Map
Diffstat (limited to 'jetty-xml')
-rw-r--r--jetty-xml/src/main/java/org/eclipse/jetty/xml/XmlConfiguration.java26
-rw-r--r--jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_3.dtd7
-rw-r--r--jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlConfigurationTest.java5
-rw-r--r--jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithAttr.xml11
-rw-r--r--jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithElements.xml16
5 files changed, 48 insertions, 17 deletions
diff --git a/jetty-xml/src/main/java/org/eclipse/jetty/xml/XmlConfiguration.java b/jetty-xml/src/main/java/org/eclipse/jetty/xml/XmlConfiguration.java
index 053b7ab921..3e21d2083a 100644
--- a/jetty-xml/src/main/java/org/eclipse/jetty/xml/XmlConfiguration.java
+++ b/jetty-xml/src/main/java/org/eclipse/jetty/xml/XmlConfiguration.java
@@ -46,7 +46,6 @@ import java.util.Queue;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jetty.util.ArrayQueue;
@@ -58,7 +57,6 @@ import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.xml.XmlParser.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -429,6 +427,9 @@ public class XmlConfiguration
case "Array":
newArray(obj, node);
break;
+ case "Map":
+ newMap(obj,node);
+ break;
case "Ref":
refObj(obj, node);
break;
@@ -823,10 +824,13 @@ public class XmlConfiguration
*/
private Object newArray(Object obj, XmlParser.Node node) throws Exception
{
+ AttrOrElementNode aoeNode=new AttrOrElementNode(obj,node,"Id","Type","Item");
+ String id = aoeNode.getString("Id");
+ String type = aoeNode.getString("Type");
+ List<XmlParser.Node> items = aoeNode.getNodes("Item");
+
// Get the type
Class<?> aClass = java.lang.Object.class;
- String type = node.getAttribute("type");
- final String id = node.getAttribute("id");
if (type != null)
{
aClass = TypeUtil.fromName(type);
@@ -849,12 +853,11 @@ public class XmlConfiguration
}
}
}
-
+
Object al = null;
- for (Object nodeObject : node)
+ for (XmlParser.Node item : items)
{
- XmlParser.Node item = (Node)nodeObject;
String nid = item.getAttribute("id");
Object v = value(obj,item);
al = LazyList.add(al,(v == null && aClass.isPrimitive())?0:v);
@@ -873,17 +876,16 @@ public class XmlConfiguration
*/
private Object newMap(Object obj, XmlParser.Node node) throws Exception
{
- String id = node.getAttribute("id");
+ AttrOrElementNode aoeNode=new AttrOrElementNode(node,"Id","Entry");
+ String id = aoeNode.getString("Id");
+ List<XmlParser.Node> entries = aoeNode.getNodes("Entry");
Map<Object, Object> map = new HashMap<>();
if (id != null)
_configuration.getIdMap().put(id, map);
- for (Object o : node)
+ for (XmlParser.Node entry : entries)
{
- if (o instanceof String)
- continue;
- XmlParser.Node entry = (XmlParser.Node)o;
if (!entry.getTag().equals("Entry"))
throw new IllegalStateException("Not an Entry");
diff --git a/jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_3.dtd b/jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_3.dtd
index 3ae847f8c8..bcc3276cc8 100644
--- a/jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_3.dtd
+++ b/jetty-xml/src/main/resources/org/eclipse/jetty/xml/configure_9_3.dtd
@@ -30,6 +30,7 @@ my be specified if a match is not achieved.
<!ENTITY % DEFAULTATTR "default CDATA #IMPLIED" >
<!ENTITY % IDATTR "id ID #IMPLIED" >
<!ENTITY % ARGATTR "arg CDATA #IMPLIED" >
+<!ENTITY % ITEMATTR "item CDATA #IMPLIED" >
<!ENTITY % REFATTR "refid CDATA #IMPLIED" >
<!ENTITY % REQUIREDIDATTR "id ID #REQUIRED" >
@@ -192,8 +193,8 @@ are used for each element of the array:
This is equivalent to:
String[] a = new String[] { "value0", new String("value1") };
-->
-<!ELEMENT Array (Item*) >
-<!ATTLIST Array %TYPEATTR; %IDATTR; >
+<!ELEMENT Array (Id?,Type?,Item*) >
+<!ATTLIST Array %IDATTR;%TYPEATTR;%ITEMATTR; >
<!--
@@ -214,7 +215,7 @@ This is equivalent to:
Map m = new HashMap();
m.put("keyName", new String("value1"));
-->
-<!ELEMENT Map (Entry*) >
+<!ELEMENT Map (Id?,Entry*) >
<!ATTLIST Map %IDATTR; >
<!ELEMENT Entry (Item,Item) >
diff --git a/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlConfigurationTest.java b/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlConfigurationTest.java
index a32a6319c6..abb17b2eed 100644
--- a/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlConfigurationTest.java
+++ b/jetty-xml/src/test/java/org/eclipse/jetty/xml/XmlConfigurationTest.java
@@ -23,6 +23,7 @@ import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.Assert;
@@ -54,7 +55,6 @@ public class XmlConfigurationTest
@Test
public void testPassedObject() throws Exception
{
-
for (String configure : _configure)
{
Map<String,String> properties = new HashMap<>();
@@ -123,6 +123,9 @@ public class XmlConfigurationTest
assertEquals("static to field",tc.testField1,77);
assertEquals("field to field",tc.testField2,2);
assertEquals("literal to static",TestConfiguration.VALUE,42);
+
+ assertEquals("value0",((Map<String,String>)configuration.getIdMap().get("map")).get("key0"));
+ assertEquals("value1",((Map<String,String>)configuration.getIdMap().get("map")).get("key1"));
}
}
diff --git a/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithAttr.xml b/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithAttr.xml
index 55ef7a6e92..8377987bc8 100644
--- a/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithAttr.xml
+++ b/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithAttr.xml
@@ -121,6 +121,17 @@
<Set name="testField2"><Get name="testInt"/></Set>
<Set name="VALUE" type="int">42</Set>
+ <Map id="map">
+ <Entry>
+ <Item id="key0">key0</Item>
+ <Item id="value0">value0</Item>
+ </Entry>
+ <Entry>
+ <Item id="key1">key1</Item>
+ <Item id="value1">value1</Item>
+ </Entry>
+ </Map>
+
</Configure>
diff --git a/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithElements.xml b/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithElements.xml
index b65b58799a..e4fa88d41b 100644
--- a/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithElements.xml
+++ b/jetty-xml/src/test/resources/org/eclipse/jetty/xml/configureWithElements.xml
@@ -138,7 +138,9 @@
<Call>
<Name>call</Name>
- <Arg><Array type="int">
+ <Arg><Array>
+ <Id>array</Id>
+ <Type>int</Type>
<Item type="int">1</Item>
<Item type="int">2</Item>
<Item type="int">3</Item>
@@ -149,6 +151,18 @@
<Set name="testField1"><Get class="org.eclipse.jetty.xml.TestConfiguration" name="VALUE"/></Set>
<Set name="testField2"><Get name="testInt"/></Set>
<Set name="VALUE" type="int">42</Set>
+
+ <Map>
+ <Id>map</Id>
+ <Entry>
+ <Item id="key0">key0</Item>
+ <Item id="value0">value0</Item>
+ </Entry>
+ <Entry>
+ <Item id="key1">key1</Item>
+ <Item id="value1">value1</Item>
+ </Entry>
+ </Map>
</Configure>

Back to the top