Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Jetty/Reference/jetty.xml syntax"
Line 502: | Line 502: | ||
== <Array> == | == <Array> == | ||
− | An Array element allows the creation of a new | + | An Array element allows the creation of a new array. |
=== Attributes === | === Attributes === | ||
Line 524: | Line 524: | ||
</source> | </source> | ||
− | == < | + | == <Item> == |
+ | An Item element defines an entry for [[#<Array>|Array]] and [[#<Map>|Map]] elements. | ||
+ | |||
=== Attributes === | === Attributes === | ||
+ | ; type : (optional), force the [[#Coercing Arguments to a Type|types]] of value. | ||
+ | ; id : (optional), unique identifier which can be used to refer to this item later on | ||
+ | |||
=== Can Contain === | === Can Contain === | ||
− | == | + | {{Jetty DTD Value}} |
+ | |||
+ | == <Map> == | ||
+ | A Map element allows the creation of a new HashMap and to populate it with (key, value) pairs. | ||
− | |||
=== Attributes === | === Attributes === | ||
+ | ; id : (optional), unique identifier you can use to refer to the map later on | ||
+ | |||
=== Can Contain === | === Can Contain === | ||
+ | [[#<Entry>|Entry]] | ||
+ | |||
=== Examples === | === Examples === | ||
+ | ==== Basic example ==== | ||
+ | <source lang="xml"> | ||
+ | <Map> | ||
+ | <Entry> | ||
+ | <Item>keyName</Item> | ||
+ | <Item><New class="java.lang.String"><Arg>value1</Arg></New></Item> | ||
+ | </Entry> | ||
+ | </Map> | ||
+ | </source> | ||
+ | |||
+ | This is equivalent to: | ||
+ | <source lang="java"> | ||
+ | Map m = new HashMap(); | ||
+ | m.put("keyName", new String("value1")); | ||
+ | </source> | ||
+ | |||
+ | == <Entry> == | ||
+ | An Entry element contains a key-value [[#<Item>|<Item>]] pair for a [[#<Map>|Map]]. | ||
+ | |||
+ | === Can Contain === | ||
+ | [[#<Item>|Item]] | ||
== <SystemProperty> == | == <SystemProperty> == |
Revision as of 03:00, 8 July 2009
{{Jetty Reference |introduction = The Jetty XML syntax is a straightforward mapping of XML elements to the Java API. Any getter, setter, or method can be invoked in the XML configuration files.
Contents
Basic Example
Here is an example of a file which uses the Jetty XML syntax (the example is extracted from etc/jetty.xml, available from your distribution, so it may look familiar):
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <!-- root element --> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <!-- using a setter on the server class --> <Set name="ThreadPool"> <!-- creating a new object, and customizing it after creation --> <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> </New> </Set> <!-- calling a non-setter/non-getter class, with arguments --> <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><SystemProperty name="jetty.host" /></Set> .... </New> </Arg> </Call> </Configure>
Overview
DTD and Parsing
The document type descriptor (DTD) describes all valid elements that can be used. The first two lines must reference the DTD, and you must substitute the appropriate class for the object you are trying to configure. See the appropriate jetty-*.xml references.
Jetty XML files are parsed by the org.eclipse.jetty.xml.XmlConfiguration class using the configure.dtd descriptor.
Method Calls
Java objects are configured by a sequence of <New>, <Set>, <Put> and <Call>
elements:
-
<Set name="Test">value</Set>
-
obj.setTest("value");
-
<Put name="Test">value</Put>
-
obj.put("Test","value");
-
<Call name="test"><Arg>value</Arg></Call>
-
obj.test("value");
-
<New class="com.acme.MyStuff"><Arg/></New>
-
new com.acme.MyStuff();
Coercing Arguments to a Type
Values are coerced to match method arguments on a best effort approach, but explicit types may also be specified with the type attribute. Supported values for type are:
String, Character, Short, Byte, Integer, Long, Boolean, Float, Double, char, short, byte, int, long, boolean, float, double, URL, InetAddress, InetAddrPort, void
For Java classes, you may use either the fully qualified class name, or just the class name.
Referring to a Class
If you do not specify the classname, Jetty will assume you are calling the method on this
. Otherwise, use the class attribute to specify the fully-qualified class name of an object to be configured. (You must always specify the class of the root Configure element.)
Referring to an Object
You can use the id attribute to store a reference to this object when first creating or referring to this object. You can then use the [[#[1]
</source>
This is equivalent to:
foo = getXFoo(); foo.setTest("1, 2, 3");
Ref versus nested elements
Here is an example of the difference in syntax between using the Ref element, and nesting method calls. Both are exactly equivalent:
<!-- using Ref in conjunction with Get --> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Get id="Logger" class="org.eclipse.jetty.util.log.Log" name="log"/> <Ref id="Logger"> <Set name="debugEnabled">true</Set> </Ref> </Configure>
<!-- calling the setter directly on the object returned by Get --> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Get class="org.eclipse.jetty.util.log.Log" name="log"> <Set name="debugEnabled">true</Set> </Get> </Configure>
Here is a more practical example, taken from the handler configuration section in etc/jetty.xml:
<Set name="handler"> <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.eclipse.jetty.server.Handler"> <Item> <!-- create a new instance of a ContextHandlerCollection named "Contexts" --> <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> </Item> <Item> <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/> </Item> <Item> <!-- create a new instance of a RequestLogHandler named "RequestLog"---> <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/> </Item> </Array> </Set> </New> </Set> <Call name="addBean"> <Arg> <New class="org.eclipse.jetty.deploy.ContextDeployer"> <!-- pass in the ContextHandlerCollection object ("Contexts") that was created earlier, as an argument --> <Set name="contexts"><Ref id="Contexts"/></Set> </New> </Arg> </Call> <!-- configure the RequestLogHandler object ("RequestLog") that we created earlier --> <Ref id="RequestLog"> .... </Ref>
<Array>
An Array element allows the creation of a new array.
Attributes
- type
- (optional), specify what types of items the array can contain
- id
- (optional), unique identifier you can use to refer to the array later on
Can Contain
Examples
Basic example
<Array type="java.lang.String"> <Item>value0</Item> <Item><New class="java.lang.String"><Arg>value1</Arg></New></Item> </Array>
This is equivalent to:
String[] a = new String[] { "value0", new String("value1") };
<Item>
An Item element defines an entry for Array and Map elements.
Attributes
- type
- (optional), force the types of value.
- id
- (optional), unique identifier which can be used to refer to this item later on
Can Contain
value text, <Get>, <Call>, <New>, <Ref>, <Array>, <Map>, <SystemProperty>, <Property>
<Map>
A Map element allows the creation of a new HashMap and to populate it with (key, value) pairs.
Attributes
- id
- (optional), unique identifier you can use to refer to the map later on
Can Contain
Examples
Basic example
<Map> <Entry> <Item>keyName</Item> <Item><New class="java.lang.String"><Arg>value1</Arg></New></Item> </Entry> </Map>
This is equivalent to:
Map m = new HashMap(); m.put("keyName", new String("value1"));
<Entry>
An Entry element contains a key-value <Item> pair for a Map.
Can Contain
<SystemProperty>
Attributes
Can Contain
Examples
<Property>
Attributes
Can Contain
Examples
| more =
- Jetty XML Usage
- jetty.xml, server configuration file
- jetty-web.xml, webapp configuration file
- jetty-env.xml, JNDI configuration file
}}
Cite error: <ref>
tags exist, but no <references/>
tag was found