You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/08/14 00:27:37 UTC

[01/25] incubator-juneau-website git commit: Add @RestHook support.

Repository: incubator-juneau-website
Updated Branches:
  refs/heads/asf-site 58c75a058 -> 84931d4db


http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/HookEvent.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/HookEvent.html b/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/HookEvent.html
new file mode 100644
index 0000000..54908bb
--- /dev/null
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/HookEvent.html
@@ -0,0 +1,491 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.rest.annotation;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import java.io.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import java.util.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import java.util.logging.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import javax.servlet.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import javax.servlet.http.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.juneau.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.juneau.dto.swagger.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.juneau.http.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.juneau.ini.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.internal.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.rest.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.utils.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * Identifies servlet and REST call lifecycle events which cause {@link RestHook @RestHook}-annotated Java methods<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * to be called.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> */<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public enum HookEvent {<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>   /**<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    * Identifies a method that should be called immediately after the &lt;code&gt;HttpServlet.service(HttpServletRequest, HttpServletResponse)&lt;/code&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    * method is called.<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    *<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    * &lt;p&gt;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    * Note that you only have access to the raw request and response objects at this point.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    *<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    * &lt;p&gt;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    * The list of valid parameter types are as follows:<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    * &lt;ul&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    *    &lt;li&gt;Servlet request/response objects:<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    *       &lt;ul&gt;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    *          &lt;li&gt;{@link HttpServletRequest}<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    *          &lt;li&gt;{@link HttpServletResponse}<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    *       &lt;/ul&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    * &lt;/ul&gt;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    *<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    * &lt;p class='bcode'&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    *    &lt;jk&gt;public class&lt;/jk&gt; MyResource &lt;jk&gt;extends&lt;/jk&gt; RestServletDefault {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    *<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    *       &lt;jc&gt;// Add a request attribute to all incoming requests.&lt;/jc&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;START_CALL&lt;/jsf&gt;)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    *       &lt;jk&gt;public void&lt;/jk&gt; onStartCall(HttpServletRequest req) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    *          req.setAttribute(&lt;js&gt;"foobar"&lt;/js&gt;, &lt;jk&gt;new&lt;/jk&gt; FooBar());<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    *       }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    *    }<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    * &lt;/p&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    *<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    * &lt;ul class='spaced-list'&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    *    &lt;li&gt;Multiple START_CALL methods can be defined on a class.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    *       &lt;br&gt;START_CALL methods on parent classes are invoked before START_CALL methods on child classes.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    *       &lt;br&gt;The order of START_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    *    &lt;li&gt;The method can throw any exception.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    *       &lt;br&gt;{@link RestException RestExceptions} can be thrown to cause a particular HTTP error status code.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    *       &lt;br&gt;All other exceptions cause an HTTP 500 error status code.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    *       overridden by the child class.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    * &lt;/ul&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   START_CALL,<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>   /**<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    * Identifies a method that gets called immediately before the &lt;ja&gt;@RestMethod&lt;/ja&gt; annotated method gets called.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    *<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    * &lt;p&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    * At this point, the {@link RestRequest} object has been fully initialized, and all {@link RestGuard} and<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * {@link RestMatcher} objects have been called.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    * &lt;p&gt;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    * The list of valid parameter types are as follows:<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    * &lt;ul&gt;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    *    &lt;li&gt;Servlet request/response objects:<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    *       &lt;ul&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    *          &lt;li&gt;{@link HttpServletRequest}<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    *          &lt;li&gt;{@link HttpServletResponse}<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    *       &lt;/ul&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    *    &lt;li&gt;Extended request/response objects:<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *       &lt;ul&gt;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    *          &lt;li&gt;{@link RestRequest}<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    *          &lt;li&gt;{@link RestResponse}<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    *       &lt;/ul&gt;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *    &lt;li&gt;Header objects:<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    *       &lt;ul&gt;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    *          &lt;li&gt;{@link Accept}<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    *          &lt;li&gt;{@link AcceptCharset}<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    *          &lt;li&gt;{@link AcceptEncoding}<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    *          &lt;li&gt;{@link AcceptLanguage}<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    *          &lt;li&gt;{@link Authorization}<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *          &lt;li&gt;{@link CacheControl}<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    *          &lt;li&gt;{@link Connection}<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    *          &lt;li&gt;{@link ContentLength}<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    *          &lt;li&gt;{@link ContentType}<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    *          &lt;li&gt;{@link org.apache.juneau.http.Date}<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *          &lt;li&gt;{@link Expect}<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    *          &lt;li&gt;{@link From}<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *          &lt;li&gt;{@link Host}<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    *          &lt;li&gt;{@link IfMatch}<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    *          &lt;li&gt;{@link IfModifiedSince}<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    *          &lt;li&gt;{@link IfNoneMatch}<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *          &lt;li&gt;{@link IfRange}<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    *          &lt;li&gt;{@link IfUnmodifiedSince}<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    *          &lt;li&gt;{@link MaxForwards}<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *          &lt;li&gt;{@link Pragma}<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    *          &lt;li&gt;{@link ProxyAuthorization}<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    *          &lt;li&gt;{@link Range}<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    *          &lt;li&gt;{@link Referer}<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    *          &lt;li&gt;{@link TE}<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    *          &lt;li&gt;{@link UserAgent}<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    *          &lt;li&gt;{@link Upgrade}<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    *          &lt;li&gt;{@link Via}<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    *          &lt;li&gt;{@link Warning}<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    *          &lt;li&gt;{@link TimeZone}<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    *       &lt;/ul&gt;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *    &lt;li&gt;Other objects:<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    *       &lt;ul&gt;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    *          &lt;li&gt;{@link ResourceBundle}<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *          &lt;li&gt;{@link MessageBundle}<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *          &lt;li&gt;{@link InputStream}<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *          &lt;li&gt;{@link ServletInputStream}<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    *          &lt;li&gt;{@link Reader}<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    *          &lt;li&gt;{@link OutputStream}<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    *          &lt;li&gt;{@link ServletOutputStream}<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    *          &lt;li&gt;{@link Writer}<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    *          &lt;li&gt;{@link RequestHeaders}<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *          &lt;li&gt;{@link RequestQuery}<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    *          &lt;li&gt;{@link RequestFormData}<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *          &lt;li&gt;{@link HttpMethod}<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *          &lt;li&gt;{@link Logger}<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    *          &lt;li&gt;{@link JuneauLogger}<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    *          &lt;li&gt;{@link RestContext}<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *          &lt;li&gt;{@link org.apache.juneau.parser.Parser}<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    *          &lt;li&gt;{@link Locale}<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    *          &lt;li&gt;{@link Swagger}<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    *          &lt;li&gt;{@link RequestPathMatch}<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    *          &lt;li&gt;{@link RequestBody}<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    *          &lt;li&gt;{@link ConfigFile}<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    *          &lt;li&gt;{@link UriContext}<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    *          &lt;li&gt;{@link UriResolver}<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    *       &lt;/ul&gt;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * &lt;/ul&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    *<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    * &lt;p class='bcode'&gt;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    *    &lt;jk&gt;public class&lt;/jk&gt; MyResource &lt;jk&gt;extends&lt;/jk&gt; RestServletDefault {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    *       &lt;jc&gt;// Log the incoming request.&lt;/jc&gt;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;PRE_CALL&lt;/jsf&gt;)<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    *       &lt;jk&gt;public void&lt;/jk&gt; onPreCall(Accept accept, Logger logger) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    *          logger.fine(&lt;js&gt;"Accept {0} header found."&lt;/js&gt;, accept);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    *       }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    *    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    * &lt;/p&gt;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    *<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    * &lt;ul class='spaced-list'&gt;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    *    &lt;li&gt;Multiple PRE_CALL methods can be defined on a class.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    *       &lt;br&gt;PRE_CALL methods on parent classes are invoked before PRE_CALL methods on child classes.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    *       &lt;br&gt;The order of PRE_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    *    &lt;li&gt;The method can throw any exception.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    *       &lt;br&gt;{@link RestException RestExceptions} can be thrown to cause a particular HTTP error status code.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    *       &lt;br&gt;All other exceptions cause an HTTP 500 error status code.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *       overridden by the child class.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    *    &lt;li&gt;It's advisable not to mess around with the HTTP body itself since you may end up consuming the body<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    *       before the actual REST method has a chance to use it.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    * &lt;/ul&gt;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   PRE_CALL,<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>   /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    * Identifies a method that gets called immediately after the &lt;ja&gt;@RestMethod&lt;/ja&gt; annotated method gets called.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    *<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    * &lt;p&gt;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * At this point, the output object returned by the method call has been set on the response, but<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    * {@link RestConverter RestConverters} have not yet been executed and the response has not yet been written.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    *<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    * &lt;p&gt;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    * The list of valid parameter types are the same as {@link #PRE_CALL}.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    *<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    * &lt;p class='bcode'&gt;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    *    &lt;jk&gt;public class&lt;/jk&gt; MyResource &lt;jk&gt;extends&lt;/jk&gt; RestServletDefault {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    *       &lt;jc&gt;// Log the result of the request.&lt;/jc&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;POST_CALL&lt;/jsf&gt;)<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *       &lt;jk&gt;public void&lt;/jk&gt; onPostCall(RestResponse res, Logger logger) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *          logger.fine(&lt;js&gt;Output {0} was set on the response."&lt;/js&gt;, res.getOutput());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *       }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    *    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    * &lt;/p&gt;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    *<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    * &lt;ul class='spaced-list'&gt;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    *    &lt;li&gt;Multiple POST_CALL methods can be defined on a class.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    *       &lt;br&gt;POST_CALL methods on parent classes are invoked before POST_CALL methods on child classes.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    *       &lt;br&gt;The order of POST_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    *    &lt;li&gt;The method can throw any exception, although at this point it is too late to set an HTTP error status code.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    *       overridden by the child class.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    * &lt;/ul&gt;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   POST_CALL,<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>   /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    * Identifies a method that gets called right before we exit the servlet service method.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    *<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    * &lt;p&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    * At this point, the output has been written and flushed.<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    *<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * &lt;p&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * The list of valid parameter types are as follows:<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * &lt;ul&gt;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    *    &lt;li&gt;Servlet request/response objects:<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    *       &lt;ul&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    *          &lt;li&gt;{@link HttpServletRequest}<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    *          &lt;li&gt;{@link HttpServletResponse}<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    *       &lt;/ul&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    * &lt;/ul&gt;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    *<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    * &lt;p&gt;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    * The following attributes are set on the {@link HttpServletRequest} object that can be useful for logging purposes:<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    * &lt;ul&gt;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    *    &lt;li&gt;&lt;js&gt;"Exception"&lt;/js&gt; - Any exceptions thrown during the request.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    *    &lt;li&gt;&lt;js&gt;"ExecTime"&lt;/js&gt; - Execution time of the request.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    * &lt;/ul&gt;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    *<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    * &lt;p class='bcode'&gt;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    *    &lt;jk&gt;public class&lt;/jk&gt; MyResource &lt;jk&gt;extends&lt;/jk&gt; RestServletDefault {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    *<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    *       &lt;jc&gt;// Log the time it took to execute the request.&lt;/jc&gt;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;END_CALL&lt;/jsf&gt;)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    *       &lt;jk&gt;public void&lt;/jk&gt; onEndCall(RestRequest req, Logger logger) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    *          Exception e = (Exception)req.getAttribute(&lt;js&gt;"Exception"&lt;/js&gt;);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    *          Long execTime = (Long)req.getAttribute(&lt;js&gt;"ExecTime"&lt;/js&gt;);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    *          &lt;jk&gt;if&lt;/jk&gt; (e != &lt;jk&gt;null&lt;/jk&gt;)<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    *             logger.warn(e, &lt;js&gt;"Request failed in {0}ms."&lt;/js&gt;, execTime);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    *          &lt;jk&gt;else&lt;/jk&gt;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    *             logger.fine(&lt;js&gt;"Request finished in {0}ms."&lt;/js&gt;, execTime);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    *       }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    *    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    * &lt;/p&gt;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    *<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    * &lt;ul class='spaced-list'&gt;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    *    &lt;li&gt;Multiple END_CALL methods can be defined on a class.<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    *       &lt;br&gt;END_CALL methods on parent classes are invoked before END_CALL methods on child classes.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    *       &lt;br&gt;The order of END_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    *    &lt;li&gt;The method can throw any exception, although at this point it is too late to set an HTTP error status code.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    *       overridden by the child class.<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    * &lt;/ul&gt;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   END_CALL,<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>   /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    * Identifies a method that gets called during servlet initialization.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    *<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    * &lt;p&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    * This method is called from within the {@link Servlet#init(ServletConfig)} method after the {@link RestConfig}<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    * object has been created and initialized with the annotations defined on the class, but before the<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    * {@link RestContext} object has been created.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    *<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    * &lt;p&gt;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    * The only valid parameter type for this method is {@link RestConfig} which can be used to configure the servlet.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    *<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    * &lt;p&gt;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    * An example of this is the &lt;code&gt;PetStoreResource&lt;/code&gt; class that uses an init method to perform initialization<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    * of an internal data structure.<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    *<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * &lt;p class='bcode'&gt;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    *    &lt;jk&gt;public class&lt;/jk&gt; PetStoreResource &lt;jk&gt;extends&lt;/jk&gt; ResourceJena {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    *<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    *       &lt;jc&gt;// Our database.&lt;/jc&gt;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    *       &lt;jk&gt;private&lt;/jk&gt; Map&lt;Integer,Pet&gt; &lt;jf&gt;petDB&lt;/jf&gt;;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;INIT&lt;/jsf&gt;)<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    *       &lt;jk&gt;public void&lt;/jk&gt; onInit(RestConfig config) &lt;jk&gt;throws&lt;/jk&gt; Exception {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    *          &lt;jc&gt;// Load our database from a local JSON file.&lt;/jc&gt;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    *          &lt;jf&gt;petDB&lt;/jf&gt; = JsonParser.&lt;jsf&gt;DEFAULT&lt;/jsf&gt;.parse(getClass().getResourceAsStream(&lt;js&gt;"PetStore.json"&lt;/js&gt;), LinkedHashMap.&lt;jk&gt;class&lt;/jk&gt;, Integer.&lt;jk&gt;class&lt;/jk&gt;, Pet.&lt;jk&gt;class&lt;/jk&gt;);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    *       }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    *    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    * &lt;/p&gt;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    *<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    * &lt;ul class='spaced-list'&gt;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    *    &lt;li&gt;Multiple INIT methods can be defined on a class.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    *       &lt;br&gt;INIT methods on parent classes are invoked before INIT methods on child classes.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    *       &lt;br&gt;The order of INIT method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    *    &lt;li&gt;The method can throw any exception causing initialization of the servlet to fail.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    *       overridden by the child class.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    * &lt;/ul&gt;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   INIT,<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>   /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    * Identifies a method that gets called immediately after servlet initialization.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    *<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    * &lt;p&gt;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    * This method is called from within the {@link Servlet#init(ServletConfig)} method after the {@link RestContext}<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    * object has been created.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    *<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    * &lt;p&gt;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    * The only valid parameter type for this method is {@link RestContext} which can be used to retrieve information<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    * about the servlet.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    *<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    * &lt;ul class='spaced-list'&gt;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    *    &lt;li&gt;Multiple POST_INIT methods can be defined on a class.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    *       &lt;br&gt;POST_INIT methods on parent classes are invoked before POST_INIT methods on child classes.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    *       &lt;br&gt;The order of POST_INIT method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    *    &lt;li&gt;The method can throw any exception causing initialization of the servlet to fail.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    *       overridden by the child class.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    * &lt;/ul&gt;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   POST_INIT,<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>   /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    * Identical to {@link #POST_INIT} except the order of execution is child-resources first.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    *<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    * &lt;p&gt;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    * Use this annotation if you need to perform any kind of initialization on child resources before the parent resource.<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    *<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    * &lt;p&gt;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    * This method is called from within the {@link Servlet#init(ServletConfig)} method after the {@link RestContext}<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    * object has been created and after the {@link #POST_INIT} methods have been called.<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    *<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    * &lt;p&gt;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    * The only valid parameter type for this method is {@link RestContext} which can be used to retrieve information<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    * about the servlet.<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    *<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    * &lt;ul class='spaced-list'&gt;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    *    &lt;li&gt;Multiple POST_INIT_CHILD_FIRST methods can be defined on a class.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    *       &lt;br&gt;POST_INIT_CHILD_FIRST methods on parent classes are invoked before POST_INIT_CHILD_FIRST methods on child classes.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    *       &lt;br&gt;The order of POST_INIT_CHILD_FIRST method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    *    &lt;li&gt;The method can throw any exception causing initialization of the servlet to fail.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    * &lt;/ul&gt;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    */<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   POST_INIT_CHILD_FIRST,<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>   /**<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    * Identifies a method that gets called during servlet destroy.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    *<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    * &lt;p&gt;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    * This method is called from within the {@link Servlet#destroy()}.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    *<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    * &lt;p&gt;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    * The only valid parameter type for this method is {@link RestContext}, although typically no arguments will<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    * be specified.<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    *<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    * &lt;p class='bcode'&gt;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    *    &lt;jk&gt;public class&lt;/jk&gt; PetStoreResource &lt;jk&gt;extends&lt;/jk&gt; ResourceJena {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    *<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    *       &lt;jc&gt;// Our database.&lt;/jc&gt;<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    *       &lt;jk&gt;private&lt;/jk&gt; Map&lt;Integer,Pet&gt; &lt;jf&gt;petDB&lt;/jf&gt;;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    *<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;DESTROY&lt;/jsf&gt;)<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    *       &lt;jk&gt;public void&lt;/jk&gt; onDestroy() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    *          &lt;jf&gt;petDB&lt;/jf&gt; = &lt;jk&gt;null&lt;/jk&gt;;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    *       }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    *    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    * &lt;/p&gt;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    *<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    * &lt;h5 class='section'&gt;Notes:&lt;/h5&gt;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    * &lt;ul class='spaced-list'&gt;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    *    &lt;li&gt;If the method returns any value, it is ignored.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    *    &lt;li&gt;Multiple DESTROY methods can be defined on a class.<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    *       &lt;br&gt;DESTROY methods on child classes are invoked before DESTROY methods on parent classes.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    *       &lt;br&gt;The order of DESTROY method invocations within a class is alphabetical, then by parameter count, then by parameter types.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    *    &lt;li&gt;In general, destroy methods should not throw any exceptions, although if any are thrown, the stack trace will be<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    *       printed to &lt;code&gt;System.err&lt;/code&gt;.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    *    &lt;li&gt;Note that if you override a parent method, you probably need to call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.parentMethod(...)&lt;/code&gt;.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    *       &lt;br&gt;The method is still considered part of the parent class for ordering purposes even though it's<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    *       overridden by the child class.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    * &lt;/ul&gt;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    */<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   DESTROY<a name="line.418"></a>
+<span class="sourceLineNo">419</span>}<a name="line.419"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/RestHook.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/RestHook.html b/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/RestHook.html
new file mode 100644
index 0000000..5d8409d
--- /dev/null
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/annotation/RestHook.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
+<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
+<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
+<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
+<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
+<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
+<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
+<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
+<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
+<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
+<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
+<span class="sourceLineNo">013</span>package org.apache.juneau.rest.annotation;<a name="line.13"></a>
+<span class="sourceLineNo">014</span><a name="line.14"></a>
+<span class="sourceLineNo">015</span>import static java.lang.annotation.ElementType.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static java.lang.annotation.RetentionPolicy.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import java.lang.annotation.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>/**<a name="line.20"></a>
+<span class="sourceLineNo">021</span> * Identifies Java methods on a resource/servlet class that get invoked during particular lifecycle events of<a name="line.21"></a>
+<span class="sourceLineNo">022</span> * the servlet or REST call.<a name="line.22"></a>
+<span class="sourceLineNo">023</span> *<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * &lt;p&gt;<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * For example, if you want to add an initialization method to your resource:<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * &lt;p class='bcode'&gt;<a name="line.26"></a>
+<span class="sourceLineNo">027</span> *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.27"></a>
+<span class="sourceLineNo">028</span> *    &lt;jk&gt;public class&lt;/jk&gt; MyResource  {<a name="line.28"></a>
+<span class="sourceLineNo">029</span> *<a name="line.29"></a>
+<span class="sourceLineNo">030</span> *       &lt;jc&gt;// Our database.&lt;/jc&gt;<a name="line.30"></a>
+<span class="sourceLineNo">031</span> *       &lt;jk&gt;private&lt;/jk&gt; Map&amp;lt;Integer,Object&amp;gt; &lt;jf&gt;myDatabase&lt;/jf&gt;;<a name="line.31"></a>
+<span class="sourceLineNo">032</span> *<a name="line.32"></a>
+<span class="sourceLineNo">033</span> *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;INIT&lt;/jsf&gt;)<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *       &lt;jk&gt;public void&lt;/jk&gt; initMyDatabase(RestConfig config) &lt;jk&gt;throws&lt;/jk&gt; Exception {<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *          &lt;jf&gt;myDatabase&lt;/jf&gt; = &lt;jk&gt;new&lt;/jk&gt; LinkedHashMap&amp;lt;&amp;gt;();<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *       }<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *    }<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * &lt;/p&gt;<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * &lt;p&gt;<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * Or if you want to intercept REST calls:<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * &lt;p class='bcode'&gt;<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *    &lt;ja&gt;@RestResource&lt;/ja&gt;(...)<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *    &lt;jk&gt;public class&lt;/jk&gt; MyResource {<a name="line.44"></a>
+<span class="sourceLineNo">045</span> *<a name="line.45"></a>
+<span class="sourceLineNo">046</span> *       &lt;jc&gt;// Add a request attribute to all incoming requests.&lt;/jc&gt;<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *       &lt;ja&gt;@RestHook&lt;/ja&gt;(&lt;jsf&gt;PRE_CALL&lt;/jsf&gt;)<a name="line.47"></a>
+<span class="sourceLineNo">048</span> *       &lt;jk&gt;public void&lt;/jk&gt; onPreCall(RestRequest req) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span> *          req.setAttribute(&lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"bar"&lt;/js&gt;);<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *       }<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *    }<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * &lt;/p&gt;<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * The hook events can be broken down into two categories:<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * &lt;ul class='spaced-list'&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> *    &lt;li&gt;Resource lifecycle events:<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *       &lt;ul&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> *          &lt;li&gt;{@link HookEvent#INIT INIT} - Right before initialization.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *          &lt;li&gt;{@link HookEvent#POST_INIT POST_INIT} - Right after initialization.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> *          &lt;li&gt;{@link HookEvent#POST_INIT_CHILD_FIRST POST_INIT_CHILD_FIRST} - Right after initialization, but run child methods first.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *          &lt;li&gt;{@link HookEvent#DESTROY DESTROY} - Right before servlet destroy.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *       &lt;/ul&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span> *    &lt;li&gt;REST call lifecycle events:<a name="line.64"></a>
+<span class="sourceLineNo">065</span> *       &lt;ul&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *          &lt;li&gt;{@link HookEvent#START_CALL START_CALL} - At the beginning of a REST call.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> *          &lt;li&gt;{@link HookEvent#PRE_CALL PRE_CALL} - Right before the &lt;ja&gt;@RestMethod&lt;/ja&gt; method is invoked.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> *          &lt;li&gt;{@link HookEvent#POST_CALL POST_CALL} - Right after the &lt;ja&gt;@RestMethod&lt;/ja&gt; method is invoked.<a name="line.68"></a>
+<span class="sourceLineNo">069</span> *          &lt;li&gt;{@link HookEvent#END_CALL END_CALL} - At the end of the REST call after the response has been flushed.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> *       &lt;/ul&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;/ul&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> *<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * See the {@link HookEvent} class for information about individual event types.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>@Documented<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@Target(METHOD)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>@Retention(RUNTIME)<a name="line.78"></a>
+<span class="sourceLineNo">079</span>@Inherited<a name="line.79"></a>
+<span class="sourceLineNo">080</span>public @interface RestHook {<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>   /**<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    * The lifecycle event.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   HookEvent value();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>}<a name="line.86"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/jena/RestServletJenaDefault.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/jena/RestServletJenaDefault.html b/content/site/apidocs/src-html/org/apache/juneau/rest/jena/RestServletJenaDefault.html
index 0da3e55..4a00f88 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/jena/RestServletJenaDefault.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/jena/RestServletJenaDefault.html
@@ -258,7 +258,7 @@
 <span class="sourceLineNo">250</span>         "&lt;h2&gt;$R{methodSummary,$R{servletDescription}}&lt;/h2&gt;",<a name="line.250"></a>
 <span class="sourceLineNo">251</span>         "&lt;a href='http://juneau.apache.org'&gt;&lt;img src='$U{servlet:/htdocs/juneau.png}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/&gt;&lt;/a&gt;"<a name="line.251"></a>
 <span class="sourceLineNo">252</span>      },<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      stylesheet="servlet:/styles/devops.css"<a name="line.253"></a>
+<span class="sourceLineNo">253</span>      stylesheet="servlet:/styles/light.css"<a name="line.253"></a>
 <span class="sourceLineNo">254</span>   ),<a name="line.254"></a>
 <span class="sourceLineNo">255</span>   favicon="htdocs/juneau.png",<a name="line.255"></a>
 <span class="sourceLineNo">256</span>   staticFiles="{htdocs:'htdocs',styles:'styles'}"<a name="line.256"></a>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/widget/StyleMenuItem.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/widget/StyleMenuItem.html b/content/site/apidocs/src-html/org/apache/juneau/rest/widget/StyleMenuItem.html
index 7d1ebb0..1c7ca2e 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/widget/StyleMenuItem.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/widget/StyleMenuItem.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span> */<a name="line.50"></a>
 <span class="sourceLineNo">051</span>public class StyleMenuItem extends MenuItemWidget {<a name="line.51"></a>
 <span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>   private static final String[] BUILT_IN_STYLES = {"devops", "light", "original"};<a name="line.53"></a>
+<span class="sourceLineNo">053</span>   private static final String[] BUILT_IN_STYLES = {"devops", "light", "original", "dark"};<a name="line.53"></a>
 <span class="sourceLineNo">054</span><a name="line.54"></a>
 <span class="sourceLineNo">055</span>   @Override /* MenuItemWidget */<a name="line.55"></a>
 <span class="sourceLineNo">056</span>   public String getLabel(RestRequest req) {<a name="line.56"></a>


[22/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.html b/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.html
index 3ee323c..307845d 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.html
@@ -143,7 +143,7 @@ var activeTableTab = "activeTableTab";
               <a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html#properties--">properties</a>=<a href="../../../../../org/apache/juneau/rest/annotation/Property.html" title="annotation in org.apache.juneau.rest.annotation">@Property</a>(<a href="../../../../../org/apache/juneau/rest/annotation/Property.html#name--">name</a>="HtmlSerializer.uriAnchorText",<a href="../../../../../org/apache/juneau/rest/annotation/Property.html#value--">value</a>="PROPERTY_NAME"),
               <a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html#flags--">flags</a>="RestServlet.allowMethodParam",
               <a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html#pojoSwaps--">pojoSwaps</a>={<a href="../../../../../org/apache/juneau/transforms/IteratorSwap.html" title="class in org.apache.juneau.transforms">IteratorSwap.class</a>,<a href="../../../../../org/apache/juneau/transforms/DateSwap.ISO8601DT.html" title="class in org.apache.juneau.transforms">DateSwap.ISO8601DT.class</a>})
-public class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.53">LogsResource</a>
+public class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.54">LogsResource</a>
 extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></pre>
 <div class="block">REST resource for viewing and accessing log files.</div>
 <dl>
@@ -231,7 +231,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/microservice/resources/LogsResource.html#init-org.apache.juneau.rest.RestConfig-">init</a></span>(<a href="../../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
-<div class="block">Resource initialization method.</div>
+<div class="block">Initializes the log directory and formatter.</div>
 </td>
 </tr>
 <tr id="i4" class="altColor">
@@ -263,6 +263,13 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.microservice.Resource">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.juneau.microservice.<a href="../../../../../org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></h3>
+<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.RestServletDefault">
 <!--   -->
 </a>
@@ -274,7 +281,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">
@@ -317,7 +324,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LogsResource</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.53">LogsResource</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.54">LogsResource</a>()</pre>
 </li>
 </ul>
 </li>
@@ -334,32 +341,15 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.67">init</a>(<a href="../../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
-          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">RestServlet</a></code></span></div>
-<div class="block">Resource initialization method.
-
- <p>
- Identical to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> except the config object provides access to the external config
- file, configuration properties, and variable resolver defined for this resource.
-
- <p>
- Classes can also use <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true#init--" title="class or interface in javax.servlet"><code>GenericServlet.init()</code></a> and <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--"><code>RestServlet.getServletConfig()</code></a> as well to perform
- initialization.
-
- <p>
- Note that if you override this method, you must first call <code><jk>super</jk>.init(servletConfig)</code>!
-
- <p>
- Resource classes that don't extend from <a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can add this method to their class to get access to
- the config object.</div>
+<pre><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation">@RestHook</a>(<a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html#value--">value</a>=<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT">INIT</a>)
+public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.74">init</a>(<a href="../../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
+                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Initializes the log directory and formatter.</div>
 <dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-">init</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>config</code> - The servlet configuration.</dd>
+<dd><code>config</code> - The resource config.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code> - Any exception can be thrown to signal an initialization failure.</dd>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -372,7 +362,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <pre><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">@RestMethod</a>(<a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#name--">name</a>="GET",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/*",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#swagger--">swagger</a>=)
-public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.96">getFileOrDirectory</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.102">getFileOrDirectory</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
                                                                                                       <a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
                                                                                                       <a href="../../../../../org/apache/juneau/rest/annotation/Properties.html" title="annotation in org.apache.juneau.rest.annotation">@Properties</a>
                                                                                                       <a href="../../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;properties,
@@ -402,7 +392,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.h
 <pre><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">@RestMethod</a>(<a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#name--">name</a>="VIEW",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/*",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#swagger--">swagger</a>=)
-public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.138">viewFile</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.144">viewFile</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
                                                                                            <a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
                                                                                            <a href="../../../../../org/apache/juneau/rest/annotation/PathRemainder.html" title="annotation in org.apache.juneau.rest.annotation">@PathRemainder</a>
                                                                                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
@@ -449,7 +439,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/juneau/microse
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/*",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#converters--">converters</a>=<a href="../../../../../org/apache/juneau/rest/converters/Queryable.html" title="class in org.apache.juneau.rest.converters">Queryable.class</a>,
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#swagger--">swagger</a>=)
-public&nbsp;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.217">viewParsedEntries</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+public&nbsp;<a href="../../../../../org/apache/juneau/microservice/resources/LogParser.html" title="class in org.apache.juneau.microservice.resources">LogParser</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.223">viewParsedEntries</a>(<a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
                                                                                                                                                   <a href="../../../../../org/apache/juneau/rest/annotation/PathRemainder.html" title="annotation in org.apache.juneau.rest.annotation">@PathRemainder</a>
                                                                                                                                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                                                                                                                                   <a href="../../../../../org/apache/juneau/rest/annotation/Query.html" title="annotation in org.apache.juneau.rest.annotation">@Query</a>(<a href="../../../../../org/apache/juneau/rest/annotation/Query.html#value--">value</a>="start")
@@ -489,7 +479,7 @@ public&nbsp;<a href="../../../../../org/apache/juneau/microservice/resources/Log
 <pre><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">@RestMethod</a>(<a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#name--">name</a>="DOWNLOAD",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/*",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#swagger--">swagger</a>=)
-public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.243">downloadFile</a>(<a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
+public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.249">downloadFile</a>(<a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
                                                                                                      <a href="../../../../../org/apache/juneau/rest/annotation/PathRemainder.html" title="annotation in org.apache.juneau.rest.annotation">@PathRemainder</a>
                                                                                                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
                                                                                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -514,7 +504,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.h
 <pre><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">@RestMethod</a>(<a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#name--">name</a>="DELETE",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#path--">path</a>="/*",
             <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#swagger--">swagger</a>=)
-public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.269">deleteFile</a>(<a href="../../../../../org/apache/juneau/rest/annotation/PathRemainder.html" title="annotation in org.apache.juneau.rest.annotation">@PathRemainder</a>
+public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.275">deleteFile</a>(<a href="../../../../../org/apache/juneau/rest/annotation/PathRemainder.html" title="annotation in org.apache.juneau.rest.annotation">@PathRemainder</a>
                                                                                                  <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
                                                                                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">[DELETE /*] - Delete a file.</div>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/SampleRootResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/SampleRootResource.html b/content/site/apidocs/org/apache/juneau/microservice/resources/SampleRootResource.html
index 3a1ae3a..57a7385 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/SampleRootResource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/SampleRootResource.html
@@ -181,7 +181,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/ResourceGroup.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.microservice.<a href="../../../../../org/apache/juneau/microservice/ResourceGroup.html" title="class in org.apache.juneau.microservice">ResourceGroup</a></h3>
-<code><a href="../../../../../org/apache/juneau/microservice/ResourceGroup.html#init-org.apache.juneau.rest.RestConfig-">init</a></code></li>
+<code><a href="../../../../../org/apache/juneau/microservice/ResourceGroup.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.RestServletGroupDefault">
@@ -202,7 +202,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/ResourceGroup.htm
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/ShutdownResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/ShutdownResource.html b/content/site/apidocs/org/apache/juneau/microservice/resources/ShutdownResource.html
index 8e53e6d..bb6446c 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/ShutdownResource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/ShutdownResource.html
@@ -193,7 +193,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.microservice.<a href="../../../../../org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></h3>
-<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-">init</a></code></li>
+<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.RestServletDefault">
@@ -207,7 +207,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/package-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/package-tree.html b/content/site/apidocs/org/apache/juneau/microservice/resources/package-tree.html
index 8758b4c..1e2da2b 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/package-tree.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/package-tree.html
@@ -88,7 +88,7 @@
 </li>
 <li type="circle">javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true" title="class or interface in javax.servlet"><span class="typeNameLink">GenericServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>)
 <ul>
-<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestServlet</span></a>
 <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestCallHandler.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestCallHandler.html b/content/site/apidocs/org/apache/juneau/rest/RestCallHandler.html
index f97f8ba..98b5fa0 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestCallHandler.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestCallHandler.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -206,35 +206,13 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a></span>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-          <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res)</code>
-<div class="block">Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is
- invoked.</div>
-</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a></span>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req)</code>
-<div class="block">Callback method that gets invoked right before the REST Java method is invoked.</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a></span>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-         <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
-         long&nbsp;time)</code>
-<div class="block">Callback method for listening for successful completion of requests.</div>
-</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestCallHandler.html#renderError-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-org.apache.juneau.rest.RestException-">renderError</a></span>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req,
            <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;res,
            <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a>&nbsp;e)</code>
 <div class="block">Method for rendering response errors.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestCallHandler.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></span>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;r1,
        <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;r2)</code>
@@ -269,7 +247,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RestCallHandler</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.55">RestCallHandler</a>(<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;context)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.54">RestCallHandler</a>(<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;context)</pre>
 <div class="block">Constructor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -291,7 +269,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createRequest</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.72">createRequest</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req)
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.70">createRequest</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req)
                              throws <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet">ServletException</a></pre>
 <div class="block">Creates a <a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest"><code>RestRequest</code></a> object based on the specified incoming <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletRequest</code></a> object.
 
@@ -313,7 +291,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createResponse</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.88">createResponse</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.86">createResponse</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
                                       <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;res)
                                throws <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet">ServletException</a></pre>
 <div class="block">Creates a <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest"><code>RestResponse</code></a> object based on the specified incoming <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletResponse</code></a> object
@@ -338,7 +316,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>service</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.103">service</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;r1,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.101">service</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;r1,
                        <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;r2)
                 throws <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet">ServletException</a>,
                        <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -362,7 +340,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>handleResponse</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.213">handleResponse</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.219">handleResponse</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
                               <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;output)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -395,7 +373,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>handleNotFound</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.233">handleNotFound</a>(int&nbsp;rc,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.239">handleNotFound</a>(int&nbsp;rc,
                               <a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
                               <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -420,7 +398,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>handleError</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.262">handleError</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.268">handleError</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req,
                            <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;res,
                            <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a>&nbsp;e)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -448,7 +426,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>renderError</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.283">renderError</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.289">renderError</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;req,
                            <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;res,
                            <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a>&nbsp;e)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -470,82 +448,13 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
-<a name="onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>onSuccess</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.326">onSuccess</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-                         <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
-                         long&nbsp;time)</pre>
-<div class="block">Callback method for listening for successful completion of requests.
-
- <p>
- Subclasses can override this method for gathering performance statistics.
-
- <p>
- The default implementation does nothing.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>req</code> - The HTTP request.</dd>
-<dd><code>res</code> - The HTTP response.</dd>
-<dd><code>time</code> - The time in milliseconds it took to process the request.</dd>
-</dl>
-</li>
-</ul>
-<a name="onPreCall-org.apache.juneau.rest.RestRequest-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>onPreCall</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.341">onPreCall</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req)
-                  throws <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></pre>
-<div class="block">Callback method that gets invoked right before the REST Java method is invoked.
-
- <p>
- Subclasses can override this method to override request headers or set request-duration properties before the
- Java method is invoked.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>req</code> - The HTTP servlet request object.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></code> - If any error occurs.</dd>
-</dl>
-</li>
-</ul>
-<a name="onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>onPostCall</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.358">onPostCall</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-                          <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res)
-                   throws <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></pre>
-<div class="block">Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is
- invoked.
-
- <p>
- Subclasses can override this method to override request and response headers, or set/override properties used by
- the serializer.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>req</code> - The HTTP servlet request object.</dd>
-<dd><code>res</code> - The HTTP servlet response object.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></code> - If any error occurs.</dd>
-</dl>
-</li>
-</ul>
 <a name="getSessionObjects-org.apache.juneau.rest.RestRequest-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSessionObjects</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.372">getSessionObjects</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestCallHandler.html#line.328">getSessionObjects</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req)</pre>
 <div class="block">Returns the session objects for the specified request.
 
  <p>


[15/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/html/HtmlSerializerSession.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/html/HtmlSerializerSession.html b/content/site/apidocs/src-html/org/apache/juneau/html/HtmlSerializerSession.html
index ed8c7ee..c5ae2f6 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/html/HtmlSerializerSession.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/html/HtmlSerializerSession.html
@@ -446,340 +446,361 @@
 <span class="sourceLineNo">438</span>      out.ie(i).eTag("table").nl(i);<a name="line.438"></a>
 <span class="sourceLineNo">439</span>   }<a name="line.439"></a>
 <span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>   private void serializeBeanMap(HtmlWriter out, BeanMap&lt;?&gt; m, ClassMeta&lt;?&gt; eType,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>         BeanPropertyMeta ppMeta) throws Exception {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      int i = indent;<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>      out.oTag(i, "table");<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>      String typeName = m.getMeta().getDictionaryName();<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      if (typeName != null &amp;&amp; eType != m.getClassMeta())<a name="line.448"></a>
-<span class="sourceLineNo">449</span>         out.attr(getBeanTypePropertyName(m.getClassMeta()), typeName);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>      out.append('&gt;').nl(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (isAddKeyValueTableHeaders() &amp;&amp; ! (m.getClassMeta().getExtendedMeta(HtmlClassMeta.class).isNoTableHeaders()<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            || (ppMeta != null &amp;&amp; ppMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isNoTableHeaders()))) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>         out.sTag(i+1, "tr").nl(i+1);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>         out.sTag(i+2, "th").append("key").eTag("th").nl(i+2);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>         out.sTag(i+2, "th").append("value").eTag("th").nl(i+2);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>         out.ie(i+1).eTag("tr").nl(i+1);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>      for (BeanPropertyValue p : m.getValues(isTrimNulls())) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>         BeanPropertyMeta pMeta = p.getMeta();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>         ClassMeta&lt;?&gt; cMeta = p.getClassMeta();<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>         String key = p.getName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>         Object value = p.getValue();<a name="line.465"></a>
-<span class="sourceLineNo">466</span>         Throwable t = p.getThrown();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>         if (t != null)<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            onBeanGetterException(pMeta, t);<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>         if (canIgnoreValue(cMeta, key, value))<a name="line.470"></a>
-<span class="sourceLineNo">471</span>            continue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>         String link = cMeta.isCollectionOrArray() ? null : getLink(pMeta);<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>         out.sTag(i+1, "tr").nl(i+1);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>         out.sTag(i+2, "td").text(key).eTag("td").nl(i+2);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>         out.oTag(i+2, "td");<a name="line.477"></a>
-<span class="sourceLineNo">478</span>         String style = getStyle(this, pMeta, value);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>         if (style != null)<a name="line.479"></a>
-<span class="sourceLineNo">480</span>            out.attr("style", style);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>         out.cTag();<a name="line.481"></a>
+<span class="sourceLineNo">441</span>   @SuppressWarnings("hiding")<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   private void serializeBeanMap(HtmlWriter out, BeanMap&lt;?&gt; m, ClassMeta&lt;?&gt; eType,<a name="line.442"></a>
+<span class="sourceLineNo">443</span>         BeanPropertyMeta ppMeta) throws Exception {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      int i = indent;<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>      out.oTag(i, "table");<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>      String typeName = m.getMeta().getDictionaryName();<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      if (typeName != null &amp;&amp; eType != m.getClassMeta())<a name="line.449"></a>
+<span class="sourceLineNo">450</span>         out.attr(getBeanTypePropertyName(m.getClassMeta()), typeName);<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>      out.append('&gt;').nl(i);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if (isAddKeyValueTableHeaders() &amp;&amp; ! (m.getClassMeta().getExtendedMeta(HtmlClassMeta.class).isNoTableHeaders()<a name="line.453"></a>
+<span class="sourceLineNo">454</span>            || (ppMeta != null &amp;&amp; ppMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isNoTableHeaders()))) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>         out.sTag(i+1, "tr").nl(i+1);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>         out.sTag(i+2, "th").append("key").eTag("th").nl(i+2);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>         out.sTag(i+2, "th").append("value").eTag("th").nl(i+2);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>         out.ie(i+1).eTag("tr").nl(i+1);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>      for (BeanPropertyValue p : m.getValues(isTrimNulls())) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>         BeanPropertyMeta pMeta = p.getMeta();<a name="line.462"></a>
+<span class="sourceLineNo">463</span>         ClassMeta&lt;?&gt; cMeta = p.getClassMeta();<a name="line.463"></a>
+<span class="sourceLineNo">464</span><a name="line.464"></a>
+<span class="sourceLineNo">465</span>         String key = p.getName();<a name="line.465"></a>
+<span class="sourceLineNo">466</span>         Object value = p.getValue();<a name="line.466"></a>
+<span class="sourceLineNo">467</span>         Throwable t = p.getThrown();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>         if (t != null)<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            onBeanGetterException(pMeta, t);<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>         if (canIgnoreValue(cMeta, key, value))<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            continue;<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>         String link = null, anchorText = null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>         if (! cMeta.isCollectionOrArray()) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            link = m.resolveVars(getLink(pMeta));<a name="line.476"></a>
+<span class="sourceLineNo">477</span>            anchorText = m.resolveVars(getAnchorText(pMeta));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>         }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>         if (anchorText != null)<a name="line.480"></a>
+<span class="sourceLineNo">481</span>            value = anchorText;<a name="line.481"></a>
 <span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>         try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>            if (link != null)<a name="line.484"></a>
-<span class="sourceLineNo">485</span>               out.oTag(i+3, "a").attrUri("href", m.resolveVars(link)).cTag();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            ContentResult cr = serializeAnything(out, value, cMeta, key, 2, pMeta, false);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>            if (cr == CR_NORMAL)<a name="line.487"></a>
-<span class="sourceLineNo">488</span>               out.i(i+2);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>            if (link != null)<a name="line.489"></a>
-<span class="sourceLineNo">490</span>               out.eTag("a");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>         } catch (SerializeException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            throw e;<a name="line.492"></a>
-<span class="sourceLineNo">493</span>         } catch (Error e) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            throw e;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>         } catch (Throwable e) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            e.printStackTrace();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>            onBeanGetterException(pMeta, e);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>         }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>         out.eTag("td").nl(i+2);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>         out.ie(i+1).eTag("tr").nl(i+1);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      out.ie(i).eTag("table").nl(i);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   private void serializeCollection(HtmlWriter out, Object in, ClassMeta&lt;?&gt; sType,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>         ClassMeta&lt;?&gt; eType, String name, BeanPropertyMeta ppMeta) throws Exception {<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>      ClassMeta&lt;?&gt; seType = sType.getElementType();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      if (seType == null)<a name="line.510"></a>
-<span class="sourceLineNo">511</span>         seType = object();<a name="line.511"></a>
+<span class="sourceLineNo">483</span>         out.sTag(i+1, "tr").nl(i+1);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>         out.sTag(i+2, "td").text(key).eTag("td").nl(i+2);<a name="line.484"></a>
+<span class="sourceLineNo">485</span>         out.oTag(i+2, "td");<a name="line.485"></a>
+<span class="sourceLineNo">486</span>         String style = getStyle(this, pMeta, value);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>         if (style != null)<a name="line.487"></a>
+<span class="sourceLineNo">488</span>            out.attr("style", style);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>         out.cTag();<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>         try {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>            if (link != null)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>               out.oTag(i+3, "a").attrUri("href", link).cTag();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>            ContentResult cr = serializeAnything(out, value, cMeta, key, 2, pMeta, false);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>            if (cr == CR_NORMAL)<a name="line.495"></a>
+<span class="sourceLineNo">496</span>               out.i(i+2);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>            if (link != null)<a name="line.497"></a>
+<span class="sourceLineNo">498</span>               out.eTag("a");<a name="line.498"></a>
+<span class="sourceLineNo">499</span>         } catch (SerializeException e) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>            throw e;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>         } catch (Error e) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            throw e;<a name="line.502"></a>
+<span class="sourceLineNo">503</span>         } catch (Throwable e) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>            e.printStackTrace();<a name="line.504"></a>
+<span class="sourceLineNo">505</span>            onBeanGetterException(pMeta, e);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>         }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>         out.eTag("td").nl(i+2);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>         out.ie(i+1).eTag("tr").nl(i+1);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      out.ie(i).eTag("table").nl(i);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   }<a name="line.511"></a>
 <span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>      Collection c = (sType.isCollection() ? (Collection)in : toList(sType.getInnerClass(), in));<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      int i = indent;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (c.isEmpty()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>         out.appendln(i, "&lt;ul&gt;&lt;/ul&gt;");<a name="line.517"></a>
-<span class="sourceLineNo">518</span>         return;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
+<span class="sourceLineNo">513</span>   @SuppressWarnings({ "rawtypes", "unchecked", "hiding" })<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   private void serializeCollection(HtmlWriter out, Object in, ClassMeta&lt;?&gt; sType,<a name="line.514"></a>
+<span class="sourceLineNo">515</span>         ClassMeta&lt;?&gt; eType, String name, BeanPropertyMeta ppMeta) throws Exception {<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>      ClassMeta&lt;?&gt; seType = sType.getElementType();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      if (seType == null)<a name="line.518"></a>
+<span class="sourceLineNo">519</span>         seType = object();<a name="line.519"></a>
 <span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      String type2 = null;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      if (sType != eType)<a name="line.522"></a>
-<span class="sourceLineNo">523</span>         type2 = sType.getDictionaryName();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if (type2 == null)<a name="line.524"></a>
-<span class="sourceLineNo">525</span>         type2 = "array";<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>      c = sort(c);<a name="line.527"></a>
+<span class="sourceLineNo">521</span>      Collection c = (sType.isCollection() ? (Collection)in : toList(sType.getInnerClass(), in));<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>      int i = indent;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      if (c.isEmpty()) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>         out.appendln(i, "&lt;ul&gt;&lt;/ul&gt;");<a name="line.525"></a>
+<span class="sourceLineNo">526</span>         return;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      }<a name="line.527"></a>
 <span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>      HtmlBeanPropertyMeta hbpMeta = (ppMeta == null ? null : ppMeta.getExtendedMeta(HtmlBeanPropertyMeta.class));<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      String btpn = getBeanTypePropertyName(eType);<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>      // Look at the objects to see how we're going to handle them.  Check the first object to see how we're going to<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      // handle this.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      // If it's a map or bean, then we'll create a table.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      // Otherwise, we'll create a list.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      Object[] th = getTableHeaders(c, hbpMeta);<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>      if (th != null) {<a name="line.538"></a>
+<span class="sourceLineNo">529</span>      String type2 = null;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      if (sType != eType)<a name="line.530"></a>
+<span class="sourceLineNo">531</span>         type2 = sType.getDictionaryName();<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      if (type2 == null)<a name="line.532"></a>
+<span class="sourceLineNo">533</span>         type2 = "array";<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>      c = sort(c);<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>      HtmlBeanPropertyMeta hbpMeta = (ppMeta == null ? null : ppMeta.getExtendedMeta(HtmlBeanPropertyMeta.class));<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      String btpn = getBeanTypePropertyName(eType);<a name="line.538"></a>
 <span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>         out.oTag(i, "table").attr(btpn, type2).append('&gt;').nl(i+1);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>         out.sTag(i+1, "tr").nl(i+2);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>         for (Object key : th) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>            out.sTag(i+2, "th");<a name="line.543"></a>
-<span class="sourceLineNo">544</span>            out.text(convertToType(key, String.class));<a name="line.544"></a>
-<span class="sourceLineNo">545</span>            out.eTag("th").nl(i+2);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>         }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>         out.ie(i+1).eTag("tr").nl(i+1);<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>         for (Object o : c) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            ClassMeta&lt;?&gt; cm = getClassMetaForObject(o);<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>            if (cm != null &amp;&amp; cm.getPojoSwap() != null) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>               PojoSwap f = cm.getPojoSwap();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>               o = f.swap(this, o);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>               cm = cm.getSerializedClassMeta();<a name="line.555"></a>
-<span class="sourceLineNo">556</span>            }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>            out.oTag(i+1, "tr");<a name="line.558"></a>
-<span class="sourceLineNo">559</span>            String typeName = (cm == null ? null : cm.getDictionaryName());<a name="line.559"></a>
-<span class="sourceLineNo">560</span>            String typeProperty = getBeanTypePropertyName(cm);<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>            if (typeName != null &amp;&amp; eType.getElementType() != cm)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>               out.attr(typeProperty, typeName);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            out.cTag().nl(i+2);<a name="line.564"></a>
+<span class="sourceLineNo">540</span>      // Look at the objects to see how we're going to handle them.  Check the first object to see how we're going to<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      // handle this.<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      // If it's a map or bean, then we'll create a table.<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      // Otherwise, we'll create a list.<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      Object[] th = getTableHeaders(c, hbpMeta);<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>      if (th != null) {<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>         out.oTag(i, "table").attr(btpn, type2).append('&gt;').nl(i+1);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>         out.sTag(i+1, "tr").nl(i+2);<a name="line.549"></a>
+<span class="sourceLineNo">550</span>         for (Object key : th) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>            out.sTag(i+2, "th");<a name="line.551"></a>
+<span class="sourceLineNo">552</span>            out.text(convertToType(key, String.class));<a name="line.552"></a>
+<span class="sourceLineNo">553</span>            out.eTag("th").nl(i+2);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>         }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>         out.ie(i+1).eTag("tr").nl(i+1);<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>         for (Object o : c) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>            ClassMeta&lt;?&gt; cm = getClassMetaForObject(o);<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>            if (cm != null &amp;&amp; cm.getPojoSwap() != null) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>               PojoSwap f = cm.getPojoSwap();<a name="line.561"></a>
+<span class="sourceLineNo">562</span>               o = f.swap(this, o);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>               cm = cm.getSerializedClassMeta();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>            }<a name="line.564"></a>
 <span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>            if (cm == null) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>               serializeAnything(out, o, null, null, 1, null, false);<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>            } else if (cm.isMap() &amp;&amp; ! (cm.isBeanMap())) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>               Map m2 = sort((Map)o);<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>               for (Object k : th) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>                  out.sTag(i+2, "td");<a name="line.573"></a>
-<span class="sourceLineNo">574</span>                  ContentResult cr = serializeAnything(out, m2.get(k), eType.getElementType(), toString(k), 2, null, false);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>                  if (cr == CR_NORMAL)<a name="line.575"></a>
-<span class="sourceLineNo">576</span>                     out.i(i+2);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>                  out.eTag("td").nl(i+2);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>               }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>            } else {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>               BeanMap m2 = null;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>               if (o instanceof BeanMap)<a name="line.581"></a>
-<span class="sourceLineNo">582</span>                  m2 = (BeanMap)o;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>               else<a name="line.583"></a>
-<span class="sourceLineNo">584</span>                  m2 = toBeanMap(o);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>               for (Object k : th) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                  BeanMapEntry p = m2.getProperty(toString(k));<a name="line.587"></a>
-<span class="sourceLineNo">588</span>                  BeanPropertyMeta pMeta = p.getMeta();<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                  String link = pMeta.getClassMeta().isCollectionOrArray() ? null : getLink(pMeta);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>                  Object value = p.getValue();<a name="line.590"></a>
-<span class="sourceLineNo">591</span>                  String style = getStyle(this, pMeta, value);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>                  out.oTag(i+2, "td");<a name="line.592"></a>
-<span class="sourceLineNo">593</span>                  if (style != null)<a name="line.593"></a>
-<span class="sourceLineNo">594</span>                     out.attr("style", style);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  out.cTag();<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  if (link != null)<a name="line.596"></a>
-<span class="sourceLineNo">597</span>                     out.oTag("a").attrUri("href", m2.resolveVars(link)).cTag();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                  ContentResult cr = serializeAnything(out, value, pMeta.getClassMeta(), p.getKey().toString(), 2, pMeta, false);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                  if (cr == CR_NORMAL)<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                     out.i(i+2);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                  if (link != null)<a name="line.601"></a>
-<span class="sourceLineNo">602</span>                     out.eTag("a");<a name="line.602"></a>
-<span class="sourceLineNo">603</span>                  out.eTag("td").nl(i+2);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>               }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>            }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            out.ie(i+1).eTag("tr").nl(i+1);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>         }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>         out.ie(i).eTag("table").nl(i);<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>      } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>         out.oTag(i, "ul");<a name="line.611"></a>
-<span class="sourceLineNo">612</span>         if (! type2.equals("array"))<a name="line.612"></a>
-<span class="sourceLineNo">613</span>            out.attr(btpn, type2);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>         out.append('&gt;').nl(i+1);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>         for (Object o : c) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>            out.oTag(i+1, "li");<a name="line.616"></a>
-<span class="sourceLineNo">617</span>            String style = getStyle(this, ppMeta, o);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>            String link = getLink(ppMeta);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            if (style != null)<a name="line.619"></a>
-<span class="sourceLineNo">620</span>               out.attr("style", style);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>            out.cTag();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (link != null)<a name="line.622"></a>
-<span class="sourceLineNo">623</span>               out.oTag(i+2, "a").attrUri("href", link.replace("{#}", StringUtils.toString(o))).cTag();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            ContentResult cr = serializeAnything(out, o, eType.getElementType(), name, 1, null, false);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>            if (link != null)<a name="line.625"></a>
-<span class="sourceLineNo">626</span>               out.eTag("a");<a name="line.626"></a>
-<span class="sourceLineNo">627</span>            if (cr == CR_NORMAL)<a name="line.627"></a>
-<span class="sourceLineNo">628</span>               out.ie(i+1);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>            out.eTag("li").nl(i+1);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>         }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>         out.ie(i).eTag("ul").nl(i);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   }<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>   private static HtmlRender&lt;?&gt; getRender(HtmlSerializerSession session, BeanPropertyMeta pMeta, Object value) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      if (pMeta == null)<a name="line.636"></a>
-<span class="sourceLineNo">637</span>         return null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      HtmlBeanPropertyMeta hpMeta = pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      HtmlRender&lt;?&gt; render = hpMeta.getRender();<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      if (render != null)<a name="line.640"></a>
-<span class="sourceLineNo">641</span>         return render;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      ClassMeta&lt;?&gt; cMeta = session.getClassMetaForObject(value);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      render = cMeta == null ? null : cMeta.getExtendedMeta(HtmlClassMeta.class).getRender();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      return render;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>   @SuppressWarnings({"rawtypes","unchecked"})<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   private static String getStyle(HtmlSerializerSession session, BeanPropertyMeta pMeta, Object value) {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      HtmlRender render = getRender(session, pMeta, value);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return render == null ? null : render.getStyle(session, value);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>   private static String getLink(BeanPropertyMeta pMeta) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      return pMeta == null ? null : pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).getLink();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>   /*<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    * Returns the table column headers for the specified collection of objects.<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    * Returns null if collection should not be serialized as a 2-dimensional table.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    * 2-dimensional tables are used for collections of objects that all have the same set of property names.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    */<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   private Object[] getTableHeaders(Collection c, HtmlBeanPropertyMeta hbpMeta) throws Exception {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      if (c.size() == 0)<a name="line.664"></a>
-<span class="sourceLineNo">665</span>         return null;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      c = sort(c);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      Object[] th;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      Set&lt;ClassMeta&gt; prevC = new HashSet&lt;ClassMeta&gt;();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      Object o1 = null;<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      for (Object o : c)<a name="line.670"></a>
-<span class="sourceLineNo">671</span>         if (o != null) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>            o1 = o;<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            break;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>         }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      if (o1 == null)<a name="line.675"></a>
-<span class="sourceLineNo">676</span>         return null;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      ClassMeta&lt;?&gt; cm = getClassMetaForObject(o1);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      if (cm.getPojoSwap() != null) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>         PojoSwap f = cm.getPojoSwap();<a name="line.679"></a>
-<span class="sourceLineNo">680</span>         o1 = f.swap(this, o1);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>         cm = cm.getSerializedClassMeta();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      if (cm == null || ! cm.isMapOrBean())<a name="line.683"></a>
-<span class="sourceLineNo">684</span>         return null;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (cm.getInnerClass().isAnnotationPresent(HtmlLink.class))<a name="line.685"></a>
+<span class="sourceLineNo">566</span>            out.oTag(i+1, "tr");<a name="line.566"></a>
+<span class="sourceLineNo">567</span>            String typeName = (cm == null ? null : cm.getDictionaryName());<a name="line.567"></a>
+<span class="sourceLineNo">568</span>            String typeProperty = getBeanTypePropertyName(cm);<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>            if (typeName != null &amp;&amp; eType.getElementType() != cm)<a name="line.570"></a>
+<span class="sourceLineNo">571</span>               out.attr(typeProperty, typeName);<a name="line.571"></a>
+<span class="sourceLineNo">572</span>            out.cTag().nl(i+2);<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>            if (cm == null) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>               serializeAnything(out, o, null, null, 1, null, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span>            } else if (cm.isMap() &amp;&amp; ! (cm.isBeanMap())) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>               Map m2 = sort((Map)o);<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>               for (Object k : th) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>                  out.sTag(i+2, "td");<a name="line.581"></a>
+<span class="sourceLineNo">582</span>                  ContentResult cr = serializeAnything(out, m2.get(k), eType.getElementType(), toString(k), 2, null, false);<a name="line.582"></a>
+<span class="sourceLineNo">583</span>                  if (cr == CR_NORMAL)<a name="line.583"></a>
+<span class="sourceLineNo">584</span>                     out.i(i+2);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>                  out.eTag("td").nl(i+2);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>               }<a name="line.586"></a>
+<span class="sourceLineNo">587</span>            } else {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>               BeanMap m2 = null;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>               if (o instanceof BeanMap)<a name="line.589"></a>
+<span class="sourceLineNo">590</span>                  m2 = (BeanMap)o;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>               else<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                  m2 = toBeanMap(o);<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span>               for (Object k : th) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>                  BeanMapEntry p = m2.getProperty(toString(k));<a name="line.595"></a>
+<span class="sourceLineNo">596</span>                  BeanPropertyMeta pMeta = p.getMeta();<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                  Object value = p.getValue();<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>                  String link = null, anchorText = null;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>                  if (! pMeta.getClassMeta().isCollectionOrArray()) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>                     link = m2.resolveVars(getLink(pMeta));<a name="line.601"></a>
+<span class="sourceLineNo">602</span>                     anchorText = m2.resolveVars(getAnchorText(pMeta));<a name="line.602"></a>
+<span class="sourceLineNo">603</span>                  }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>                  if (anchorText != null)<a name="line.605"></a>
+<span class="sourceLineNo">606</span>                     value = anchorText;<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>                  String style = getStyle(this, pMeta, value);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>                  out.oTag(i+2, "td");<a name="line.609"></a>
+<span class="sourceLineNo">610</span>                  if (style != null)<a name="line.610"></a>
+<span class="sourceLineNo">611</span>                     out.attr("style", style);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>                  out.cTag();<a name="line.612"></a>
+<span class="sourceLineNo">613</span>                  if (link != null)<a name="line.613"></a>
+<span class="sourceLineNo">614</span>                     out.oTag("a").attrUri("href", link).cTag();<a name="line.614"></a>
+<span class="sourceLineNo">615</span>                  ContentResult cr = serializeAnything(out, value, pMeta.getClassMeta(), p.getKey().toString(), 2, pMeta, false);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>                  if (cr == CR_NORMAL)<a name="line.616"></a>
+<span class="sourceLineNo">617</span>                     out.i(i+2);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>                  if (link != null)<a name="line.618"></a>
+<span class="sourceLineNo">619</span>                     out.eTag("a");<a name="line.619"></a>
+<span class="sourceLineNo">620</span>                  out.eTag("td").nl(i+2);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>               }<a name="line.621"></a>
+<span class="sourceLineNo">622</span>            }<a name="line.622"></a>
+<span class="sourceLineNo">623</span>            out.ie(i+1).eTag("tr").nl(i+1);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>         }<a name="line.624"></a>
+<span class="sourceLineNo">625</span>         out.ie(i).eTag("table").nl(i);<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span>      } else {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>         out.oTag(i, "ul");<a name="line.628"></a>
+<span class="sourceLineNo">629</span>         if (! type2.equals("array"))<a name="line.629"></a>
+<span class="sourceLineNo">630</span>            out.attr(btpn, type2);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>         out.append('&gt;').nl(i+1);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>         for (Object o : c) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>            out.oTag(i+1, "li");<a name="line.633"></a>
+<span class="sourceLineNo">634</span>            String style = getStyle(this, ppMeta, o);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>            String link = getLink(ppMeta);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>            if (style != null)<a name="line.636"></a>
+<span class="sourceLineNo">637</span>               out.attr("style", style);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>            out.cTag();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>            if (link != null)<a name="line.639"></a>
+<span class="sourceLineNo">640</span>               out.oTag(i+2, "a").attrUri("href", link.replace("{#}", StringUtils.toString(o))).cTag();<a name="line.640"></a>
+<span class="sourceLineNo">641</span>            ContentResult cr = serializeAnything(out, o, eType.getElementType(), name, 1, null, false);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>            if (link != null)<a name="line.642"></a>
+<span class="sourceLineNo">643</span>               out.eTag("a");<a name="line.643"></a>
+<span class="sourceLineNo">644</span>            if (cr == CR_NORMAL)<a name="line.644"></a>
+<span class="sourceLineNo">645</span>               out.ie(i+1);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>            out.eTag("li").nl(i+1);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>         }<a name="line.647"></a>
+<span class="sourceLineNo">648</span>         out.ie(i).eTag("ul").nl(i);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>   }<a name="line.650"></a>
+<span class="sourceLineNo">651</span><a name="line.651"></a>
+<span class="sourceLineNo">652</span>   private static HtmlRender&lt;?&gt; getRender(HtmlSerializerSession session, BeanPropertyMeta pMeta, Object value) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      if (pMeta == null)<a name="line.653"></a>
+<span class="sourceLineNo">654</span>         return null;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      HtmlBeanPropertyMeta hpMeta = pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      HtmlRender&lt;?&gt; render = hpMeta.getRender();<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      if (render != null)<a name="line.657"></a>
+<span class="sourceLineNo">658</span>         return render;<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      ClassMeta&lt;?&gt; cMeta = session.getClassMetaForObject(value);<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      render = cMeta == null ? null : cMeta.getExtendedMeta(HtmlClassMeta.class).getRender();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      return render;<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span>   @SuppressWarnings({"rawtypes","unchecked"})<a name="line.664"></a>
+<span class="sourceLineNo">665</span>   private static String getStyle(HtmlSerializerSession session, BeanPropertyMeta pMeta, Object value) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      HtmlRender render = getRender(session, pMeta, value);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      return render == null ? null : render.getStyle(session, value);<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   }<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>   private static String getLink(BeanPropertyMeta pMeta) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      return pMeta == null ? null : pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).getLink();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>   private static String getAnchorText(BeanPropertyMeta pMeta) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return pMeta == null ? null : pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).getAnchorText();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>   /*<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    * Returns the table column headers for the specified collection of objects.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    * Returns null if collection should not be serialized as a 2-dimensional table.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    * 2-dimensional tables are used for collections of objects that all have the same set of property names.<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   private Object[] getTableHeaders(Collection c, HtmlBeanPropertyMeta hbpMeta) throws Exception {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      if (c.size() == 0)<a name="line.685"></a>
 <span class="sourceLineNo">686</span>         return null;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      HtmlClassMeta h = cm.getExtendedMeta(HtmlClassMeta.class);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      if (h.isNoTables() || (hbpMeta != null &amp;&amp; hbpMeta.isNoTables()))<a name="line.688"></a>
-<span class="sourceLineNo">689</span>         return null;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      if (h.isNoTableHeaders() || (hbpMeta != null &amp;&amp; hbpMeta.isNoTableHeaders()))<a name="line.690"></a>
-<span class="sourceLineNo">691</span>         return new Object[0];<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      if (canIgnoreValue(cm, null, o1))<a name="line.692"></a>
-<span class="sourceLineNo">693</span>         return null;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      if (cm.isMap() &amp;&amp; ! cm.isBeanMap()) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>         Set&lt;Object&gt; set = new LinkedHashSet&lt;Object&gt;();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>         for (Object o : c) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>            if (! canIgnoreValue(cm, null, o)) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>               if (! cm.isInstance(o))<a name="line.698"></a>
-<span class="sourceLineNo">699</span>                  return null;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>               Map m = sort((Map)o);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>               for (Map.Entry e : (Set&lt;Map.Entry&gt;)m.entrySet()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>                  if (e.getValue() != null)<a name="line.702"></a>
-<span class="sourceLineNo">703</span>                     set.add(e.getKey() == null ? null : e.getKey());<a name="line.703"></a>
-<span class="sourceLineNo">704</span>               }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>            }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>         }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>         th = set.toArray(new Object[set.size()]);<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      } else {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>         Map&lt;String,Boolean&gt; m = new LinkedHashMap&lt;String,Boolean&gt;();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>         for (Object o : c) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>            if (! canIgnoreValue(cm, null, o)) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>               if (! cm.isInstance(o))<a name="line.712"></a>
-<span class="sourceLineNo">713</span>                  return null;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>               BeanMap&lt;?&gt; bm = (o instanceof BeanMap ? (BeanMap)o : toBeanMap(o));<a name="line.714"></a>
-<span class="sourceLineNo">715</span>               for (Map.Entry&lt;String,Object&gt; e : bm.entrySet()) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>                  String key = e.getKey();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>                  if (e.getValue() != null)<a name="line.717"></a>
-<span class="sourceLineNo">718</span>                     m.put(key, true);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>                  else if (! m.containsKey(key))<a name="line.719"></a>
-<span class="sourceLineNo">720</span>                     m.put(key, false);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>               }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>            }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>         }<a name="line.723"></a>
-<span class="sourceLineNo">724</span>         for (Iterator&lt;Boolean&gt; i = m.values().iterator(); i.hasNext();)<a name="line.724"></a>
-<span class="sourceLineNo">725</span>            if (! i.next())<a name="line.725"></a>
-<span class="sourceLineNo">726</span>               i.remove();<a name="line.726"></a>
-<span class="sourceLineNo">727</span>         th = m.keySet().toArray(new Object[m.size()]);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      prevC.add(cm);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      boolean isSortable = true;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      for (Object o : th)<a name="line.731"></a>
-<span class="sourceLineNo">732</span>         isSortable &amp;= (o instanceof Comparable);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      Set&lt;Object&gt; s = (isSortable ? new TreeSet&lt;Object&gt;() : new LinkedHashSet&lt;Object&gt;());<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      s.addAll(Arrays.asList(th));<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      for (Object o : c) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>         if (o == null)<a name="line.737"></a>
-<span class="sourceLineNo">738</span>            continue;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>         cm = getClassMetaForObject(o);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>         if (cm != null &amp;&amp; cm.getPojoSwap() != null) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            PojoSwap f = cm.getPojoSwap();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            o = f.swap(this, o);<a name="line.742"></a>
-<span class="sourceLineNo">743</span>            cm = cm.getSerializedClassMeta();<a name="line.743"></a>
+<span class="sourceLineNo">687</span>      c = sort(c);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Object[] th;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      Set&lt;ClassMeta&gt; prevC = new HashSet&lt;ClassMeta&gt;();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      Object o1 = null;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>      for (Object o : c)<a name="line.691"></a>
+<span class="sourceLineNo">692</span>         if (o != null) {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>            o1 = o;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>            break;<a name="line.694"></a>
+<span class="sourceLineNo">695</span>         }<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      if (o1 == null)<a name="line.696"></a>
+<span class="sourceLineNo">697</span>         return null;<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      ClassMeta&lt;?&gt; cm = getClassMetaForObject(o1);<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      if (cm.getPojoSwap() != null) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>         PojoSwap f = cm.getPojoSwap();<a name="line.700"></a>
+<span class="sourceLineNo">701</span>         o1 = f.swap(this, o1);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>         cm = cm.getSerializedClassMeta();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      if (cm == null || ! cm.isMapOrBean())<a name="line.704"></a>
+<span class="sourceLineNo">705</span>         return null;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      if (cm.getInnerClass().isAnnotationPresent(HtmlLink.class))<a name="line.706"></a>
+<span class="sourceLineNo">707</span>         return null;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      HtmlClassMeta h = cm.getExtendedMeta(HtmlClassMeta.class);<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      if (h.isNoTables() || (hbpMeta != null &amp;&amp; hbpMeta.isNoTables()))<a name="line.709"></a>
+<span class="sourceLineNo">710</span>         return null;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      if (h.isNoTableHeaders() || (hbpMeta != null &amp;&amp; hbpMeta.isNoTableHeaders()))<a name="line.711"></a>
+<span class="sourceLineNo">712</span>         return new Object[0];<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      if (canIgnoreValue(cm, null, o1))<a name="line.713"></a>
+<span class="sourceLineNo">714</span>         return null;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      if (cm.isMap() &amp;&amp; ! cm.isBeanMap()) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>         Set&lt;Object&gt; set = new LinkedHashSet&lt;Object&gt;();<a name="line.716"></a>
+<span class="sourceLineNo">717</span>         for (Object o : c) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>            if (! canIgnoreValue(cm, null, o)) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>               if (! cm.isInstance(o))<a name="line.719"></a>
+<span class="sourceLineNo">720</span>                  return null;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>               Map m = sort((Map)o);<a name="line.721"></a>
+<span class="sourceLineNo">722</span>               for (Map.Entry e : (Set&lt;Map.Entry&gt;)m.entrySet()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>                  if (e.getValue() != null)<a name="line.723"></a>
+<span class="sourceLineNo">724</span>                     set.add(e.getKey() == null ? null : e.getKey());<a name="line.724"></a>
+<span class="sourceLineNo">725</span>               }<a name="line.725"></a>
+<span class="sourceLineNo">726</span>            }<a name="line.726"></a>
+<span class="sourceLineNo">727</span>         }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>         th = set.toArray(new Object[set.size()]);<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      } else {<a name="line.729"></a>
+<span class="sourceLineNo">730</span>         Map&lt;String,Boolean&gt; m = new LinkedHashMap&lt;String,Boolean&gt;();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>         for (Object o : c) {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>            if (! canIgnoreValue(cm, null, o)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>               if (! cm.isInstance(o))<a name="line.733"></a>
+<span class="sourceLineNo">734</span>                  return null;<a name="line.734"></a>
+<span class="sourceLineNo">735</span>               BeanMap&lt;?&gt; bm = (o instanceof BeanMap ? (BeanMap)o : toBeanMap(o));<a name="line.735"></a>
+<span class="sourceLineNo">736</span>               for (Map.Entry&lt;String,Object&gt; e : bm.entrySet()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>                  String key = e.getKey();<a name="line.737"></a>
+<span class="sourceLineNo">738</span>                  if (e.getValue() != null)<a name="line.738"></a>
+<span class="sourceLineNo">739</span>                     m.put(key, true);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>                  else if (! m.containsKey(key))<a name="line.740"></a>
+<span class="sourceLineNo">741</span>                     m.put(key, false);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>               }<a name="line.742"></a>
+<span class="sourceLineNo">743</span>            }<a name="line.743"></a>
 <span class="sourceLineNo">744</span>         }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>         if (prevC.contains(cm))<a name="line.745"></a>
-<span class="sourceLineNo">746</span>            continue;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>         if (cm == null || ! (cm.isMap() || cm.isBean()))<a name="line.747"></a>
-<span class="sourceLineNo">748</span>            return null;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>         if (cm.getInnerClass().isAnnotationPresent(HtmlLink.class))<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            return null;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>         if (canIgnoreValue(cm, null, o))<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            return null;<a name="line.752"></a>
-<span class="sourceLineNo">753</span>         if (cm.isMap() &amp;&amp; ! cm.isBeanMap()) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>            Map m = (Map)o;<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (th.length != m.keySet().size())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>               return null;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            for (Object k : m.keySet())<a name="line.757"></a>
-<span class="sourceLineNo">758</span>               if (! s.contains(k.toString()))<a name="line.758"></a>
-<span class="sourceLineNo">759</span>                  return null;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>         } else {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            BeanMap&lt;?&gt; bm = (o instanceof BeanMap ? (BeanMap)o : toBeanMap(o));<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            int l = 0;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>            for (String k : bm.keySet()) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>               if (! s.contains(k))<a name="line.764"></a>
-<span class="sourceLineNo">765</span>                  return null;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>               l++;<a name="line.766"></a>
-<span class="sourceLineNo">767</span>            }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>            if (s.size() != l)<a name="line.768"></a>
-<span class="sourceLineNo">769</span>               return null;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>         }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return th;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>}<a name="line.774"></a>
+<span class="sourceLineNo">745</span>         for (Iterator&lt;Boolean&gt; i = m.values().iterator(); i.hasNext();)<a name="line.745"></a>
+<span class="sourceLineNo">746</span>            if (! i.next())<a name="line.746"></a>
+<span class="sourceLineNo">747</span>               i.remove();<a name="line.747"></a>
+<span class="sourceLineNo">748</span>         th = m.keySet().toArray(new Object[m.size()]);<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      prevC.add(cm);<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      boolean isSortable = true;<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      for (Object o : th)<a name="line.752"></a>
+<span class="sourceLineNo">753</span>         isSortable &amp;= (o instanceof Comparable);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      Set&lt;Object&gt; s = (isSortable ? new TreeSet&lt;Object&gt;() : new LinkedHashSet&lt;Object&gt;());<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      s.addAll(Arrays.asList(th));<a name="line.755"></a>
+<span class="sourceLineNo">756</span><a name="line.756"></a>
+<span class="sourceLineNo">757</span>      for (Object o : c) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>         if (o == null)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>            continue;<a name="line.759"></a>
+<span class="sourceLineNo">760</span>         cm = getClassMetaForObject(o);<a name="line.760"></a>
+<span class="sourceLineNo">761</span>         if (cm != null &amp;&amp; cm.getPojoSwap() != null) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>            PojoSwap f = cm.getPojoSwap();<a name="line.762"></a>
+<span class="sourceLineNo">763</span>            o = f.swap(this, o);<a name="line.763"></a>
+<span class="sourceLineNo">764</span>            cm = cm.getSerializedClassMeta();<a name="line.764"></a>
+<span class="sourceLineNo">765</span>         }<a name="line.765"></a>
+<span class="sourceLineNo">766</span>         if (prevC.contains(cm))<a name="line.766"></a>
+<span class="sourceLineNo">767</span>            continue;<a name="line.767"></a>
+<span class="sourceLineNo">768</span>         if (cm == null || ! (cm.isMap() || cm.isBean()))<a name="line.768"></a>
+<span class="sourceLineNo">769</span>            return null;<a name="line.769"></a>
+<span class="sourceLineNo">770</span>         if (cm.getInnerClass().isAnnotationPresent(HtmlLink.class))<a name="line.770"></a>
+<span class="sourceLineNo">771</span>            return null;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>         if (canIgnoreValue(cm, null, o))<a name="line.772"></a>
+<span class="sourceLineNo">773</span>            return null;<a name="line.773"></a>
+<span class="sourceLineNo">774</span>         if (cm.isMap() &amp;&amp; ! cm.isBeanMap()) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>            Map m = (Map)o;<a name="line.775"></a>
+<span class="sourceLineNo">776</span>            if (th.length != m.keySet().size())<a name="line.776"></a>
+<span class="sourceLineNo">777</span>               return null;<a name="line.777"></a>
+<span class="sourceLineNo">778</span>            for (Object k : m.keySet())<a name="line.778"></a>
+<span class="sourceLineNo">779</span>               if (! s.contains(k.toString()))<a name="line.779"></a>
+<span class="sourceLineNo">780</span>                  return null;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>         } else {<a name="line.781"></a>
+<span class="sourceLineNo">782</span>            BeanMap&lt;?&gt; bm = (o instanceof BeanMap ? (BeanMap)o : toBeanMap(o));<a name="line.782"></a>
+<span class="sourceLineNo">783</span>            int l = 0;<a name="line.783"></a>
+<span class="sourceLineNo">784</span>            for (String k : bm.keySet()) {<a name="line.784"></a>
+<span class="sourceLineNo">785</span>               if (! s.contains(k))<a name="line.785"></a>
+<span class="sourceLineNo">786</span>                  return null;<a name="line.786"></a>
+<span class="sourceLineNo">787</span>               l++;<a name="line.787"></a>
+<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>            if (s.size() != l)<a name="line.789"></a>
+<span class="sourceLineNo">790</span>               return null;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>         }<a name="line.791"></a>
+<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      return th;<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   }<a name="line.794"></a>
+<span class="sourceLineNo">795</span>}<a name="line.795"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/html/annotation/Html.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/html/annotation/Html.html b/content/site/apidocs/src-html/org/apache/juneau/html/annotation/Html.html
index 0038d40..6a0cb48 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/html/annotation/Html.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/html/annotation/Html.html
@@ -106,7 +106,26 @@
 <span class="sourceLineNo">098</span>    * &lt;/p&gt;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    */<a name="line.99"></a>
 <span class="sourceLineNo">100</span>   String link() default "";<a name="line.100"></a>
-<span class="sourceLineNo">101</span>}<a name="line.101"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>   /**<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * Use the specified anchor text when serializing a URI.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    *<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    * &lt;p&gt;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    * The text can contain any bean property values resolved through variables of the form &lt;js&gt;"{property-name}"&lt;/js&gt;.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    *<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    * &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    * &lt;p class='bcode'&gt;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    *    &lt;jk&gt;public class&lt;/jk&gt; FileSpace {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    *<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    *       &lt;ja&gt;@Html&lt;/ja&gt;(anchorText=&lt;js&gt;"drive/{drive}"&lt;/js&gt;)<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    *       &lt;jk&gt;public&lt;/jk&gt; String getDrive() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    *          ...;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    *       }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    * &lt;/p&gt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   String anchorText() default "";<a name="line.119"></a>
+<span class="sourceLineNo">120</span>}<a name="line.120"></a>
 
 
 


[17/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/HookEvent.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/HookEvent.html b/content/site/apidocs/org/apache/juneau/rest/annotation/HookEvent.html
new file mode 100644
index 0000000..fa47233
--- /dev/null
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/HookEvent.html
@@ -0,0 +1,783 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>HookEvent (Apache Juneau (incubating) 6.3.2-incubating-SNAPSHOT)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="HookEvent (Apache Juneau (incubating) 6.3.2-incubating-SNAPSHOT)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/rest/annotation/Header.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/HtmlDoc.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/HookEvent.html" target="_top">Frames</a></li>
+<li><a href="HookEvent.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.rest.annotation</div>
+<h2 title="Enum HookEvent" class="title">Enum HookEvent</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.juneau.rest.annotation.HookEvent</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>&gt;</dd>
+</dl>
+<hr>
+<br>
+<pre>public enum <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.34">HookEvent</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>&gt;</pre>
+<div class="block">Identifies servlet and REST call lifecycle events which cause <a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><code>@RestHook</code></a>-annotated Java methods
+ to be called.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!--   -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#DESTROY">DESTROY</a></span></code>
+<div class="block">Identifies a method that gets called during servlet destroy.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#END_CALL">END_CALL</a></span></code>
+<div class="block">Identifies a method that gets called right before we exit the servlet service method.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT">INIT</a></span></code>
+<div class="block">Identifies a method that gets called during servlet initialization.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_CALL">POST_CALL</a></span></code>
+<div class="block">Identifies a method that gets called immediately after the <ja>@RestMethod</ja> annotated method gets called.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT">POST_INIT</a></span></code>
+<div class="block">Identifies a method that gets called immediately after servlet initialization.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT_CHILD_FIRST">POST_INIT_CHILD_FIRST</a></span></code>
+<div class="block">Identical to <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT"><code>POST_INIT</code></a> except the order of execution is child-resources first.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#PRE_CALL">PRE_CALL</a></span></code>
+<div class="block">Identifies a method that gets called immediately before the <ja>@RestMethod</ja> annotated method gets called.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#START_CALL">START_CALL</a></span></code>
+<div class="block">Identifies a method that should be called immediately after the <code>HttpServlet.service(HttpServletRequest, HttpServletResponse)</code>
+ method is called.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#compareTo-E-" title="class or interface in java.lang">compareTo</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass--" title="class or interface in java.lang">getDeclaringClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/
 api/java/lang/Enum.html?is-external=true#name--" title="class or interface in java.lang">name</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#ordinal--" title="class or interface in java.lang">ordinal</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true#valueOf-java.lang.Class-java.lang.String-" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!--   -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="START_CALL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>START_CALL</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.80">START_CALL</a></pre>
+<div class="block">Identifies a method that should be called immediately after the <code>HttpServlet.service(HttpServletRequest, HttpServletResponse)</code>
+ method is called.
+
+ <p>
+ Note that you only have access to the raw request and response objects at this point.
+
+ <p>
+ The list of valid parameter types are as follows:
+ <ul>
+   <li>Servlet request/response objects:
+      <ul>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletRequest</code></a>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletResponse</code></a>
+      </ul>
+ </ul>
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> MyResource <jk>extends</jk> RestServletDefault {
+
+      <jc>// Add a request attribute to all incoming requests.</jc>
+      <ja>@RestHook</ja>(<jsf>START_CALL</jsf>)
+      <jk>public void</jk> onStartCall(HttpServletRequest req) {
+         req.setAttribute(<js>"foobar"</js>, <jk>new</jk> FooBar());
+      }
+   }
+ </p>
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple START_CALL methods can be defined on a class.
+      <br>START_CALL methods on parent classes are invoked before START_CALL methods on child classes.
+      <br>The order of START_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception.
+      <br><a href="../../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest"><code>RestExceptions</code></a> can be thrown to cause a particular HTTP error status code.
+      <br>All other exceptions cause an HTTP 500 error status code.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+ </ul></div>
+</li>
+</ul>
+<a name="PRE_CALL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PRE_CALL</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.191">PRE_CALL</a></pre>
+<div class="block">Identifies a method that gets called immediately before the <ja>@RestMethod</ja> annotated method gets called.
+
+ <p>
+ At this point, the <a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest"><code>RestRequest</code></a> object has been fully initialized, and all <a href="../../../../../org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest"><code>RestGuard</code></a> and
+ <a href="../../../../../org/apache/juneau/rest/RestMatcher.html" title="class in org.apache.juneau.rest"><code>RestMatcher</code></a> objects have been called.
+
+ <p>
+ The list of valid parameter types are as follows:
+ <ul>
+   <li>Servlet request/response objects:
+      <ul>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletRequest</code></a>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletResponse</code></a>
+      </ul>
+   <li>Extended request/response objects:
+      <ul>
+         <li><a href="../../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest"><code>RestRequest</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest"><code>RestResponse</code></a>
+      </ul>
+   <li>Header objects:
+      <ul>
+         <li><a href="../../../../../org/apache/juneau/http/Accept.html" title="class in org.apache.juneau.http"><code>Accept</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/AcceptCharset.html" title="class in org.apache.juneau.http"><code>AcceptCharset</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/AcceptEncoding.html" title="class in org.apache.juneau.http"><code>AcceptEncoding</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/AcceptLanguage.html" title="class in org.apache.juneau.http"><code>AcceptLanguage</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Authorization.html" title="class in org.apache.juneau.http"><code>Authorization</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/CacheControl.html" title="class in org.apache.juneau.http"><code>CacheControl</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Connection.html" title="class in org.apache.juneau.http"><code>Connection</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/ContentLength.html" title="class in org.apache.juneau.http"><code>ContentLength</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/ContentType.html" title="class in org.apache.juneau.http"><code>ContentType</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Date.html" title="class in org.apache.juneau.http"><code>Date</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Expect.html" title="class in org.apache.juneau.http"><code>Expect</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/From.html" title="class in org.apache.juneau.http"><code>From</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Host.html" title="class in org.apache.juneau.http"><code>Host</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/IfMatch.html" title="class in org.apache.juneau.http"><code>IfMatch</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/IfModifiedSince.html" title="class in org.apache.juneau.http"><code>IfModifiedSince</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/IfNoneMatch.html" title="class in org.apache.juneau.http"><code>IfNoneMatch</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/IfRange.html" title="class in org.apache.juneau.http"><code>IfRange</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/IfUnmodifiedSince.html" title="class in org.apache.juneau.http"><code>IfUnmodifiedSince</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/MaxForwards.html" title="class in org.apache.juneau.http"><code>MaxForwards</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Pragma.html" title="class in org.apache.juneau.http"><code>Pragma</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/ProxyAuthorization.html" title="class in org.apache.juneau.http"><code>ProxyAuthorization</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Range.html" title="class in org.apache.juneau.http"><code>Range</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Referer.html" title="class in org.apache.juneau.http"><code>Referer</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/TE.html" title="class in org.apache.juneau.http"><code>TE</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/UserAgent.html" title="class in org.apache.juneau.http"><code>UserAgent</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Upgrade.html" title="class in org.apache.juneau.http"><code>Upgrade</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Via.html" title="class in org.apache.juneau.http"><code>Via</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/Warning.html" title="class in org.apache.juneau.http"><code>Warning</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html?is-external=true" title="class or interface in java.util"><code>TimeZone</code></a>
+      </ul>
+   <li>Other objects:
+      <ul>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html?is-external=true" title="class or interface in java.util"><code>ResourceBundle</code></a>
+         <li><a href="../../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils"><code>MessageBundle</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletInputStream.html?is-external=true" title="class or interface in javax.servlet"><code>ServletInputStream</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletOutputStream.html?is-external=true" title="class or interface in javax.servlet"><code>ServletOutputStream</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RequestHeaders.html" title="class in org.apache.juneau.rest"><code>RequestHeaders</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RequestQuery.html" title="class in org.apache.juneau.rest"><code>RequestQuery</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RequestFormData.html" title="class in org.apache.juneau.rest"><code>RequestFormData</code></a>
+         <li><a href="../../../../../org/apache/juneau/http/HttpMethod.html" title="enum in org.apache.juneau.http"><code>HttpMethod</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Logger.html?is-external=true" title="class or interface in java.util.logging"><code>Logger</code></a>
+         <li><a href="../../../../../org/apache/juneau/internal/JuneauLogger.html" title="class in org.apache.juneau.internal"><code>JuneauLogger</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a>
+         <li><a href="../../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser"><code>Parser</code></a>
+         <li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util"><code>Locale</code></a>
+         <li><a href="../../../../../org/apache/juneau/dto/swagger/Swagger.html" title="class in org.apache.juneau.dto.swagger"><code>Swagger</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RequestPathMatch.html" title="class in org.apache.juneau.rest"><code>RequestPathMatch</code></a>
+         <li><a href="../../../../../org/apache/juneau/rest/RequestBody.html" title="class in org.apache.juneau.rest"><code>RequestBody</code></a>
+         <li><a href="../../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini"><code>ConfigFile</code></a>
+         <li><a href="../../../../../org/apache/juneau/UriContext.html" title="class in org.apache.juneau"><code>UriContext</code></a>
+         <li><a href="../../../../../org/apache/juneau/UriResolver.html" title="class in org.apache.juneau"><code>UriResolver</code></a>
+      </ul>
+ </ul>
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> MyResource <jk>extends</jk> RestServletDefault {
+
+      <jc>// Log the incoming request.</jc>
+      <ja>@RestHook</ja>(<jsf>PRE_CALL</jsf>)
+      <jk>public void</jk> onPreCall(Accept accept, Logger logger) {
+         logger.fine(<js>"Accept {0} header found."</js>, accept);
+      }
+   }
+ </p>
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple PRE_CALL methods can be defined on a class.
+      <br>PRE_CALL methods on parent classes are invoked before PRE_CALL methods on child classes.
+      <br>The order of PRE_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception.
+      <br><a href="../../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest"><code>RestExceptions</code></a> can be thrown to cause a particular HTTP error status code.
+      <br>All other exceptions cause an HTTP 500 error status code.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+   <li>It's advisable not to mess around with the HTTP body itself since you may end up consuming the body
+      before the actual REST method has a chance to use it.
+ </ul></div>
+</li>
+</ul>
+<a name="POST_CALL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>POST_CALL</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.228">POST_CALL</a></pre>
+<div class="block">Identifies a method that gets called immediately after the <ja>@RestMethod</ja> annotated method gets called.
+
+ <p>
+ At this point, the output object returned by the method call has been set on the response, but
+ <a href="../../../../../org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest"><code>RestConverters</code></a> have not yet been executed and the response has not yet been written.
+
+ <p>
+ The list of valid parameter types are the same as <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#PRE_CALL"><code>PRE_CALL</code></a>.
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> MyResource <jk>extends</jk> RestServletDefault {
+
+      <jc>// Log the result of the request.</jc>
+      <ja>@RestHook</ja>(<jsf>POST_CALL</jsf>)
+      <jk>public void</jk> onPostCall(RestResponse res, Logger logger) {
+         logger.fine(<js>Output {0} was set on the response."</js>, res.getOutput());
+      }
+   }
+ </p>
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple POST_CALL methods can be defined on a class.
+      <br>POST_CALL methods on parent classes are invoked before POST_CALL methods on child classes.
+      <br>The order of POST_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception, although at this point it is too late to set an HTTP error status code.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+ </ul></div>
+</li>
+</ul>
+<a name="END_CALL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>END_CALL</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.283">END_CALL</a></pre>
+<div class="block">Identifies a method that gets called right before we exit the servlet service method.
+
+ <p>
+ At this point, the output has been written and flushed.
+
+ <p>
+ The list of valid parameter types are as follows:
+ <ul>
+   <li>Servlet request/response objects:
+      <ul>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletRequest</code></a>
+         <li><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletResponse</code></a>
+      </ul>
+ </ul>
+
+ <p>
+ The following attributes are set on the <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http"><code>HttpServletRequest</code></a> object that can be useful for logging purposes:
+ <ul>
+   <li><js>"Exception"</js> - Any exceptions thrown during the request.
+   <li><js>"ExecTime"</js> - Execution time of the request.
+ </ul>
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> MyResource <jk>extends</jk> RestServletDefault {
+
+      <jc>// Log the time it took to execute the request.</jc>
+      <ja>@RestHook</ja>(<jsf>END_CALL</jsf>)
+      <jk>public void</jk> onEndCall(RestRequest req, Logger logger) {
+         Exception e = (Exception)req.getAttribute(<js>"Exception"</js>);
+         Long execTime = (Long)req.getAttribute(<js>"ExecTime"</js>);
+         <jk>if</jk> (e != <jk>null</jk>)
+            logger.warn(e, <js>"Request failed in {0}ms."</js>, execTime);
+         <jk>else</jk>
+            logger.fine(<js>"Request finished in {0}ms."</js>, execTime);
+      }
+   }
+ </p>
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple END_CALL methods can be defined on a class.
+      <br>END_CALL methods on parent classes are invoked before END_CALL methods on child classes.
+      <br>The order of END_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception, although at this point it is too late to set an HTTP error status code.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+ </ul></div>
+</li>
+</ul>
+<a name="INIT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>INIT</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.328">INIT</a></pre>
+<div class="block">Identifies a method that gets called during servlet initialization.
+
+ <p>
+ This method is called from within the <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> method after the <a href="../../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest"><code>RestConfig</code></a>
+ object has been created and initialized with the annotations defined on the class, but before the
+ <a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a> object has been created.
+
+ <p>
+ The only valid parameter type for this method is <a href="../../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest"><code>RestConfig</code></a> which can be used to configure the servlet.
+
+ <p>
+ An example of this is the <code>PetStoreResource</code> class that uses an init method to perform initialization
+ of an internal data structure.
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> PetStoreResource <jk>extends</jk> ResourceJena {
+
+      <jc>// Our database.</jc>
+      <jk>private</jk> Map<Integer,Pet> <jf>petDB</jf>;
+
+      <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+      <jk>public void</jk> onInit(RestConfig config) <jk>throws</jk> Exception {
+         <jc>// Load our database from a local JSON file.</jc>
+         <jf>petDB</jf> = JsonParser.<jsf>DEFAULT</jsf>.parse(getClass().getResourceAsStream(<js>"PetStore.json"</js>), LinkedHashMap.<jk>class</jk>, Integer.<jk>class</jk>, Pet.<jk>class</jk>);
+      }
+   }
+ </p>
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple INIT methods can be defined on a class.
+      <br>INIT methods on parent classes are invoked before INIT methods on child classes.
+      <br>The order of INIT method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception causing initialization of the servlet to fail.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+ </ul></div>
+</li>
+</ul>
+<a name="POST_INIT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>POST_INIT</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.353">POST_INIT</a></pre>
+<div class="block">Identifies a method that gets called immediately after servlet initialization.
+
+ <p>
+ This method is called from within the <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> method after the <a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a>
+ object has been created.
+
+ <p>
+ The only valid parameter type for this method is <a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a> which can be used to retrieve information
+ about the servlet.
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple POST_INIT methods can be defined on a class.
+      <br>POST_INIT methods on parent classes are invoked before POST_INIT methods on child classes.
+      <br>The order of POST_INIT method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception causing initialization of the servlet to fail.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+ </ul></div>
+</li>
+</ul>
+<a name="POST_INIT_CHILD_FIRST">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>POST_INIT_CHILD_FIRST</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.378">POST_INIT_CHILD_FIRST</a></pre>
+<div class="block">Identical to <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT"><code>POST_INIT</code></a> except the order of execution is child-resources first.
+
+ <p>
+ Use this annotation if you need to perform any kind of initialization on child resources before the parent resource.
+
+ <p>
+ This method is called from within the <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> method after the <a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a>
+ object has been created and after the <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT"><code>POST_INIT</code></a> methods have been called.
+
+ <p>
+ The only valid parameter type for this method is <a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a> which can be used to retrieve information
+ about the servlet.
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple POST_INIT_CHILD_FIRST methods can be defined on a class.
+      <br>POST_INIT_CHILD_FIRST methods on parent classes are invoked before POST_INIT_CHILD_FIRST methods on child classes.
+      <br>The order of POST_INIT_CHILD_FIRST method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>The method can throw any exception causing initialization of the servlet to fail.
+ </ul></div>
+</li>
+</ul>
+<a name="DESTROY">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DESTROY</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a> <a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.418">DESTROY</a></pre>
+<div class="block">Identifies a method that gets called during servlet destroy.
+
+ <p>
+ This method is called from within the <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#destroy--" title="class or interface in javax.servlet"><code>Servlet.destroy()</code></a>.
+
+ <p>
+ The only valid parameter type for this method is <a href="../../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest"><code>RestContext</code></a>, although typically no arguments will
+ be specified.
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> PetStoreResource <jk>extends</jk> ResourceJena {
+
+      <jc>// Our database.</jc>
+      <jk>private</jk> Map<Integer,Pet> <jf>petDB</jf>;
+
+      <ja>@RestHook</ja>(<jsf>DESTROY</jsf>)
+      <jk>public void</jk> onDestroy() {
+         <jf>petDB</jf> = <jk>null</jk>;
+      }
+   }
+ </p>
+
+ <h5 class='section'>Notes:</h5>
+ <ul class='spaced-list'>
+   <li>If the method returns any value, it is ignored.
+   <li>Multiple DESTROY methods can be defined on a class.
+      <br>DESTROY methods on child classes are invoked before DESTROY methods on parent classes.
+      <br>The order of DESTROY method invocations within a class is alphabetical, then by parameter count, then by parameter types.
+   <li>In general, destroy methods should not throw any exceptions, although if any are thrown, the stack trace will be
+      printed to <code>System.err</code>.
+   <li>Note that if you override a parent method, you probably need to call <code><jk>super</jk>.parentMethod(...)</code>.
+      <br>The method is still considered part of the parent class for ordering purposes even though it's
+      overridden by the child class.
+ </ul></div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>[]&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.34">values</a>()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for (HookEvent c : HookEvent.values())
+&nbsp;   System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/annotation/HookEvent.html#line.34">valueOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant with the specified name</dd>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/rest/annotation/Header.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/HtmlDoc.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/HookEvent.html" target="_top">Frames</a></li>
+<li><a href="HookEvent.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2017 <a href="http://www.apache.org/">Apache</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/HtmlDoc.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/HtmlDoc.html b/content/site/apidocs/org/apache/juneau/rest/annotation/HtmlDoc.html
index d2324b0..7780b9e 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/HtmlDoc.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/HtmlDoc.html
@@ -42,7 +42,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/juneau/rest/annotation/Header.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -817,7 +817,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/juneau/rest/annotation/Header.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/Response.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/Response.html b/content/site/apidocs/org/apache/juneau/rest/annotation/Response.html
index 3574059..a64ddf7 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/Response.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/Response.html
@@ -43,7 +43,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/juneau/rest/annotation/ResourceSwagger.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/Response.html" target="_top">Frames</a></li>
@@ -312,7 +312,7 @@ public @interface <a href="../../../../../src-html/org/apache/juneau/rest/annota
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/juneau/rest/annotation/ResourceSwagger.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/Response.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/RestHook.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/RestHook.html b/content/site/apidocs/org/apache/juneau/rest/annotation/RestHook.html
new file mode 100644
index 0000000..27d277f
--- /dev/null
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/RestHook.html
@@ -0,0 +1,271 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RestHook (Apache Juneau (incubating) 6.3.2-incubating-SNAPSHOT)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="RestHook (Apache Juneau (incubating) 6.3.2-incubating-SNAPSHOT)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/rest/annotation/Response.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/RestHook.html" target="_top">Frames</a></li>
+<li><a href="RestHook.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#annotation.type.required.element.summary">Required</a>&nbsp;|&nbsp;</li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.juneau.rest.annotation</div>
+<h2 title="Annotation Type RestHook" class="title">Annotation Type RestHook</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Documented.html?is-external=true" title="class or interface in java.lang.annotation">@Documented</a>
+ <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
+ <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
+ <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html?is-external=true" title="class or interface in java.lang.annotation">@Inherited</a>
+public @interface <a href="../../../../../src-html/org/apache/juneau/rest/annotation/RestHook.html#line.80">RestHook</a></pre>
+<div class="block">Identifies Java methods on a resource/servlet class that get invoked during particular lifecycle events of
+ the servlet or REST call.
+
+ <p>
+ For example, if you want to add an initialization method to your resource:
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> MyResource  {
+
+      <jc>// Our database.</jc>
+      <jk>private</jk> Map&lt;Integer,Object&gt; <jf>myDatabase</jf>;
+
+      <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+      <jk>public void</jk> initMyDatabase(RestConfig config) <jk>throws</jk> Exception {
+         <jf>myDatabase</jf> = <jk>new</jk> LinkedHashMap&lt;&gt;();
+      }
+   }
+ </p>
+
+ <p>
+ Or if you want to intercept REST calls:
+ <p class='bcode'>
+   <ja>@RestResource</ja>(...)
+   <jk>public class</jk> MyResource {
+
+      <jc>// Add a request attribute to all incoming requests.</jc>
+      <ja>@RestHook</ja>(<jsf>PRE_CALL</jsf>)
+      <jk>public void</jk> onPreCall(RestRequest req) {
+         req.setAttribute(<js>"foo"</js>, <js>"bar"</js>);
+      }
+   }
+ </p>
+
+ <p>
+ The hook events can be broken down into two categories:
+ <ul class='spaced-list'>
+   <li>Resource lifecycle events:
+      <ul>
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT"><code>INIT</code></a> - Right before initialization.
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT"><code>POST_INIT</code></a> - Right after initialization.
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT_CHILD_FIRST"><code>POST_INIT_CHILD_FIRST</code></a> - Right after initialization, but run child methods first.
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#DESTROY"><code>DESTROY</code></a> - Right before servlet destroy.
+      </ul>
+   <li>REST call lifecycle events:
+      <ul>
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#START_CALL"><code>START_CALL</code></a> - At the beginning of a REST call.
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#PRE_CALL"><code>PRE_CALL</code></a> - Right before the <ja>@RestMethod</ja> method is invoked.
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#POST_CALL"><code>POST_CALL</code></a> - Right after the <ja>@RestMethod</ja> method is invoked.
+         <li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html#END_CALL"><code>END_CALL</code></a> - At the end of the REST call after the response has been flushed.
+      </ul>
+ </ul>
+
+ <p>
+ See the <a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><code>HookEvent</code></a> class for information about individual event types.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.required.element.summary">
+<!--   -->
+</a>
+<h3>Required Element Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Required Element Summary table, listing required elements, and an explanation">
+<caption><span>Required Elements</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Required Element and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html#value--">value</a></span></code>
+<div class="block">The lifecycle event.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="annotation.type.element.detail">
+<!--   -->
+</a>
+<h3>Element Detail</h3>
+<a name="value--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>value</h4>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/rest/annotation/RestHook.html#line.85">value</a></pre>
+<div class="block">The lifecycle event.</div>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/juneau/rest/annotation/Response.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/RestHook.html" target="_top">Frames</a></li>
+<li><a href="RestHook.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#annotation.type.required.element.summary">Required</a>&nbsp;|&nbsp;</li>
+<li>Optional</li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#annotation.type.element.detail">Element</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2017 <a href="http://www.apache.org/">Apache</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/RestMethod.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/RestMethod.html b/content/site/apidocs/org/apache/juneau/rest/annotation/RestMethod.html
index 3560208..ab1860b 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/RestMethod.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/RestMethod.html
@@ -42,7 +42,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/juneau/rest/annotation/Response.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -1223,7 +1223,7 @@ public @interface <a href="../../../../../src-html/org/apache/juneau/rest/annota
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/juneau/rest/annotation/Response.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/package-frame.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/package-frame.html b/content/site/apidocs/org/apache/juneau/rest/annotation/package-frame.html
index 472d1ba..040b5fa 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/package-frame.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/package-frame.html
@@ -13,6 +13,7 @@
 <div class="indexContainer">
 <h2 title="Enums">Enums</h2>
 <ul title="Enums">
+<li><a href="HookEvent.html" title="enum in org.apache.juneau.rest.annotation" target="classFrame">HookEvent</a></li>
 <li><a href="Inherit.html" title="enum in org.apache.juneau.rest.annotation" target="classFrame">Inherit</a></li>
 </ul>
 <h2 title="Annotation Types">Annotation Types</h2>
@@ -34,6 +35,7 @@
 <li><a href="Query.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">Query</a></li>
 <li><a href="ResourceSwagger.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">ResourceSwagger</a></li>
 <li><a href="Response.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">Response</a></li>
+<li><a href="RestHook.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">RestHook</a></li>
 <li><a href="RestMethod.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">RestMethod</a></li>
 <li><a href="RestResource.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">RestResource</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/package-summary.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/package-summary.html b/content/site/apidocs/org/apache/juneau/rest/annotation/package-summary.html
index ee2a78c..0ee879a 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/package-summary.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/package-summary.html
@@ -86,6 +86,13 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a></td>
+<td class="colLast">
+<div class="block">Identifies servlet and REST call lifecycle events which cause <a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><code>@RestHook</code></a>-annotated Java methods
+ to be called.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation">Inherit</a></td>
 <td class="colLast">
 <div class="block">Inheritance values for the <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#serializersInherit--"><code>RestMethod.serializersInherit()</code></a> and <a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html#parsersInherit--"><code>RestMethod.parsersInherit()</code></a>
@@ -218,12 +225,19 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation">RestHook</a></td>
+<td class="colLast">
+<div class="block">Identifies Java methods on a resource/servlet class that get invoked during particular lifecycle events of
+ the servlet or REST call.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation">RestMethod</a></td>
 <td class="colLast">
 <div class="block">Identifies a REST Java method on a <a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> implementation class.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">RestResource</a></td>
 <td class="colLast">
 <div class="block">Used to denote that a class is a REST resource and to associate metadata on it.</div>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/package-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/package-tree.html b/content/site/apidocs/org/apache/juneau/rest/annotation/package-tree.html
index bb129dd..edc2875 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/package-tree.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/package-tree.html
@@ -80,6 +80,7 @@
 <ul>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestResource</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestMethod</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestHook</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/Response.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Response</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/ResourceSwagger.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">ResourceSwagger</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/Query.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Query</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
@@ -105,6 +106,7 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Inherit</span></a></li>
+<li type="circle">org.apache.juneau.rest.annotation.<a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">HookEvent</span></a></li>
 </ul>
 </li>
 </ul>


[24/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/internal/ClassUtils.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/internal/ClassUtils.html b/content/site/apidocs/org/apache/juneau/internal/ClassUtils.html
index 2950f8b..eec364a 100644
--- a/content/site/apidocs/org/apache/juneau/internal/ClassUtils.html
+++ b/content/site/apidocs/org/apache/juneau/internal/ClassUtils.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9,"i34":9,"i35":9,"i36":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9,"i34":9,"i35":9,"i36":9,"i37":9,"i38":9,"i39":9,"i40":9,"i41":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -174,27 +174,34 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#assertArgsOfType-java.lang.reflect.Method-java.lang.Class...-">assertArgsOfType</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m,
+                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;args)</code>
+<div class="block">Throws an <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><code>IllegalArgumentException</code></a> if the parameters on the method are not in the specified list provided.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a>&lt;T&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#findNoArgConstructor-java.lang.Class-org.apache.juneau.Visibility-">findNoArgConstructor</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
                     <a href="../../../../org/apache/juneau/Visibility.html" title="enum in org.apache.juneau">Visibility</a>&nbsp;v)</code>
 <div class="block">Locates the no-arg constructor for the specified class.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a>&lt;T&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#findPublicConstructor-java.lang.Class-java.lang.Class...-">findPublicConstructor</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;parameterTypes)</code>
 <div class="block">Finds a public constructor with the specified parameters without throwing an exception.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a>&lt;T&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#findPublicConstructor-java.lang.Class-java.lang.Object...-">findPublicConstructor</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</code>
 <div class="block">Finds the public constructor that can take in the specified arguments.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#findPublicMethod-java.lang.Class-java.lang.String-java.lang.Class-java.lang.Class...-">findPublicMethod</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c,
                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
@@ -203,34 +210,34 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Finds a public method with the specified parameters.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getAllFields-java.lang.Class-boolean-">getAllFields</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;c,
             boolean&nbsp;parentFirst)</code>
 <div class="block">Returns all the fields in the specified class and all parent classes.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getAllMethods-java.lang.Class-boolean-">getAllMethods</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;c,
              boolean&nbsp;parentFirst)</code>
 <div class="block">Returns all the methods in the specified class and all parent classes.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getClasses-java.lang.Object...-">getClasses</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</code>
 <div class="block">Returns the class types for the specified arguments.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getClassFromReadableName-java.lang.ClassLoader-java.lang.String-">getClassFromReadableName</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html?is-external=true" title="class or interface in java.lang">ClassLoader</a>&nbsp;cl,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Converts the string generated by <a href="../../../../org/apache/juneau/internal/ClassUtils.html#getReadableClassName-java.lang.Class-"><code>getReadableClassName(Class)</code></a> back into a <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a>.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>static &lt;T extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>&gt;<br>T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getMethodAnnotation-java.lang.Class-java.lang.Class-java.lang.reflect.Method-">getMethodAnnotation</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;a,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c,
@@ -238,32 +245,32 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Returns the specified annotation on the specified method.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>static &lt;T extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>&gt;<br>T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getMethodAnnotation-java.lang.Class-java.lang.reflect.Method-">getMethodAnnotation</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;a,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
 <div class="block">Returns the specified annotation on the specified method.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/juneau/internal/ClassUtils.MethodInfo.html" title="class in org.apache.juneau.internal">ClassUtils.MethodInfo</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getMethodInfo-java.util.Collection-">getMethodInfo</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&gt;&nbsp;m)</code>
 <div class="block">Returns <a href="../../../../org/apache/juneau/internal/ClassUtils.MethodInfo.html" title="class in org.apache.juneau.internal"><code>ClassUtils.MethodInfo</code></a> beans that describe the specified methods.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/juneau/internal/ClassUtils.MethodInfo.html" title="class in org.apache.juneau.internal">ClassUtils.MethodInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getMethodInfo-java.lang.reflect.Method-">getMethodInfo</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
 <div class="block">Returns a <a href="../../../../org/apache/juneau/internal/ClassUtils.MethodInfo.html" title="class in org.apache.juneau.internal"><code>ClassUtils.MethodInfo</code></a> bean that describes the specified method.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getMethodSignature-java.lang.reflect.Method-">getMethodSignature</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
 <div class="block">Returns the signature of the specified method.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getParentClasses-java.lang.Class-boolean-boolean-">getParentClasses</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c,
                 boolean&nbsp;parentFirst,
@@ -271,86 +278,86 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Returns a list of all the parent classes of the specified class including the class itself.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getPrimitiveDefault-java.lang.Class-">getPrimitiveDefault</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;primitiveClass)</code>
 <div class="block">Returns the default value for the specified primitive class.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getPrimitiveForWrapper-java.lang.Class-">getPrimitiveForWrapper</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">If the specified class is a primitive wrapper (e.g.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getPrimitiveWrapper-java.lang.Class-">getPrimitiveWrapper</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">If the specified class is a primitive (e.g.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getReadableClassName-java.lang.Class-">getReadableClassName</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Shortcut for calling <code><jsm>getReadableClassName</jsm>(c.getName())</code></div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getReadableClassName-java.lang.String-">getReadableClassName</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</code>
 <div class="block">Converts the specified class name to a readable form when class name is a special construct like <js>"[[Z"</js>.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getReadableClassNameForObject-java.lang.Object-">getReadableClassNameForObject</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</code>
 <div class="block">Shortcut for calling <code><jsm>getReadableClassName</jsm>(c.getClass().getName())</code></div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/juneau/ObjectList.html" title="class in org.apache.juneau">ObjectList</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getReadableClassNames-java.lang.Object:A-">getReadableClassNames</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;o)</code>
 <div class="block">Given the specified list of objects, return readable names for the class types of the objects.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#getWrapperIfPrimitive-java.lang.Class-">getWrapperIfPrimitive</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">If the specified class is a primitive (e.g.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isAbstract-java.lang.Class-">isAbstract</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Returns <jk>true</jk> if the specified class is abstract.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isNotDeprecated-java.lang.Class-">isNotDeprecated</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Returns <jk>true</jk> if the specified class has the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang"><code>@Deprecated</code></a> annotation on it.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isNotDeprecated-java.lang.reflect.Constructor-">isNotDeprecated</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Returns <jk>true</jk> if the specified constructor has the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang"><code>@Deprecated</code></a> annotation on it.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isNotDeprecated-java.lang.reflect.Method-">isNotDeprecated</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
 <div class="block">Returns <jk>true</jk> if the specified method has the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang"><code>@Deprecated</code></a> annotation on it.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isParentClass-java.lang.Class-java.lang.Class-">isParentClass</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;parent,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;child)</code>
 <div class="block">Returns <jk>true</jk> if <code>parent</code> is a parent class or the same as <code>child</code>.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isParentClass-java.lang.Class-java.lang.Class-boolean-">isParentClass</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;parent,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;child,
@@ -358,44 +365,44 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Returns <jk>true</jk> if <code>parent</code> is a parent class of <code>child</code>.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isParentClass-java.lang.Class-java.lang.reflect.Type-">isParentClass</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;parent,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Type.html?is-external=true" title="class or interface in java.lang.reflect">Type</a>&nbsp;child)</code>
 <div class="block">Returns <jk>true</jk> if <code>parent</code> is a parent class or the same as <code>child</code>.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isPublic-java.lang.Class-">isPublic</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Returns <jk>true</jk> if the specified class is public.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isPublic-java.lang.reflect.Constructor-">isPublic</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Constructor.html?is-external=true" title="class or interface in java.lang.reflect">Constructor</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Returns <jk>true</jk> if the specified constructor is public.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isPublic-java.lang.reflect.Method-">isPublic</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
 <div class="block">Returns <jk>true</jk> if the specified method is public.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isStatic-java.lang.Class-">isStatic</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
 <div class="block">Returns <jk>true</jk> if the specified class is public.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#isStatic-java.lang.reflect.Method-">isStatic</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
 <div class="block">Returns <jk>true</jk> if the specified method is static.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#newInstance-java.lang.Class-java.lang.Object-java.lang.Object...-">newInstance</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;c2,
@@ -403,7 +410,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Creates an instance of the specified class without throwing exceptions.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#newInstanceFromOuter-java.lang.Object-java.lang.Class-java.lang.Object-java.lang.Object...-">newInstanceFromOuter</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;outer,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
@@ -412,7 +419,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Creates an instance of the specified class from within the context of another object.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#resolveParameterType-java.lang.Class-int-java.lang.Class-">resolveParameterType</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c,
                     int&nbsp;index,
@@ -420,6 +427,30 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Finds the real parameter type of the specified class.</div>
 </td>
 </tr>
+<tr id="i38" class="altColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#sort-java.lang.reflect.Field:A-">sort</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>[]&nbsp;m)</code>
+<div class="block">Sorts methods in alphabetical order.</div>
+</td>
+</tr>
+<tr id="i39" class="rowColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#sort-java.lang.reflect.Method:A-">sort</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>[]&nbsp;m)</code>
+<div class="block">Sorts methods in alphabetical order.</div>
+</td>
+</tr>
+<tr id="i40" class="altColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#toString-java.lang.reflect.Field-">toString</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>&nbsp;f)</code>
+<div class="block">Returns a readable representation of the specified field.</div>
+</td>
+</tr>
+<tr id="i41" class="rowColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/internal/ClassUtils.html#toString-java.lang.reflect.Method-">toString</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</code>
+<div class="block">Returns a readable representation of the specified method.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -1099,9 +1130,12 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllFields</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.841">getAllFields</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;c,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.844">getAllFields</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;c,
                                            boolean&nbsp;parentFirst)</pre>
-<div class="block">Returns all the fields in the specified class and all parent classes.</div>
+<div class="block">Returns all the fields in the specified class and all parent classes.
+
+ <p>
+ Fields are ordered in either parent-to-child, or child-to-parent order, then alphabetically.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>c</code> - The class to get all fields on.</dd>
@@ -1117,9 +1151,12 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllMethods</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.896">getAllMethods</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;c,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.902">getAllMethods</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&nbsp;c,
                                              boolean&nbsp;parentFirst)</pre>
-<div class="block">Returns all the methods in the specified class and all parent classes.</div>
+<div class="block">Returns all the methods in the specified class and all parent classes.
+
+ <p>
+ Methods are ordered in either parent-to-child, or child-to-parent order, then alphabetically.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>c</code> - The class to get all methods on.</dd>
@@ -1129,13 +1166,45 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="sort-java.lang.reflect.Method:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sort</h4>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.972">sort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>[]&nbsp;m)</pre>
+<div class="block">Sorts methods in alphabetical order.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>m</code> - The methods to sort.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The same array, but with elements sorted.</dd>
+</dl>
+</li>
+</ul>
+<a name="sort-java.lang.reflect.Field:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sort</h4>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.991">sort</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>[]&nbsp;m)</pre>
+<div class="block">Sorts methods in alphabetical order.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>m</code> - The methods to sort.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The same array, but with elements sorted.</dd>
+</dl>
+</li>
+</ul>
 <a name="getParentClasses-java.lang.Class-boolean-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentClasses</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.951">getParentClasses</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.1004">getParentClasses</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c,
                                                   boolean&nbsp;parentFirst,
                                                   boolean&nbsp;includeInterfaces)</pre>
 <div class="block">Returns a list of all the parent classes of the specified class including the class itself.</div>
@@ -1152,10 +1221,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="getPrimitiveDefault-java.lang.Class-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getPrimitiveDefault</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.981">getPrimitiveDefault</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;primitiveClass)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.1034">getPrimitiveDefault</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;primitiveClass)</pre>
 <div class="block">Returns the default value for the specified primitive class.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1165,6 +1234,63 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="toString-java.lang.reflect.Method-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.1067">toString</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m)</pre>
+<div class="block">Returns a readable representation of the specified method.
+
+ <p>
+ The format of the string is <js>"full-qualified-class.method-name(parameter-simple-class-names)"</js>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>m</code> - The method to stringify.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The stringified method.</dd>
+</dl>
+</li>
+</ul>
+<a name="toString-java.lang.reflect.Field-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.1087">toString</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html?is-external=true" title="class or interface in java.lang.reflect">Field</a>&nbsp;f)</pre>
+<div class="block">Returns a readable representation of the specified field.
+
+ <p>
+ The format of the string is <js>"full-qualified-class.field-name"</js>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>f</code> - The field to stringify.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The stringified field.</dd>
+</dl>
+</li>
+</ul>
+<a name="assertArgsOfType-java.lang.reflect.Method-java.lang.Class...-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>assertArgsOfType</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/ClassUtils.html#line.1098">assertArgsOfType</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;m,
+                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;args)
+                             throws <a href="../../../../org/apache/juneau/FormattedIllegalArgumentException.html" title="class in org.apache.juneau">FormattedIllegalArgumentException</a></pre>
+<div class="block">Throws an <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><code>IllegalArgumentException</code></a> if the parameters on the method are not in the specified list provided.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>m</code> - The method to test.</dd>
+<dd><code>args</code> - The valid class types (exact) for the arguments.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../org/apache/juneau/FormattedIllegalArgumentException.html" title="class in org.apache.juneau">FormattedIllegalArgumentException</a></code> - If any of the parameters on the method weren't in the list.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/internal/StringUtils.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/internal/StringUtils.html b/content/site/apidocs/org/apache/juneau/internal/StringUtils.html
index 396a3ef..355defb 100644
--- a/content/site/apidocs/org/apache/juneau/internal/StringUtils.html
+++ b/content/site/apidocs/org/apache/juneau/internal/StringUtils.html
@@ -1408,7 +1408,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>pathStartsWith</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1080">pathStartsWith</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1083">pathStartsWith</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathPrefix)</pre>
 <div class="block">Returns <jk>true</jk> if the specified path string is prefixed with the specified prefix.
 
@@ -1434,7 +1434,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>pathStartsWith</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1095">pathStartsWith</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1098">pathStartsWith</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;pathPrefixes)</pre>
 <div class="block">Same as <a href="../../../../org/apache/juneau/internal/StringUtils.html#pathStartsWith-java.lang.String-java.lang.String-"><code>pathStartsWith(String, String)</code></a> but returns <jk>true</jk> if at least one prefix matches.</div>
 <dl>
@@ -1452,7 +1452,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>replaceUnicodeSequences</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1108">replaceUnicodeSequences</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1111">replaceUnicodeSequences</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Replaces <js>"\\uXXXX"</js> character sequences with their unicode characters.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1468,7 +1468,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getField</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1138">getField</a>(int&nbsp;fieldNum,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1141">getField</a>(int&nbsp;fieldNum,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
                               char&nbsp;delim)</pre>
 <div class="block">Returns the specified field in a delimited string without splitting the string.
@@ -1496,7 +1496,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getField</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1151">getField</a>(int&nbsp;fieldNum,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1154">getField</a>(int&nbsp;fieldNum,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
                               char&nbsp;delim,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;def)</pre>
@@ -1518,7 +1518,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1176">toString</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1179">toString</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <div class="block">Calls <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang"><code>Object.toString()</code></a> on the specified object if it's not null.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1534,7 +1534,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fromHexToUTF8</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1186">fromHexToUTF8</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hex)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1189">fromHexToUTF8</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hex)</pre>
 <div class="block">Converts a hexadecimal byte stream (e.g. "34A5BC") into a UTF-8 encoded string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1550,7 +1550,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toHex</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1203">toHex</a>(byte[]&nbsp;bytes)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1206">toHex</a>(byte[]&nbsp;bytes)</pre>
 <div class="block">Converts a byte array into a simple hexadecimal character string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1566,7 +1566,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fromHex</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1218">fromHex</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hex)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1221">fromHex</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hex)</pre>
 <div class="block">Converts a hexadecimal character string to a byte array.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1582,7 +1582,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>repeat</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1233">repeat</a>(int&nbsp;count,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1236">repeat</a>(int&nbsp;count,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pattern)</pre>
 <div class="block">Creates a repeated pattern.</div>
 <dl>
@@ -1600,7 +1600,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trimStart</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1246">trimStart</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1249">trimStart</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Trims whitespace characters from the beginning of the specified string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1616,7 +1616,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trimEnd</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1259">trimEnd</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1262">trimEnd</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Trims whitespace characters from the end of the specified string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1632,7 +1632,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isOneOf</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1277">isOneOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1280">isOneOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;values)</pre>
 <div class="block">Returns <jk>true</jk> if the specified string is one of the specified values.</div>
 <dl>
@@ -1652,7 +1652,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trimSlashes</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1290">trimSlashes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1293">trimSlashes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Trims <js>'/'</js> characters from both the start and end of the specified string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1668,7 +1668,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trimTrailingSlashes</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1306">trimTrailingSlashes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1309">trimTrailingSlashes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Trims <js>'/'</js> characters from the end of the specified string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1684,7 +1684,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trimTrailingSlashes</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html?is-external=true" title="class or interface in java.lang">StringBuffer</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1320">trimTrailingSlashes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html?is-external=true" title="class or interface in java.lang">StringBuffer</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html?is-external=true" title="class or interface in java.lang">StringBuffer</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1323">trimTrailingSlashes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html?is-external=true" title="class or interface in java.lang">StringBuffer</a>&nbsp;s)</pre>
 <div class="block">Trims <js>'/'</js> characters from the end of the specified string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1700,7 +1700,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>urlDecode</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1334">urlDecode</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1337">urlDecode</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Decodes a <code>application/x-www-form-urlencoded</code> string using <code>UTF-8</code> encoding scheme.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1716,7 +1716,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>urlEncode</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1356">urlEncode</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1359">urlEncode</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Encodes a <code>application/x-www-form-urlencoded</code> string using <code>UTF-8</code> encoding scheme.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1732,7 +1732,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>firstNonWhitespaceChar</h4>
-<pre>public static&nbsp;char&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1378">firstNonWhitespaceChar</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;char&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1381">firstNonWhitespaceChar</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Returns the first non-whitespace character in the string.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1749,7 +1749,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>charAt</h4>
-<pre>public static&nbsp;char&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1395">charAt</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
+<pre>public static&nbsp;char&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1398">charAt</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
                           int&nbsp;i)</pre>
 <div class="block">Returns the character at the specified index in the string without throwing exceptions.</div>
 <dl>
@@ -1768,7 +1768,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isAbsoluteUri</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1409">isAbsoluteUri</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1412">isAbsoluteUri</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Efficiently determines whether a URL is of the pattern "xxx://xxx"</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1784,7 +1784,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isUri</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1464">isUri</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1467">isUri</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Efficiently determines whether a URL is of the pattern "xxx:/xxx".
 
  <p>
@@ -1806,7 +1806,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAuthorityUri</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1510">getAuthorityUri</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1513">getAuthorityUri</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 <div class="block">Given an absolute URI, returns just the authority portion (e.g. <js>"http://hostname:port"</js>)</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1822,7 +1822,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toURI</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1563">toURI</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1566">toURI</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <div class="block">Converts the specified object to a URI.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1838,7 +1838,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>firstNonEmpty</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1579">firstNonEmpty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;s)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1582">firstNonEmpty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;s)</pre>
 <div class="block">Returns the first non-null, non-empty string in the list.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1854,7 +1854,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>indexOf</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1593">indexOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1596">indexOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s,
                           char...&nbsp;c)</pre>
 <div class="block">Same as <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true#indexOf-int-" title="class or interface in java.lang"><code>String.indexOf(int)</code></a> except allows you to check for multiple characters.</div>
 <dl>
@@ -1872,7 +1872,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>format</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1612">format</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pattern,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/internal/StringUtils.html#line.1615">format</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pattern,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Similar to <a href="http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html?is-external=true#format-java.lang.String-java.lang.Object...-" title="class or interface in java.text"><code>MessageFormat.format(String, Object...)</code></a> except allows you to specify POJO arguments.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/Resource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/Resource.html b/content/site/apidocs/org/apache/juneau/microservice/Resource.html
index f2158d1..3a91145 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/Resource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/Resource.html
@@ -138,7 +138,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#htmldoc--">htmldoc</a>=,
               <a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#config--">config</a>="$S{juneau.configFile}")
-public abstract class <a href="../../../../src-html/org/apache/juneau/microservice/Resource.html#line.54">Resource</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/microservice/Resource.html#line.57">Resource</a>
 extends <a href="../../../../org/apache/juneau/rest/RestServletDefault.html" title="class in org.apache.juneau.rest">RestServletDefault</a></pre>
 <div class="block">Superclass for all REST resources.
  
@@ -203,8 +203,8 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletDefault.html" tit
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-">init</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
-<div class="block">Resource initialization method.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/Resource.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
+<div class="block">Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.</div>
 </td>
 </tr>
 </table>
@@ -220,7 +220,7 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletDefault.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">
@@ -263,7 +263,7 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletDefault.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Resource</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Resource.html#line.54">Resource</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Resource.html#line.57">Resource</a>()</pre>
 </li>
 </ul>
 </li>
@@ -274,38 +274,21 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletDefault.html" tit
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="init-org.apache.juneau.rest.RestConfig-">
+<a name="addConfigVars-org.apache.juneau.rest.RestConfig-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Resource.html#line.57">init</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
-          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">RestServlet</a></code></span></div>
-<div class="block">Resource initialization method.
-
- <p>
- Identical to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> except the config object provides access to the external config
- file, configuration properties, and variable resolver defined for this resource.
-
- <p>
- Classes can also use <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true#init--" title="class or interface in javax.servlet"><code>GenericServlet.init()</code></a> and <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--"><code>RestServlet.getServletConfig()</code></a> as well to perform
- initialization.
-
- <p>
- Note that if you override this method, you must first call <code><jk>super</jk>.init(servletConfig)</code>!
-
- <p>
- Resource classes that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can add this method to their class to get access to
- the config object.</div>
+<h4>addConfigVars</h4>
+<pre><a href="../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation">@RestHook</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestHook.html#value--">value</a>=<a href="../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT">INIT</a>)
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/Resource.html#line.66">addConfigVars</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
+                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.</div>
 <dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>config</code> - The servlet configuration.</dd>
+<dd><code>config</code> - The resource config.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code> - Any exception can be thrown to signal an initialization failure.</dd>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
 </dl>
 </li>
 </ul>


[13/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.html b/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.html
index b68325a..6207b05 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.html
@@ -841,175 +841,279 @@
 <span class="sourceLineNo">833</span>   /**<a name="line.833"></a>
 <span class="sourceLineNo">834</span>    * Returns all the fields in the specified class and all parent classes.<a name="line.834"></a>
 <span class="sourceLineNo">835</span>    *<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    * @param c The class to get all fields on.<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    * @return An iterable of all fields in the specified class.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    */<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   @SuppressWarnings("rawtypes")<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   public static Iterable&lt;Field&gt; getAllFields(final Class c, final boolean parentFirst) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      return new Iterable&lt;Field&gt;() {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>         @Override<a name="line.843"></a>
-<span class="sourceLineNo">844</span>         public Iterator&lt;Field&gt; iterator() {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            return new Iterator&lt;Field&gt;(){<a name="line.845"></a>
-<span class="sourceLineNo">846</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, false);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>               Field[] fields = classIterator.hasNext() ? classIterator.next().getDeclaredFields() : new Field[0];<a name="line.847"></a>
-<span class="sourceLineNo">848</span>               int fIndex = 0;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>               Field next;<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>               @Override<a name="line.851"></a>
-<span class="sourceLineNo">852</span>               public boolean hasNext() {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>                  prime();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>                  return next != null;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>               }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>               private void prime() {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>                  if (next == null) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>                     while (fIndex &gt;= fields.length) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>                        if (classIterator.hasNext()) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>                           fields = classIterator.next().getDeclaredFields();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>                           fIndex = 0;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>                        } else {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>                           fIndex = -1;<a name="line.864"></a>
-<span class="sourceLineNo">865</span>                        }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>                     }<a name="line.866"></a>
-<span class="sourceLineNo">867</span>                     if (fIndex != -1)<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                        next = fields[fIndex++];<a name="line.868"></a>
-<span class="sourceLineNo">869</span>                  }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>               }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>               @Override<a name="line.872"></a>
-<span class="sourceLineNo">873</span>               public Field next() {<a name="line.873"></a>
-<span class="sourceLineNo">874</span>                  prime();<a name="line.874"></a>
-<span class="sourceLineNo">875</span>                  Field f = next;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>                  next = null;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>                  return f;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>               }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>               @Override<a name="line.880"></a>
-<span class="sourceLineNo">881</span>               public void remove() {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>               }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            };<a name="line.883"></a>
-<span class="sourceLineNo">884</span>         }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      };<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   }<a name="line.886"></a>
-<span class="sourceLineNo">887</span><a name="line.887"></a>
-<span class="sourceLineNo">888</span>   /**<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    * Returns all the methods in the specified class and all parent classes.<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    *<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    * @param c The class to get all methods on.<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    * @return An iterable of all methods in the specified class.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   @SuppressWarnings("rawtypes")<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   public static Iterable&lt;Method&gt; getAllMethods(final Class c, final boolean parentFirst) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return new Iterable&lt;Method&gt;() {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>         @Override<a name="line.898"></a>
-<span class="sourceLineNo">899</span>         public Iterator&lt;Method&gt; iterator() {<a name="line.899"></a>
-<span class="sourceLineNo">900</span>            return new Iterator&lt;Method&gt;(){<a name="line.900"></a>
-<span class="sourceLineNo">901</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, true);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>               Method[] methods = classIterator.hasNext() ? classIterator.next().getDeclaredMethods() : new Method[0];<a name="line.902"></a>
-<span class="sourceLineNo">903</span>               int mIndex = 0;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>               Method next;<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>               @Override<a name="line.906"></a>
-<span class="sourceLineNo">907</span>               public boolean hasNext() {<a name="line.907"></a>
-<span class="sourceLineNo">908</span>                  prime();<a name="line.908"></a>
-<span class="sourceLineNo">909</span>                  return next != null;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>               }<a name="line.910"></a>
+<span class="sourceLineNo">836</span>    * &lt;p&gt;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    * Fields are ordered in either parent-to-child, or child-to-parent order, then alphabetically.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    *<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    * @param c The class to get all fields on.<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    * @return An iterable of all fields in the specified class.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    */<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   @SuppressWarnings("rawtypes")<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   public static Iterable&lt;Field&gt; getAllFields(final Class c, final boolean parentFirst) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      return new Iterable&lt;Field&gt;() {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>         @Override<a name="line.846"></a>
+<span class="sourceLineNo">847</span>         public Iterator&lt;Field&gt; iterator() {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>            return new Iterator&lt;Field&gt;(){<a name="line.848"></a>
+<span class="sourceLineNo">849</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, false);<a name="line.849"></a>
+<span class="sourceLineNo">850</span>               Field[] fields = classIterator.hasNext() ? sort(classIterator.next().getDeclaredFields()) : new Field[0];<a name="line.850"></a>
+<span class="sourceLineNo">851</span>               int fIndex = 0;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>               Field next;<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>               @Override<a name="line.854"></a>
+<span class="sourceLineNo">855</span>               public boolean hasNext() {<a name="line.855"></a>
+<span class="sourceLineNo">856</span>                  prime();<a name="line.856"></a>
+<span class="sourceLineNo">857</span>                  return next != null;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>               }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>               private void prime() {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>                  if (next == null) {<a name="line.861"></a>
+<span class="sourceLineNo">862</span>                     while (fIndex &gt;= fields.length) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>                        if (classIterator.hasNext()) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>                           fields = sort(classIterator.next().getDeclaredFields());<a name="line.864"></a>
+<span class="sourceLineNo">865</span>                           fIndex = 0;<a name="line.865"></a>
+<span class="sourceLineNo">866</span>                        } else {<a name="line.866"></a>
+<span class="sourceLineNo">867</span>                           fIndex = -1;<a name="line.867"></a>
+<span class="sourceLineNo">868</span>                        }<a name="line.868"></a>
+<span class="sourceLineNo">869</span>                     }<a name="line.869"></a>
+<span class="sourceLineNo">870</span>                     if (fIndex != -1)<a name="line.870"></a>
+<span class="sourceLineNo">871</span>                        next = fields[fIndex++];<a name="line.871"></a>
+<span class="sourceLineNo">872</span>                  }<a name="line.872"></a>
+<span class="sourceLineNo">873</span>               }<a name="line.873"></a>
+<span class="sourceLineNo">874</span><a name="line.874"></a>
+<span class="sourceLineNo">875</span>               @Override<a name="line.875"></a>
+<span class="sourceLineNo">876</span>               public Field next() {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>                  prime();<a name="line.877"></a>
+<span class="sourceLineNo">878</span>                  Field f = next;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>                  next = null;<a name="line.879"></a>
+<span class="sourceLineNo">880</span>                  return f;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>               }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>               @Override<a name="line.883"></a>
+<span class="sourceLineNo">884</span>               public void remove() {<a name="line.884"></a>
+<span class="sourceLineNo">885</span>               }<a name="line.885"></a>
+<span class="sourceLineNo">886</span>            };<a name="line.886"></a>
+<span class="sourceLineNo">887</span>         }<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      };<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>   /**<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    * Returns all the methods in the specified class and all parent classes.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    *<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    * &lt;p&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    * Methods are ordered in either parent-to-child, or child-to-parent order, then alphabetically.<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    *<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    * @param c The class to get all methods on.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>    * @return An iterable of all methods in the specified class.<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    */<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   @SuppressWarnings("rawtypes")<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   public static Iterable&lt;Method&gt; getAllMethods(final Class c, final boolean parentFirst) {<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      return new Iterable&lt;Method&gt;() {<a name="line.903"></a>
+<span class="sourceLineNo">904</span>         @Override<a name="line.904"></a>
+<span class="sourceLineNo">905</span>         public Iterator&lt;Method&gt; iterator() {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>            return new Iterator&lt;Method&gt;(){<a name="line.906"></a>
+<span class="sourceLineNo">907</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>               Method[] methods = classIterator.hasNext() ? sort(classIterator.next().getDeclaredMethods()) : new Method[0];<a name="line.908"></a>
+<span class="sourceLineNo">909</span>               int mIndex = 0;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>               Method next;<a name="line.910"></a>
 <span class="sourceLineNo">911</span><a name="line.911"></a>
-<span class="sourceLineNo">912</span>               private void prime() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>                  if (next == null) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>                     while (mIndex &gt;= methods.length) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>                        if (classIterator.hasNext()) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>                           methods = classIterator.next().getDeclaredMethods();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>                           mIndex = 0;<a name="line.917"></a>
-<span class="sourceLineNo">918</span>                        } else {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>                           mIndex = -1;<a name="line.919"></a>
-<span class="sourceLineNo">920</span>                        }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>                     }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>                     if (mIndex != -1)<a name="line.922"></a>
-<span class="sourceLineNo">923</span>                        next = methods[mIndex++];<a name="line.923"></a>
-<span class="sourceLineNo">924</span>                  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>               }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>               @Override<a name="line.927"></a>
-<span class="sourceLineNo">928</span>               public Method next() {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>                  prime();<a name="line.929"></a>
-<span class="sourceLineNo">930</span>                  Method m = next;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>                  next = null;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>                  return m;<a name="line.932"></a>
-<span class="sourceLineNo">933</span>               }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>               @Override<a name="line.935"></a>
-<span class="sourceLineNo">936</span>               public void remove() {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>               }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>            };<a name="line.938"></a>
-<span class="sourceLineNo">939</span>         }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      };<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>   /**<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    * Returns a list of all the parent classes of the specified class including the class itself.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    *<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    * @param c The class to retrieve the parent classes.<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    * @param parentFirst In parent-to-child order, otherwise child-to-parent.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    * @param includeInterfaces Include interfaces.<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    * @return An iterator of parent classes in the class hierarchy.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    */<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   public static Iterator&lt;Class&lt;?&gt;&gt; getParentClasses(final Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      List&lt;Class&lt;?&gt;&gt; l = getParentClasses(new ArrayList&lt;Class&lt;?&gt;&gt;(), c, parentFirst, includeInterfaces);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      return l.iterator();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>   private static List&lt;Class&lt;?&gt;&gt; getParentClasses(List&lt;Class&lt;?&gt;&gt; l, Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      if (parentFirst) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>         if (includeInterfaces)<a name="line.958"></a>
-<span class="sourceLineNo">959</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.959"></a>
-<span class="sourceLineNo">960</span>               l.add(i);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>         l.add(c);<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      } else {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>         l.add(c);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>         if (includeInterfaces)<a name="line.968"></a>
-<span class="sourceLineNo">969</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.969"></a>
-<span class="sourceLineNo">970</span>               l.add(i);<a name="line.970"></a>
-<span class="sourceLineNo">971</span>      }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      return l;<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   }<a name="line.973"></a>
-<span class="sourceLineNo">974</span><a name="line.974"></a>
-<span class="sourceLineNo">975</span>   /**<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    * Returns the default value for the specified primitive class.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    *<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    * @param primitiveClass The primitive class to get the default value for.<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    * @return The default value, or &lt;jk&gt;null&lt;/jk&gt; if the specified class is not a primitive class.<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    */<a name="line.980"></a>
-<span class="sourceLineNo">981</span>   public static Object getPrimitiveDefault(Class&lt;?&gt; primitiveClass) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      return primitiveDefaultMap.get(primitiveClass);<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   }<a name="line.983"></a>
+<span class="sourceLineNo">912</span>               @Override<a name="line.912"></a>
+<span class="sourceLineNo">913</span>               public boolean hasNext() {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>                  prime();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>                  return next != null;<a name="line.915"></a>
+<span class="sourceLineNo">916</span>               }<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>               private void prime() {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>                  if (next == null) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>                     while (mIndex &gt;= methods.length) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>                        if (classIterator.hasNext()) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>                           methods = sort(classIterator.next().getDeclaredMethods());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>                           mIndex = 0;<a name="line.923"></a>
+<span class="sourceLineNo">924</span>                        } else {<a name="line.924"></a>
+<span class="sourceLineNo">925</span>                           mIndex = -1;<a name="line.925"></a>
+<span class="sourceLineNo">926</span>                        }<a name="line.926"></a>
+<span class="sourceLineNo">927</span>                     }<a name="line.927"></a>
+<span class="sourceLineNo">928</span>                     if (mIndex != -1)<a name="line.928"></a>
+<span class="sourceLineNo">929</span>                        next = methods[mIndex++];<a name="line.929"></a>
+<span class="sourceLineNo">930</span>                  }<a name="line.930"></a>
+<span class="sourceLineNo">931</span>               }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>               @Override<a name="line.933"></a>
+<span class="sourceLineNo">934</span>               public Method next() {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>                  prime();<a name="line.935"></a>
+<span class="sourceLineNo">936</span>                  Method m = next;<a name="line.936"></a>
+<span class="sourceLineNo">937</span>                  next = null;<a name="line.937"></a>
+<span class="sourceLineNo">938</span>                  return m;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>               }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span>               @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span>               public void remove() {<a name="line.942"></a>
+<span class="sourceLineNo">943</span>               }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>            };<a name="line.944"></a>
+<span class="sourceLineNo">945</span>         }<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      };<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   }<a name="line.947"></a>
+<span class="sourceLineNo">948</span><a name="line.948"></a>
+<span class="sourceLineNo">949</span>   private static Comparator&lt;Method&gt; METHOD_COMPARATOR = new Comparator&lt;Method&gt;() {<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>      @Override<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      public int compare(Method o1, Method o2) {<a name="line.952"></a>
+<span class="sourceLineNo">953</span>         int i = o1.getName().compareTo(o2.getName());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>         if (i == 0) {<a name="line.954"></a>
+<span class="sourceLineNo">955</span>            i = o1.getParameterCount() - o2.getParameterCount();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>            if (i == 0) {<a name="line.956"></a>
+<span class="sourceLineNo">957</span>               for (int j = 0; j &lt; o1.getParameterTypes().length &amp;&amp; i == 0; j++) {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>                  i = o1.getParameterTypes()[j].getName().compareTo(o2.getParameterTypes()[j].getName());<a name="line.958"></a>
+<span class="sourceLineNo">959</span>               }<a name="line.959"></a>
+<span class="sourceLineNo">960</span>            }<a name="line.960"></a>
+<span class="sourceLineNo">961</span>         }<a name="line.961"></a>
+<span class="sourceLineNo">962</span>         return i;<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   };<a name="line.964"></a>
+<span class="sourceLineNo">965</span><a name="line.965"></a>
+<span class="sourceLineNo">966</span>   /**<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    * Sorts methods in alphabetical order.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    *<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    * @param m The methods to sort.<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    * @return The same array, but with elements sorted.<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    */<a name="line.971"></a>
+<span class="sourceLineNo">972</span>   public static Method[] sort(Method[] m) {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Arrays.sort(m, METHOD_COMPARATOR);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      return m;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   }<a name="line.975"></a>
+<span class="sourceLineNo">976</span><a name="line.976"></a>
+<span class="sourceLineNo">977</span>   private static Comparator&lt;Field&gt; FIELD_COMPARATOR = new Comparator&lt;Field&gt;() {<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>      @Override<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      public int compare(Field o1, Field o2) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span>         return o1.getName().compareTo(o2.getName());<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   };<a name="line.983"></a>
 <span class="sourceLineNo">984</span><a name="line.984"></a>
-<span class="sourceLineNo">985</span>   private static final Map&lt;Class&lt;?&gt;,Object&gt; primitiveDefaultMap = Collections.unmodifiableMap(<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      new AMap&lt;Class&lt;?&gt;,Object&gt;()<a name="line.986"></a>
-<span class="sourceLineNo">987</span>         .append(Boolean.TYPE, false)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>         .append(Character.TYPE, (char)0)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>         .append(Short.TYPE, (short)0)<a name="line.989"></a>
-<span class="sourceLineNo">990</span>         .append(Integer.TYPE, 0)<a name="line.990"></a>
-<span class="sourceLineNo">991</span>         .append(Long.TYPE, 0l)<a name="line.991"></a>
-<span class="sourceLineNo">992</span>         .append(Float.TYPE, 0f)<a name="line.992"></a>
-<span class="sourceLineNo">993</span>         .append(Double.TYPE, 0d)<a name="line.993"></a>
-<span class="sourceLineNo">994</span>         .append(Byte.TYPE, (byte)0)<a name="line.994"></a>
-<span class="sourceLineNo">995</span>         .append(Boolean.class, false)<a name="line.995"></a>
-<span class="sourceLineNo">996</span>         .append(Character.class, (char)0)<a name="line.996"></a>
-<span class="sourceLineNo">997</span>         .append(Short.class, (short)0)<a name="line.997"></a>
-<span class="sourceLineNo">998</span>         .append(Integer.class, 0)<a name="line.998"></a>
-<span class="sourceLineNo">999</span>         .append(Long.class, 0l)<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>         .append(Float.class, 0f)<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>         .append(Double.class, 0d)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>         .append(Byte.class, (byte)0)<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   );<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>}<a name="line.1004"></a>
+<span class="sourceLineNo">985</span>   /**<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    * Sorts methods in alphabetical order.<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    *<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    * @param m The methods to sort.<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    * @return The same array, but with elements sorted.<a name="line.989"></a>
+<span class="sourceLineNo">990</span>    */<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   public static Field[] sort(Field[] m) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      Arrays.sort(m, FIELD_COMPARATOR);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      return m;<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span>   /**<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    * Returns a list of all the parent classes of the specified class including the class itself.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    *<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    * @param c The class to retrieve the parent classes.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    * @param parentFirst In parent-to-child order, otherwise child-to-parent.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    * @param includeInterfaces Include interfaces.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    * @return An iterator of parent classes in the class hierarchy.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    */<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   public static Iterator&lt;Class&lt;?&gt;&gt; getParentClasses(final Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      List&lt;Class&lt;?&gt;&gt; l = getParentClasses(new ArrayList&lt;Class&lt;?&gt;&gt;(), c, parentFirst, includeInterfaces);<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      return l.iterator();<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   private static List&lt;Class&lt;?&gt;&gt; getParentClasses(List&lt;Class&lt;?&gt;&gt; l, Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      if (parentFirst) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>         if (includeInterfaces)<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>               l.add(i);<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>         l.add(c);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      } else {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>         l.add(c);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>         if (includeInterfaces)<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>               l.add(i);<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>      }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>      return l;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>   }<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span><a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   /**<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    * Returns the default value for the specified primitive class.<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    *<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    * @param primitiveClass The primitive class to get the default value for.<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>    * @return The default value, or &lt;jk&gt;null&lt;/jk&gt; if the specified class is not a primitive class.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    */<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>   public static Object getPrimitiveDefault(Class&lt;?&gt; primitiveClass) {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      return primitiveDefaultMap.get(primitiveClass);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>   }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>   private static final Map&lt;Class&lt;?&gt;,Object&gt; primitiveDefaultMap = Collections.unmodifiableMap(<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      new AMap&lt;Class&lt;?&gt;,Object&gt;()<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>         .append(Boolean.TYPE, false)<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>         .append(Character.TYPE, (char)0)<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>         .append(Short.TYPE, (short)0)<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>         .append(Integer.TYPE, 0)<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>         .append(Long.TYPE, 0l)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>         .append(Float.TYPE, 0f)<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>         .append(Double.TYPE, 0d)<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>         .append(Byte.TYPE, (byte)0)<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>         .append(Boolean.class, false)<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>         .append(Character.class, (char)0)<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>         .append(Short.class, (short)0)<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>         .append(Integer.class, 0)<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>         .append(Long.class, 0l)<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>         .append(Float.class, 0f)<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>         .append(Double.class, 0d)<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>         .append(Byte.class, (byte)0)<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>   );<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>   /**<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    * Returns a readable representation of the specified method.<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    *<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    * &lt;p&gt;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    * The format of the string is &lt;js&gt;"full-qualified-class.method-name(parameter-simple-class-names)"&lt;/js&gt;.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    *<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    * @param m The method to stringify.<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    * @return The stringified method.<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    */<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   public static String toString(Method m) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      StringBuilder sb = new StringBuilder(m.getDeclaringClass().getName() + "." + m.getName() + "(");<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      for (int i = 0; i &lt; m.getParameterCount(); i++) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>         if (i &gt; 0)<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>            sb.append(",");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>         sb.append(m.getParameterTypes()[i].getSimpleName());<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      sb.append(")");<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      return sb.toString();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>   }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span><a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   /**<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    * Returns a readable representation of the specified field.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    *<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    * &lt;p&gt;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    * The format of the string is &lt;js&gt;"full-qualified-class.field-name"&lt;/js&gt;.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    *<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    * @param f The field to stringify.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    * @return The stringified field.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    */<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   public static String toString(Field f) {<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      return f.getDeclaringClass().getName() + "." + f.getName();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   }<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   /**<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    * Throws an {@link IllegalArgumentException} if the parameters on the method are not in the specified list provided.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    * @param m The method to test.<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    * @param args The valid class types (exact) for the arguments.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    * @throws FormattedIllegalArgumentException If any of the parameters on the method weren't in the list.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   public static void assertArgsOfType(Method m, Class&lt;?&gt;...args) throws FormattedIllegalArgumentException {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      for (Class&lt;?&gt; c1 : m.getParameterTypes()) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>         boolean foundMatch = false;<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>         for (Class&lt;?&gt; c2 : args)<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>            if (c1 == c2)<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>               foundMatch = true;<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>         if (! foundMatch)<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>            throw new FormattedIllegalArgumentException("Invalid argument of type {0} passed in method {1}.  Only arguments of type {2} are allowed.", c1, m, args);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>}<a name="line.1108"></a>
 
 
 



[11/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/microservice/Resource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/microservice/Resource.html b/content/site/apidocs/src-html/org/apache/juneau/microservice/Resource.html
index 64ab6d9..57e0034 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/microservice/Resource.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/microservice/Resource.html
@@ -20,56 +20,66 @@
 <span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
 <span class="sourceLineNo">013</span>package org.apache.juneau.microservice;<a name="line.13"></a>
 <span class="sourceLineNo">014</span><a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.juneau.rest.*;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>import org.apache.juneau.rest.annotation.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.juneau.svl.vars.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>/**<a name="line.19"></a>
-<span class="sourceLineNo">020</span> * Superclass for all REST resources.<a name="line.20"></a>
-<span class="sourceLineNo">021</span> * <a name="line.21"></a>
-<span class="sourceLineNo">022</span> * &lt;p&gt;<a name="line.22"></a>
-<span class="sourceLineNo">023</span> * In additional to the functionality of the {@link RestServletDefault} group,<a name="line.23"></a>
-<span class="sourceLineNo">024</span> * augments the {@link RestContext#getVarResolver()} method with the following additional variable types:<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * &lt;ul class='spaced-list'&gt;<a name="line.25"></a>
-<span class="sourceLineNo">026</span> *    &lt;li&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> *       &lt;code class='snippet'&gt;$ARG{...}&lt;/code&gt; - Command line arguments pulled from {@link Microservice#getArgs()}.<a name="line.27"></a>
-<span class="sourceLineNo">028</span> *       <a name="line.28"></a>
-<span class="sourceLineNo">029</span> *       &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.29"></a>
-<span class="sourceLineNo">030</span> *       &lt;p class='bcode'&gt;<a name="line.30"></a>
-<span class="sourceLineNo">031</span> *    String firstArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{0}"&lt;/js&gt;);  &lt;jc&gt;// First argument.&lt;/jc&gt;<a name="line.31"></a>
-<span class="sourceLineNo">032</span> *    String namedArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{myarg}"&lt;/js&gt;);  &lt;jc&gt;// Named argument (e.g. "myarg=foo"). &lt;/jc&gt;<a name="line.32"></a>
-<span class="sourceLineNo">033</span> *       &lt;/p&gt;<a name="line.33"></a>
-<span class="sourceLineNo">034</span> *    &lt;li&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> *       &lt;code class='snippet'&gt;$MF{...}&lt;/code&gt; - Manifest file entries pulled from {@link Microservice#getManifest()}.<a name="line.35"></a>
-<span class="sourceLineNo">036</span> *       <a name="line.36"></a>
-<span class="sourceLineNo">037</span> *       &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *       &lt;p class='bcode'&gt;<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *    String mainClass = request.getVarResolver().resolve(&lt;js&gt;"$MF{Main-Class}"&lt;/js&gt;);  &lt;jc&gt;// Main class. &lt;/jc&gt;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> *       &lt;/p&gt;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * &lt;/ul&gt;<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@SuppressWarnings("serial")<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@RestResource(<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   htmldoc=@HtmlDoc(<a name="line.45"></a>
-<span class="sourceLineNo">046</span>      links={<a name="line.46"></a>
-<span class="sourceLineNo">047</span>         "up: request:/..",<a name="line.47"></a>
-<span class="sourceLineNo">048</span>         "options: servlet:/?method=OPTIONS"<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      },<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   ),<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   config="$S{juneau.configFile}"<a name="line.52"></a>
-<span class="sourceLineNo">053</span>)<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public abstract class Resource extends RestServletDefault {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>   @Override /* RestServlet */<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   public synchronized void init(RestConfig config) throws Exception {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      config<a name="line.58"></a>
-<span class="sourceLineNo">059</span>         .addVars(ArgsVar.class, ManifestFileVar.class)<a name="line.59"></a>
-<span class="sourceLineNo">060</span>         .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs())<a name="line.60"></a>
-<span class="sourceLineNo">061</span>         .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest());<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      super.init(config);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   }<a name="line.63"></a>
-<span class="sourceLineNo">064</span>}<a name="line.64"></a>
+<span class="sourceLineNo">015</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static javax.servlet.http.HttpServletResponse.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import org.apache.juneau.rest.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.juneau.rest.annotation.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.juneau.svl.vars.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
+<span class="sourceLineNo">023</span> * Superclass for all REST resources.<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * <a name="line.24"></a>
+<span class="sourceLineNo">025</span> * &lt;p&gt;<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * In additional to the functionality of the {@link RestServletDefault} group,<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * augments the {@link RestContext#getVarResolver()} method with the following additional variable types:<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;ul class='spaced-list'&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> *    &lt;li&gt;<a name="line.29"></a>
+<span class="sourceLineNo">030</span> *       &lt;code class='snippet'&gt;$ARG{...}&lt;/code&gt; - Command line arguments pulled from {@link Microservice#getArgs()}.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> *       <a name="line.31"></a>
+<span class="sourceLineNo">032</span> *       &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> *       &lt;p class='bcode'&gt;<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *    String firstArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{0}"&lt;/js&gt;);  &lt;jc&gt;// First argument.&lt;/jc&gt;<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *    String namedArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{myarg}"&lt;/js&gt;);  &lt;jc&gt;// Named argument (e.g. "myarg=foo"). &lt;/jc&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *       &lt;/p&gt;<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *    &lt;li&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *       &lt;code class='snippet'&gt;$MF{...}&lt;/code&gt; - Manifest file entries pulled from {@link Microservice#getManifest()}.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *       <a name="line.39"></a>
+<span class="sourceLineNo">040</span> *       &lt;h6 class='figure'&gt;Example:&lt;/h6&gt;<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *       &lt;p class='bcode'&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *    String mainClass = request.getVarResolver().resolve(&lt;js&gt;"$MF{Main-Class}"&lt;/js&gt;);  &lt;jc&gt;// Main class. &lt;/jc&gt;<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *       &lt;/p&gt;<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;/ul&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@SuppressWarnings("serial")<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@RestResource(<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   htmldoc=@HtmlDoc(<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      links={<a name="line.49"></a>
+<span class="sourceLineNo">050</span>         "up: request:/..",<a name="line.50"></a>
+<span class="sourceLineNo">051</span>         "options: servlet:/?method=OPTIONS"<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      },<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   ),<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   config="$S{juneau.configFile}"<a name="line.55"></a>
+<span class="sourceLineNo">056</span>)<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public abstract class Resource extends RestServletDefault {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>   /**<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    * Add &lt;code&gt;$ARGS&lt;/code&gt; and &lt;code&gt;$MF&lt;/code&gt; variable resolvers.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    * <a name="line.61"></a>
+<span class="sourceLineNo">062</span>    * @param config The resource config.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    * @throws Exception<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   @RestHook(INIT) <a name="line.65"></a>
+<span class="sourceLineNo">066</span>   public void addConfigVars(RestConfig config) throws Exception {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      if (Microservice.getArgs() == null || Microservice.getConfig() == null)<a name="line.67"></a>
+<span class="sourceLineNo">068</span>         throw new RestException(SC_INTERNAL_SERVER_ERROR, "Attempting to use Resource class outside of RestMicroservice.");<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      config<a name="line.69"></a>
+<span class="sourceLineNo">070</span>         .addVars(ArgsVar.class, ManifestFileVar.class)<a name="line.70"></a>
+<span class="sourceLineNo">071</span>         .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs())<a name="line.71"></a>
+<span class="sourceLineNo">072</span>         .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest());<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>}<a name="line.74"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceGroup.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceGroup.html b/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceGroup.html
index b73393e..ee29a69 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceGroup.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceGroup.html
@@ -20,57 +20,67 @@
 <span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
 <span class="sourceLineNo">013</span>package org.apache.juneau.microservice;<a name="line.13"></a>
 <span class="sourceLineNo">014</span><a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.juneau.rest.*;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>import org.apache.juneau.rest.annotation.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.juneau.svl.vars.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>/**<a name="line.19"></a>
-<span class="sourceLineNo">020</span> * Superclass for all REST resource groups.<a name="line.20"></a>
-<span class="sourceLineNo">021</span> * <a name="line.21"></a>
-<span class="sourceLineNo">022</span> * &lt;p&gt;<a name="line.22"></a>
-<span class="sourceLineNo">023</span> * In additional to the functionality of the {@link RestServletGroupDefault} group,<a name="line.23"></a>
-<span class="sourceLineNo">024</span> * augments the {@link RestContext#getVarResolver()} method with the following additional variable types:<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * &lt;ul class='spaced-list'&gt;<a name="line.25"></a>
-<span class="sourceLineNo">026</span> *    &lt;li&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> *       &lt;jk&gt;$ARG{...}&lt;/jk&gt; - Command line arguments.<a name="line.27"></a>
-<span class="sourceLineNo">028</span> *       &lt;br&gt;Resolves values from {@link Microservice#getArgs()}.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> *       <a name="line.29"></a>
-<span class="sourceLineNo">030</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.30"></a>
-<span class="sourceLineNo">031</span> *       &lt;p class='bcode'&gt;<a name="line.31"></a>
-<span class="sourceLineNo">032</span> *    String firstArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{0}"&lt;/js&gt;);  &lt;jc&gt;// First argument.&lt;/jc&gt;<a name="line.32"></a>
-<span class="sourceLineNo">033</span> *    String namedArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{myarg}"&lt;/js&gt;);  &lt;jc&gt;// Named argument (e.g. "myarg=foo"). &lt;/jc&gt;<a name="line.33"></a>
-<span class="sourceLineNo">034</span> *       &lt;/p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> *    &lt;li&gt;<a name="line.35"></a>
-<span class="sourceLineNo">036</span> *       &lt;jk&gt;$MF{...}&lt;/jk&gt; - Manifest file entries.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> *       <a name="line.37"></a>
-<span class="sourceLineNo">038</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *       &lt;p class='bcode'&gt;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> *    String mainClass = request.getVarResolver().resolve(&lt;js&gt;"$MF{Main-Class}"&lt;/js&gt;);  &lt;jc&gt;// Main class. &lt;/jc&gt;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> *       &lt;/p&gt;<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * &lt;/ul&gt;<a name="line.42"></a>
-<span class="sourceLineNo">043</span> */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@SuppressWarnings("serial")<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@RestResource(<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   htmldoc=@HtmlDoc(<a name="line.46"></a>
-<span class="sourceLineNo">047</span>      links={<a name="line.47"></a>
-<span class="sourceLineNo">048</span>         "up: request:/..",<a name="line.48"></a>
-<span class="sourceLineNo">049</span>         "options: servlet:/?method=OPTIONS"<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      },<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   ),<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   config="$S{juneau.configFile}"<a name="line.53"></a>
-<span class="sourceLineNo">054</span>)<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public abstract class ResourceGroup extends RestServletGroupDefault {<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>   @Override /* RestServlet */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   public synchronized void init(RestConfig config) throws Exception {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      config<a name="line.59"></a>
-<span class="sourceLineNo">060</span>         .addVars(ArgsVar.class, ManifestFileVar.class)<a name="line.60"></a>
-<span class="sourceLineNo">061</span>         .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs())<a name="line.61"></a>
-<span class="sourceLineNo">062</span>         .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      super.init(config);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   }<a name="line.64"></a>
-<span class="sourceLineNo">065</span>}<a name="line.65"></a>
+<span class="sourceLineNo">015</span>import static javax.servlet.http.HttpServletResponse.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import org.apache.juneau.rest.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.juneau.rest.annotation.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.juneau.svl.vars.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
+<span class="sourceLineNo">023</span> * Superclass for all REST resource groups.<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * <a name="line.24"></a>
+<span class="sourceLineNo">025</span> * &lt;p&gt;<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * In additional to the functionality of the {@link RestServletGroupDefault} group,<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * augments the {@link RestContext#getVarResolver()} method with the following additional variable types:<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;ul class='spaced-list'&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> *    &lt;li&gt;<a name="line.29"></a>
+<span class="sourceLineNo">030</span> *       &lt;jk&gt;$ARG{...}&lt;/jk&gt; - Command line arguments.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> *       &lt;br&gt;Resolves values from {@link Microservice#getArgs()}.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> *       <a name="line.32"></a>
+<span class="sourceLineNo">033</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *       &lt;p class='bcode'&gt;<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *    String firstArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{0}"&lt;/js&gt;);  &lt;jc&gt;// First argument.&lt;/jc&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *    String namedArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{myarg}"&lt;/js&gt;);  &lt;jc&gt;// Named argument (e.g. "myarg=foo"). &lt;/jc&gt;<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *       &lt;/p&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *    &lt;li&gt;<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *       &lt;jk&gt;$MF{...}&lt;/jk&gt; - Manifest file entries.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *       <a name="line.40"></a>
+<span class="sourceLineNo">041</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *       &lt;p class='bcode'&gt;<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *    String mainClass = request.getVarResolver().resolve(&lt;js&gt;"$MF{Main-Class}"&lt;/js&gt;);  &lt;jc&gt;// Main class. &lt;/jc&gt;<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *       &lt;/p&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;/ul&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@SuppressWarnings("serial")<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@RestResource(<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   htmldoc=@HtmlDoc(<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      links={<a name="line.50"></a>
+<span class="sourceLineNo">051</span>         "up: request:/..",<a name="line.51"></a>
+<span class="sourceLineNo">052</span>         "options: servlet:/?method=OPTIONS"<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      },<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   ),<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   config="$S{juneau.configFile}"<a name="line.56"></a>
+<span class="sourceLineNo">057</span>)<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public abstract class ResourceGroup extends RestServletGroupDefault {<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>   /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    * Initializes the registry URL and rest clent.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    * <a name="line.62"></a>
+<span class="sourceLineNo">063</span>    * @param config The resource config.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    * @throws Exception<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    */<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   @RestHook(INIT) <a name="line.66"></a>
+<span class="sourceLineNo">067</span>   public void addConfigVars(RestConfig config) throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      if (Microservice.getArgs() == null || Microservice.getConfig() == null)<a name="line.68"></a>
+<span class="sourceLineNo">069</span>         throw new RestException(SC_INTERNAL_SERVER_ERROR, "Attempting to use ResourceGroup class outside of RestMicroservice.");<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      config<a name="line.70"></a>
+<span class="sourceLineNo">071</span>         .addVars(ArgsVar.class, ManifestFileVar.class)<a name="line.71"></a>
+<span class="sourceLineNo">072</span>         .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs())<a name="line.72"></a>
+<span class="sourceLineNo">073</span>         .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest());<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>}<a name="line.75"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceJenaGroup.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceJenaGroup.html b/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceJenaGroup.html
index 1e78668..a625c9c 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceJenaGroup.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/microservice/ResourceJenaGroup.html
@@ -20,58 +20,68 @@
 <span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
 <span class="sourceLineNo">013</span>package org.apache.juneau.microservice;<a name="line.13"></a>
 <span class="sourceLineNo">014</span><a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.juneau.rest.*;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>import org.apache.juneau.rest.annotation.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.juneau.rest.jena.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import org.apache.juneau.svl.vars.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>/**<a name="line.20"></a>
-<span class="sourceLineNo">021</span> * Superclass for all REST resource groups.<a name="line.21"></a>
-<span class="sourceLineNo">022</span> * <a name="line.22"></a>
-<span class="sourceLineNo">023</span> * &lt;p&gt;<a name="line.23"></a>
-<span class="sourceLineNo">024</span> * In additional to the functionality of the {@link RestServletGroupDefault} group,<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * augments the {@link RestContext#getVarResolver()} method with the following additional variable types:<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;ul class='spaced-list'&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> *    &lt;li&gt;<a name="line.27"></a>
-<span class="sourceLineNo">028</span> *       &lt;jk&gt;$ARG{...}&lt;/jk&gt; - Command line arguments.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> *       &lt;br&gt;Resolves values from {@link Microservice#getArgs()}.<a name="line.29"></a>
-<span class="sourceLineNo">030</span> *       <a name="line.30"></a>
-<span class="sourceLineNo">031</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.31"></a>
-<span class="sourceLineNo">032</span> *       &lt;p class='bcode'&gt;<a name="line.32"></a>
-<span class="sourceLineNo">033</span> *    String firstArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{0}"&lt;/js&gt;);  &lt;jc&gt;// First argument.&lt;/jc&gt;<a name="line.33"></a>
-<span class="sourceLineNo">034</span> *    String namedArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{myarg}"&lt;/js&gt;);  &lt;jc&gt;// Named argument (e.g. "myarg=foo"). &lt;/jc&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> *       &lt;/p&gt;<a name="line.35"></a>
-<span class="sourceLineNo">036</span> *    &lt;li&gt;<a name="line.36"></a>
-<span class="sourceLineNo">037</span> *       &lt;jk&gt;$MF{...}&lt;/jk&gt; - Manifest file entries.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *       <a name="line.38"></a>
-<span class="sourceLineNo">039</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> *       &lt;p class='bcode'&gt;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> *    String mainClass = request.getVarResolver().resolve(&lt;js&gt;"$MF{Main-Class}"&lt;/js&gt;);  &lt;jc&gt;// Main class. &lt;/jc&gt;<a name="line.41"></a>
-<span class="sourceLineNo">042</span> *       &lt;/p&gt;<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * &lt;/ul&gt;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@SuppressWarnings("serial")<a name="line.45"></a>
-<span class="sourceLineNo">046</span>@RestResource(<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   htmldoc=@HtmlDoc(<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      links={<a name="line.48"></a>
-<span class="sourceLineNo">049</span>         "up: request:/..",<a name="line.49"></a>
-<span class="sourceLineNo">050</span>         "options: servlet:/?method=OPTIONS"<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      },<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   ),<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   config="$S{juneau.configFile}"<a name="line.54"></a>
-<span class="sourceLineNo">055</span>)<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public abstract class ResourceJenaGroup extends RestServletJenaGroupDefault {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>   @Override /* RestServlet */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   public synchronized void init(RestConfig config) throws Exception {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      config<a name="line.60"></a>
-<span class="sourceLineNo">061</span>         .addVars(ArgsVar.class, ManifestFileVar.class)<a name="line.61"></a>
-<span class="sourceLineNo">062</span>         .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs())<a name="line.62"></a>
-<span class="sourceLineNo">063</span>         .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest());<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      super.init(config);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>}<a name="line.66"></a>
+<span class="sourceLineNo">015</span>import static javax.servlet.http.HttpServletResponse.*;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.16"></a>
+<span class="sourceLineNo">017</span><a name="line.17"></a>
+<span class="sourceLineNo">018</span>import org.apache.juneau.rest.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.juneau.rest.annotation.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.juneau.rest.jena.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.juneau.svl.vars.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * Superclass for all REST resource groups.<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * <a name="line.25"></a>
+<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * In additional to the functionality of the {@link RestServletGroupDefault} group,<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * augments the {@link RestContext#getVarResolver()} method with the following additional variable types:<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * &lt;ul class='spaced-list'&gt;<a name="line.29"></a>
+<span class="sourceLineNo">030</span> *    &lt;li&gt;<a name="line.30"></a>
+<span class="sourceLineNo">031</span> *       &lt;jk&gt;$ARG{...}&lt;/jk&gt; - Command line arguments.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> *       &lt;br&gt;Resolves values from {@link Microservice#getArgs()}.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> *       <a name="line.33"></a>
+<span class="sourceLineNo">034</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *       &lt;p class='bcode'&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *    String firstArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{0}"&lt;/js&gt;);  &lt;jc&gt;// First argument.&lt;/jc&gt;<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *    String namedArg = request.getVarResolver().resolve(&lt;js&gt;"$ARG{myarg}"&lt;/js&gt;);  &lt;jc&gt;// Named argument (e.g. "myarg=foo"). &lt;/jc&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *       &lt;/p&gt;<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *    &lt;li&gt;<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *       &lt;jk&gt;$MF{...}&lt;/jk&gt; - Manifest file entries.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *       <a name="line.41"></a>
+<span class="sourceLineNo">042</span> *       &lt;h6&gt;Example:&lt;/h6&gt;<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *       &lt;p class='bcode'&gt;<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *    String mainClass = request.getVarResolver().resolve(&lt;js&gt;"$MF{Main-Class}"&lt;/js&gt;);  &lt;jc&gt;// Main class. &lt;/jc&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> *       &lt;/p&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * &lt;/ul&gt;<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@SuppressWarnings("serial")<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@RestResource(<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   htmldoc=@HtmlDoc(<a name="line.50"></a>
+<span class="sourceLineNo">051</span>      links={<a name="line.51"></a>
+<span class="sourceLineNo">052</span>         "up: request:/..",<a name="line.52"></a>
+<span class="sourceLineNo">053</span>         "options: servlet:/?method=OPTIONS"<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      },<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   ),<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   config="$S{juneau.configFile}"<a name="line.57"></a>
+<span class="sourceLineNo">058</span>)<a name="line.58"></a>
+<span class="sourceLineNo">059</span>public abstract class ResourceJenaGroup extends RestServletJenaGroupDefault {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>   /**<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    * Add &lt;code&gt;$ARGS&lt;/code&gt; and &lt;code&gt;$MF&lt;/code&gt; variable resolvers.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    * <a name="line.63"></a>
+<span class="sourceLineNo">064</span>    * @param config The resource config.<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    * @throws Exception<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   @RestHook(INIT) <a name="line.67"></a>
+<span class="sourceLineNo">068</span>   public void addConfigVars(RestConfig config) throws Exception {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      if (Microservice.getArgs() == null || Microservice.getConfig() == null)<a name="line.69"></a>
+<span class="sourceLineNo">070</span>         throw new RestException(SC_INTERNAL_SERVER_ERROR, "Attempting to use ResourceJenaGroup class outside of RestMicroservice.");<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      config<a name="line.71"></a>
+<span class="sourceLineNo">072</span>         .addVars(ArgsVar.class, ManifestFileVar.class)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>         .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs())<a name="line.73"></a>
+<span class="sourceLineNo">074</span>         .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest());<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>}<a name="line.76"></a>
 
 
 


[10/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/microservice/RestMicroservice.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/microservice/RestMicroservice.html b/content/site/apidocs/src-html/org/apache/juneau/microservice/RestMicroservice.html
index a82b1ac..d65d0b4 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/microservice/RestMicroservice.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/microservice/RestMicroservice.html
@@ -22,716 +22,659 @@
 <span class="sourceLineNo">014</span><a name="line.14"></a>
 <span class="sourceLineNo">015</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.15"></a>
 <span class="sourceLineNo">016</span>import static org.apache.juneau.internal.FileUtils.*;<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import static org.apache.juneau.internal.ArrayUtils.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.ClassUtils.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.*;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.net.*;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.jar.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.logging.*;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import javax.servlet.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.juneau.*;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.ini.*;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.juneau.json.*;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.juneau.microservice.resources.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.juneau.parser.*;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.rest.annotation.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.eclipse.jetty.security.*;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.eclipse.jetty.security.authentication.*;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.eclipse.jetty.server.*;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.eclipse.jetty.server.ssl.*;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.eclipse.jetty.servlet.*;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.eclipse.jetty.util.security.*;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.eclipse.jetty.util.ssl.*;<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * Entry point for Juneau microservice that implements a REST interface using Jetty on a single port.<a name="line.43"></a>
+<span class="sourceLineNo">017</span>import static org.apache.juneau.internal.ClassUtils.*;<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>import java.io.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.net.*;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.jar.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.logging.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import javax.servlet.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.ini.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.json.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.microservice.resources.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.parser.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.rest.annotation.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.eclipse.jetty.server.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.eclipse.jetty.servlet.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.eclipse.jetty.xml.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * Entry point for Juneau microservice that implements a REST interface using Jetty on a single port.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * &lt;h6 class='topic'&gt;Jetty Server Details&lt;/h6&gt;<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * <a name="line.41"></a>
+<span class="sourceLineNo">042</span> * The Jetty server is created by the {@link #createServer()} method and started with the {@link #startServer()} method.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * These methods can be overridden to provided customized behavior.<a name="line.43"></a>
 <span class="sourceLineNo">044</span> *<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * &lt;h6 class='topic'&gt;Jetty Server Details&lt;/h6&gt;<a name="line.45"></a>
+<span class="sourceLineNo">045</span> * &lt;h6 class='topic'&gt;Defining REST Resources&lt;/h6&gt;<a name="line.45"></a>
 <span class="sourceLineNo">046</span> * <a name="line.46"></a>
-<span class="sourceLineNo">047</span> * The Jetty server is created by the {@link #createServer()} method and started with the {@link #startServer()} method.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * These methods can be overridden to provided customized behavior.<a name="line.48"></a>
+<span class="sourceLineNo">047</span> * Top-level REST resources are defined by the {@link #getResourceMap()} method.<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * This method can be overridden to provide a customized list of REST resources.<a name="line.48"></a>
 <span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * &lt;h6 class='topic'&gt;Defining REST Resources&lt;/h6&gt;<a name="line.50"></a>
+<span class="sourceLineNo">050</span> * &lt;h6 class='topic'&gt;Logging&lt;/h6&gt;<a name="line.50"></a>
 <span class="sourceLineNo">051</span> * <a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Top-level REST resources are defined by the {@link #getResourceMap()} method.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * This method can be overridden to provide a customized list of REST resources.<a name="line.53"></a>
+<span class="sourceLineNo">052</span> * Logging is initialized by the {@link #initLogging()} method.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This method can be overridden to provide customized logging behavior.<a name="line.53"></a>
 <span class="sourceLineNo">054</span> *<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;h6 class='topic'&gt;Logging&lt;/h6&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * <a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Logging is initialized by the {@link #initLogging()} method.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * This method can be overridden to provide customized logging behavior.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * &lt;h6 class='topic'&gt;Lifecycle Listener Methods&lt;/h6&gt;<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * Subclasses can optionally implement the following event listener methods:<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;ul class='spaced-list'&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *    &lt;li&gt;<a name="line.63"></a>
-<span class="sourceLineNo">064</span> *       {@link #onStart()} - Gets executed before {@link #start()}.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *    &lt;li&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *       {@link #onStop()} - Gets executed before {@link #stop()}.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> *    &lt;li&gt;<a name="line.67"></a>
-<span class="sourceLineNo">068</span> *       {@link #onCreateServer()} - Gets executed before {@link #createServer()}.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *    &lt;li&gt;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> *       {@link #onStartServer()} - Gets executed before {@link #startServer()}.<a name="line.70"></a>
-<span class="sourceLineNo">071</span> *    &lt;li&gt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *       {@link #onPostStartServer()} - Gets executed after {@link #startServer()}.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> *    &lt;li&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> *       {@link #onStopServer()} - Gets executed before {@link #stop()}.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> *    &lt;li&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *       {@link #onPostStopServer()} - Gets executed after {@link #stop()}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * &lt;/ul&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class RestMicroservice extends Microservice {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   <a name="line.80"></a>
-<span class="sourceLineNo">081</span>   ServletContextHandler servletContextHandler; <a name="line.81"></a>
-<span class="sourceLineNo">082</span>   Server server;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   int port;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   String contextPath;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   Logger logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>   /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    * Main method.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * <a name="line.89"></a>
-<span class="sourceLineNo">090</span>    * &lt;p&gt;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    * Subclasses must also implement this method!<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    *<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    * @param args Command line arguments.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    * @throws Exception<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   public static void main(String[] args) throws Exception {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      new RestMicroservice(args).start().join();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    * Constructor.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    * @param args Command line arguments.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * @throws Exception<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   public RestMicroservice(String...args) throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      super(args);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">055</span> * &lt;h6 class='topic'&gt;Lifecycle Listener Methods&lt;/h6&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * Subclasses can optionally implement the following event listener methods:<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;ul class='spaced-list'&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *    &lt;li&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> *       {@link #onStart()} - Gets executed before {@link #start()}.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *    &lt;li&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> *       {@link #onStop()} - Gets executed before {@link #stop()}.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *    &lt;li&gt;<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *       {@link #onCreateServer()} - Gets executed before {@link #createServer()}.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> *    &lt;li&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> *       {@link #onStartServer()} - Gets executed before {@link #startServer()}.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *    &lt;li&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> *       {@link #onPostStartServer()} - Gets executed after {@link #startServer()}.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> *    &lt;li&gt;<a name="line.68"></a>
+<span class="sourceLineNo">069</span> *       {@link #onStopServer()} - Gets executed before {@link #stop()}.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> *    &lt;li&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *       {@link #onPostStopServer()} - Gets executed after {@link #stop()}.<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * &lt;/ul&gt;<a name="line.72"></a>
+<span class="sourceLineNo">073</span> */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>public class RestMicroservice extends Microservice {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   <a name="line.75"></a>
+<span class="sourceLineNo">076</span>   ServletContextHandler servletContextHandler; <a name="line.76"></a>
+<span class="sourceLineNo">077</span>   Server server;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   int port;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   String contextPath;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   Logger logger;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   Object jettyXml;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   <a name="line.82"></a>
+<span class="sourceLineNo">083</span>   /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    * Main method.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    * <a name="line.85"></a>
+<span class="sourceLineNo">086</span>    * &lt;p&gt;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * Subclasses must also implement this method!<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    * @param args Command line arguments.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    * @throws Exception<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   public static void main(String[] args) throws Exception {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      new RestMicroservice(args).start().join();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>   /**<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    * Constructor.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @param args Command line arguments.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * @throws Exception<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public RestMicroservice(String...args) throws Exception {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      super(args);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>   //--------------------------------------------------------------------------------<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   // Methods implemented on Microservice API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   //--------------------------------------------------------------------------------<a name="line.109"></a>
 <span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>   //--------------------------------------------------------------------------------<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   // Methods implemented on Microservice API<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   //--------------------------------------------------------------------------------<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>   @Override /* Microservice */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   public RestMicroservice start() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      super.start();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      initLogging();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      createServer();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      startServer();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      return this;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>   @Override /* Microservice */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   public RestMicroservice join() throws Exception {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      server.join();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return this;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>   @Override /* Microservice */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   public RestMicroservice stop() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      Thread t = new Thread() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>         @Override /* Thread */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>         public void run() {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            try {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>               if (server.isStopping() || server.isStopped())<a name="line.136"></a>
-<span class="sourceLineNo">137</span>                  return;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>               onStopServer();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>               logger.warning("Stopping server.");<a name="line.139"></a>
-<span class="sourceLineNo">140</span>               server.stop();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>               logger.warning("Server stopped.");<a name="line.141"></a>
-<span class="sourceLineNo">142</span>               onPostStopServer();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>            } catch (Exception e) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>               logger.log(Level.SEVERE, e.getLocalizedMessage(), e);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>            }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>         }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      };<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      t.start();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      try {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>         t.join();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      } catch (InterruptedException e) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>         e.printStackTrace();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      super.stop();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      return this;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">111</span>   @Override /* Microservice */<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   public RestMicroservice start() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      super.start();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      try {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>         initLogging();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      } catch (Exception e) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>         // If logging can be initialized, just print a stack trace and continue.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>         e.printStackTrace();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      createServer();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      startServer();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return this;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>   @Override /* Microservice */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   public RestMicroservice join() throws Exception {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      server.join();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return this;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>   @Override /* Microservice */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   public RestMicroservice stop() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      Thread t = new Thread() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         @Override /* Thread */<a name="line.134"></a>
+<span class="sourceLineNo">135</span>         public void run() {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            try {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>               if (server.isStopping() || server.isStopped())<a name="line.137"></a>
+<span class="sourceLineNo">138</span>                  return;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>               onStopServer();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>               logger.warning("Stopping server.");<a name="line.140"></a>
+<span class="sourceLineNo">141</span>               server.stop();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>               logger.warning("Server stopped.");<a name="line.142"></a>
+<span class="sourceLineNo">143</span>               onPostStopServer();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            } catch (Exception e) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>               logger.log(Level.SEVERE, e.getLocalizedMessage(), e);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>         }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      };<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      t.start();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      try {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>         t.join();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      } catch (InterruptedException e) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         e.printStackTrace();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      super.stop();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      return this;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   }<a name="line.157"></a>
 <span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>   //--------------------------------------------------------------------------------<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   // RestMicroservice API methods.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   //--------------------------------------------------------------------------------<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>   /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    * Returns the port that this microservice started up on.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    * @return The port that this microservice started up on.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   public int getPort() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      return port;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>   /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    * Returns the URI where this microservice is listening on.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    * @return The URI where this microservice is listening on.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   public URI getURI() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      String scheme = getConfig().getBoolean("REST/useSsl") ? "https" : "http";<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      String hostname = "localhost";<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      String ctx = "/".equals(contextPath) ? null : contextPath;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>         hostname = InetAddress.getLocalHost().getHostName();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      } catch (UnknownHostException e) {}<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      try {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>         return new URI(scheme, null, hostname, port, ctx, null, null);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      } catch (URISyntaxException e) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         throw new RuntimeException(e);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>   /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    * Initialize the logging for this microservice.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    * <a name="line.191"></a>
-<span class="sourceLineNo">192</span>    * &lt;p&gt;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    * Subclasses can override this method to provide customized logging.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * <a name="line.194"></a>
-<span class="sourceLineNo">195</span>    * &lt;p&gt;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * The default implementation uses the &lt;cs&gt;Logging&lt;/cs&gt; section in the config file to set up logging:<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    * &lt;p class='bcode'&gt;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    *    &lt;cc&gt;#================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    *    # Logger settings<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    *    # See FileHandler Java class for details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    *    #================================================================================&lt;/cc&gt;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    *    &lt;cs&gt;[Logging]&lt;/cs&gt;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    *<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    *    &lt;cc&gt;# The directory where to create the log file.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    *    # Default is ".".&lt;/cc&gt;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    *    &lt;ck&gt;logDir&lt;/ck&gt; = logs<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    *    &lt;cc&gt;# The name of the log file to create for the main logger.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    *    # The logDir and logFile make up the pattern that's passed to the FileHandler<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    *    # constructor.<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    *    # If value is not specified, then logging to a file will not be set up.&lt;/cc&gt;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    *    &lt;ck&gt;logFile&lt;/ck&gt; = microservice.%g.log<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    *<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    *    &lt;cc&gt;# Whether to append to the existing log file or create a new one.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    *    # Default is false.&lt;/cc&gt;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    *    &lt;ck&gt;append&lt;/ck&gt; =<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    *    &lt;cc&gt;# The SimpleDateFormat format to use for dates.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    *    # Default is "yyyy.MM.dd hh:mm:ss".&lt;/cc&gt;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    *    &lt;ck&gt;dateFormat&lt;/ck&gt; =<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    *<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    *    &lt;cc&gt;# The log message format.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    *    # The value can contain any of the following variables:<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    *    #  {date} - The date, formatted per dateFormat.<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    *    #  {class} - The class name.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    *    #  {method} - The method name.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    *    #  {logger} - The logger name.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    *    #  {level} - The log level name.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    *    #  {msg} - The log message.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    *    #  {threadid} - The thread ID.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    *    #  {exception} - The localized exception message.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    *    # Default is "[{date} {level}] {msg}%n".&lt;/cc&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    *    &lt;ck&gt;format&lt;/ck&gt; =<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    *<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    *    &lt;cc&gt;# The maximum log file size.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    *    # Suffixes available for numbers.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    *    # See ConfigFile.getInt(String,int) for details.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    *    # Default is 1M.&lt;/cc&gt;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    *    &lt;ck&gt;limit&lt;/ck&gt; = 10M<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    *<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    *    &lt;cc&gt;# Max number of log files.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    *    # Default is 1.&lt;/cc&gt;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    *    &lt;ck&gt;count&lt;/ck&gt; = 5<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    *<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    *    &lt;cc&gt;# Default log levels.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    *    # Keys are logger names.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    *    # Values are serialized Level POJOs.&lt;/cc&gt;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    *    &lt;ck&gt;levels&lt;/ck&gt; = { org.apache.juneau:'INFO' }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    *<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    *    &lt;cc&gt;# Only print unique stack traces once and then refer to them by a simple 8 character hash identifier.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    *    # Useful for preventing log files from filling up with duplicate stack traces.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    *    # Default is false.&lt;/cc&gt;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    *    &lt;ck&gt;useStackTraceHashes&lt;/ck&gt; = true<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    *<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    *    &lt;cc&gt;# The default level for the console logger.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    *    # Default is WARNING.&lt;/cc&gt;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    *    &lt;ck&gt;consoleLevel&lt;/ck&gt; = WARNING<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    * &lt;/p&gt;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    *<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    * @throws Exception<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   protected void initLogging() throws Exception {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      ConfigFile cf = getConfig();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      logger = Logger.getLogger("");<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      String logFile = cf.getString("Logging/logFile");<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      if (! isEmpty(logFile)) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>         LogManager.getLogManager().reset();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>         String logDir = cf.getString("Logging/logDir", ".");<a name="line.268"></a>
-<span class="sourceLineNo">269</span>         mkdirs(new File(logDir), false);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>         boolean append = cf.getBoolean("Logging/append");<a name="line.270"></a>
-<span class="sourceLineNo">271</span>         int limit = cf.getInt("Logging/limit", 1024*1024);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>         int count = cf.getInt("Logging/count", 1);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>         FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>         boolean useStackTraceHashes = cf.getBoolean("Logging/useStackTraceHashes");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>         String format = cf.getString("Logging/format", "[{date} {level}] {msg}%n");<a name="line.276"></a>
-<span class="sourceLineNo">277</span>         String dateFormat = cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss");<a name="line.277"></a>
-<span class="sourceLineNo">278</span>         fh.setFormatter(new LogEntryFormatter(format, dateFormat, useStackTraceHashes));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>         logger.addHandler(fh);<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>         ConsoleHandler ch = new ConsoleHandler();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>         ch.setLevel(Level.parse(cf.getString("Logging/consoleLevel", "WARNING")));<a name="line.282"></a>
-<span class="sourceLineNo">283</span>         ch.setFormatter(new LogEntryFormatter(format, dateFormat, false));<a name="line.283"></a>
-<span class="sourceLineNo">284</span>         logger.addHandler(ch);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      ObjectMap loggerLevels = cf.getObject("Logging/levels", ObjectMap.class);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      if (loggerLevels != null)<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      for (String l : loggerLevels.keySet())<a name="line.288"></a>
-<span class="sourceLineNo">289</span>         Logger.getLogger(l).setLevel(loggerLevels.get(Level.class, l));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   }<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>   /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    * Method used to create (but not start) an instance of a Jetty server.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    * <a name="line.294"></a>
-<span class="sourceLineNo">295</span>    * &lt;p&gt;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    * Subclasses can override this method to customize the Jetty server before it is started.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    * <a name="line.297"></a>
-<span class="sourceLineNo">298</span>    * &lt;p&gt;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    * The default implementation is configured by the following values in the config file:<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    * &lt;p class='bcode'&gt;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    *    &lt;cc&gt;#================================================================================<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    *    # REST settings<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    *    #================================================================================&lt;/cc&gt;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    *    &lt;cs&gt;[REST]&lt;/cs&gt;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    *<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    *    &lt;cc&gt;# The HTTP port number to use.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    *    # Default is Rest-Port setting in manifest file, or 8000.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    *    # Can also specify a comma-delimited lists of ports to try, including 0 meaning<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    *    # try a random port.&lt;/cc&gt;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    *    &lt;ck&gt;port&lt;/ck&gt; = 10000<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    *<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    *    &lt;cc&gt;# The context root of the Jetty server.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    *    # Default is Rest-ContextPath in manifest file, or "/".&lt;/cc&gt;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    *    &lt;ck&gt;contextPath&lt;/ck&gt; =<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    *    &lt;cc&gt;# Authentication:  NONE, BASIC.<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    *    # Default is Rest-AuthType in manifest file, or NONE.&lt;/cc&gt;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    *    &lt;ck&gt;authType&lt;/ck&gt; = NONE<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    *<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    *    &lt;cc&gt;# The BASIC auth username.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    *    # Default is Rest-LoginUser in manifest file.&lt;/cc&gt;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    *    &lt;ck&gt;loginUser&lt;/ck&gt; =<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    *<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    *    &lt;cc&gt;# The BASIC auth password.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    *    # Default is Rest-LoginPassword in manifest file.&lt;/cc&gt;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    *    &lt;ck&gt;loginPassword&lt;/ck&gt; =<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    *<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    *    &lt;cc&gt;# The BASIC auth realm.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    *    # Default is Rest-AuthRealm in manifest file.&lt;/cc&gt;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    *    &lt;ck&gt;authRealm&lt;/ck&gt; =<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    *<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    *    &lt;cc&gt;# Enable SSL support.&lt;/cc&gt;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    *    &lt;ck&gt;useSsl&lt;/ck&gt; = false<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    *<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    *    &lt;cc&gt;#================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    *    # Bean properties on the org.eclipse.jetty.util.ssl.SslSocketFactory class<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    *    #--------------------------------------------------------------------------------<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    *    # Ignored if REST/useSsl is false.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    *    #================================================================================&lt;/cc&gt;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    *    &lt;cs&gt;[REST-SslContextFactory]&lt;/cs&gt;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    *    &lt;ck&gt;keyStorePath&lt;/ck&gt; = client_keystore.jks<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    *    &lt;ck&gt;keyStorePassword*&lt;/ck&gt; = {HRAaRQoT}<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    *    &lt;ck&gt;excludeCipherSuites&lt;/ck&gt; = TLS_DHE.*, TLS_EDH.*<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    *    &lt;ck&gt;excludeProtocols&lt;/ck&gt; = SSLv3<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    *    &lt;ck&gt;allowRenegotiate&lt;/ck&gt; = false<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    * &lt;/p&gt;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    *<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    * @return The newly-created server.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    * @throws Exception<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   protected Server createServer() throws Exception {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      onCreateServer();<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>      ConfigFile cf = getConfig();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      ObjectMap mf = getManifest();<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>      int[] ports = cf.getObjectWithDefault("REST/port", mf.get(int[].class, "Rest-Port", new int[]{8000}), int[].class);<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>      port = findOpenPort(ports);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      if (port == 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>         System.err.println("Open port not found.  Tried " + JsonSerializer.DEFAULT_LAX.toString(ports));<a name="line.361"></a>
-<span class="sourceLineNo">362</span>         System.exit(1);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>      contextPath = cf.getString("REST/contextPath", mf.getString("Rest-ContextPath", "/"));<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>      if (cf.getBoolean("REST/useSsl")) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>         SslContextFactory sslContextFactory = new SslContextFactory();<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>         // Write the properties in REST-SslContextFactory to the bean setters on sslContextFactory.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>         // Throws an exception if section contains unknown properties.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>         // Only look for bean properties of type String/String/boolean/int since class has multiple<a name="line.373"></a>
-<span class="sourceLineNo">374</span>         //    setters with the same name (e.g. setKeyStore(KeyStore) and setKeyStore(String)).<a name="line.374"></a>
-<span class="sourceLineNo">375</span>         ObjectMap m = cf.writeProperties("REST-SslContextFactory", sslContextFactory, false, String.class, String[].class, boolean.class, int.class);<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>         // We're using Jetty 8 that doesn't allow regular expression matching in SslContextFactory.setExcludeCipherSuites(),<a name="line.377"></a>
-<span class="sourceLineNo">378</span>         // so to prevent having the config file list all old cipher suites, exclude the known bad ones.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>         String[] excludeCipherSuites = combine(<a name="line.379"></a>
-<span class="sourceLineNo">380</span>            split("SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA"),<a name="line.380"></a>
-<span class="sourceLineNo">381</span>            sslContextFactory.getExcludeCipherSuites()<a name="line.381"></a>
-<span class="sourceLineNo">382</span>         );<a name="line.382"></a>
-<span class="sourceLineNo">383</span>         sslContextFactory.setExcludeCipherSuites(excludeCipherSuites);<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>         logger.log(Level.WARNING, "SSL properties set: {0}", JsonSerializer.DEFAULT_LAX.toString(m));<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>         SslSocketConnector connector = new SslSocketConnector(sslContextFactory);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>         connector.setPort(port);<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>         server = new Server();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>         server.setConnectors(new Connector[] { connector });<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>      } else {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>         server = new Server(port);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>      servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>      String authType = cf.getString("REST/authType", mf.getString("Rest-AuthType", "NONE"));<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      if (authType.equals("BASIC"))<a name="line.400"></a>
-<span class="sourceLineNo">401</span>         servletContextHandler.setSecurityHandler(basicAuth(cf, mf));<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>      servletContextHandler.setContextPath(contextPath);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      server.setHandler(servletContextHandler);<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>      for (Map.Entry&lt;String,Class&lt;? extends Servlet&gt;&gt; e : getResourceMap().entrySet())<a name="line.406"></a>
-<span class="sourceLineNo">407</span>         servletContextHandler.addServlet(e.getValue(), e.getKey()).setInitOrder(0);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      <a name="line.408"></a>
-<span class="sourceLineNo">409</span>      return server;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   <a name="line.411"></a>
-<span class="sourceLineNo">412</span>   /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    * Adds an arbitrary servlet to this microservice.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    * <a name="line.414"></a>
-<span class="sourceLineNo">415</span>    * @param servlet The servlet instance.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    * @param pathSpec The context path of the servlet.<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    * @return This object (for method chaining).<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    * @throws RuntimeException if {@link #createServer()} has not previously been called.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   public RestMicroservice addServlet(Servlet servlet, String pathSpec) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      if (servletContextHandler == null)<a name="line.421"></a>
-<span class="sourceLineNo">422</span>         throw new RuntimeException("Servlet context handler not found.  createServer() must be called first.");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      ServletHolder sh = new ServletHolder(servlet);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      servletContextHandler.addServlet(sh, pathSpec);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return this;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   <a name="line.427"></a>
-<span class="sourceLineNo">428</span>   /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    * Adds a servlet attribute to the Jetty server.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    * <a name="line.430"></a>
-<span class="sourceLineNo">431</span>    * @param name The server attribute name.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    * @param value The context path of the servlet.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    * @return This object (for method chaining).<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    * @throws RuntimeException if {@link #createServer()} has not previously been called.<a name="line.434"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>   //--------------------------------------------------------------------------------<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   // RestMicroservice API methods.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   //--------------------------------------------------------------------------------<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>   /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    * Returns the port that this microservice started up on.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    * @return The port that this microservice started up on.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   public int getPort() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      return port;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>   /**<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    * Returns the URI where this microservice is listening on.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * @return The URI where this microservice is listening on.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   public URI getURI() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      String scheme = getConfig().getBoolean("REST/useSsl") ? "https" : "http";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      String hostname = "localhost";<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      String ctx = "/".equals(contextPath) ? null : contextPath;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      try {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>         hostname = InetAddress.getLocalHost().getHostName();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      } catch (UnknownHostException e) {}<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      try {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>         return new URI(scheme, null, hostname, port, ctx, null, null);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      } catch (URISyntaxException e) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         throw new RuntimeException(e);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>   /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    * Initialize the logging for this microservice.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    * <a name="line.192"></a>
+<span class="sourceLineNo">193</span>    * &lt;p&gt;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    * Subclasses can override this method to provide customized logging.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    * <a name="line.195"></a>
+<span class="sourceLineNo">196</span>    * &lt;p&gt;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    * The default implementation uses the &lt;cs&gt;Logging&lt;/cs&gt; section in the config file to set up logging:<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    * &lt;p class='bcode'&gt;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    *    &lt;cc&gt;#================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    *    # Logger settings<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    *    # See FileHandler Java class for details.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    *    #================================================================================&lt;/cc&gt;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    *    &lt;cs&gt;[Logging]&lt;/cs&gt;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    *<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    *    &lt;cc&gt;# The directory where to create the log file.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    *    # Default is ".".&lt;/cc&gt;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *    &lt;ck&gt;logDir&lt;/ck&gt; = logs<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    *<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    *    &lt;cc&gt;# The name of the log file to create for the main logger.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *    # The logDir and logFile make up the pattern that's passed to the FileHandler<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *    # constructor.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *    # If value is not specified, then logging to a file will not be set up.&lt;/cc&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    *    &lt;ck&gt;logFile&lt;/ck&gt; = microservice.%g.log<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    *    &lt;cc&gt;# Whether to append to the existing log file or create a new one.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    *    # Default is false.&lt;/cc&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    *    &lt;ck&gt;append&lt;/ck&gt; =<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    *<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    *    &lt;cc&gt;# The SimpleDateFormat format to use for dates.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    *    # Default is "yyyy.MM.dd hh:mm:ss".&lt;/cc&gt;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    *    &lt;ck&gt;dateFormat&lt;/ck&gt; =<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    *<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    *    &lt;cc&gt;# The log message format.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    *    # The value can contain any of the following variables:<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    *    #  {date} - The date, formatted per dateFormat.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    *    #  {class} - The class name.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    *    #  {method} - The method name.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    *    #  {logger} - The logger name.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    *    #  {level} - The log level name.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    *    #  {msg} - The log message.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    *    #  {threadid} - The thread ID.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    *    #  {exception} - The localized exception message.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    *    # Default is "[{date} {level}] {msg}%n".&lt;/cc&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    *    &lt;ck&gt;format&lt;/ck&gt; =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    *<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    *    &lt;cc&gt;# The maximum log file size.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    *    # Suffixes available for numbers.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    *    # See ConfigFile.getInt(String,int) for details.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    *    # Default is 1M.&lt;/cc&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    *    &lt;ck&gt;limit&lt;/ck&gt; = 10M<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    *<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    *    &lt;cc&gt;# Max number of log files.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    *    # Default is 1.&lt;/cc&gt;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    *    &lt;ck&gt;count&lt;/ck&gt; = 5<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    *<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    *    &lt;cc&gt;# Default log levels.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    *    # Keys are logger names.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    *    # Values are serialized Level POJOs.&lt;/cc&gt;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    *    &lt;ck&gt;levels&lt;/ck&gt; = { org.apache.juneau:'INFO' }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    *<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    *    &lt;cc&gt;# Only print unique stack traces once and then refer to them by a simple 8 character hash identifier.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    *    # Useful for preventing log files from filling up with duplicate stack traces.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    *    # Default is false.&lt;/cc&gt;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    *    &lt;ck&gt;useStackTraceHashes&lt;/ck&gt; = true<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    *<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    *    &lt;cc&gt;# The default level for the console logger.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    *    # Default is WARNING.&lt;/cc&gt;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    *    &lt;ck&gt;consoleLevel&lt;/ck&gt; = WARNING<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    * &lt;/p&gt;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    *<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    * @throws Exception<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   protected void initLogging() throws Exception {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      ConfigFile cf = getConfig();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      logger = Logger.getLogger("");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      String logFile = cf.getString("Logging/logFile");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      if (! isEmpty(logFile)) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>         LogManager.getLogManager().reset();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>         String logDir = cf.getString("Logging/logDir", ".");<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         mkdirs(new File(logDir), false);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>         boolean append = cf.getBoolean("Logging/append");<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         int limit = cf.getInt("Logging/limit", 1024*1024);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>         int count = cf.getInt("Logging/count", 1);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>         FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>         boolean useStackTraceHashes = cf.getBoolean("Logging/useStackTraceHashes");<a name="line.276"></a>
+<span class="sourceLineNo">277</span>         String format = cf.getString("Logging/format", "[{date} {level}] {msg}%n");<a name="line.277"></a>
+<span class="sourceLineNo">278</span>         String dateFormat = cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>         fh.setFormatter(new LogEntryFormatter(format, dateFormat, useStackTraceHashes));<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         logger.addHandler(fh);<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>         ConsoleHandler ch = new ConsoleHandler();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         ch.setLevel(Level.parse(cf.getString("Logging/consoleLevel", "WARNING")));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>         ch.setFormatter(new LogEntryFormatter(format, dateFormat, false));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>         logger.addHandler(ch);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      ObjectMap loggerLevels = cf.getObject("Logging/levels", ObjectMap.class);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (loggerLevels != null)<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      for (String l : loggerLevels.keySet())<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         Logger.getLogger(l).setLevel(loggerLevels.get(Level.class, l));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>   /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    * Method used to create (but not start) an instance of a Jetty server.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    * <a name="line.295"></a>
+<span class="sourceLineNo">296</span>    * &lt;p&gt;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    * Subclasses can override this method to customize the Jetty server before it is started.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    * <a name="line.298"></a>
+<span class="sourceLineNo">299</span>    * &lt;p&gt;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    * The default implementation is configured by the following values in the config file <a name="line.300"></a>
+<span class="sourceLineNo">301</span>    * if a jetty.xml is not specified via a &lt;code&gt;REST/jettyXml&lt;/code&gt; setting:<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    * &lt;p class='bcode'&gt;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    *    &lt;cc&gt;#================================================================================<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    *    # REST settings<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    *    #================================================================================&lt;/cc&gt;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    *    &lt;cs&gt;[REST]&lt;/cs&gt;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    *    &lt;cc&gt;# The HTTP port number to use.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    *    # Default is Rest-Port setting in manifest file, or 8000.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    *    # Can also specify a comma-delimited lists of ports to try, including 0 meaning<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    *    # try a random port.&lt;/cc&gt;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    *    &lt;ck&gt;port&lt;/ck&gt; = 10000<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    *<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    *    &lt;cc&gt;# The context root of the Jetty server.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    *    # Default is Rest-ContextPath in manifest file, or "/".&lt;/cc&gt;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    *    &lt;ck&gt;contextPath&lt;/ck&gt; =<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    *<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    *    &lt;cc&gt;# Enable SSL support.&lt;/cc&gt;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    *    &lt;ck&gt;useSsl&lt;/ck&gt; = false<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    *<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    * @return The newly-created server.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    * @throws Exception<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    */<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   protected Server createServer() throws Exception {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      onCreateServer();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>      ConfigFile cf = getConfig();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      ObjectMap mf = getManifest();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      if (jettyXml == null)<a name="line.329"></a>
+<span class="sourceLineNo">330</span>         jettyXml = cf.getString("REST/jettyXml", mf.getString("Rest-JettyXml", null));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      if (jettyXml != null) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>         InputStream is = null;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>         if (jettyXml instanceof String) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            jettyXml = new File(jettyXml.toString());<a name="line.334"></a>
+<span class="sourceLineNo">335</span>         }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>         if (jettyXml instanceof File) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            File f = (File)jettyXml;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            if (f.exists())<a name="line.338"></a>
+<span class="sourceLineNo">339</span>               is = new FileInputStream((File)jettyXml);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            else <a name="line.340"></a>
+<span class="sourceLineNo">341</span>               throw new FormattedRuntimeException("Jetty.xml file ''{0}'' was specified but not found on the file system.", jettyXml);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>         } else if (jettyXml instanceof InputStream) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            is = (InputStream)jettyXml;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>         }<a name="line.344"></a>
+<span class="sourceLineNo">345</span>         <a name="line.345"></a>
+<span class="sourceLineNo">346</span>         XmlConfiguration config = new XmlConfiguration(is);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>         server = (Server)config.configure();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      <a name="line.348"></a>
+<span class="sourceLineNo">349</span>      } else {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>         int[] ports = cf.getObjectWithDefault("REST/port", mf.get(int[].class, "Rest-Port", new int[]{8000}), int[].class);<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>         port = findOpenPort(ports);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>         if (port == 0) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            System.err.println("Open port not found.  Tried " + JsonSerializer.DEFAULT_LAX.toString(ports));<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            System.exit(1);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>         }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>         contextPath = cf.getString("REST/contextPath", mf.getString("Rest-ContextPath", "/"));<a name="line.358"></a>
+<span class="sourceLineNo">359</span>         server = new Server(port);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>         <a name="line.360"></a>
+<span class="sourceLineNo">361</span>         servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>         servletContextHandler.setContextPath(contextPath);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>         server.setHandler(servletContextHandler);<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>         for (Map.Entry&lt;String,Class&lt;? extends Servlet&gt;&gt; e : getResourceMap().entrySet())<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            servletContextHandler.addServlet(e.getValue(), e.getKey()).setInitOrder(0);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      <a name="line.369"></a>
+<span class="sourceLineNo">370</span>      return server;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   <a name="line.372"></a>
+<span class="sourceLineNo">373</span>   /**<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    * Adds an arbitrary servlet to this microservice.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    * <a name="line.375"></a>
+<span class="sourceLineNo">376</span>    * @param servlet The servlet instance.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    * @param pathSpec The context path of the servlet.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    * @return This object (for method chaining).<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    * @throws RuntimeException if {@link #createServer()} has not previously been called.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    */<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   public RestMicroservice addServlet(Servlet servlet, String pathSpec) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      if (servletContextHandler == null)<a name="line.382"></a>
+<span class="sourceLineNo">383</span>         throw new RuntimeException("Servlet context handler not found.  createServer() must be called first.");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      ServletHolder sh = new ServletHolder(servlet);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      servletContextHandler.addServlet(sh, pathSpec);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      return this;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   <a name="line.388"></a>
+<span class="sourceLineNo">389</span>   /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    * Adds a servlet attribute to the Jetty server.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    * <a name="line.391"></a>
+<span class="sourceLineNo">392</span>    * @param name The server attribute name.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    * @param value The context path of the servlet.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    * @return This object (for method chaining).<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    * @throws RuntimeException if {@link #createServer()} has not previously been called.<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    */<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   public RestMicroservice addServletAttribute(String name, Object value) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (server == null)<a name="line.398"></a>
+<span class="sourceLineNo">399</span>         throw new RuntimeException("Server not found.  createServer() must be called first.");<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      server.setAttribute(name, value);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      return this;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   <a name="line.403"></a>
+<span class="sourceLineNo">404</span>   /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    * Returns the underlying Jetty server.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    * <a name="line.406"></a>
+<span class="sourceLineNo">407</span>    * @return The underlying Jetty server, or &lt;jk&gt;null&lt;/jk&gt; if {@link #createServer()} has not yet been called.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   public Server getServer() {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return server;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   <a name="line.412"></a>
+<span class="sourceLineNo">413</span>   private static int findOpenPort(int[] ports) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      for (int port : ports) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>         try {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            // If port is 0, try a random port between ports[0] and 32767.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            if (port == 0)<a name="line.417"></a>
+<span class="sourceLineNo">418</span>               port = new Random().nextInt(32767 - ports[0] + 1) + ports[0];<a name="line.418"></a>
+<span class="sourceLineNo">419</span>            ServerSocket ss = new ServerSocket(port);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>            ss.close();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>            return port;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>         } catch (IOException e) {}<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return 0;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>   /**<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    * Method used to start the Jetty server created by {@link #createServer()}.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    * <a name="line.429"></a>
+<span class="sourceLineNo">430</span>    * &lt;p&gt;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    * Subclasses can override this method to customize server startup.<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    *<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    * @return The port that this server started on.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    * @throws Exception<a name="line.434"></a>
 <span class="sourceLineNo">435</span>    */<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   public RestMicroservice addServletAttribute(String name, Object value) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      if (server == null)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>         throw new RuntimeException("Server not found.  createServer() must be called first.");<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      server.setAttribute(name, value);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      return this;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   <a name="line.442"></a>
-<span class="sourceLineNo">443</span>   /**<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    * Returns the underlying Jetty server.<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    * <a name="line.445"></a>
-<span class="sourceLineNo">446</span>    * @return The underlying Jetty server, or &lt;jk&gt;null&lt;/jk&gt; if {@link #createServer()} has not yet been called.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    */<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   public Server getServer() {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      return server;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   <a name="line.451"></a>
-<span class="sourceLineNo">452</span>   /**<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    * Returns the underlying servlet context handler.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    * <a name="line.454"></a>
-<span class="sourceLineNo">455</span>    * @return The underlying servlet context handler, or &lt;jk&gt;null&lt;/jk&gt; if {@link #createServer()} has not yet been called.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   public ServletContextHandler getServletContextHandler() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      return servletContextHandler;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>   private static int findOpenPort(int[] ports) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      for (int port : ports) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>         try {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>            // If port is 0, try a random port between ports[0] and 32767.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            if (port == 0)<a name="line.465"></a>
-<span class="sourceLineNo">466</span>               port = new Random().nextInt(32767 - ports[0] + 1) + ports[0];<a name="line.466"></a>
-<span class="sourceLineNo">467</span>            ServerSocket ss = new ServerSocket(port);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            ss.close();<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            return port;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>         } catch (IOException e) {}<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      return 0;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>   /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    * Method used to start the Jetty server created by {@link #createServer()}.<a name="line.476"></a>
+<span class="sourceLineNo">436</span>   protected int startServer() throws Exception {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      onStartServer();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      server.start();<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      this.port = ((ServerConnector)server.getConnectors()[0]).getLocalPort();<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      logger.warning("Server started on port " + port);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      onPostStartServer();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      return port;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>   /**<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    * Returns the resource map to use for this microservice.<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    * <a name="line.447"></a>
+<span class="sourceLineNo">448</span>    * &lt;p&gt;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    * Subclasses can override this method to programmatically specify their resources.<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    * <a name="line.450"></a>
+<span class="sourceLineNo">451</span>    * &lt;p&gt;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    * The default implementation is configured by the following values in the config file:<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    * &lt;p class='bcode'&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    *<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    *   

<TRUNCATED>


[14/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.ClassComparator.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.ClassComparator.html b/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.ClassComparator.html
index b68325a..6207b05 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.ClassComparator.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.ClassComparator.html
@@ -841,175 +841,279 @@
 <span class="sourceLineNo">833</span>   /**<a name="line.833"></a>
 <span class="sourceLineNo">834</span>    * Returns all the fields in the specified class and all parent classes.<a name="line.834"></a>
 <span class="sourceLineNo">835</span>    *<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    * @param c The class to get all fields on.<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    * @return An iterable of all fields in the specified class.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    */<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   @SuppressWarnings("rawtypes")<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   public static Iterable&lt;Field&gt; getAllFields(final Class c, final boolean parentFirst) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      return new Iterable&lt;Field&gt;() {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>         @Override<a name="line.843"></a>
-<span class="sourceLineNo">844</span>         public Iterator&lt;Field&gt; iterator() {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            return new Iterator&lt;Field&gt;(){<a name="line.845"></a>
-<span class="sourceLineNo">846</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, false);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>               Field[] fields = classIterator.hasNext() ? classIterator.next().getDeclaredFields() : new Field[0];<a name="line.847"></a>
-<span class="sourceLineNo">848</span>               int fIndex = 0;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>               Field next;<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>               @Override<a name="line.851"></a>
-<span class="sourceLineNo">852</span>               public boolean hasNext() {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>                  prime();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>                  return next != null;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>               }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>               private void prime() {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>                  if (next == null) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>                     while (fIndex &gt;= fields.length) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>                        if (classIterator.hasNext()) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>                           fields = classIterator.next().getDeclaredFields();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>                           fIndex = 0;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>                        } else {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>                           fIndex = -1;<a name="line.864"></a>
-<span class="sourceLineNo">865</span>                        }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>                     }<a name="line.866"></a>
-<span class="sourceLineNo">867</span>                     if (fIndex != -1)<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                        next = fields[fIndex++];<a name="line.868"></a>
-<span class="sourceLineNo">869</span>                  }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>               }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>               @Override<a name="line.872"></a>
-<span class="sourceLineNo">873</span>               public Field next() {<a name="line.873"></a>
-<span class="sourceLineNo">874</span>                  prime();<a name="line.874"></a>
-<span class="sourceLineNo">875</span>                  Field f = next;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>                  next = null;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>                  return f;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>               }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>               @Override<a name="line.880"></a>
-<span class="sourceLineNo">881</span>               public void remove() {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>               }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            };<a name="line.883"></a>
-<span class="sourceLineNo">884</span>         }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      };<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   }<a name="line.886"></a>
-<span class="sourceLineNo">887</span><a name="line.887"></a>
-<span class="sourceLineNo">888</span>   /**<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    * Returns all the methods in the specified class and all parent classes.<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    *<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    * @param c The class to get all methods on.<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    * @return An iterable of all methods in the specified class.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   @SuppressWarnings("rawtypes")<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   public static Iterable&lt;Method&gt; getAllMethods(final Class c, final boolean parentFirst) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return new Iterable&lt;Method&gt;() {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>         @Override<a name="line.898"></a>
-<span class="sourceLineNo">899</span>         public Iterator&lt;Method&gt; iterator() {<a name="line.899"></a>
-<span class="sourceLineNo">900</span>            return new Iterator&lt;Method&gt;(){<a name="line.900"></a>
-<span class="sourceLineNo">901</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, true);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>               Method[] methods = classIterator.hasNext() ? classIterator.next().getDeclaredMethods() : new Method[0];<a name="line.902"></a>
-<span class="sourceLineNo">903</span>               int mIndex = 0;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>               Method next;<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>               @Override<a name="line.906"></a>
-<span class="sourceLineNo">907</span>               public boolean hasNext() {<a name="line.907"></a>
-<span class="sourceLineNo">908</span>                  prime();<a name="line.908"></a>
-<span class="sourceLineNo">909</span>                  return next != null;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>               }<a name="line.910"></a>
+<span class="sourceLineNo">836</span>    * &lt;p&gt;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    * Fields are ordered in either parent-to-child, or child-to-parent order, then alphabetically.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    *<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    * @param c The class to get all fields on.<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    * @return An iterable of all fields in the specified class.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    */<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   @SuppressWarnings("rawtypes")<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   public static Iterable&lt;Field&gt; getAllFields(final Class c, final boolean parentFirst) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      return new Iterable&lt;Field&gt;() {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>         @Override<a name="line.846"></a>
+<span class="sourceLineNo">847</span>         public Iterator&lt;Field&gt; iterator() {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>            return new Iterator&lt;Field&gt;(){<a name="line.848"></a>
+<span class="sourceLineNo">849</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, false);<a name="line.849"></a>
+<span class="sourceLineNo">850</span>               Field[] fields = classIterator.hasNext() ? sort(classIterator.next().getDeclaredFields()) : new Field[0];<a name="line.850"></a>
+<span class="sourceLineNo">851</span>               int fIndex = 0;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>               Field next;<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>               @Override<a name="line.854"></a>
+<span class="sourceLineNo">855</span>               public boolean hasNext() {<a name="line.855"></a>
+<span class="sourceLineNo">856</span>                  prime();<a name="line.856"></a>
+<span class="sourceLineNo">857</span>                  return next != null;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>               }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>               private void prime() {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>                  if (next == null) {<a name="line.861"></a>
+<span class="sourceLineNo">862</span>                     while (fIndex &gt;= fields.length) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>                        if (classIterator.hasNext()) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>                           fields = sort(classIterator.next().getDeclaredFields());<a name="line.864"></a>
+<span class="sourceLineNo">865</span>                           fIndex = 0;<a name="line.865"></a>
+<span class="sourceLineNo">866</span>                        } else {<a name="line.866"></a>
+<span class="sourceLineNo">867</span>                           fIndex = -1;<a name="line.867"></a>
+<span class="sourceLineNo">868</span>                        }<a name="line.868"></a>
+<span class="sourceLineNo">869</span>                     }<a name="line.869"></a>
+<span class="sourceLineNo">870</span>                     if (fIndex != -1)<a name="line.870"></a>
+<span class="sourceLineNo">871</span>                        next = fields[fIndex++];<a name="line.871"></a>
+<span class="sourceLineNo">872</span>                  }<a name="line.872"></a>
+<span class="sourceLineNo">873</span>               }<a name="line.873"></a>
+<span class="sourceLineNo">874</span><a name="line.874"></a>
+<span class="sourceLineNo">875</span>               @Override<a name="line.875"></a>
+<span class="sourceLineNo">876</span>               public Field next() {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>                  prime();<a name="line.877"></a>
+<span class="sourceLineNo">878</span>                  Field f = next;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>                  next = null;<a name="line.879"></a>
+<span class="sourceLineNo">880</span>                  return f;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>               }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>               @Override<a name="line.883"></a>
+<span class="sourceLineNo">884</span>               public void remove() {<a name="line.884"></a>
+<span class="sourceLineNo">885</span>               }<a name="line.885"></a>
+<span class="sourceLineNo">886</span>            };<a name="line.886"></a>
+<span class="sourceLineNo">887</span>         }<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      };<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>   /**<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    * Returns all the methods in the specified class and all parent classes.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    *<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    * &lt;p&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    * Methods are ordered in either parent-to-child, or child-to-parent order, then alphabetically.<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    *<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    * @param c The class to get all methods on.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>    * @return An iterable of all methods in the specified class.<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    */<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   @SuppressWarnings("rawtypes")<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   public static Iterable&lt;Method&gt; getAllMethods(final Class c, final boolean parentFirst) {<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      return new Iterable&lt;Method&gt;() {<a name="line.903"></a>
+<span class="sourceLineNo">904</span>         @Override<a name="line.904"></a>
+<span class="sourceLineNo">905</span>         public Iterator&lt;Method&gt; iterator() {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>            return new Iterator&lt;Method&gt;(){<a name="line.906"></a>
+<span class="sourceLineNo">907</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>               Method[] methods = classIterator.hasNext() ? sort(classIterator.next().getDeclaredMethods()) : new Method[0];<a name="line.908"></a>
+<span class="sourceLineNo">909</span>               int mIndex = 0;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>               Method next;<a name="line.910"></a>
 <span class="sourceLineNo">911</span><a name="line.911"></a>
-<span class="sourceLineNo">912</span>               private void prime() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>                  if (next == null) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>                     while (mIndex &gt;= methods.length) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>                        if (classIterator.hasNext()) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>                           methods = classIterator.next().getDeclaredMethods();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>                           mIndex = 0;<a name="line.917"></a>
-<span class="sourceLineNo">918</span>                        } else {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>                           mIndex = -1;<a name="line.919"></a>
-<span class="sourceLineNo">920</span>                        }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>                     }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>                     if (mIndex != -1)<a name="line.922"></a>
-<span class="sourceLineNo">923</span>                        next = methods[mIndex++];<a name="line.923"></a>
-<span class="sourceLineNo">924</span>                  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>               }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>               @Override<a name="line.927"></a>
-<span class="sourceLineNo">928</span>               public Method next() {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>                  prime();<a name="line.929"></a>
-<span class="sourceLineNo">930</span>                  Method m = next;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>                  next = null;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>                  return m;<a name="line.932"></a>
-<span class="sourceLineNo">933</span>               }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>               @Override<a name="line.935"></a>
-<span class="sourceLineNo">936</span>               public void remove() {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>               }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>            };<a name="line.938"></a>
-<span class="sourceLineNo">939</span>         }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      };<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>   /**<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    * Returns a list of all the parent classes of the specified class including the class itself.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    *<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    * @param c The class to retrieve the parent classes.<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    * @param parentFirst In parent-to-child order, otherwise child-to-parent.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    * @param includeInterfaces Include interfaces.<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    * @return An iterator of parent classes in the class hierarchy.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    */<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   public static Iterator&lt;Class&lt;?&gt;&gt; getParentClasses(final Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      List&lt;Class&lt;?&gt;&gt; l = getParentClasses(new ArrayList&lt;Class&lt;?&gt;&gt;(), c, parentFirst, includeInterfaces);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      return l.iterator();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>   private static List&lt;Class&lt;?&gt;&gt; getParentClasses(List&lt;Class&lt;?&gt;&gt; l, Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      if (parentFirst) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>         if (includeInterfaces)<a name="line.958"></a>
-<span class="sourceLineNo">959</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.959"></a>
-<span class="sourceLineNo">960</span>               l.add(i);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>         l.add(c);<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      } else {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>         l.add(c);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>         if (includeInterfaces)<a name="line.968"></a>
-<span class="sourceLineNo">969</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.969"></a>
-<span class="sourceLineNo">970</span>               l.add(i);<a name="line.970"></a>
-<span class="sourceLineNo">971</span>      }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      return l;<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   }<a name="line.973"></a>
-<span class="sourceLineNo">974</span><a name="line.974"></a>
-<span class="sourceLineNo">975</span>   /**<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    * Returns the default value for the specified primitive class.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    *<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    * @param primitiveClass The primitive class to get the default value for.<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    * @return The default value, or &lt;jk&gt;null&lt;/jk&gt; if the specified class is not a primitive class.<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    */<a name="line.980"></a>
-<span class="sourceLineNo">981</span>   public static Object getPrimitiveDefault(Class&lt;?&gt; primitiveClass) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      return primitiveDefaultMap.get(primitiveClass);<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   }<a name="line.983"></a>
+<span class="sourceLineNo">912</span>               @Override<a name="line.912"></a>
+<span class="sourceLineNo">913</span>               public boolean hasNext() {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>                  prime();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>                  return next != null;<a name="line.915"></a>
+<span class="sourceLineNo">916</span>               }<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>               private void prime() {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>                  if (next == null) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>                     while (mIndex &gt;= methods.length) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>                        if (classIterator.hasNext()) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>                           methods = sort(classIterator.next().getDeclaredMethods());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>                           mIndex = 0;<a name="line.923"></a>
+<span class="sourceLineNo">924</span>                        } else {<a name="line.924"></a>
+<span class="sourceLineNo">925</span>                           mIndex = -1;<a name="line.925"></a>
+<span class="sourceLineNo">926</span>                        }<a name="line.926"></a>
+<span class="sourceLineNo">927</span>                     }<a name="line.927"></a>
+<span class="sourceLineNo">928</span>                     if (mIndex != -1)<a name="line.928"></a>
+<span class="sourceLineNo">929</span>                        next = methods[mIndex++];<a name="line.929"></a>
+<span class="sourceLineNo">930</span>                  }<a name="line.930"></a>
+<span class="sourceLineNo">931</span>               }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>               @Override<a name="line.933"></a>
+<span class="sourceLineNo">934</span>               public Method next() {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>                  prime();<a name="line.935"></a>
+<span class="sourceLineNo">936</span>                  Method m = next;<a name="line.936"></a>
+<span class="sourceLineNo">937</span>                  next = null;<a name="line.937"></a>
+<span class="sourceLineNo">938</span>                  return m;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>               }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span>               @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span>               public void remove() {<a name="line.942"></a>
+<span class="sourceLineNo">943</span>               }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>            };<a name="line.944"></a>
+<span class="sourceLineNo">945</span>         }<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      };<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   }<a name="line.947"></a>
+<span class="sourceLineNo">948</span><a name="line.948"></a>
+<span class="sourceLineNo">949</span>   private static Comparator&lt;Method&gt; METHOD_COMPARATOR = new Comparator&lt;Method&gt;() {<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>      @Override<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      public int compare(Method o1, Method o2) {<a name="line.952"></a>
+<span class="sourceLineNo">953</span>         int i = o1.getName().compareTo(o2.getName());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>         if (i == 0) {<a name="line.954"></a>
+<span class="sourceLineNo">955</span>            i = o1.getParameterCount() - o2.getParameterCount();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>            if (i == 0) {<a name="line.956"></a>
+<span class="sourceLineNo">957</span>               for (int j = 0; j &lt; o1.getParameterTypes().length &amp;&amp; i == 0; j++) {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>                  i = o1.getParameterTypes()[j].getName().compareTo(o2.getParameterTypes()[j].getName());<a name="line.958"></a>
+<span class="sourceLineNo">959</span>               }<a name="line.959"></a>
+<span class="sourceLineNo">960</span>            }<a name="line.960"></a>
+<span class="sourceLineNo">961</span>         }<a name="line.961"></a>
+<span class="sourceLineNo">962</span>         return i;<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   };<a name="line.964"></a>
+<span class="sourceLineNo">965</span><a name="line.965"></a>
+<span class="sourceLineNo">966</span>   /**<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    * Sorts methods in alphabetical order.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    *<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    * @param m The methods to sort.<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    * @return The same array, but with elements sorted.<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    */<a name="line.971"></a>
+<span class="sourceLineNo">972</span>   public static Method[] sort(Method[] m) {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Arrays.sort(m, METHOD_COMPARATOR);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      return m;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   }<a name="line.975"></a>
+<span class="sourceLineNo">976</span><a name="line.976"></a>
+<span class="sourceLineNo">977</span>   private static Comparator&lt;Field&gt; FIELD_COMPARATOR = new Comparator&lt;Field&gt;() {<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>      @Override<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      public int compare(Field o1, Field o2) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span>         return o1.getName().compareTo(o2.getName());<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   };<a name="line.983"></a>
 <span class="sourceLineNo">984</span><a name="line.984"></a>
-<span class="sourceLineNo">985</span>   private static final Map&lt;Class&lt;?&gt;,Object&gt; primitiveDefaultMap = Collections.unmodifiableMap(<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      new AMap&lt;Class&lt;?&gt;,Object&gt;()<a name="line.986"></a>
-<span class="sourceLineNo">987</span>         .append(Boolean.TYPE, false)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>         .append(Character.TYPE, (char)0)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>         .append(Short.TYPE, (short)0)<a name="line.989"></a>
-<span class="sourceLineNo">990</span>         .append(Integer.TYPE, 0)<a name="line.990"></a>
-<span class="sourceLineNo">991</span>         .append(Long.TYPE, 0l)<a name="line.991"></a>
-<span class="sourceLineNo">992</span>         .append(Float.TYPE, 0f)<a name="line.992"></a>
-<span class="sourceLineNo">993</span>         .append(Double.TYPE, 0d)<a name="line.993"></a>
-<span class="sourceLineNo">994</span>         .append(Byte.TYPE, (byte)0)<a name="line.994"></a>
-<span class="sourceLineNo">995</span>         .append(Boolean.class, false)<a name="line.995"></a>
-<span class="sourceLineNo">996</span>         .append(Character.class, (char)0)<a name="line.996"></a>
-<span class="sourceLineNo">997</span>         .append(Short.class, (short)0)<a name="line.997"></a>
-<span class="sourceLineNo">998</span>         .append(Integer.class, 0)<a name="line.998"></a>
-<span class="sourceLineNo">999</span>         .append(Long.class, 0l)<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>         .append(Float.class, 0f)<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>         .append(Double.class, 0d)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>         .append(Byte.class, (byte)0)<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   );<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>}<a name="line.1004"></a>
+<span class="sourceLineNo">985</span>   /**<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    * Sorts methods in alphabetical order.<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    *<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    * @param m The methods to sort.<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    * @return The same array, but with elements sorted.<a name="line.989"></a>
+<span class="sourceLineNo">990</span>    */<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   public static Field[] sort(Field[] m) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      Arrays.sort(m, FIELD_COMPARATOR);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      return m;<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span>   /**<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    * Returns a list of all the parent classes of the specified class including the class itself.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    *<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    * @param c The class to retrieve the parent classes.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    * @param parentFirst In parent-to-child order, otherwise child-to-parent.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    * @param includeInterfaces Include interfaces.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    * @return An iterator of parent classes in the class hierarchy.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    */<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   public static Iterator&lt;Class&lt;?&gt;&gt; getParentClasses(final Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      List&lt;Class&lt;?&gt;&gt; l = getParentClasses(new ArrayList&lt;Class&lt;?&gt;&gt;(), c, parentFirst, includeInterfaces);<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      return l.iterator();<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   private static List&lt;Class&lt;?&gt;&gt; getParentClasses(List&lt;Class&lt;?&gt;&gt; l, Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      if (parentFirst) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>         if (includeInterfaces)<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>               l.add(i);<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>         l.add(c);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      } else {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>         l.add(c);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>         if (includeInterfaces)<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>               l.add(i);<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>      }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>      return l;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>   }<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span><a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   /**<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    * Returns the default value for the specified primitive class.<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    *<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    * @param primitiveClass The primitive class to get the default value for.<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>    * @return The default value, or &lt;jk&gt;null&lt;/jk&gt; if the specified class is not a primitive class.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    */<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>   public static Object getPrimitiveDefault(Class&lt;?&gt; primitiveClass) {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      return primitiveDefaultMap.get(primitiveClass);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>   }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>   private static final Map&lt;Class&lt;?&gt;,Object&gt; primitiveDefaultMap = Collections.unmodifiableMap(<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      new AMap&lt;Class&lt;?&gt;,Object&gt;()<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>         .append(Boolean.TYPE, false)<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>         .append(Character.TYPE, (char)0)<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>         .append(Short.TYPE, (short)0)<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>         .append(Integer.TYPE, 0)<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>         .append(Long.TYPE, 0l)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>         .append(Float.TYPE, 0f)<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>         .append(Double.TYPE, 0d)<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>         .append(Byte.TYPE, (byte)0)<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>         .append(Boolean.class, false)<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>         .append(Character.class, (char)0)<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>         .append(Short.class, (short)0)<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>         .append(Integer.class, 0)<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>         .append(Long.class, 0l)<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>         .append(Float.class, 0f)<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>         .append(Double.class, 0d)<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>         .append(Byte.class, (byte)0)<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>   );<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>   /**<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    * Returns a readable representation of the specified method.<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    *<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    * &lt;p&gt;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    * The format of the string is &lt;js&gt;"full-qualified-class.method-name(parameter-simple-class-names)"&lt;/js&gt;.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    *<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    * @param m The method to stringify.<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    * @return The stringified method.<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    */<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   public static String toString(Method m) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      StringBuilder sb = new StringBuilder(m.getDeclaringClass().getName() + "." + m.getName() + "(");<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      for (int i = 0; i &lt; m.getParameterCount(); i++) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>         if (i &gt; 0)<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>            sb.append(",");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>         sb.append(m.getParameterTypes()[i].getSimpleName());<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      sb.append(")");<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      return sb.toString();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>   }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span><a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   /**<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    * Returns a readable representation of the specified field.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    *<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    * &lt;p&gt;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    * The format of the string is &lt;js&gt;"full-qualified-class.field-name"&lt;/js&gt;.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    *<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    * @param f The field to stringify.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    * @return The stringified field.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    */<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   public static String toString(Field f) {<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      return f.getDeclaringClass().getName() + "." + f.getName();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   }<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   /**<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    * Throws an {@link IllegalArgumentException} if the parameters on the method are not in the specified list provided.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    * @param m The method to test.<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    * @param args The valid class types (exact) for the arguments.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    * @throws FormattedIllegalArgumentException If any of the parameters on the method weren't in the list.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   public static void assertArgsOfType(Method m, Class&lt;?&gt;...args) throws FormattedIllegalArgumentException {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      for (Class&lt;?&gt; c1 : m.getParameterTypes()) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>         boolean foundMatch = false;<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>         for (Class&lt;?&gt; c2 : args)<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>            if (c1 == c2)<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>               foundMatch = true;<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>         if (! foundMatch)<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>            throw new FormattedIllegalArgumentException("Invalid argument of type {0} passed in method {1}.  Only arguments of type {2} are allowed.", c1, m, args);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>}<a name="line.1108"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.MethodInfo.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.MethodInfo.html b/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.MethodInfo.html
index b68325a..6207b05 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.MethodInfo.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/internal/ClassUtils.MethodInfo.html
@@ -841,175 +841,279 @@
 <span class="sourceLineNo">833</span>   /**<a name="line.833"></a>
 <span class="sourceLineNo">834</span>    * Returns all the fields in the specified class and all parent classes.<a name="line.834"></a>
 <span class="sourceLineNo">835</span>    *<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    * @param c The class to get all fields on.<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    * @return An iterable of all fields in the specified class.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    */<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   @SuppressWarnings("rawtypes")<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   public static Iterable&lt;Field&gt; getAllFields(final Class c, final boolean parentFirst) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      return new Iterable&lt;Field&gt;() {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>         @Override<a name="line.843"></a>
-<span class="sourceLineNo">844</span>         public Iterator&lt;Field&gt; iterator() {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            return new Iterator&lt;Field&gt;(){<a name="line.845"></a>
-<span class="sourceLineNo">846</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, false);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>               Field[] fields = classIterator.hasNext() ? classIterator.next().getDeclaredFields() : new Field[0];<a name="line.847"></a>
-<span class="sourceLineNo">848</span>               int fIndex = 0;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>               Field next;<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>               @Override<a name="line.851"></a>
-<span class="sourceLineNo">852</span>               public boolean hasNext() {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>                  prime();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>                  return next != null;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>               }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>               private void prime() {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>                  if (next == null) {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>                     while (fIndex &gt;= fields.length) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>                        if (classIterator.hasNext()) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>                           fields = classIterator.next().getDeclaredFields();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>                           fIndex = 0;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>                        } else {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>                           fIndex = -1;<a name="line.864"></a>
-<span class="sourceLineNo">865</span>                        }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>                     }<a name="line.866"></a>
-<span class="sourceLineNo">867</span>                     if (fIndex != -1)<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                        next = fields[fIndex++];<a name="line.868"></a>
-<span class="sourceLineNo">869</span>                  }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>               }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span>               @Override<a name="line.872"></a>
-<span class="sourceLineNo">873</span>               public Field next() {<a name="line.873"></a>
-<span class="sourceLineNo">874</span>                  prime();<a name="line.874"></a>
-<span class="sourceLineNo">875</span>                  Field f = next;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>                  next = null;<a name="line.876"></a>
-<span class="sourceLineNo">877</span>                  return f;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>               }<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>               @Override<a name="line.880"></a>
-<span class="sourceLineNo">881</span>               public void remove() {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>               }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            };<a name="line.883"></a>
-<span class="sourceLineNo">884</span>         }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      };<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   }<a name="line.886"></a>
-<span class="sourceLineNo">887</span><a name="line.887"></a>
-<span class="sourceLineNo">888</span>   /**<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    * Returns all the methods in the specified class and all parent classes.<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    *<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    * @param c The class to get all methods on.<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    * @return An iterable of all methods in the specified class.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   @SuppressWarnings("rawtypes")<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   public static Iterable&lt;Method&gt; getAllMethods(final Class c, final boolean parentFirst) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return new Iterable&lt;Method&gt;() {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>         @Override<a name="line.898"></a>
-<span class="sourceLineNo">899</span>         public Iterator&lt;Method&gt; iterator() {<a name="line.899"></a>
-<span class="sourceLineNo">900</span>            return new Iterator&lt;Method&gt;(){<a name="line.900"></a>
-<span class="sourceLineNo">901</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, true);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>               Method[] methods = classIterator.hasNext() ? classIterator.next().getDeclaredMethods() : new Method[0];<a name="line.902"></a>
-<span class="sourceLineNo">903</span>               int mIndex = 0;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>               Method next;<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>               @Override<a name="line.906"></a>
-<span class="sourceLineNo">907</span>               public boolean hasNext() {<a name="line.907"></a>
-<span class="sourceLineNo">908</span>                  prime();<a name="line.908"></a>
-<span class="sourceLineNo">909</span>                  return next != null;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>               }<a name="line.910"></a>
+<span class="sourceLineNo">836</span>    * &lt;p&gt;<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    * Fields are ordered in either parent-to-child, or child-to-parent order, then alphabetically.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    *<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    * @param c The class to get all fields on.<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    * @return An iterable of all fields in the specified class.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    */<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   @SuppressWarnings("rawtypes")<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   public static Iterable&lt;Field&gt; getAllFields(final Class c, final boolean parentFirst) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      return new Iterable&lt;Field&gt;() {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>         @Override<a name="line.846"></a>
+<span class="sourceLineNo">847</span>         public Iterator&lt;Field&gt; iterator() {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>            return new Iterator&lt;Field&gt;(){<a name="line.848"></a>
+<span class="sourceLineNo">849</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, false);<a name="line.849"></a>
+<span class="sourceLineNo">850</span>               Field[] fields = classIterator.hasNext() ? sort(classIterator.next().getDeclaredFields()) : new Field[0];<a name="line.850"></a>
+<span class="sourceLineNo">851</span>               int fIndex = 0;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>               Field next;<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>               @Override<a name="line.854"></a>
+<span class="sourceLineNo">855</span>               public boolean hasNext() {<a name="line.855"></a>
+<span class="sourceLineNo">856</span>                  prime();<a name="line.856"></a>
+<span class="sourceLineNo">857</span>                  return next != null;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>               }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>               private void prime() {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>                  if (next == null) {<a name="line.861"></a>
+<span class="sourceLineNo">862</span>                     while (fIndex &gt;= fields.length) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>                        if (classIterator.hasNext()) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>                           fields = sort(classIterator.next().getDeclaredFields());<a name="line.864"></a>
+<span class="sourceLineNo">865</span>                           fIndex = 0;<a name="line.865"></a>
+<span class="sourceLineNo">866</span>                        } else {<a name="line.866"></a>
+<span class="sourceLineNo">867</span>                           fIndex = -1;<a name="line.867"></a>
+<span class="sourceLineNo">868</span>                        }<a name="line.868"></a>
+<span class="sourceLineNo">869</span>                     }<a name="line.869"></a>
+<span class="sourceLineNo">870</span>                     if (fIndex != -1)<a name="line.870"></a>
+<span class="sourceLineNo">871</span>                        next = fields[fIndex++];<a name="line.871"></a>
+<span class="sourceLineNo">872</span>                  }<a name="line.872"></a>
+<span class="sourceLineNo">873</span>               }<a name="line.873"></a>
+<span class="sourceLineNo">874</span><a name="line.874"></a>
+<span class="sourceLineNo">875</span>               @Override<a name="line.875"></a>
+<span class="sourceLineNo">876</span>               public Field next() {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>                  prime();<a name="line.877"></a>
+<span class="sourceLineNo">878</span>                  Field f = next;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>                  next = null;<a name="line.879"></a>
+<span class="sourceLineNo">880</span>                  return f;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>               }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>               @Override<a name="line.883"></a>
+<span class="sourceLineNo">884</span>               public void remove() {<a name="line.884"></a>
+<span class="sourceLineNo">885</span>               }<a name="line.885"></a>
+<span class="sourceLineNo">886</span>            };<a name="line.886"></a>
+<span class="sourceLineNo">887</span>         }<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      };<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>   /**<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    * Returns all the methods in the specified class and all parent classes.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    *<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    * &lt;p&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    * Methods are ordered in either parent-to-child, or child-to-parent order, then alphabetically.<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    *<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    * @param c The class to get all methods on.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    * @param parentFirst Order them in parent-class-to-child-class order, otherwise child-class-to-parent-class order.<a name="line.898"></a>
+<span class="sourceLineNo">899</span>    * @return An iterable of all methods in the specified class.<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    */<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   @SuppressWarnings("rawtypes")<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   public static Iterable&lt;Method&gt; getAllMethods(final Class c, final boolean parentFirst) {<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      return new Iterable&lt;Method&gt;() {<a name="line.903"></a>
+<span class="sourceLineNo">904</span>         @Override<a name="line.904"></a>
+<span class="sourceLineNo">905</span>         public Iterator&lt;Method&gt; iterator() {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>            return new Iterator&lt;Method&gt;(){<a name="line.906"></a>
+<span class="sourceLineNo">907</span>               final Iterator&lt;Class&lt;?&gt;&gt; classIterator = getParentClasses(c, parentFirst, true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>               Method[] methods = classIterator.hasNext() ? sort(classIterator.next().getDeclaredMethods()) : new Method[0];<a name="line.908"></a>
+<span class="sourceLineNo">909</span>               int mIndex = 0;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>               Method next;<a name="line.910"></a>
 <span class="sourceLineNo">911</span><a name="line.911"></a>
-<span class="sourceLineNo">912</span>               private void prime() {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>                  if (next == null) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>                     while (mIndex &gt;= methods.length) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>                        if (classIterator.hasNext()) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>                           methods = classIterator.next().getDeclaredMethods();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>                           mIndex = 0;<a name="line.917"></a>
-<span class="sourceLineNo">918</span>                        } else {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>                           mIndex = -1;<a name="line.919"></a>
-<span class="sourceLineNo">920</span>                        }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>                     }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>                     if (mIndex != -1)<a name="line.922"></a>
-<span class="sourceLineNo">923</span>                        next = methods[mIndex++];<a name="line.923"></a>
-<span class="sourceLineNo">924</span>                  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>               }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>               @Override<a name="line.927"></a>
-<span class="sourceLineNo">928</span>               public Method next() {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>                  prime();<a name="line.929"></a>
-<span class="sourceLineNo">930</span>                  Method m = next;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>                  next = null;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>                  return m;<a name="line.932"></a>
-<span class="sourceLineNo">933</span>               }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>               @Override<a name="line.935"></a>
-<span class="sourceLineNo">936</span>               public void remove() {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>               }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>            };<a name="line.938"></a>
-<span class="sourceLineNo">939</span>         }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      };<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>   /**<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    * Returns a list of all the parent classes of the specified class including the class itself.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    *<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    * @param c The class to retrieve the parent classes.<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    * @param parentFirst In parent-to-child order, otherwise child-to-parent.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    * @param includeInterfaces Include interfaces.<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    * @return An iterator of parent classes in the class hierarchy.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    */<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   public static Iterator&lt;Class&lt;?&gt;&gt; getParentClasses(final Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      List&lt;Class&lt;?&gt;&gt; l = getParentClasses(new ArrayList&lt;Class&lt;?&gt;&gt;(), c, parentFirst, includeInterfaces);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      return l.iterator();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span>   private static List&lt;Class&lt;?&gt;&gt; getParentClasses(List&lt;Class&lt;?&gt;&gt; l, Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      if (parentFirst) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>         if (includeInterfaces)<a name="line.958"></a>
-<span class="sourceLineNo">959</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.959"></a>
-<span class="sourceLineNo">960</span>               l.add(i);<a name="line.960"></a>
-<span class="sourceLineNo">961</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>         l.add(c);<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      } else {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>         l.add(c);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.966"></a>
-<span class="sourceLineNo">967</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>         if (includeInterfaces)<a name="line.968"></a>
-<span class="sourceLineNo">969</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.969"></a>
-<span class="sourceLineNo">970</span>               l.add(i);<a name="line.970"></a>
-<span class="sourceLineNo">971</span>      }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      return l;<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   }<a name="line.973"></a>
-<span class="sourceLineNo">974</span><a name="line.974"></a>
-<span class="sourceLineNo">975</span>   /**<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    * Returns the default value for the specified primitive class.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    *<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    * @param primitiveClass The primitive class to get the default value for.<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    * @return The default value, or &lt;jk&gt;null&lt;/jk&gt; if the specified class is not a primitive class.<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    */<a name="line.980"></a>
-<span class="sourceLineNo">981</span>   public static Object getPrimitiveDefault(Class&lt;?&gt; primitiveClass) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      return primitiveDefaultMap.get(primitiveClass);<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   }<a name="line.983"></a>
+<span class="sourceLineNo">912</span>               @Override<a name="line.912"></a>
+<span class="sourceLineNo">913</span>               public boolean hasNext() {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>                  prime();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>                  return next != null;<a name="line.915"></a>
+<span class="sourceLineNo">916</span>               }<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>               private void prime() {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>                  if (next == null) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>                     while (mIndex &gt;= methods.length) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>                        if (classIterator.hasNext()) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>                           methods = sort(classIterator.next().getDeclaredMethods());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>                           mIndex = 0;<a name="line.923"></a>
+<span class="sourceLineNo">924</span>                        } else {<a name="line.924"></a>
+<span class="sourceLineNo">925</span>                           mIndex = -1;<a name="line.925"></a>
+<span class="sourceLineNo">926</span>                        }<a name="line.926"></a>
+<span class="sourceLineNo">927</span>                     }<a name="line.927"></a>
+<span class="sourceLineNo">928</span>                     if (mIndex != -1)<a name="line.928"></a>
+<span class="sourceLineNo">929</span>                        next = methods[mIndex++];<a name="line.929"></a>
+<span class="sourceLineNo">930</span>                  }<a name="line.930"></a>
+<span class="sourceLineNo">931</span>               }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span>               @Override<a name="line.933"></a>
+<span class="sourceLineNo">934</span>               public Method next() {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>                  prime();<a name="line.935"></a>
+<span class="sourceLineNo">936</span>                  Method m = next;<a name="line.936"></a>
+<span class="sourceLineNo">937</span>                  next = null;<a name="line.937"></a>
+<span class="sourceLineNo">938</span>                  return m;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>               }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span>               @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span>               public void remove() {<a name="line.942"></a>
+<span class="sourceLineNo">943</span>               }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>            };<a name="line.944"></a>
+<span class="sourceLineNo">945</span>         }<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      };<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   }<a name="line.947"></a>
+<span class="sourceLineNo">948</span><a name="line.948"></a>
+<span class="sourceLineNo">949</span>   private static Comparator&lt;Method&gt; METHOD_COMPARATOR = new Comparator&lt;Method&gt;() {<a name="line.949"></a>
+<span class="sourceLineNo">950</span><a name="line.950"></a>
+<span class="sourceLineNo">951</span>      @Override<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      public int compare(Method o1, Method o2) {<a name="line.952"></a>
+<span class="sourceLineNo">953</span>         int i = o1.getName().compareTo(o2.getName());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>         if (i == 0) {<a name="line.954"></a>
+<span class="sourceLineNo">955</span>            i = o1.getParameterCount() - o2.getParameterCount();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>            if (i == 0) {<a name="line.956"></a>
+<span class="sourceLineNo">957</span>               for (int j = 0; j &lt; o1.getParameterTypes().length &amp;&amp; i == 0; j++) {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>                  i = o1.getParameterTypes()[j].getName().compareTo(o2.getParameterTypes()[j].getName());<a name="line.958"></a>
+<span class="sourceLineNo">959</span>               }<a name="line.959"></a>
+<span class="sourceLineNo">960</span>            }<a name="line.960"></a>
+<span class="sourceLineNo">961</span>         }<a name="line.961"></a>
+<span class="sourceLineNo">962</span>         return i;<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      }<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   };<a name="line.964"></a>
+<span class="sourceLineNo">965</span><a name="line.965"></a>
+<span class="sourceLineNo">966</span>   /**<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    * Sorts methods in alphabetical order.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    *<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    * @param m The methods to sort.<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    * @return The same array, but with elements sorted.<a name="line.970"></a>
+<span class="sourceLineNo">971</span>    */<a name="line.971"></a>
+<span class="sourceLineNo">972</span>   public static Method[] sort(Method[] m) {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Arrays.sort(m, METHOD_COMPARATOR);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      return m;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   }<a name="line.975"></a>
+<span class="sourceLineNo">976</span><a name="line.976"></a>
+<span class="sourceLineNo">977</span>   private static Comparator&lt;Field&gt; FIELD_COMPARATOR = new Comparator&lt;Field&gt;() {<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>      @Override<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      public int compare(Field o1, Field o2) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span>         return o1.getName().compareTo(o2.getName());<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   };<a name="line.983"></a>
 <span class="sourceLineNo">984</span><a name="line.984"></a>
-<span class="sourceLineNo">985</span>   private static final Map&lt;Class&lt;?&gt;,Object&gt; primitiveDefaultMap = Collections.unmodifiableMap(<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      new AMap&lt;Class&lt;?&gt;,Object&gt;()<a name="line.986"></a>
-<span class="sourceLineNo">987</span>         .append(Boolean.TYPE, false)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>         .append(Character.TYPE, (char)0)<a name="line.988"></a>
-<span class="sourceLineNo">989</span>         .append(Short.TYPE, (short)0)<a name="line.989"></a>
-<span class="sourceLineNo">990</span>         .append(Integer.TYPE, 0)<a name="line.990"></a>
-<span class="sourceLineNo">991</span>         .append(Long.TYPE, 0l)<a name="line.991"></a>
-<span class="sourceLineNo">992</span>         .append(Float.TYPE, 0f)<a name="line.992"></a>
-<span class="sourceLineNo">993</span>         .append(Double.TYPE, 0d)<a name="line.993"></a>
-<span class="sourceLineNo">994</span>         .append(Byte.TYPE, (byte)0)<a name="line.994"></a>
-<span class="sourceLineNo">995</span>         .append(Boolean.class, false)<a name="line.995"></a>
-<span class="sourceLineNo">996</span>         .append(Character.class, (char)0)<a name="line.996"></a>
-<span class="sourceLineNo">997</span>         .append(Short.class, (short)0)<a name="line.997"></a>
-<span class="sourceLineNo">998</span>         .append(Integer.class, 0)<a name="line.998"></a>
-<span class="sourceLineNo">999</span>         .append(Long.class, 0l)<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>         .append(Float.class, 0f)<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>         .append(Double.class, 0d)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>         .append(Byte.class, (byte)0)<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>   );<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>}<a name="line.1004"></a>
+<span class="sourceLineNo">985</span>   /**<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    * Sorts methods in alphabetical order.<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    *<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    * @param m The methods to sort.<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    * @return The same array, but with elements sorted.<a name="line.989"></a>
+<span class="sourceLineNo">990</span>    */<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   public static Field[] sort(Field[] m) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      Arrays.sort(m, FIELD_COMPARATOR);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      return m;<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span>   /**<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    * Returns a list of all the parent classes of the specified class including the class itself.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    *<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    * @param c The class to retrieve the parent classes.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    * @param parentFirst In parent-to-child order, otherwise child-to-parent.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    * @param includeInterfaces Include interfaces.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    * @return An iterator of parent classes in the class hierarchy.<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    */<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   public static Iterator&lt;Class&lt;?&gt;&gt; getParentClasses(final Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      List&lt;Class&lt;?&gt;&gt; l = getParentClasses(new ArrayList&lt;Class&lt;?&gt;&gt;(), c, parentFirst, includeInterfaces);<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      return l.iterator();<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>   }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   private static List&lt;Class&lt;?&gt;&gt; getParentClasses(List&lt;Class&lt;?&gt;&gt; l, Class&lt;?&gt; c, boolean parentFirst, boolean includeInterfaces) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      if (parentFirst) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>         if (includeInterfaces)<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>               l.add(i);<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>         l.add(c);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      } else {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>         l.add(c);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>         if (c.getSuperclass() != Object.class &amp;&amp; c.getSuperclass() != null)<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>            getParentClasses(l, c.getSuperclass(), parentFirst, includeInterfaces);<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>         if (includeInterfaces)<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            for (Class&lt;?&gt; i : c.getInterfaces())<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>               l.add(i);<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>      }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>      return l;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>   }<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span><a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>   /**<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    * Returns the default value for the specified primitive class.<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    *<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    * @param primitiveClass The primitive class to get the default value for.<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>    * @return The default value, or &lt;jk&gt;null&lt;/jk&gt; if the specified class is not a primitive class.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    */<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>   public static Object getPrimitiveDefault(Class&lt;?&gt; primitiveClass) {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      return primitiveDefaultMap.get(primitiveClass);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>   }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span><a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>   private static final Map&lt;Class&lt;?&gt;,Object&gt; primitiveDefaultMap = Collections.unmodifiableMap(<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      new AMap&lt;Class&lt;?&gt;,Object&gt;()<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>         .append(Boolean.TYPE, false)<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>         .append(Character.TYPE, (char)0)<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>         .append(Short.TYPE, (short)0)<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>         .append(Integer.TYPE, 0)<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>         .append(Long.TYPE, 0l)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>         .append(Float.TYPE, 0f)<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>         .append(Double.TYPE, 0d)<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>         .append(Byte.TYPE, (byte)0)<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>         .append(Boolean.class, false)<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>         .append(Character.class, (char)0)<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>         .append(Short.class, (short)0)<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>         .append(Integer.class, 0)<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>         .append(Long.class, 0l)<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>         .append(Float.class, 0f)<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>         .append(Double.class, 0d)<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>         .append(Byte.class, (byte)0)<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>   );<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span><a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>   /**<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    * Returns a readable representation of the specified method.<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    *<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    * &lt;p&gt;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    * The format of the string is &lt;js&gt;"full-qualified-class.method-name(parameter-simple-class-names)"&lt;/js&gt;.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    *<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    * @param m The method to stringify.<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    * @return The stringified method.<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    */<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   public static String toString(Method m) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      StringBuilder sb = new StringBuilder(m.getDeclaringClass().getName() + "." + m.getName() + "(");<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      for (int i = 0; i &lt; m.getParameterCount(); i++) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>         if (i &gt; 0)<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>            sb.append(",");<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>         sb.append(m.getParameterTypes()[i].getSimpleName());<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      sb.append(")");<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      return sb.toString();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>   }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span><a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   /**<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    * Returns a readable representation of the specified field.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    *<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    * &lt;p&gt;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    * The format of the string is &lt;js&gt;"full-qualified-class.field-name"&lt;/js&gt;.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    *<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    * @param f The field to stringify.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    * @return The stringified field.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    */<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>   public static String toString(Field f) {<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      return f.getDeclaringClass().getName() + "." + f.getName();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   }<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   /**<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    * Throws an {@link IllegalArgumentException} if the parameters on the method are not in the specified list provided.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    * @param m The method to test.<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    * @param args The valid class types (exact) for the arguments.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    * @throws FormattedIllegalArgumentException If any of the parameters on the method weren't in the list.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   public static void assertArgsOfType(Method m, Class&lt;?&gt;...args) throws FormattedIllegalArgumentException {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      for (Class&lt;?&gt; c1 : m.getParameterTypes()) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>         boolean foundMatch = false;<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>         for (Class&lt;?&gt; c2 : args)<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>            if (c1 == c2)<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>               foundMatch = true;<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>         if (! foundMatch)<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>            throw new FormattedIllegalArgumentException("Invalid argument of type {0} passed in method {1}.  Only arguments of type {2} are allowed.", c1, m, args);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>}<a name="line.1108"></a>
 
 
 



[03/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestResponse.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestResponse.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestResponse.html
index a0f750e..8de320a 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestResponse.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestResponse.html
@@ -320,489 +320,497 @@
 <span class="sourceLineNo">312</span>               public final void close() throws IOException {<a name="line.312"></a>
 <span class="sourceLineNo">313</span>                  os2.close();<a name="line.313"></a>
 <span class="sourceLineNo">314</span>               }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>            };<a name="line.315"></a>
-<span class="sourceLineNo">316</span>         }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      return os;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>   @Override /* ServletResponse */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   public ServletOutputStream getOutputStream() throws IOException {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      if (os == null)<a name="line.323"></a>
-<span class="sourceLineNo">324</span>         os = super.getOutputStream();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return os;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>   /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if {@link #getOutputStream()} has been called.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    *<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if {@link #getOutputStream()} has been called.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   public boolean getOutputStreamCalled() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return os != null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>   /**<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    * Returns the writer to the response body.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    *<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    * &lt;p&gt;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    * This methods bypasses any specified encoders and returns a regular unbuffered writer.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    * Use the {@link #getNegotiatedWriter()} method if you want to use the matched encoder (if any).<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    */<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   @Override /* ServletResponse */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   public PrintWriter getWriter() throws IOException {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return getWriter(true);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>   /**<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    * Convenience method meant to be used when rendering directly to a browser with no buffering.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    *<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    * &lt;p&gt;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    * Sets the header &lt;js&gt;"x-content-type-options=nosniff"&lt;/js&gt; so that output is rendered immediately on IE and Chrome<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    * without any buffering for content-type sniffing.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    *<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    * @param contentType The value to set as the &lt;code&gt;Content-Type&lt;/code&gt; on the response.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    * @return The raw writer.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    * @throws IOException<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   public PrintWriter getDirectWriter(String contentType) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      setContentType(contentType);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      setHeader("x-content-type-options", "nosniff");<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return getWriter();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>   /**<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    * Equivalent to {@link HttpServletResponse#getWriter()}, except wraps the output stream if an {@link Encoder} was<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    * found that matched the &lt;code&gt;Accept-Encoding&lt;/code&gt; header and sets the &lt;code&gt;Content-Encoding&lt;/code&gt;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    * header to the appropriate value.<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    *<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    * @return The negotiated writer.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    * @throws IOException<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   public PrintWriter getNegotiatedWriter() throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      return getWriter(false);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>   private PrintWriter getWriter(boolean raw) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      if (w != null)<a name="line.379"></a>
-<span class="sourceLineNo">380</span>         return w;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>      // If plain text requested, override it now.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (request.isPlainText())<a name="line.383"></a>
-<span class="sourceLineNo">384</span>         setHeader("Content-Type", "text/plain");<a name="line.384"></a>
+<span class="sourceLineNo">315</span>               @Override /* ServletOutputStream */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>               public boolean isReady() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>                  return true;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>               }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>               @Override /* ServletOutputStream */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>               public void setWriteListener(WriteListener arg0) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>                  throw new NoSuchMethodError();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>               }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>            };<a name="line.323"></a>
+<span class="sourceLineNo">324</span>         }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return os;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>   @Override /* ServletResponse */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   public ServletOutputStream getOutputStream() throws IOException {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      if (os == null)<a name="line.331"></a>
+<span class="sourceLineNo">332</span>         os = super.getOutputStream();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return os;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>   /**<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if {@link #getOutputStream()} has been called.<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    *<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if {@link #getOutputStream()} has been called.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   public boolean getOutputStreamCalled() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return os != null;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>   /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    * Returns the writer to the response body.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    *<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    * &lt;p&gt;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    * This methods bypasses any specified encoders and returns a regular unbuffered writer.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    * Use the {@link #getNegotiatedWriter()} method if you want to use the matched encoder (if any).<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   @Override /* ServletResponse */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   public PrintWriter getWriter() throws IOException {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      return getWriter(true);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>   /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    * Convenience method meant to be used when rendering directly to a browser with no buffering.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    *<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    * &lt;p&gt;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    * Sets the header &lt;js&gt;"x-content-type-options=nosniff"&lt;/js&gt; so that output is rendered immediately on IE and Chrome<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    * without any buffering for content-type sniffing.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    *<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    * @param contentType The value to set as the &lt;code&gt;Content-Type&lt;/code&gt; on the response.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    * @return The raw writer.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    * @throws IOException<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    */<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   public PrintWriter getDirectWriter(String contentType) throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      setContentType(contentType);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      setHeader("x-content-type-options", "nosniff");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      return getWriter();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>   /**<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    * Equivalent to {@link HttpServletResponse#getWriter()}, except wraps the output stream if an {@link Encoder} was<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    * found that matched the &lt;code&gt;Accept-Encoding&lt;/code&gt; header and sets the &lt;code&gt;Content-Encoding&lt;/code&gt;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    * header to the appropriate value.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    *<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    * @return The negotiated writer.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    * @throws IOException<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    */<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   public PrintWriter getNegotiatedWriter() throws IOException {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return getWriter(false);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   }<a name="line.384"></a>
 <span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>         OutputStream out = (raw ? getOutputStream() : getNegotiatedOutputStream());<a name="line.387"></a>
-<span class="sourceLineNo">388</span>         w = new PrintWriter(new OutputStreamWriter(out, getCharacterEncoding()));<a name="line.388"></a>
-<span class="sourceLineNo">389</span>         return w;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (UnsupportedEncodingException e) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>         String ce = getCharacterEncoding();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>         setCharacterEncoding("UTF-8");<a name="line.392"></a>
-<span class="sourceLineNo">393</span>         throw new RestException(SC_NOT_ACCEPTABLE, "Unsupported charset in request header ''Accept-Charset'': ''{0}''", ce);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>   /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    * Returns the &lt;code&gt;Content-Type&lt;/code&gt; header stripped of the charset attribute if present.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    *<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    * @return The &lt;code&gt;media-type&lt;/code&gt; portion of the &lt;code&gt;Content-Type&lt;/code&gt; header.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   public MediaType getMediaType() {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      return MediaType.forString(getContentType());<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>   /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    * Redirects to the specified URI.<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    *<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    * &lt;p&gt;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    * Relative URIs are always interpreted as relative to the context root.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    * This is similar to how WAS handles redirect requests, and is different from how Tomcat handles redirect requests.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    */<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   @Override /* ServletResponse */<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   public void sendRedirect(String uri) throws IOException {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      char c = (uri.length() &gt; 0 ? uri.charAt(0) : 0);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (c != '/' &amp;&amp; uri.indexOf("://") == -1)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>         uri = request.getContextPath() + '/' + uri;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      super.sendRedirect(uri);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>   /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    * Returns the URL-encoding serializer associated with this response.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    *<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    * @return The URL-encoding serializer associated with this response.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    */<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   public UrlEncodingSerializer getUrlEncodingSerializer() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return urlEncodingSerializer;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>   @Override /* ServletResponse */<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   public void setHeader(String name, String value) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // Jetty doesn't set the content type correctly if set through this method.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // Tomcat/WAS does.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      if (name.equalsIgnoreCase("Content-Type"))<a name="line.434"></a>
-<span class="sourceLineNo">435</span>         super.setContentType(value);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      else<a name="line.436"></a>
-<span class="sourceLineNo">437</span>         super.setHeader(name, value);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>   /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    * Sets the HTML header section contents.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    *<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    * &lt;p&gt;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    * The format of this value is HTML.<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    *<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    * The page header normally contains the title and description, but this value can be used to override the contents<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    * to be whatever you want.<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    *<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    * &lt;p&gt;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no header.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    *<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    * &lt;p&gt;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    *<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    * &lt;p&gt;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    * This is the programmatic equivalent to the {@link HtmlDoc#header() @HtmlDoc.header()} annotation.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    *<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    * @param value<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    *    The HTML header section contents.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    *    &lt;p&gt;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    *    &lt;ul class='doctree'&gt;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    *       &lt;li class='info'&gt;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    *    &lt;/ul&gt;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    * @return This object (for method chaining).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    */<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   public RestResponse setHtmlHeader(Object value) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      return setProperty(HtmlDocSerializerContext.HTMLDOC_header, value);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>   /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    * Sets the links in the HTML nav section.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    *<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    * &lt;p&gt;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    * The format of this value is a lax-JSON map of key/value pairs where the keys are the link text and the values are<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    * relative (to the servlet) or absolute URLs.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    * &lt;p&gt;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    * The page links are positioned immediately under the title and text.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    *<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    * &lt;p&gt;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    *<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    * &lt;p&gt;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    *<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    * &lt;p&gt;<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    * This field can also use URIs of any support type in {@link UriResolver}.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    *<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    * &lt;p&gt;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    * This is the programmatic equivalent to the {@link HtmlDoc#links() @HtmlDoc.links()} annotation.<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    *<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    * @param value<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    *    The HTML nav section links links.<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    *    &lt;p&gt;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    *    &lt;ul class='doctree'&gt;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    *       &lt;li class='info'&gt;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    *    &lt;/ul&gt;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    * @return This object (for method chaining).<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   public RestResponse setHtmlLinks(String[] value) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_links, value);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      return this;<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>   /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    * Sets the HTML nav section contents.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    *<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    * &lt;p&gt;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    * The format of this value is HTML.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    *<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    * &lt;p&gt;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    * The nav section of the page contains the links.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    *<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    * &lt;p&gt;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    * The format of this value is HTML.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    *<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    * &lt;p&gt;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    * When a value is specified, the {@link #setHtmlLinks(String[])} value will be ignored.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    *<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    * &lt;p&gt;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    *<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    * &lt;p&gt;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    *<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    * &lt;p&gt;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    * This is the programmatic equivalent to the {@link HtmlDoc#nav() @HtmlDoc.nav()} annotation.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    *<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    * @param value<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    *    The HTML nav section contents.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    *    &lt;p&gt;<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    *    &lt;ul class='doctree'&gt;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    *       &lt;li class='info'&gt;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    *    &lt;/ul&gt;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    * @return This object (for method chaining).<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   public RestResponse setHtmlNav(Object value) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_nav, value);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      return this;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>   /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    * Sets the HTML aside section contents.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    *<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    * &lt;p&gt;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    * The format of this value is HTML.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    *<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    * &lt;p&gt;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    * The aside section typically floats on the right side of the page.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    *<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    * &lt;p&gt;<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    * &lt;p&gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    *<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    * &lt;p&gt;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    * This is the programmatic equivalent to the {@link HtmlDoc#aside() @HtmlDoc.aside()} annotation.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    *<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    * @param value<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    *    The HTML aside section contents.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    *    &lt;p&gt;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    *    &lt;ul class='doctree'&gt;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    *       &lt;li class='info'&gt;<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to waste<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    *             string concatenation cycles on non-HTML views.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    *    &lt;/ul&gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    * @return This object (for method chaining).<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    */<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   public RestResponse setHtmlAside(Object value) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_aside, value);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      return this;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>   /**<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    * Sets the HTML footer section contents.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    *<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    * &lt;p&gt;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    * The format of this value is HTML.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    *<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    * &lt;p&gt;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    * The footer section typically floats on the bottom of the page.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    *<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    * &lt;p&gt;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    *<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    * &lt;p&gt;<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    *<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    * &lt;p&gt;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    * This is the programmatic equivalent to the {@link HtmlDoc#footer() @HtmlDoc.footer()} annotation.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    *<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    * @param value<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    *    The HTML footer section contents.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    *    &lt;p&gt;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    *    &lt;ul class='doctree'&gt;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    *       &lt;li class='info'&gt;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    *    &lt;/ul&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    * @return This object (for method chaining).<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   public RestResponse setHtmlFooter(Object value) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_footer, value);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      return this;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>   /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    * Sets the HTML CSS style section contents.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    *<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    * &lt;p&gt;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    * The format of this value is CSS.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    *<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    * &lt;p&gt;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    *<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    * &lt;p&gt;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    *<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    * &lt;p&gt;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    * This is the programmatic equivalent to the {@link HtmlDoc#style() @HtmlDoc.style()} annotation.<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    *<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    * @param value<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    *    The HTML CSS style section contents.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    *    &lt;p&gt;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    *    &lt;ul class='doctree'&gt;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    *       &lt;li class='info'&gt;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    *    &lt;/ul&gt;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    * @return This object (for method chaining).<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    */<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   public RestResponse setHtmlStyle(Object value) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_style, value);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      return this;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   }<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>   /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    * Sets the CSS URL in the HTML CSS style section.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    *<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    * &lt;p&gt;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    * The format of this value is a comma-delimited list of URLs.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    *<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    * &lt;p&gt;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    * Specifies the URL to the stylesheet to add as a link in the style tag in the header.<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    *<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    * &lt;p&gt;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    * The format of this value is CSS.<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    *<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    * &lt;p&gt;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;) and can use URL protocols defined<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    * by {@link UriResolver}.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.671"></a>
+<span class="sourceLineNo">386</span>   private PrintWriter getWriter(boolean raw) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      if (w != null)<a name="line.387"></a>
+<span class="sourceLineNo">388</span>         return w;<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // If plain text requested, override it now.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      if (request.isPlainText())<a name="line.391"></a>
+<span class="sourceLineNo">392</span>         setHeader("Content-Type", "text/plain");<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>         OutputStream out = (raw ? getOutputStream() : getNegotiatedOutputStream());<a name="line.395"></a>
+<span class="sourceLineNo">396</span>         w = new PrintWriter(new OutputStreamWriter(out, getCharacterEncoding()));<a name="line.396"></a>
+<span class="sourceLineNo">397</span>         return w;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      } catch (UnsupportedEncodingException e) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>         String ce = getCharacterEncoding();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>         setCharacterEncoding("UTF-8");<a name="line.400"></a>
+<span class="sourceLineNo">401</span>         throw new RestException(SC_NOT_ACCEPTABLE, "Unsupported charset in request header ''Accept-Charset'': ''{0}''", ce);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>   /**<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    * Returns the &lt;code&gt;Content-Type&lt;/code&gt; header stripped of the charset attribute if present.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    *<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    * @return The &lt;code&gt;media-type&lt;/code&gt; portion of the &lt;code&gt;Content-Type&lt;/code&gt; header.<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    */<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   public MediaType getMediaType() {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      return MediaType.forString(getContentType());<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>   /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    * Redirects to the specified URI.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    *<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    * &lt;p&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    * Relative URIs are always interpreted as relative to the context root.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    * This is similar to how WAS handles redirect requests, and is different from how Tomcat handles redirect requests.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    */<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   @Override /* ServletResponse */<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   public void sendRedirect(String uri) throws IOException {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      char c = (uri.length() &gt; 0 ? uri.charAt(0) : 0);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      if (c != '/' &amp;&amp; uri.indexOf("://") == -1)<a name="line.424"></a>
+<span class="sourceLineNo">425</span>         uri = request.getContextPath() + '/' + uri;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      super.sendRedirect(uri);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>   /**<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    * Returns the URL-encoding serializer associated with this response.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    *<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    * @return The URL-encoding serializer associated with this response.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   public UrlEncodingSerializer getUrlEncodingSerializer() {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      return urlEncodingSerializer;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   }<a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span>   @Override /* ServletResponse */<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   public void setHeader(String name, String value) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // Jetty doesn't set the content type correctly if set through this method.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // Tomcat/WAS does.<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      if (name.equalsIgnoreCase("Content-Type"))<a name="line.442"></a>
+<span class="sourceLineNo">443</span>         super.setContentType(value);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      else<a name="line.444"></a>
+<span class="sourceLineNo">445</span>         super.setHeader(name, value);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   }<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>   /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    * Sets the HTML header section contents.<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    *<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    * &lt;p&gt;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    * The format of this value is HTML.<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    *<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    * &lt;p&gt;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    * The page header normally contains the title and description, but this value can be used to override the contents<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    * to be whatever you want.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    *<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    * &lt;p&gt;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no header.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    *<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    * &lt;p&gt;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    * &lt;p&gt;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    * This is the programmatic equivalent to the {@link HtmlDoc#header() @HtmlDoc.header()} annotation.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    *<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    * @param value<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    *    The HTML header section contents.<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    *    &lt;p&gt;<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    *    &lt;ul class='doctree'&gt;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    *       &lt;li class='info'&gt;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    *    &lt;/ul&gt;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    * @return This object (for method chaining).<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    */<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   public RestResponse setHtmlHeader(Object value) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      return setProperty(HtmlDocSerializerContext.HTMLDOC_header, value);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>   /**<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    * Sets the links in the HTML nav section.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    *<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    * &lt;p&gt;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    * The format of this value is a lax-JSON map of key/value pairs where the keys are the link text and the values are<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    * relative (to the servlet) or absolute URLs.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    *<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    * &lt;p&gt;<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    * The page links are positioned immediately under the title and text.<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    *<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    * &lt;p&gt;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    *<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    * &lt;p&gt;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    *<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    * &lt;p&gt;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    * This field can also use URIs of any support type in {@link UriResolver}.<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    *<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    * &lt;p&gt;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    * This is the programmatic equivalent to the {@link HtmlDoc#links() @HtmlDoc.links()} annotation.<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    *<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    * @param value<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    *    The HTML nav section links links.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    *    &lt;p&gt;<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    *    &lt;ul class='doctree'&gt;<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    *       &lt;li class='info'&gt;<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    *    &lt;/ul&gt;<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    * @return This object (for method chaining).<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    */<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   public RestResponse setHtmlLinks(String[] value) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_links, value);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      return this;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>   /**<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    * Sets the HTML nav section contents.<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    *<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    * &lt;p&gt;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    * The format of this value is HTML.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    *<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    * &lt;p&gt;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    * The nav section of the page contains the links.<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    *<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    * &lt;p&gt;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    * The format of this value is HTML.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    *<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    * &lt;p&gt;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    * When a value is specified, the {@link #setHtmlLinks(String[])} value will be ignored.<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    *<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    * &lt;p&gt;<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    *<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    * &lt;p&gt;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    *<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    * &lt;p&gt;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    * This is the programmatic equivalent to the {@link HtmlDoc#nav() @HtmlDoc.nav()} annotation.<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    *<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    * @param value<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    *    The HTML nav section contents.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    *    &lt;p&gt;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    *    &lt;ul class='doctree'&gt;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    *       &lt;li class='info'&gt;<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    *    &lt;/ul&gt;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    * @return This object (for method chaining).<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    */<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   public RestResponse setHtmlNav(Object value) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_nav, value);<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      return this;<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>   /**<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    * Sets the HTML aside section contents.<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    *<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    * &lt;p&gt;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    * The format of this value is HTML.<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    *<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    * &lt;p&gt;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    * The aside section typically floats on the right side of the page.<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    *<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    * &lt;p&gt;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    *<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    * &lt;p&gt;<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    *<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    * &lt;p&gt;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    * This is the programmatic equivalent to the {@link HtmlDoc#aside() @HtmlDoc.aside()} annotation.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    *<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    * @param value<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    *    The HTML aside section contents.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    *    &lt;p&gt;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    *    &lt;ul class='doctree'&gt;<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    *       &lt;li class='info'&gt;<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to waste<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    *             string concatenation cycles on non-HTML views.<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    *    &lt;/ul&gt;<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    * @return This object (for method chaining).<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    */<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   public RestResponse setHtmlAside(Object value) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_aside, value);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      return this;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>   /**<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    * Sets the HTML footer section contents.<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    *<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    * &lt;p&gt;<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    * The format of this value is HTML.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    *<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    * &lt;p&gt;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    * The footer section typically floats on the bottom of the page.<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    *<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    * &lt;p&gt;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    *<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    * &lt;p&gt;<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    *<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    * &lt;p&gt;<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    * This is the programmatic equivalent to the {@link HtmlDoc#footer() @HtmlDoc.footer()} annotation.<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    *<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    * @param value<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    *    The HTML footer section contents.<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    *    &lt;p&gt;<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    *    &lt;ul class='doctree'&gt;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    *       &lt;li class='info'&gt;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    *    &lt;/ul&gt;<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    * @return This object (for method chaining).<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    */<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   public RestResponse setHtmlFooter(Object value) {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_footer, value);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      return this;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>   /**<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    * Sets the HTML CSS style section contents.<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    *<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    * &lt;p&gt;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    * The format of this value is CSS.<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    *<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    * &lt;p&gt;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    *<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    * &lt;p&gt;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    *<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    * &lt;p&gt;<a name="line.645"></a>
+<span class="sourceLineNo">646</span>    * This is the programmatic equivalent to the {@link HtmlDoc#style() @HtmlDoc.style()} annotation.<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    *<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    * @param value<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    *    The HTML CSS style section contents.<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    *    &lt;p&gt;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    *    &lt;ul class='doctree'&gt;<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    *       &lt;li class='info'&gt;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    *    &lt;/ul&gt;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    * @return This object (for method chaining).<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    */<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   public RestResponse setHtmlStyle(Object value) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_style, value);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      return this;<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span>   /**<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    * Sets the CSS URL in the HTML CSS style section.<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    *<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    * &lt;p&gt;<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    * The format of this value is a comma-delimited list of URLs.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    *<a name="line.669"></a>
+<span class="sourceLineNo">670</span>    * &lt;p&gt;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>    * Specifies the URL to the stylesheet to add as a link in the style tag in the header.<a name="line.671"></a>
 <span class="sourceLineNo">672</span>    *<a name="line.672"></a>
 <span class="sourceLineNo">673</span>    * &lt;p&gt;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    * This is the programmatic equivalent to the {@link HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.<a name="line.674"></a>
+<span class="sourceLineNo">674</span>    * The format of this value is CSS.<a name="line.674"></a>
 <span class="sourceLineNo">675</span>    *<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    * @param value<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    *    The CSS URL in the HTML CSS style section.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    *    &lt;p&gt;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    *    &lt;ul class='doctree'&gt;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    *       &lt;li class='info'&gt;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    *    &lt;/ul&gt;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    * @return This object (for method chaining).<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    */<a name="line.686"></a>
-<span class="sourceLineNo">687</span>   public RestResponse setHtmlStylesheet(Object value) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_stylesheet, value);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>   /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    * Sets the HTML script section contents.<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    *<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    * &lt;p&gt;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    * The format of this value is Javascript.<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    *<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    * &lt;p&gt;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    *<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    *<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    * &lt;p&gt;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    * This is the programmatic equivalent to the {@link HtmlDoc#script() @HtmlDoc.script()} annotation.<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    *<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    * @param value<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    *    The HTML script section contents.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    *    &lt;p&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    *    &lt;ul class='doctree'&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    *       &lt;li class='info'&gt;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    *    &lt;/ul&gt;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    * @return This object (for method chaining).<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    */<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   public RestResponse setHtmlScript(Object value) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_script, value);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      return this;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>   /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    * Shorthand method for forcing the rendered HTML content to be no-wrap.<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    *<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    * &lt;p&gt;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    * This is the programmatic equivalent to the {@link HtmlDoc#nowrap() @HtmlDoc.nowrap()} annotation.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    *<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    * @param value The new nowrap setting.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    * @return This object (for method chaining).<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   public RestResponse setHtmlNoWrap(boolean value) {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_nowrap, value);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      return this;<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>   /**<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    * Specifies the text to display when serializing an empty array or collection.<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    *<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    * &lt;p&gt;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    * This is the programmatic equivalent to the {@link HtmlDoc#noResultsMessage() @HtmlDoc.noResultsMessage()}<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    * annotation.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    *<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    * @param value The text to display when serializing an empty array or collection.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    * @return This object (for method chaining).<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    */<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   public RestResponse setHtmlNoResultsMessage(Object value) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_noResultsMessage, value);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      return this;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   }<a name="line.751"></a>
-<span class="sourceLineNo">752</span><a name="line.752"></a>
-<span class="sourceLineNo">753</span>   /**<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    * Specifies the template class to use for rendering the HTML page.<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    *<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    * &lt;p&gt;<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    * By default, uses {@link HtmlDocTemplateBasic} to render the contents, although you can provide your own custom<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    * renderer or subclasses from the basic class to have full control over how the page is rendered.<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    *<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    * &lt;p&gt;<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    * This is the programmatic equivalent to the {@link HtmlDoc#template() @HtmlDoc.template()} annotation.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    *<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    * @param value The HTML page template to use to render the HTML page.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    * @return This object (for method chaining).<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   public RestResponse setHtmlTemplate(Class&lt;? extends HtmlDocTemplate&gt; value) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_template, value);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      return this;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>   /**<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    * Specifies the template class to use for rendering the HTML page.<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    *<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    * &lt;p&gt;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    * By default, uses {@link HtmlDocTemplateBasic} to render the contents, although you can provide your own custom<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    * renderer or subclasses from the basic class to have full control over how the page is rendered.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    *<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    * &lt;p&gt;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    * This is the programmatic equivalent to the {@link HtmlDoc#template() @HtmlDoc.template()} annotation.<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    *<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    * @param value The HTML page template to use to render the HTML page.<a name="line.781"></a>
-<span class="sourceLineNo">782</span>    * @return This object (for method chaining).<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    */<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   public RestResponse setHtmlTemplate(HtmlDocTemplate value) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_template, value);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      return this;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   }<a name="line.787"></a>
-<span class="sourceLineNo">788</span><a name="line.788"></a>
-<span class="sourceLineNo">789</span>   @Override /* ServletResponse */<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   public void flushBuffer() throws IOException {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      if (w != null)<a name="line.791"></a>
-<span class="sourceLineNo">792</span>         w.flush();<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      if (os != null)<a name="line.793"></a>
-<span class="sourceLineNo">794</span>         os.flush();<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      super.flushBuffer();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>}<a name="line.797"></a>
+<span class="sourceLineNo">676</span>    * &lt;p&gt;<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;) and can use URL protocols defined<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    * by {@link UriResolver}.<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    *<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    * &lt;p&gt;<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    * This is the programmatic equivalent to the {@link HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    *<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    * @param value<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    *    The CSS URL in the HTML CSS style section.<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>    *    &lt;p&gt;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>    *    &lt;ul class='doctree'&gt;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    *       &lt;li class='info'&gt;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    *    &lt;/ul&gt;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    * @return This object (for method chaining).<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    */<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   public RestResponse setHtmlStylesheet(Object value) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_stylesheet, value);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      return this;<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>   /**<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    * Sets the HTML script section contents.<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    *<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    * &lt;p&gt;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    * The format of this value is Javascript.<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    *<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    * &lt;p&gt;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    * This field can contain variables (e.g. &lt;js&gt;"$L{my.localized.variable}"&lt;/js&gt;).<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    * &lt;br&gt;See {@link RestContext#getVarResolver()} for the list of supported variables.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    *<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    * &lt;p&gt;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    * A value of &lt;js&gt;"NONE"&lt;/js&gt; can be used to force no value.<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    *<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    * &lt;p&gt;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    * This is the programmatic equivalent to the {@link HtmlDoc#script() @HtmlDoc.script()} annotation.<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    *<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    * @param value<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    *    The HTML script section contents.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    *    Object will be converted to a string using {@link Object#toString()}.<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    *    &lt;p&gt;<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    *    &lt;ul class='doctree'&gt;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    *       &lt;li class='info'&gt;<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    *          &lt;b&gt;Tip:&lt;/b&gt;  Use {@link StringMessage} to generate value with delayed serialization so as not to<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    *             waste string concatenation cycles on non-HTML views.<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    *    &lt;/ul&gt;<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    * @return This object (for method chaining).<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    */<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   public RestResponse setHtmlScript(Object value) {<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      properties.put(HtmlDocSerializerContext.HTMLDOC_script, value);<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      return this;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>   /**<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    * Shorthand method for forcing the rendered HTML content to be no-wrap.<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    *<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    * &lt;p&gt;<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    * This is the programmatic equivalent to the {@link HtmlDoc#nowrap() @HtmlDoc.nowrap()} annotation.<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    *<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    * @param value The new nowrap setting.<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    * @return This object (for method chaining).<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    */<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   public RestRespons

<TRUNCATED>


[21/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestConfig.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestConfig.html b/content/site/apidocs/org/apache/juneau/rest/RestConfig.html
index 2f8cd54..cee508e 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestConfig.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestConfig.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.83">RestConfig</a>
+<pre>public class <a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.84">RestConfig</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a></pre>
 <div class="block">Defines the initial configuration of a <code>RestServlet</code> or <code>@RestResource</code> annotated object.
@@ -625,7 +625,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RestConfig</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.144">RestConfig</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>&nbsp;config,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.145">RestConfig</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>&nbsp;config,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;resourceClass)
            throws <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet">ServletException</a></pre>
 <div class="block">Constructor for top-level servlets when using dependency injection.
@@ -655,7 +655,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addVars</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.308">addVars</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;vars)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.339">addVars</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;vars)</pre>
 <div class="block">Adds the specified <a href="../../../../org/apache/juneau/svl/Var.html" title="class in org.apache.juneau.svl"><code>Var</code></a> classes to this config.
 
  <p>
@@ -697,7 +697,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addVarContextObject</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.333">addVarContextObject</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.364">addVarContextObject</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;object)</pre>
 <div class="block">Adds a var context object to this config.
 
@@ -728,7 +728,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setConfigFile</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.349">setConfigFile</a>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;configFile)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.380">setConfigFile</a>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;configFile)</pre>
 <div class="block">Overwrites the default config file with a custom config file.
 
  <p>
@@ -749,7 +749,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setProperty</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.364">setProperty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.395">setProperty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets a property on this resource.
 
@@ -770,7 +770,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setProperties</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.381">setProperties</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;properties)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.412">setProperties</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;properties)</pre>
 <div class="block">Sets multiple properties on this resource.
 
  <p>
@@ -792,7 +792,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addBeanFilters</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.400">addBeanFilters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;beanFilters)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.431">addBeanFilters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;beanFilters)</pre>
 <div class="block">Adds class-level bean filters to this resource.
 
  <p>
@@ -816,7 +816,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addPojoSwaps</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.418">addPojoSwaps</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;pojoSwaps)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.449">addPojoSwaps</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;pojoSwaps)</pre>
 <div class="block">Adds class-level pojo swaps to this resource.
 
  <p>
@@ -839,7 +839,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>serializerListener</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.433">serializerListener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/serializer/SerializerListener.html" title="class in org.apache.juneau.serializer">SerializerListener</a>&gt;&nbsp;listener)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.464">serializerListener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/serializer/SerializerListener.html" title="class in org.apache.juneau.serializer">SerializerListener</a>&gt;&nbsp;listener)</pre>
 <div class="block">Specifies the serializer listener class to use for listening to non-fatal serialization errors.
 
  <p>
@@ -859,7 +859,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>parserListener</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.449">parserListener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/parser/ParserListener.html" title="class in org.apache.juneau.parser">ParserListener</a>&gt;&nbsp;listener)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.480">parserListener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/parser/ParserListener.html" title="class in org.apache.juneau.parser">ParserListener</a>&gt;&nbsp;listener)</pre>
 <div class="block">Specifies the parser listener class to use for listening to non-fatal parse errors.
 
  <p>
@@ -879,7 +879,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addParamResolvers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.465">addParamResolvers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest">RestParam</a>&gt;...&nbsp;paramResolvers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.496">addParamResolvers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest">RestParam</a>&gt;...&nbsp;paramResolvers)</pre>
 <div class="block">Adds class-level parameter resolvers to this resource.
 
  <p>
@@ -899,7 +899,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addSerializers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.484">addSerializers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;serializers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.515">addSerializers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;serializers)</pre>
 <div class="block">Adds class-level serializers to this resource.
 
  <p>
@@ -923,7 +923,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addSerializers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.507">addSerializers</a>(<a href="../../../../org/apache/juneau/serializer/Serializer.html" title="class in org.apache.juneau.serializer">Serializer</a>...&nbsp;serializers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.538">addSerializers</a>(<a href="../../../../org/apache/juneau/serializer/Serializer.html" title="class in org.apache.juneau.serializer">Serializer</a>...&nbsp;serializers)</pre>
 <div class="block">Adds class-level serializers to this resource.
 
  <p>
@@ -951,7 +951,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addParsers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.525">addParsers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;parsers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.556">addParsers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;parsers)</pre>
 <div class="block">Adds class-level parsers to this resource.
 
  <p>
@@ -974,7 +974,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addParsers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.548">addParsers</a>(<a href="../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser">Parser</a>...&nbsp;parsers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.579">addParsers</a>(<a href="../../../../org/apache/juneau/parser/Parser.html" title="class in org.apache.juneau.parser">Parser</a>...&nbsp;parsers)</pre>
 <div class="block">Adds class-level parsers to this resource.
 
  <p>
@@ -1002,7 +1002,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addEncoders</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.569">addEncoders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;encoders)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.600">addEncoders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;encoders)</pre>
 <div class="block">Adds class-level encoders to this resource.
 
  <p>
@@ -1028,7 +1028,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addEncoders</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.583">addEncoders</a>(<a href="../../../../org/apache/juneau/encoders/Encoder.html" title="class in org.apache.juneau.encoders">Encoder</a>...&nbsp;encoders)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.614">addEncoders</a>(<a href="../../../../org/apache/juneau/encoders/Encoder.html" title="class in org.apache.juneau.encoders">Encoder</a>...&nbsp;encoders)</pre>
 <div class="block">Adds class-level encoders to this resource.
 
  <p>
@@ -1047,7 +1047,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addConverters</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.613">addConverters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;converters)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.644">addConverters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;converters)</pre>
 <div class="block">Adds class-level converters to this resource.
 
  <p>
@@ -1082,7 +1082,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addConverters</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.627">addConverters</a>(<a href="../../../../org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest">RestConverter</a>...&nbsp;converters)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.658">addConverters</a>(<a href="../../../../org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest">RestConverter</a>...&nbsp;converters)</pre>
 <div class="block">Adds class-level encoders to this resource.
 
  <p>
@@ -1101,7 +1101,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addGuards</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.645">addGuards</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;guards)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.676">addGuards</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;guards)</pre>
 <div class="block">Adds class-level guards to this resource.
 
  <p>
@@ -1124,7 +1124,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addGuards</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.659">addGuards</a>(<a href="../../../../org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest">RestGuard</a>...&nbsp;guards)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.690">addGuards</a>(<a href="../../../../org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest">RestGuard</a>...&nbsp;guards)</pre>
 <div class="block">Adds class-level guards to this resource.
 
  <p>
@@ -1143,7 +1143,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addMimeTypes</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.680">addMimeTypes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;mimeTypes)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.711">addMimeTypes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;mimeTypes)</pre>
 <div class="block">Adds MIME-type definitions.
 
  <p>
@@ -1169,7 +1169,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addDefaultRequestHeader</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.704">addDefaultRequestHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.735">addDefaultRequestHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Adds class-level default HTTP request headers to this resource.
 
@@ -1196,7 +1196,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addDefaultRequestHeaders</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.725">addDefaultRequestHeaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;headers)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.756">addDefaultRequestHeaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;headers)
                                     throws <a href="../../../../org/apache/juneau/rest/RestServletException.html" title="class in org.apache.juneau.rest">RestServletException</a></pre>
 <div class="block">Adds class-level default HTTP request headers to this resource.
 
@@ -1224,7 +1224,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addDefaultResponseHeader</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.754">addDefaultResponseHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.785">addDefaultResponseHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Adds class-level default HTTP response headers to this resource.
 
@@ -1254,7 +1254,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addDefaultResponseHeaders</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.774">addDefaultResponseHeaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;headers)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.805">addDefaultResponseHeaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;headers)
                                      throws <a href="../../../../org/apache/juneau/rest/RestServletException.html" title="class in org.apache.juneau.rest">RestServletException</a></pre>
 <div class="block">Adds class-level default HTTP response headers to this resource.
 
@@ -1281,7 +1281,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addResponseHandlers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.808">addResponseHandlers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;responseHandlers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.839">addResponseHandlers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;responseHandlers)</pre>
 <div class="block">Adds class-level response handler classes to this resource.
 
  <p>
@@ -1315,7 +1315,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addResponseHandlers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.822">addResponseHandlers</a>(<a href="../../../../org/apache/juneau/rest/ResponseHandler.html" title="interface in org.apache.juneau.rest">ResponseHandler</a>...&nbsp;responseHandlers)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.853">addResponseHandlers</a>(<a href="../../../../org/apache/juneau/rest/ResponseHandler.html" title="interface in org.apache.juneau.rest">ResponseHandler</a>...&nbsp;responseHandlers)</pre>
 <div class="block">Adds class-level response handlers to this resource.
 
  <p>
@@ -1334,7 +1334,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addChildResource</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.840">addChildResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.871">addChildResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;child)</pre>
 <div class="block">Adds a child resource to this resource.
 
@@ -1358,7 +1358,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addChildResources</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.858">addChildResources</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;children)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.889">addChildResources</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;children)</pre>
 <div class="block">Add child resources to this resource.
 
  <p>
@@ -1381,7 +1381,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addChildResources</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.876">addChildResources</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;children)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.907">addChildResources</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;...&nbsp;children)</pre>
 <div class="block">Add child resources to this resource.
 
  <p>
@@ -1404,7 +1404,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setSupportedAcceptTypes</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.893">setSupportedAcceptTypes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;mediaTypes)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.924">setSupportedAcceptTypes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;mediaTypes)</pre>
 <div class="block">Specifies the list of supported <code>Accept</code> media types for this resource.
 
  <p>
@@ -1426,7 +1426,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setSupportedAcceptTypes</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.912">setSupportedAcceptTypes</a>(<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>...&nbsp;mediaTypes)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.943">setSupportedAcceptTypes</a>(<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>...&nbsp;mediaTypes)</pre>
 <div class="block">Specifies the list of supported <code>Accept</code> media types for this resource.
 
  <p>
@@ -1448,7 +1448,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setSupportedContentTypes</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.929">setSupportedContentTypes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;mediaTypes)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.960">setSupportedContentTypes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;mediaTypes)</pre>
 <div class="block">Specifies the list of supported <code>Content-Type</code> media types for this resource.
 
  <p>
@@ -1470,7 +1470,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setSupportedContentTypes</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.948">setSupportedContentTypes</a>(<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>...&nbsp;mediaTypes)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.979">setSupportedContentTypes</a>(<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>...&nbsp;mediaTypes)</pre>
 <div class="block">Specifies the list of supported <code>Content-Type</code> media types for this resource.
 
  <p>
@@ -1492,7 +1492,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setFavIcon</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.970">setFavIcon</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;favIcon)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1001">setFavIcon</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;favIcon)</pre>
 <div class="block">Specifies the icon contents that make up the contents of the page <js>"/resource-path/favicon.ico"</js>.
 
  <p>
@@ -1519,7 +1519,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setFavIcon</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.991">setFavIcon</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;resourceClass,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1022">setFavIcon</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;resourceClass,
                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;resourcePath)</pre>
 <div class="block">Specifies the icon contents that make up the contents of the page <js>"/resource-path/favicon.ico"</js>.
 
@@ -1545,7 +1545,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addStaticFiles</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1014">addStaticFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;resourceClass,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1045">addStaticFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;resourceClass,
                                  <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;staticFilesString)</pre>
 <div class="block">Appends to the static files resource map.
 
@@ -1573,7 +1573,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setResourceResolver</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1036">setResourceResolver</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestResourceResolver.html" title="interface in org.apache.juneau.rest">RestResourceResolver</a>&gt;&nbsp;resourceResolver)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1067">setResourceResolver</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestResourceResolver.html" title="interface in org.apache.juneau.rest">RestResourceResolver</a>&gt;&nbsp;resourceResolver)</pre>
 <div class="block">Overrides the default REST resource resolver.
 
  <p>
@@ -1598,7 +1598,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setResourceResolver</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1050">setResourceResolver</a>(<a href="../../../../org/apache/juneau/rest/RestResourceResolver.html" title="interface in org.apache.juneau.rest">RestResourceResolver</a>&nbsp;resourceResolver)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1081">setResourceResolver</a>(<a href="../../../../org/apache/juneau/rest/RestResourceResolver.html" title="interface in org.apache.juneau.rest">RestResourceResolver</a>&nbsp;resourceResolver)</pre>
 <div class="block">Overrides the default REST resource resolver.
 
  <p>
@@ -1617,7 +1617,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setPath</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1064">setPath</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1095">setPath</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 <div class="block">Sets the URL path of the resource <js>"/foobar"</js>.
 
  <p>
@@ -1636,7 +1636,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setClientVersionHeader</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1081">setClientVersionHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clientVersionHeader)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1112">setClientVersionHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clientVersionHeader)</pre>
 <div class="block">Sets name of the header used to denote the client version on HTTP requests.
 
  <p>
@@ -1656,7 +1656,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlHeader</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1109">setHtmlHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1140">setHtmlHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML header section contents.
 
  <p>
@@ -1689,7 +1689,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlLinks</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1140">setHtmlLinks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1171">setHtmlLinks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;value)</pre>
 <div class="block">Sets the links in the HTML nav section.
 
  <p>
@@ -1725,7 +1725,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlNav</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1173">setHtmlNav</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1204">setHtmlNav</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML nav section contents.
 
  <p>
@@ -1763,7 +1763,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlAside</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1200">setHtmlAside</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1231">setHtmlAside</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML aside section contents.
 
  <p>
@@ -1795,7 +1795,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlFooter</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1227">setHtmlFooter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1258">setHtmlFooter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML footer section contents.
 
  <p>
@@ -1827,7 +1827,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlStyle</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1251">setHtmlStyle</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1282">setHtmlStyle</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML CSS style section contents.
 
  <p>
@@ -1856,7 +1856,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlStylesheet</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1279">setHtmlStylesheet</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1310">setHtmlStylesheet</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the CSS URL in the HTML CSS style section.
 
  <p>
@@ -1889,7 +1889,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlScript</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1303">setHtmlScript</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1334">setHtmlScript</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML script section contents.
 
  <p>
@@ -1918,7 +1918,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlNoWrap</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1317">setHtmlNoWrap</a>(boolean&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1348">setHtmlNoWrap</a>(boolean&nbsp;value)</pre>
 <div class="block">Shorthand method for forcing the rendered HTML content to be no-wrap.
 
  <p>
@@ -1937,7 +1937,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlNoResultsMessage</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1332">setHtmlNoResultsMessage</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1363">setHtmlNoResultsMessage</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <div class="block">Specifies the text to display when serializing an empty array or collection.
 
  <p>
@@ -1957,7 +1957,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlTemplate</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1350">setHtmlTemplate</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1381">setHtmlTemplate</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&gt;&nbsp;value)</pre>
 <div class="block">Specifies the template class to use for rendering the HTML page.
 
  <p>
@@ -1980,7 +1980,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlTemplate</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1368">setHtmlTemplate</a>(<a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1399">setHtmlTemplate</a>(<a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&nbsp;value)</pre>
 <div class="block">Specifies the template class to use for rendering the HTML page.
 
  <p>
@@ -2003,7 +2003,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>addHtmlWidget</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1383">addHtmlWidget</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/widget/Widget.html" title="class in org.apache.juneau.rest.widget">Widget</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1414">addHtmlWidget</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/widget/Widget.html" title="class in org.apache.juneau.rest.widget">Widget</a>&gt;&nbsp;value)</pre>
 <div class="block">Defines widgets that can be used in conjunction with string variables of the form <js>"$W{name}"</js>to quickly
  generate arbitrary replacement text.
 
@@ -2023,7 +2023,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setLogger</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1397">setLogger</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a>&gt;&nbsp;logger)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1428">setLogger</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a>&gt;&nbsp;logger)</pre>
 <div class="block">Overrides the logger for the resource.
 
  <p>
@@ -2042,7 +2042,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setLogger</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1411">setLogger</a>(<a href="../../../../org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a>&nbsp;logger)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1442">setLogger</a>(<a href="../../../../org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a>&nbsp;logger)</pre>
 <div class="block">Overrides the logger for the resource.
 
  <p>
@@ -2061,7 +2061,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setCallHandler</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1430">setCallHandler</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a>&gt;&nbsp;restHandler)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1461">setCallHandler</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a>&gt;&nbsp;restHandler)</pre>
 <div class="block">Overrides the call handler for the resource.
 
  <p>
@@ -2085,7 +2085,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setCallHandler</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1449">setCallHandler</a>(<a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a>&nbsp;restHandler)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1480">setCallHandler</a>(<a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a>&nbsp;restHandler)</pre>
 <div class="block">Overrides the call handler for the resource.
 
  <p>
@@ -2109,7 +2109,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setInfoProvider</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1468">setInfoProvider</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a>&gt;&nbsp;infoProvider)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1499">setInfoProvider</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a>&gt;&nbsp;infoProvider)</pre>
 <div class="block">Overrides the info provider for the resource.
 
  <p>
@@ -2133,7 +2133,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>setInfoProvider</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1487">setInfoProvider</a>(<a href="../../../../org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a>&nbsp;infoProvider)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1518">setInfoProvider</a>(<a href="../../../../org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a>&nbsp;infoProvider)</pre>
 <div class="block">Overrides the info provider for the resource.
 
  <p>
@@ -2157,7 +2157,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>createPropertyStore</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/PropertyStore.html" title="class in org.apache.juneau">PropertyStore</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1497">createPropertyStore</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/PropertyStore.html" title="class in org.apache.juneau">PropertyStore</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1528">createPropertyStore</a>()</pre>
 <div class="block">Creates a new <a href="../../../../org/apache/juneau/PropertyStore.html" title="class in org.apache.juneau"><code>PropertyStore</code></a> object initialized with the properties defined in this config.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2171,7 +2171,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfigFile</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1524">getConfigFile</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1555">getConfigFile</a>()</pre>
 <div class="block">Returns the external configuration file for this resource.
 
  <p>
@@ -2198,7 +2198,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>getProperties</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1546">getProperties</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1577">getProperties</a>()</pre>
 <div class="block">Returns the configuration properties for this resource.
 
  <p>
@@ -2212,7 +2212,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 
  <p>
  These properties can be modified during servlet initialization.
- However, any modifications made after <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-"><code>RestServlet.init(RestConfig)</code></a> has been called will have no effect.</div>
+ However, any modifications made after <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-"><code>RestServlet.init(ServletConfig)</code></a> has been called will have no effect.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>The configuration properties for this resource.  Never <jk>null</jk>.</dd>
@@ -2225,7 +2225,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>getVarResolverBuilder</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolverBuilder.html" title="class in org.apache.juneau.svl">VarResolverBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1569">getVarResolverBuilder</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolverBuilder.html" title="class in org.apache.juneau.svl">VarResolverBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1600">getVarResolverBuilder</a>()</pre>
 <div class="block">Creates the variable resolver for this resource.
 
  <p>
@@ -2253,7 +2253,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitParameter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1579">getInitParameter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1610">getInitParameter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true#getInitParameter-java.lang.String-" title="class or interface in javax.servlet">getInitParameter</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a></code></dd>
@@ -2266,7 +2266,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitParameterNames</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1584">getInitParameterNames</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1615">getInitParameterNames</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true#getInitParameterNames--" title="class or interface in javax.servlet">getInitParameterNames</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a></code></dd>
@@ -2279,7 +2279,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockList">
 <li class="blockList">
 <h4>getServletContext</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html?is-external=true" title="class or interface in javax.servlet">ServletContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1589">getServletContext</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html?is-external=true" title="class or interface in javax.servlet">ServletContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1620">getServletContext</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true#getServletContext--" title="class or interface in javax.servlet">getServletContext</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a></code></dd>
@@ -2292,7 +2292,7 @@ implements <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getServletName</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1594">getServletName</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestConfig.html#line.1625">getServletName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true#getServletName--" title="class or interface in javax.servlet">getServletName</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a></code></dd>


[16/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/jaxrs/package-summary.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/jaxrs/package-summary.html b/content/site/apidocs/org/apache/juneau/rest/jaxrs/package-summary.html
index 21eb15b..dc5fc26 100644
--- a/content/site/apidocs/org/apache/juneau/rest/jaxrs/package-summary.html
+++ b/content/site/apidocs/org/apache/juneau/rest/jaxrs/package-summary.html
@@ -71,7 +71,7 @@
 <div class="header">
 <h1 title="Package" class="title">Package&nbsp;org.apache.juneau.rest.jaxrs</h1>
 <div class="docSummary">
-<div class="block">JAX-RS / Wink integration components</div>
+<div class="block">JAX-RS integration components</div>
 </div>
 <p>See:&nbsp;<a href="#package.description">Description</a></p>
 </div>
@@ -122,7 +122,7 @@
 <!--   -->
 </a>
 <h2 title="Package org.apache.juneau.rest.jaxrs Description">Package org.apache.juneau.rest.jaxrs Description</h2>
-<div class="block"><p>JAX-RS / Wink integration components</p>
+<div class="block"><p>JAX-RS integration components</p>
 
 <script>
    function toggle(x) {
@@ -217,239 +217,6 @@
       For the most part, when using these components, you'll either use the existing <code>DefaultProvider</code> or
          <code>JuneauProvider</code> providers, or define your own by subclassing <code>BaseProvider</code>.
    
-   <h6 class='topic'>Example:</h6>
-   <p>
-      The <code>juneau_sample.war</code> project contains a sample <code>HelloWorldResource</code> class that
-         shows how to use the JAX-RS provider.  It uses Wink as the JAX-RS implementation.
-   </p>
-   <p>
-      Wink is configured by registering the following servlet in the <code>web.xml</code> file of the web app:
-   </p>
-   <p class='bcode'>
-   <xt>&lt;?xml</xt> <xa>version</xa>=<xs>"1.0"</xs> <xa>encoding</xa>=<xs>"UTF-8"</xs><xt>?&gt;</xt>
-   <xt>&lt;web-app</xt> <xa>version</xa>=<xs>"2.3"</xs><xt>&gt;</xt>
-     <xt>&lt;servlet&gt;</xt>
-       <xt>&lt;servlet-name&gt;</xt>WinkService<xt>&lt;/servlet-name&gt;</xt>
-       <xt>&lt;servlet-class&gt;</xt>org.apache.wink.server.internal.servlet.RestServlet<xt>&lt;/servlet-class&gt;</xt>
-         <xt>&lt;init-param&gt;</xt>
-            <xt>&lt;param-name&gt;</xt>applicationConfigLocation<xt>&lt;/param-name&gt;</xt>
-            <xt>&lt;param-value&gt;</xt>/WEB-INF/wink.cfg<xt>&lt;/param-value&gt;</xt>
-         <xt>&lt;/init-param&gt;</xt>
-     <xt>&lt;/servlet&gt;</xt>
-     <xt>&lt;servlet-mapping&gt;</xt>
-       <xt>&lt;servlet-name&gt;</xt>WinkService<xt>&lt;/servlet-name&gt;</xt>
-       <xt>&lt;url-pattern&gt;</xt>/wink/*<xt>&lt;/url-pattern&gt;</xt>
-     <xt>&lt;/servlet-mapping&gt;</xt>
-   <xt>&lt;/web-app&gt;</xt>
-   </p>
-   <p>
-      The <code>wink.cfg</code> file lists our default provider and our sample resource:
-   </p>
-   <p class='bcode'>
-   org.apache.juneau.rest.jaxrs.DefaultProvider    
-   com.foo.sample.jaxrs.HelloWorldResource
-   </p>
-   <p>
-      Interestingly, the <code>DefaultProvider</code> itself is a subclass of <code>BaseProvider</code>
-         with no code at all.  It consists of annotations only:
-   </p>
-   <p class='bcode'>
-   <ja>@Provider</ja>
-   <ja>@Produces</ja>(
-      <js>"application/json,text/json,"</js>+                    <jc>// JsonSerializer</jc>
-      <js>"application/json+schema,text/json+schema,"</js>+      <jc>// JsonSchemaSerializer</jc>
-      <js>"text/xml,"</js>+                                      <jc>// XmlDocSerializer</jc>
-      <js>"text/xml+schema,"</js>+                               <jc>// XmlDocSerializer</jc>
-      <js>"text/html,"</js>+                                     <jc>// HtmlDocSerializer</jc>
-      <js>"application/x-www-form-urlencoded,"</js>+             <jc>// UrlEncodingSerializer</jc>
-      <js>"text/xml+soap,"</js>+                                 <jc>// SoapXmlSerializer</jc>
-      <js>"text/xml+rdf,"</js>+                                  <jc>// RdfXmlDocSerializer</jc>
-      <js>"application/x-java-serialized-object"</js>            <jc>// JavaSerializedObjectSerializer</jc>
-   )
-   <ja>@Consumes</ja>(
-      <js>"application/json,text/json,"</js>+                    <jc>// JsonParser</jc>
-      <js>"text/xml,"</js>+                                      <jc>// XmlParser</jc>
-      <js>"text/html,"</js>+                                     <jc>// HtmlParser</jc>
-      <js>"application/x-www-form-urlencoded"</js>               <jc>// UrlEncodingParser</jc>
-   )
-   <ja>@JuneauProvider</ja>(
-      serializers={
-         JsonSerializer.<jk>class</jk>,
-         JsonSchemaSerializer.<jk>class</jk>,
-         XmlDocSerializer.<jk>class</jk>,
-         XmlSchemaDocSerializer.<jk>class</jk>,
-         HtmlDocSerializer.<jk>class</jk>,
-         UrlEncodingSerializer.<jk>class</jk>,
-         SoapXmlSerializer.<jk>class</jk>,
-         RdfXmlDocSerializer.<jk>class</jk>,
-         JavaSerializedObjectSerializer.<jk>class</jk>
-      },
-      parsers={
-         JsonParser.<jk>class</jk>,
-         XmlParser.<jk>class</jk>,
-         HtmlParser.<jk>class</jk>,
-         UrlEncodingParser.<jk>class</jk>
-      }
-   )
-   <jk>public final class</jk> DefaultProvider <jk>extends</jk> BaseProvider {}
-   </p>  
-   <p>
-      Similarly, if you're defining your own JAX-RS provider, you can do so using annotations only.
-   </p>
-   <p>
-   <p>
-      Our sample resource is shown below.
-      In this example, we've specified a <code><ja>@RestMethod</ja></code> annotation on the 
-         getter to show how properties can be overridden on the serializers/parsers at the method level.
-      This annotation is optional.
-   </p>
-   
-   <p class='bcode'>
-   <ja>@Path</ja>(<js>"/helloworld"</js>)
-   <jk>public class</jk> HelloWorldResource {
-   
-      <jc>// Our bean message class</jc>
-      <jk>public static class</jk> Message {
-      
-         <jc>// No-arg bean constructor (needed for parsers)</jc>
-         <jk>public</jk> Message() {}
-   
-         <jk>public</jk> Message(String text, String author) {
-            <jk>this</jk>.text = text;
-            <jk>this</jk>.author = author;
-         }
-   
-         <jk>public</jk> String text;
-         <jk>public</jk> String author;
-      }
-   
-      <jk>private static</jk> Message message = <jk>new</jk> Message(<js>"Hello world"</js>, <js>"John Smith"</js>);
-   
-      <ja>@GET</ja>
-      <ja>@Produces</ja>(<js>"*/*"</js>)
-      <ja>@RestMethod</ja>( <jc>/* Override some properties */</jc>
-         properties={
-            <ja>@Property</ja>(name=SerializerContext.<jsf>SERIALIZER_useWhitespace</jsf>, value=<js>"true"</js>),
-            <ja>@Property</ja>(name=JsonSerializerContext.<jsf>LAX_MODE</jsf>, value=<js>"true"</js>)
-         }
-      )
-      <jk>public</jk> Message getMessage() {
-         <jk>return</jk> message;
-      }
-
-      <ja>@PUT</ja>
-      <ja>@Produces</ja>(<js>"*/*"</js>)
-      <ja>@Consumes</ja>(<js>"*/*"</js>)
-      <jk>public</jk> Message replaceMessage(Message message) {
-         HelloWorldResource.message = message;
-         <jk>return</jk> message;
-      }
-   }
-   </p>  
-   <p>
-      When we start up the servlet, we can interact with the resource using cURL.
-      In these examples, note that the <jsf>SERIALIZER_useWhitespace</jsf> and <jsf>LAX_MODE</jsf> settings
-         cause the output to be readable instead of condensed.
-   </p>
-   <p class='bcode'>
-   C:\>curl.exe -H "Accept: text/json" -X GET http://localhost:9080/sample/wink/helloworld
-   <ja>{
-           text:"Hello world",
-           author:"John Smith"
-   }</ja>
-   </p>
-   <p class='bcode'>
-   C:\>curl.exe -H "Accept: text/html" -X GET http://localhost:9080/sample/wink/helloworld
-   <ja>&lt;html&gt;
-   &lt;head&gt;
-   &lt;/head&gt;
-   &lt;body&gt;
-   &lt;table type="object"&gt;
-           &lt;tr&gt;
-                   &lt;th&gt;
-                           &lt;string&gt;key&lt;/string&gt;
-                   &lt;/th&gt;
-                   &lt;th&gt;
-                           &lt;string&gt;value&lt;/string&gt;
-                   &lt;/th&gt;
-           &lt;/tr&gt;
-           &lt;tr&gt;
-                   &lt;td&gt;
-                           &lt;string&gt;text&lt;/string&gt;
-                   &lt;/td&gt;
-                   &lt;td&gt;
-                           &lt;string&gt;Hello world&lt;/string&gt;
-                   &lt;/td&gt;
-           &lt;/tr&gt;
-           &lt;tr&gt;
-                   &lt;td&gt;
-                           &lt;string&gt;author&lt;/string&gt;
-                   &lt;/td&gt;
-                   &lt;td&gt;
-                           &lt;string&gt;John Smith&lt;/string&gt;
-                   &lt;/td&gt;
-           &lt;/tr&gt;
-   &lt;/table&gt;
-   &lt;/body&gt;
-   &lt;/html&gt;</ja>   
-   </p>
-   <p class='bcode'>
-   C:\&gt;curl.exe -H "Accept: text/xml" -X GET http://localhost:9080/sample/wink/helloworld
-   <ja>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-   &lt;object&gt;
-           &lt;text&gt;Hello world&lt;/text&gt;
-           &lt;author&gt;John Smith&lt;/author&gt;
-   &lt;/object&gt;</ja>
-   </p>
-   <p class='bcode'>
-   C:\>curl.exe -H "Accept: application/x-www-form-urlencoded" -X GET http://localhost:9080/sample/wink/helloworld
-   <ja>text='Hello+world'&amp;author='John+Smith'</ja>
-   </p>
-   <p class='bcode'>
-   C:\&gt;curl.exe -H "Accept: text/xml+schema" -X GET http://localhost:9080/sample/wink/helloworld
-   <ja>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-   &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
-           &lt;xs:element name="object" nillable="true"&gt;
-                   &lt;xs:complexType&gt;
-                           &lt;xs:sequence minOccurs="0" maxOccurs="unbounded"&gt;
-                                   &lt;xs:element name="text" type="xs:string" nillable="true" minOccurs="0"/&gt;
-                                   &lt;xs:element name="author" type="xs:string" nillable="true" minOccurs="0"/&gt;
-                           &lt;/xs:sequence&gt;
-                   &lt;/xs:complexType&gt;
-           &lt;/xs:element&gt;
-           &lt;xs:element name="null"/&gt;
-   &lt;/xs:schema&gt;</ja>
-   </p>
-   <p class='bcode'>
-   C:\>curl.exe -H "Accept: application/x-java-serialized-object" -X GET http://localhost:9080/sample/wink/helloworld
-   <ja>detailMessaget ↕Ljava/lang/String;[ ption(Vx τå▬5☻  xr ↔java.io.ObjectStreamExceptiond├Σkì9√▀☻  xr ‼java.io.IOExcept
-   stackTracet ▲[Ljava/lang/StackTraceElement;xpq t /org.apache.juneau.samples.jaxrs.HelloWorldResource$Messageur ▲[Ljava.lang.Sta
-   lineNumberL ♫declaringClassq ~ ♠LfileNameq ~ ♠L
-   methodNameq ~ ♠xp  ♦át →java.io.ObjectOutputStreamt ↨ObjectOutputStream.javat ♀writeObject0sq ~ ♀  ☺[t →java.io.Obje
-    3org.apache.juneau.serializer.OutputStreamSerializert ←OutputStreamSerializer.javat    serializesq ~ ♀   ^t &amp;com.ib
-    &amp;t /org.apache.wink.server.handlers.AbstractHandlert ¶AbstractHandler.javat ♫handleResponsesq ~ ♀   →t 5org.apache.
-   sq ~ ♀   Ct 5org.apache.wink.server.handlers.AbstractHandlersChaint →AbstractHandlersChain.javat doChainsq ~ ♀   't
-    ♠handlesq ~ ♀   ▬t 5org.apache.wink.server.handlers.ResponseHandlersChaint →ResponseHandlersChain.javat ♠handlesq ~
-    ♫handleResponsesq ~ ♀   →t 5org.apache.wink.server.handlers.ResponseHandlersChaint →ResponseHandlersChain.javat ♠ha
-   tHandlersChain.javat doChainsq ~ ♀   Zt -org.apache.wink.server.internal.log.Responsest ♫Responses.javat ♫handleResp
-   eHandlersChain.javat ♠handlesq ~ ♀   Ct 5org.apache.wink.server.handlers.AbstractHandlersChaint →AbstractHandlersCha
-   handleRequestsq ~ ♀   |t 3org.apache.wink.server.internal.servlet.RestServlett ►RestServlet.javat servicesq ~ ♀  ☻£t
-   handleRequestsq ~ ♀   ├t -com.ibm.ws.webcontainer.channel.WCChannelLinkt ↕WCChannelLink.javat ♣readysq ~ ♀  ☺─t 4com
-    ►handleNewRequestsq ~ ♀  ☺1t 4com.ibm.ws.http.channel.inbound.impl.HttpInboundLinkt ¶HttpInboundLink.javat ♫process
-   nnectionInitialReadCallback.javat ¶sendToDiscriminatorssq ~ ♀   qt &lt;com.ibm.ws.tcp.channel.impl.NewConnectionInitial
-     ┘t $com.ibm.io.async.AbstractAsyncFuturet ↑AbstractAsyncFuture.javat ♫invokeCallbacksq ~ ♀   ít #com.ibm.io.async.
-   t ↕ResultHandler.javatcompletesq ~ ♀  ♥t ▲com.ibm.io.async.ResultHandlert ↕ResultHandler.javat ▬runEventProcessingLo
-   on: java.io.NotSerializableException: org.apache.juneau.samples.jaxrs.HelloWorldResource$Message</ja>
-   </p>
-   <p>
-      The following shows the PUT method being invoked.  
-      In this case, we're passing in the new bean as a JSON object.
-      Also notice how the response is in standard condensed JSON since we did not override any properties on the REST method.
-   </p>
-   <p class='bcode'>
-   C:\>curl.exe -H "Content-Type: text/json" -H "Accept: text/json" -d "{text:'Hello again',author:'Jane Doe'}" 
-      -X PUT http://localhost:9080/sample/wink/helloworld
-   <ja>{"text":"Hello again","author":"Jane Doe"}</ja>
    </p>
 </div></div>
 </div>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/jaxrs/rdf/package-summary.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/jaxrs/rdf/package-summary.html b/content/site/apidocs/org/apache/juneau/rest/jaxrs/rdf/package-summary.html
index 6248aef..29a9eea 100644
--- a/content/site/apidocs/org/apache/juneau/rest/jaxrs/rdf/package-summary.html
+++ b/content/site/apidocs/org/apache/juneau/rest/jaxrs/rdf/package-summary.html
@@ -71,7 +71,7 @@
 <div class="header">
 <h1 title="Package" class="title">Package&nbsp;org.apache.juneau.rest.jaxrs.rdf</h1>
 <div class="docSummary">
-<div class="block">JAX-RS / Wink integration components with RDF support</div>
+<div class="block">JAX-RS integration components with RDF support</div>
 </div>
 <p>See:&nbsp;<a href="#package.description">Description</a></p>
 </div>
@@ -99,7 +99,7 @@
 <!--   -->
 </a>
 <h2 title="Package org.apache.juneau.rest.jaxrs.rdf Description">Package org.apache.juneau.rest.jaxrs.rdf Description</h2>
-<div class="block"><p>JAX-RS / Wink integration components with RDF support</p></div>
+<div class="block"><p>JAX-RS integration components with RDF support</p></div>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaDefault.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaDefault.html b/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaDefault.html
index 718cc35..0dcc194 100644
--- a/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaDefault.html
+++ b/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaDefault.html
@@ -367,7 +367,7 @@ extends <a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#l
 og-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaGroupDefault.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaGroupDefault.html b/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaGroupDefault.html
index 7d345e4..62f173e 100644
--- a/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaGroupDefault.html
+++ b/content/site/apidocs/org/apache/juneau/rest/jena/RestServletJenaGroupDefault.html
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/juneau/rest/jena/RestServletJenaDefau
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#l
 og-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/jena/package-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/jena/package-tree.html b/content/site/apidocs/org/apache/juneau/rest/jena/package-tree.html
index 50dd2c3..32d7338 100644
--- a/content/site/apidocs/org/apache/juneau/rest/jena/package-tree.html
+++ b/content/site/apidocs/org/apache/juneau/rest/jena/package-tree.html
@@ -82,7 +82,7 @@
 <ul>
 <li type="circle">javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true" title="class or interface in javax.servlet"><span class="typeNameLink">GenericServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>)
 <ul>
-<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestServlet</span></a>
 <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/package-summary.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/package-summary.html b/content/site/apidocs/org/apache/juneau/rest/package-summary.html
index b2d6d5b..8a3e5ff 100644
--- a/content/site/apidocs/org/apache/juneau/rest/package-summary.html
+++ b/content/site/apidocs/org/apache/juneau/rest/package-summary.html
@@ -2792,28 +2792,9 @@
    <h3 class='topic' onclick='toggle(this)'>4.16 - Listener Methods</h3>   
    <div class='topic'>
       <p>
-         Various convenience listener methods are provided on the <a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest"><code>RestCallHandler</code></a> 
-         class that subclasses can use to intercept requests:
+         Various convenience listener methods can be implemented by using the <a href="../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><code>@RestHook</code></a>
+         annotation on methods in your resource class.
       </p>
-      <ul class='doctree'>
-         <li class='jac'>
-            <a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest"><code>RestCallHandler</code></a>
-            <ul>
-               <li class='jm'>
-                  <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onPreCall-org.apache.juneau.rest.RestRequest-"><code>onPreCall(RestRequest)</code></a>
-                  <br>Callback method that gets invoked right before the REST Java method is invoked.
-               <li class='jm'>
-                  <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-"><code>onPostCall(RestRequest,RestResponse)</code></a>
-                  <br>Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is invoked.
-               <li class='jm'>
-                  <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-"><code>onSuccess(RestRequest,RestResponse,long)</code></a>
-                  <br>Callback method for listening for successful completion of requests.
-               <li class='jm'>
-                  <a href="../../../../org/apache/juneau/rest/RestLogger.html#onError-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-org.apache.juneau.rest.RestException-"><code>onError(HttpServletRequest,HttpServletResponse,RestException)</code></a>
-                  <br>Callback method for logging errors during HTTP requests.
-            </ul>
-         </li>
-      </ul>
    </div>
 
    <!-- ======================================================================================================== -->

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/package-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/package-tree.html b/content/site/apidocs/org/apache/juneau/rest/package-tree.html
index 6a46418..688b393 100644
--- a/content/site/apidocs/org/apache/juneau/rest/package-tree.html
+++ b/content/site/apidocs/org/apache/juneau/rest/package-tree.html
@@ -107,7 +107,7 @@
 </li>
 <li type="circle">javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true" title="class or interface in javax.servlet"><span class="typeNameLink">GenericServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>)
 <ul>
-<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestServlet</span></a>
 <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/remoteable/RemoteableServlet.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/remoteable/RemoteableServlet.html b/content/site/apidocs/org/apache/juneau/rest/remoteable/RemoteableServlet.html
index 4ef89b3..06093c0 100644
--- a/content/site/apidocs/org/apache/juneau/rest/remoteable/RemoteableServlet.html
+++ b/content/site/apidocs/org/apache/juneau/rest/remoteable/RemoteableServlet.html
@@ -222,7 +222,7 @@ extends <a href="../../../../../org/apache/juneau/rest/RestServletDefault.html"
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#l
 og-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/remoteable/package-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/remoteable/package-tree.html b/content/site/apidocs/org/apache/juneau/rest/remoteable/package-tree.html
index 7a7fa89..00e136c 100644
--- a/content/site/apidocs/org/apache/juneau/rest/remoteable/package-tree.html
+++ b/content/site/apidocs/org/apache/juneau/rest/remoteable/package-tree.html
@@ -82,7 +82,7 @@
 <ul>
 <li type="circle">javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true" title="class or interface in javax.servlet"><span class="typeNameLink">GenericServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>)
 <ul>
-<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestServlet</span></a>
 <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/overview-summary.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/overview-summary.html b/content/site/apidocs/overview-summary.html
index c6f4dfa..ede4aba 100644
--- a/content/site/apidocs/overview-summary.html
+++ b/content/site/apidocs/overview-summary.html
@@ -268,13 +268,13 @@
 <tr class="altColor">
 <td class="colFirst"><a href="org/apache/juneau/rest/jaxrs/package-summary.html">org.apache.juneau.rest.jaxrs</a></td>
 <td class="colLast">
-<div class="block">JAX-RS / Wink integration components</div>
+<div class="block">JAX-RS integration components</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="org/apache/juneau/rest/jaxrs/rdf/package-summary.html">org.apache.juneau.rest.jaxrs.rdf</a></td>
 <td class="colLast">
-<div class="block">JAX-RS / Wink integration components with RDF support</div>
+<div class="block">JAX-RS integration components with RDF support</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -4563,9 +4563,9 @@
       
       <h6 class='figure'>Hypothetical RequestEchoResource.createSerializers() method</h6>
       <p class='bcode'>
-   <jd>/** Override the default rest serializers to add some transforms */</jd>
-   <ja>@Override</ja>
-   <jk>public synchronize void</jk> init(RestConfig config) throws Exception {
+   <jd>/** Override the default rest serializers to add some transforms through an INIT hook*/</jd>
+   <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+   <jk>public void</jk> init(RestConfig config) throws Exception {
       <jc>// Add bean filters for the HttpServletRequest, HttpSession, and ServletContext objects
       //    so that you don't show vendor-specific properties on subclasses.
       // Add Enumeration POJO swap to be able to render the contents of Enumeration properties.
@@ -4577,9 +4577,6 @@
          .setProperty(<jsf>SERIALIZER_maxDepth</jsf>, 10)
          .setProperty(<jsf>SERIALIZER_detectRecursions</jsf>, <jk>true</jk>)
          .setPageLinks(<js>"{...}"</js>);
-      
-      <jc>// Don't forget to call this!</jc>
-      <jk>super</jk>.init(config);
    }
       </p>
       <p>
@@ -7278,11 +7275,33 @@
          <li>
             New <a href="org/apache/juneau/utils/CalendarUtils.html" title="class in org.apache.juneau.utils"><code>CalendarUtils</code></a> class that encapsulates serialization/parsing logic from <a href="org/apache/juneau/transforms/CalendarSwap.html" title="class in org.apache.juneau.transforms"><code>CalendarSwap</code></a> and 
             <a href="org/apache/juneau/transforms/DateSwap.html" title="class in org.apache.juneau.transforms"><code>DateSwap</code></a>.
+         <li>
+            New annotation <a href="org/apache/juneau/html/annotation/Html.html#anchorText--"><code>Html.anchorText()</code></a>.
       </ul>
       
       <h6 class='topic'>org.apache.juneau.rest</h6>
       <ul class='spaced-list'>
          <li>
+            Revamped and simplified servlet and REST-call lifecycle handling through new
+            <a href="org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><code>@RestHook</code></a> annotation.
+            <ul>
+               <li>The <a href="org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-"><code>RestServlet.init(ServletConfig)</code></a> method is now final and can
+                  no longer be extended.
+                  <br>Instead, use <a href="org/apache/juneau/rest/annotation/HookEvent.html#INIT"><code>HookEvent.INIT</code></a> or 
+                  <a href="org/apache/juneau/rest/annotation/HookEvent.html#POST_INIT"><code>HookEvent.POST_INIT</code></a> for initialization.
+               <li>The following methods on <a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> have been removed:
+                  <ul>
+                     <li><code>init(RestConfig)</code> 
+                        - Use <a href="org/apache/juneau/rest/annotation/HookEvent.html#INIT"><code>HookEvent.INIT</code></a> instead.
+                     <li><code>onSuccess(RestRequest, RestResponse, long)</code>
+                        - Use <a href="org/apache/juneau/rest/annotation/HookEvent.html#END_CALL"><code>HookEvent.END_CALL</code></a> instead.
+                     <li><code>onPreCall(RestRequest)</code>
+                        - Use <a href="org/apache/juneau/rest/annotation/HookEvent.html#PRE_CALL"><code>HookEvent.PRE_CALL</code></a> instead.
+                     <li><code>onPostCall(RestRequest, RestResponse)</code>
+                        - Use <a href="org/apache/juneau/rest/annotation/HookEvent.html#POST_CALL"><code>HookEvent.POST_CALL</code></a> instead.
+                  </ul>    
+            </ul>
+         <li>
             Simplified <a href="org/apache/juneau/rest/widget/MenuItemWidget.html" title="class in org.apache.juneau.rest.widget"><code>MenuItemWidget</code></a>.
             <br>Exposes an abstract method <a href="org/apache/juneau/rest/widget/MenuItemWidget.html#getContent-org.apache.juneau.rest.RestRequest-"><code>MenuItemWidget.getContent(RestRequest)</code></a> that
             can return raw HTML via readers or char-sequences, or any other object (such as HTML5 beans) that will
@@ -7310,6 +7329,11 @@
             </ul>
          <li>
             New tooltip template: <a href="org/apache/juneau/rest/widget/Tooltip.html" title="class in org.apache.juneau.rest.widget"><code>Tooltip</code></a>
+         <li>
+            New dark theme:
+            <br><img src='doc-files/ReleaseNotes_632_DarkStyle.png'>
+         <li>
+            Stylesheet selection now stored in HTTP session when passed in via <code>?stylesheet</code> query parameter.
       </ul>
 
       <h6 class='topic'>org.apache.juneau.rest.microservice</h6>
@@ -7320,7 +7344,6 @@
                <li><a href="org/apache/juneau/microservice/RestMicroservice.html#addServlet-javax.servlet.Servlet-java.lang.String-"><code>addServlet(Servlet,String)</code></a>
                <li><a href="org/apache/juneau/microservice/RestMicroservice.html#addServletAttribute-java.lang.String-java.lang.Object-"><code>addServletAttribute(String,Object)</code></a>
                <li><a href="org/apache/juneau/microservice/RestMicroservice.html#getServer--"><code>getServer()</code></a>
-               <li><a href="org/apache/juneau/microservice/RestMicroservice.html#getServletContextHandler--"><code>getServletContextHandler()</code></a>
             </ul>
       </ul>
 
@@ -8075,7 +8098,7 @@
             The <a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> class now has the following initialization method that allows you to override
             the config settings define via annotations:
             <ul>
-               <li><a href="org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-"><code>RestServlet.init(RestConfig)</code></a> - A modifiable configuration of a resource.
+               <li><code><del>RestServlet.init(RestConfig)</del></code> - A modifiable configuration of a resource.
             </ul>
             Non-<code>RestServlet</code> classes must have one of the following to allow it to be instantiated:
             <ul>
@@ -8086,8 +8109,8 @@
             <br>
             Non-<code>RestServlet</code> classes can optionally include the following init methods to gain access to the config and context:
             <ul>
-               <li><code><jk>public</jk> init(RestConfig)</code>
-               <li><code><jk>public</jk> init(RestContext)</code>
+               <li><code><del><jk>public</jk> init(RestConfig)</del></code>
+               <li><code><del><jk>public</jk> init(RestContext)</del></code>
             </ul>
          <li>New annotations added to <a href="org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation"><code>@RestResource</code></a> to allow non-<code>RestServlet</code>
             resources to do the same as subclassing directly from <code>RestServlet</code>:
@@ -9776,7 +9799,7 @@
             methods that only look for parameters in the URL query string to prevent loading and parsing of URL-Encoded form posts.
          <li>New <del><code>@QParam</code></del> and <del><code>@HasQParam</code></del> annotations for accessing query parameters from the URL query string.
          <li><code>&amp;plainText</code> parameter can now specify a false value.
-         <li>Removed properties parameters from <a href="org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-"><code>RestServlet.onPreCall(RestRequest)</code></a> and <a href="org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-"><code>RestServlet.onPostCall(RestRequest,RestResponse)</code></a> methods
+         <li>Removed properties parameters from <code><del>RestServlet.onPreCall(RestRequest)</del></code> and <code><del>RestServlet#onPostCall(RestRequest,RestResponse)</del></code> methods
             since the properties are already accessible through <code>RestRequest.getProperties()</code>.
          <li>Added <a href="org/apache/juneau/uon/UonSerializer.html" title="class in org.apache.juneau.uon"><code>UonSerializer</code></a> and <a href="org/apache/juneau/uon/UonParser.html" title="class in org.apache.juneau.uon"><code>UonParser</code></a> to serializer and parser lists on 
             <a href="org/apache/juneau/rest/RestServletDefault.html" title="class in org.apache.juneau.rest"><code>RestServletDefault</code></a> and <a href="org/apache/juneau/rest/jena/RestServletJenaDefault.html" title="class in org.apache.juneau.rest.jena"><code>RestServletJenaDefault</code></a>.
@@ -10741,8 +10764,8 @@
          <li>
             New methods on <a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a>:
             <ul>
-               <li><a href="org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-"><code>RestServlet.onPreCall(RestRequest)</code></a></li>
-               <li><a href="org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-"><code>RestServlet.onPostCall(RestRequest,RestResponse)</code></a></li>
+               <li><code><del>RestServlet.onPreCall(RestRequest)</del></code></li>
+               <li><code><del>RestServlet.onPostCall(RestRequest,RestResponse)</del></code></li>
             </ul>
          </li>
          <li>
@@ -10817,7 +10840,7 @@
       </p>
       <ul class='spaced-list'>
          <li>     
-            Juno-Wink integration components that have been requested my many for a long time!<br>
+            Juno-Wink integration components that have been requested by many for a long time!<br>
             Refer to <a class='doclink' href='org/apache/juneau/rest/jaxrs/package-summary.html#TOC'>org.apache.juneau.rest.jaxrs</a> for information.
          </li>
          <li>
@@ -11063,7 +11086,7 @@
          <li>New <js>"?noTrace"</js> URL parameter to prevent stack traces from being logged (for JUnit testing of error conditions).</li>
          <li>New <code>RestServletProperties.REST_useStackTraceHashes</code> property to prevent the same stack trace from being logged multiple times.</li>
          <li>New <code>RestServletProperties.REST_renderResponseStackTraces</code> property for preventing stack traces in responses for security reasons.</li>
-         <li>New overridable <code>RestServlet.onError(HttpServletRequest,HttpServletResponse,RestException,boolean)</code> and <a href="org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-"><code>RestServlet.onSuccess(RestRequest,RestResponse,long)</code></a> methods for plugging in your own logging and peformance monitoring.</li>
+         <li>New overridable <code>RestServlet.onError(HttpServletRequest,HttpServletResponse,RestException,boolean)</code> and <code><del>RestServlet.onSuccess(RestRequest,RestResponse,long)</del></code> methods for plugging in your own logging and peformance monitoring.</li>
          <li>Eliminated <code>RestServlet.getInitParams()</code> method, since it's now redundant with <a href="org/apache/juneau/rest/RestServlet.html#getProperties--"><code>RestServlet.getProperties()</code></a>.</li>
          <li>Header parameters passed as URL parameters are now case-insensitive.</li>       
       </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/overview-tree.html b/content/site/apidocs/overview-tree.html
index 84fcbac..2e8b9f8 100644
--- a/content/site/apidocs/overview-tree.html
+++ b/content/site/apidocs/overview-tree.html
@@ -604,7 +604,7 @@
 </li>
 <li type="circle">javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true" title="class or interface in javax.servlet"><span class="typeNameLink">GenericServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>)
 <ul>
-<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestServlet</span></a>
 <ul>
@@ -1456,6 +1456,7 @@
 <li type="circle">org.apache.juneau.jena.annotation.<a href="org/apache/juneau/jena/annotation/Rdf.html" title="annotation in org.apache.juneau.jena.annotation"><span class="typeNameLink">Rdf</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestResource</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/RestMethod.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestMethod</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestHook</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/Response.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Response</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/ResourceSwagger.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">ResourceSwagger</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/Query.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Query</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
@@ -1494,6 +1495,7 @@
 <li type="circle">org.apache.juneau.xml.annotation.<a href="org/apache/juneau/xml/annotation/XmlFormat.html" title="enum in org.apache.juneau.xml.annotation"><span class="typeNameLink">XmlFormat</span></a></li>
 <li type="circle">org.apache.juneau.jena.<a href="org/apache/juneau/jena/RdfCollectionFormat.html" title="enum in org.apache.juneau.jena"><span class="typeNameLink">RdfCollectionFormat</span></a></li>
 <li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Inherit</span></a></li>
+<li type="circle">org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">HookEvent</span></a></li>
 <li type="circle">org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestParamType.html" title="enum in org.apache.juneau.rest"><span class="typeNameLink">RestParamType</span></a></li>
 <li type="circle">org.apache.juneau.rest.client.<a href="org/apache/juneau/rest/client/SSLOpts.CertValidate.html" title="enum in org.apache.juneau.rest.client"><span class="typeNameLink">SSLOpts.CertValidate</span></a></li>
 <li type="circle">org.apache.juneau.rest.client.<a href="org/apache/juneau/rest/client/SSLOpts.HostVerify.html" title="enum in org.apache.juneau.rest.client"><span class="typeNameLink">SSLOpts.HostVerify</span></a></li>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html b/content/site/apidocs/src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html
index 3315ef7..c453321 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html
@@ -33,7 +33,7 @@
 <span class="sourceLineNo">025</span><a name="line.25"></a>
 <span class="sourceLineNo">026</span>   private final boolean asXml, noTables, noTableHeaders, asPlainText;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>   private final HtmlRender render;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>   private final String link;<a name="line.28"></a>
+<span class="sourceLineNo">028</span>   private final String link, anchorText;<a name="line.28"></a>
 <span class="sourceLineNo">029</span><a name="line.29"></a>
 <span class="sourceLineNo">030</span>   /**<a name="line.30"></a>
 <span class="sourceLineNo">031</span>    * Constructor.<a name="line.31"></a>
@@ -57,97 +57,112 @@
 <span class="sourceLineNo">049</span>      this.asPlainText = b.asPlainText;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>      this.render = ClassUtils.newInstance(HtmlRender.class, b.render);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>      this.link = b.link;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   }<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>   private static class Builder {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>      boolean asXml, noTables, noTableHeaders, asPlainText;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      Class&lt;? extends HtmlRender&gt; render = HtmlRender.class;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      String link;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>      void findHtmlInfo(Html html) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>         if (html == null)<a name="line.60"></a>
-<span class="sourceLineNo">061</span>            return;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>         if (html.asXml())<a name="line.62"></a>
-<span class="sourceLineNo">063</span>            asXml = html.asXml();<a name="line.63"></a>
-<span class="sourceLineNo">064</span>         if (html.noTables())<a name="line.64"></a>
-<span class="sourceLineNo">065</span>            noTables = html.noTables();<a name="line.65"></a>
-<span class="sourceLineNo">066</span>         if (html.noTableHeaders())<a name="line.66"></a>
-<span class="sourceLineNo">067</span>            noTableHeaders = html.noTableHeaders();<a name="line.67"></a>
-<span class="sourceLineNo">068</span>         if (html.asPlainText())<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            asPlainText = html.asPlainText();<a name="line.69"></a>
-<span class="sourceLineNo">070</span>         if (html.render() != HtmlRender.class)<a name="line.70"></a>
-<span class="sourceLineNo">071</span>            render = html.render();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>         if (! html.link().isEmpty())<a name="line.72"></a>
-<span class="sourceLineNo">073</span>            link = html.link();<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>   /**<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    * Returns whether this bean property should be serialized as XML instead of HTML.<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    *<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#asXml()} is &lt;jk&gt;true&lt;/jk&gt;.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   protected boolean isAsXml() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      return asXml;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>   /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * Returns whether this bean property should be serialized as plain text instead of HTML.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * @return<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    *    &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#asPlainText()} is<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    *    &lt;jk&gt;true&lt;/jk&gt;.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   protected boolean isAsPlainText() {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      return asPlainText;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>   /**<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    * Returns whether this bean property should not be serialized as an HTML table.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    *<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    * @return<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    *    &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#noTables()} is<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    *    &lt;jk&gt;true&lt;/jk&gt;.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    */<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   protected boolean isNoTables() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      return noTables;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>   /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * Returns whether this bean property should not include table headers when serialized as an HTML table.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    *<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    * @return<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    *    &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#noTableHeaders()} is<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    *    &lt;jk&gt;true&lt;/jk&gt;.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   public boolean isNoTableHeaders() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      return noTableHeaders;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>   /**<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    * Returns the render class for rendering the style and contents of this property value in HTML.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    *<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    * &lt;p&gt;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * This value is specified via the {@link Html#render()} annotation.<a name="line.123"></a>
+<span class="sourceLineNo">052</span>      this.anchorText = b.anchorText;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>   private static class Builder {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      boolean asXml, noTables, noTableHeaders, asPlainText;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      Class&lt;? extends HtmlRender&gt; render = HtmlRender.class;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      String link, anchorText;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>      void findHtmlInfo(Html html) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>         if (html == null)<a name="line.61"></a>
+<span class="sourceLineNo">062</span>            return;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>         if (html.asXml())<a name="line.63"></a>
+<span class="sourceLineNo">064</span>            asXml = html.asXml();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>         if (html.noTables())<a name="line.65"></a>
+<span class="sourceLineNo">066</span>            noTables = html.noTables();<a name="line.66"></a>
+<span class="sourceLineNo">067</span>         if (html.noTableHeaders())<a name="line.67"></a>
+<span class="sourceLineNo">068</span>            noTableHeaders = html.noTableHeaders();<a name="line.68"></a>
+<span class="sourceLineNo">069</span>         if (html.asPlainText())<a name="line.69"></a>
+<span class="sourceLineNo">070</span>            asPlainText = html.asPlainText();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>         if (html.render() != HtmlRender.class)<a name="line.71"></a>
+<span class="sourceLineNo">072</span>            render = html.render();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>         if (! html.link().isEmpty())<a name="line.73"></a>
+<span class="sourceLineNo">074</span>            link = html.link();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>         if (! html.anchorText().isEmpty())<a name="line.75"></a>
+<span class="sourceLineNo">076</span>            anchorText = html.anchorText();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>   /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    * Returns whether this bean property should be serialized as XML instead of HTML.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    *<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#asXml()} is &lt;jk&gt;true&lt;/jk&gt;.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   protected boolean isAsXml() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      return asXml;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>   /**<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    * Returns whether this bean property should be serialized as plain text instead of HTML.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    *<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    * @return<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    *    &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#asPlainText()} is<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    *    &lt;jk&gt;true&lt;/jk&gt;.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   protected boolean isAsPlainText() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      return asPlainText;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>   /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * Returns whether this bean property should not be serialized as an HTML table.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    *<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * @return<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    *    &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#noTables()} is<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    *    &lt;jk&gt;true&lt;/jk&gt;.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   protected boolean isNoTables() {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      return noTables;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>   /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    * Returns whether this bean property should not include table headers when serialized as an HTML table.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    *<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    * @return<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    *    &lt;jk&gt;true&lt;/jk&gt; if the the {@link Html} annotation is specified, and {@link Html#noTableHeaders()} is<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    *    &lt;jk&gt;true&lt;/jk&gt;.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   public boolean isNoTableHeaders() {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return noTableHeaders;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>   /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    * Returns the render class for rendering the style and contents of this property value in HTML.<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    * @return The render class, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   public HtmlRender getRender() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return render;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>   /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    * Adds a hyperlink to this value in HTML.<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    * &lt;p&gt;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    * This value is specified via the {@link Html#link()} annotation.<a name="line.135"></a>
+<span class="sourceLineNo">125</span>    * &lt;p&gt;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    * This value is specified via the {@link Html#render()} annotation.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    *<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * @return The render class, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   public HtmlRender getRender() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return render;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>   /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    * Adds a hyperlink to this value in HTML.<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    * @return The link string, or &lt;jk&gt;null&lt;/jk&gt; if not specified.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   public String getLink() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return link;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>}<a name="line.142"></a>
+<span class="sourceLineNo">137</span>    * &lt;p&gt;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    * This value is specified via the {@link Html#link()} annotation.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    *<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    * @return The link string, or &lt;jk&gt;null&lt;/jk&gt; if not specified.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   public String getLink() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      return link;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>   /**<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    * Specifies the anchor text for this property.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    * &lt;p&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    * This value is specified via the {@link Html#anchorText()} annotation.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    * @return The link string, or &lt;jk&gt;null&lt;/jk&gt; if not specified.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    */<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   public String getAnchorText() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return anchorText;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>}<a name="line.157"></a>
 
 
 


[06/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestConfig.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestConfig.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestConfig.html
index 6c565b5..1a4ddc5 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestConfig.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestConfig.html
@@ -26,1583 +26,1614 @@
 <span class="sourceLineNo">018</span>import static org.apache.juneau.rest.RestUtils.*;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.io.*;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.*;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import javax.activation.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import javax.servlet.*;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import javax.servlet.http.*;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.juneau.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.juneau.encoders.*;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.encoders.Encoder;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.juneau.html.*;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.juneau.http.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.juneau.ini.*;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.internal.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.juneau.parser.*;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.juneau.rest.annotation.*;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.juneau.rest.response.*;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.juneau.rest.vars.*;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.juneau.rest.widget.*;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.juneau.serializer.*;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.juneau.svl.*;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.juneau.svl.vars.*;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.juneau.utils.*;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * Defines the initial configuration of a &lt;code&gt;RestServlet&lt;/code&gt; or &lt;code&gt;@RestResource&lt;/code&gt; annotated object.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * &lt;p&gt;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * An extension of the {@link ServletConfig} object used during servlet initialization.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * Provides access to the following initialized resources:<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;ul&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *    &lt;li&gt;{@link #getConfigFile()} - The external configuration file for this resource.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *    &lt;li&gt;{@link #getProperties()} - The modifiable configuration properties for this resource.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *    &lt;li&gt;{@link #getVarResolverBuilder()} - The variable resolver for this resource.<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;/ul&gt;<a name="line.56"></a>
-<span class="sourceLineNo">057</span> *<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Methods are provided for overriding or augmenting the information provided by the &lt;ja&gt;@RestResource&lt;/ja&gt; annotation.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * In general, most information provided in the &lt;ja&gt;@RestResource&lt;/ja&gt; annotation can be specified programmatically<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * through calls on this object.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> *<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * &lt;p&gt;<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * To interact with this object, simply implement the following init method in your resource class:<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;p class='bcode'&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *    &lt;jk&gt;public synchronized void&lt;/jk&gt; init(RestConfig config) &lt;jk&gt;throws&lt;/jk&gt; Exception {<a name="line.66"></a>
-<span class="sourceLineNo">067</span> *       config.addPojoSwaps(CalendarSwap.&lt;jsf&gt;RFC2822DTZ&lt;/jsf&gt;.&lt;jk&gt;class&lt;/jk&gt;);<a name="line.67"></a>
-<span class="sourceLineNo">068</span> *       config.setProperty(&lt;jsf&gt;PARSER_debug&lt;/jsf&gt;, &lt;jk&gt;true&lt;/jk&gt;);<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *       &lt;jk&gt;super&lt;/jk&gt;.init(config); &lt;jc&gt;// Make sure this is the last line! (or just leave it out entirely)&lt;/jc&gt;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> *    }<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * &lt;/p&gt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * Note that this method is identical to {@link HttpServlet#init(ServletConfig)} except you get access to<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * this object instead.  Also, this method can throw any exception, not just a {@link ServletException}.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * &lt;p&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * The parent &lt;code&gt;init(RestServletConfig)&lt;/code&gt; method will construct a read-only {@link RestContext} object<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * that contains a snapshot of these settings.  If you call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.init(RestServletConfig)&lt;/code&gt; before<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * you modify this config object, you won't see the changes!<a name="line.80"></a>
-<span class="sourceLineNo">081</span> */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>@SuppressWarnings({"hiding"})<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public class RestConfig implements ServletConfig {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>   final ServletConfig inner;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>   //---------------------------------------------------------------------------<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   // The following fields are meant to be modifiable.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   // They should not be declared final.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   // Read-only snapshots of these will be made in RestServletContext.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   //---------------------------------------------------------------------------<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>   ObjectMap properties;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   ConfigFile configFile;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   VarResolverBuilder varResolverBuilder;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>   List&lt;Class&lt;?&gt;&gt;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      beanFilters = new ArrayList&lt;Class&lt;?&gt;&gt;(),<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      pojoSwaps = new ArrayList&lt;Class&lt;?&gt;&gt;(),<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      paramResolvers = new ArrayList&lt;Class&lt;?&gt;&gt;();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   Class&lt;? extends SerializerListener&gt; serializerListener;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   Class&lt;? extends ParserListener&gt; parserListener;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   SerializerGroupBuilder serializers = new SerializerGroupBuilder();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   ParserGroupBuilder parsers = new ParserGroupBuilder();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   EncoderGroupBuilder encoders = new EncoderGroupBuilder().append(IdentityEncoder.INSTANCE);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   List&lt;Object&gt; converters = new ArrayList&lt;Object&gt;();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   List&lt;Object&gt; guards = new ArrayList&lt;Object&gt;();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   MimetypesFileTypeMap mimeTypes = new ExtendedMimetypesFileTypeMap();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   Map&lt;String,String&gt; defaultRequestHeaders = new TreeMap&lt;String,String&gt;(String.CASE_INSENSITIVE_ORDER);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   Map&lt;String,Object&gt; defaultResponseHeaders = new LinkedHashMap&lt;String,Object&gt;();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   List&lt;Object&gt; responseHandlers = new ArrayList&lt;Object&gt;();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   List&lt;Object&gt; childResources = new ArrayList&lt;Object&gt;();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   List&lt;MediaType&gt; supportedContentTypes, supportedAcceptTypes;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   Object favIcon;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   List&lt;Object&gt; staticFiles;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   RestContext parentContext;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   String path, htmlHeader, htmlNav, htmlAside, htmlFooter, htmlStyle, htmlStylesheet, htmlScript, htmlNoResultsMessage;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   String[] htmlLinks;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   String clientVersionHeader = "X-Client-Version";<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>   Object resourceResolver = RestResourceResolverSimple.class;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   Object logger = RestLogger.Normal.class;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   Object callHandler = RestCallHandler.class;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   Object infoProvider = RestInfoProvider.class;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>   boolean htmlNoWrap;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   Object htmlTemplate = HtmlDocTemplateBasic.class;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>   Class&lt;?&gt; resourceClass;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   List&lt;Class&lt;? extends Widget&gt;&gt; htmlWidgets = new ArrayList&lt;Class&lt;? extends Widget&gt;&gt;();<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>   /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    * Constructor for top-level servlets when using dependency injection.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    *<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    * &lt;p&gt;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    * Work-in-progress.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    *<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    * @param config<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    *    The servlet config object we're extending.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    * @param resourceClass<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    *    The class annotated with the {@link RestResource @RestResource} annotation.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    * @throws ServletException<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    */<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   public RestConfig(ServletConfig config, Class&lt;?&gt; resourceClass) throws ServletException {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      this(config, resourceClass, null);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>   /**<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    * Constructor.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    * @param config The servlet config passed into the servlet by the servlet container.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    * @param resource The class annotated with &lt;ja&gt;@RestResource&lt;/ja&gt;.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    * @throws ServletException Something bad happened.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   RestConfig(ServletConfig config, Class&lt;?&gt; resourceClass, RestContext parentContext) throws ServletException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      this.inner = config;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      this.resourceClass = resourceClass;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      this.parentContext = parentContext;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      this.resourceResolver = parentContext == null ? RestResourceResolverSimple.class : parentContext.getResourceResolver();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      try {<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>         ConfigFileBuilder cfb = new ConfigFileBuilder();<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>         properties = new ObjectMap();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>         configFile = cfb.build();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>         varResolverBuilder = new VarResolverBuilder()<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            .vars(<a name="line.167"></a>
-<span class="sourceLineNo">168</span>               SystemPropertiesVar.class,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>               EnvVariablesVar.class,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>               ConfigFileVar.class,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>               IfVar.class,<a name="line.171"></a>
-<span class="sourceLineNo">172</span>               SwitchVar.class<a name="line.172"></a>
-<span class="sourceLineNo">173</span>            );<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>         VarResolver vr = varResolverBuilder.build();<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>         Map&lt;Class&lt;?&gt;,RestResource&gt; restResourceAnnotationsParentFirst = findAnnotationsMapParentFirst(RestResource.class, resourceClass);<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>         // Find our config file.  It's the last non-empty @RestResource.config().<a name="line.179"></a>
-<span class="sourceLineNo">180</span>         String configPath = "";<a name="line.180"></a>
-<span class="sourceLineNo">181</span>         for (RestResource r : restResourceAnnotationsParentFirst.values())<a name="line.181"></a>
-<span class="sourceLineNo">182</span>            if (! r.config().isEmpty())<a name="line.182"></a>
-<span class="sourceLineNo">183</span>               configPath = r.config();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         String cf = vr.resolve(configPath);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         if (! cf.isEmpty())<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            configFile = cfb.build(cf);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>         configFile = configFile.getResolving(vr);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>         // Add our config file to the variable resolver.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>         varResolverBuilder.contextObject(ConfigFileVar.SESSION_config, configFile);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>         vr = varResolverBuilder.build();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>         // Add the servlet init parameters to our properties.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>         for (Enumeration&lt;String&gt; ep = config.getInitParameterNames(); ep.hasMoreElements();) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            String p = ep.nextElement();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>            String initParam = config.getInitParameter(p);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>            properties.put(vr.resolve(p), vr.resolve(initParam));<a name="line.197"></a>
-<span class="sourceLineNo">198</span>         }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>         // Load stuff from parent-to-child order.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>         // This allows child settings to overwrite parent settings.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>         for (Map.Entry&lt;Class&lt;?&gt;,RestResource&gt; e : restResourceAnnotationsParentFirst.entrySet()) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>            Class&lt;?&gt; c = e.getKey();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>            RestResource r = e.getValue();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>            for (Property p : r.properties())<a name="line.205"></a>
-<span class="sourceLineNo">206</span>               properties.append(vr.resolve(p.name()), vr.resolve(p.value()));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>            for (String p : r.flags())<a name="line.207"></a>
-<span class="sourceLineNo">208</span>               properties.append(p, true);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>            addSerializers(r.serializers());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            addParsers(r.parsers());<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            addEncoders(r.encoders());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            addDefaultRequestHeaders(r.defaultRequestHeaders());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>            addDefaultResponseHeaders(r.defaultResponseHeaders());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>            addResponseHandlers(r.responseHandlers());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>            addConverters(r.converters());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>            addGuards(reverse(r.guards()));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            addChildResources(r.children());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            addBeanFilters(r.beanFilters());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>            addPojoSwaps(r.pojoSwaps());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            addParamResolvers(r.paramResolvers());<a name="line.220"></a>
-<span class="sourceLineNo">221</span>            serializerListener(r.serializerListener());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>            parserListener(r.parserListener());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>            if (! r.favicon().isEmpty())<a name="line.223"></a>
-<span class="sourceLineNo">224</span>               setFavIcon(c, r.favicon());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>            if (! r.staticFiles().isEmpty())<a name="line.225"></a>
-<span class="sourceLineNo">226</span>               addStaticFiles(c, r.staticFiles());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            if (! r.path().isEmpty())<a name="line.227"></a>
-<span class="sourceLineNo">228</span>               setPath(r.path());<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            if (! r.clientVersionHeader().isEmpty())<a name="line.229"></a>
-<span class="sourceLineNo">230</span>               setClientVersionHeader(r.clientVersionHeader());<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>            if (r.resourceResolver() != RestResourceResolver.class)<a name="line.232"></a>
-<span class="sourceLineNo">233</span>               setResourceResolver(r.resourceResolver());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>            if (r.logger() != RestLogger.Normal.class)<a name="line.234"></a>
-<span class="sourceLineNo">235</span>               setLogger(r.logger());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            if (r.callHandler() != RestCallHandler.class)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>               setCallHandler(r.callHandler());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            if (r.infoProvider() != RestInfoProvider.class)<a name="line.238"></a>
-<span class="sourceLineNo">239</span>               setInfoProvider(r.infoProvider());<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>            HtmlDoc hd = r.htmldoc();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>            for (Class&lt;? extends Widget&gt; cw : hd.widgets())<a name="line.242"></a>
-<span class="sourceLineNo">243</span>               addHtmlWidget(cw);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            setHtmlHeader(resolveNewlineSeparatedAnnotation(hd.header(), htmlHeader));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            setHtmlNav(resolveNewlineSeparatedAnnotation(hd.nav(), htmlNav));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            setHtmlAside(resolveNewlineSeparatedAnnotation(hd.aside(), htmlAside));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            setHtmlFooter(resolveNewlineSeparatedAnnotation(hd.footer(), htmlFooter));<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            setHtmlStyle(resolveNewlineSeparatedAnnotation(hd.style(), htmlStyle));<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            setHtmlScript(resolveNewlineSeparatedAnnotation(hd.script(), htmlScript));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>            setHtmlLinks(resolveLinks(hd.links(), htmlLinks));<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>            if (! hd.stylesheet().isEmpty())<a name="line.252"></a>
-<span class="sourceLineNo">253</span>               setHtmlStylesheet(hd.stylesheet());<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            if (! hd.noResultsMessage().isEmpty())<a name="line.254"></a>
-<span class="sourceLineNo">255</span>               setHtmlNoResultsMessage(hd.noResultsMessage());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            if (hd.nowrap())<a name="line.256"></a>
-<span class="sourceLineNo">257</span>               setHtmlNoWrap(true);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            if (hd.template() != HtmlDocTemplate.class)<a name="line.258"></a>
-<span class="sourceLineNo">259</span>               setHtmlTemplate(hd.template());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>         }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>         addResponseHandlers(<a name="line.262"></a>
-<span class="sourceLineNo">263</span>            StreamableHandler.class,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            WritableHandler.class,<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            ReaderHandler.class,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>            InputStreamHandler.class,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            RedirectHandler.class,<a name="line.267"></a>
-<span class="sourceLineNo">268</span>            DefaultHandler.class<a name="line.268"></a>
-<span class="sourceLineNo">269</span>         );<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (Exception e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>         throw new ServletException(e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>   /**<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    * Adds the specified {@link Var} classes to this config.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    *<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    * &lt;p&gt;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    * These variables affect the variable resolver returned by {@link RestRequest#getVarResolverSession()} which is<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    * used to resolve string variables of the form &lt;js&gt;"$X{...}"&lt;/js&gt;.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    *<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    * &lt;p&gt;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    * By default, this config includes the following variables:<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    * &lt;ul&gt;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    *    &lt;li&gt;{@link SystemPropertiesVar}<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    *    &lt;li&gt;{@link EnvVariablesVar}<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    *    &lt;li&gt;{@link ConfigFileVar}<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    *    &lt;li&gt;{@link IfVar}<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    *    &lt;li&gt;{@link SwitchVar}<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    * &lt;/ul&gt;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    *<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    * &lt;p&gt;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    * Later during the construction of {@link RestContext}, we add the following variables:<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    * &lt;ul&gt;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    *    &lt;li&gt;{@link LocalizationVar}<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    *    &lt;li&gt;{@link RequestVar}<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    *    &lt;li&gt;{@link SerializedRequestAttrVar}<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    *    &lt;li&gt;{@link ServletInitParamVar}<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    *    &lt;li&gt;{@link UrlVar}<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    *    &lt;li&gt;{@link UrlEncodeVar}<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    *    &lt;li&gt;{@link WidgetVar}<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    * &lt;/ul&gt;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    *<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    * @param vars The {@link Var} classes to add to this config.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    * @return This object (for method chaining).<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   public RestConfig addVars(Class&lt;?&gt;...vars) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      this.varResolverBuilder.vars(vars);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return this;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>   /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    * Adds a var context object to this config.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    * &lt;p&gt;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    * Var context objects are read-only objects associated with the variable resolver for vars that require external<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    * information.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    *<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    * &lt;p&gt;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    * For example, the {@link ConfigFileVar} needs access to this resource's {@link ConfigFile} through the<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    * {@link ConfigFileVar#SESSION_config} object that can be specified as either a session object (temporary) or<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    * context object (permanent).<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    * In this case, we call the following code to add it to the context map:<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    * &lt;p class='bcode'&gt;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    *    config.addVarContextObject(&lt;jsf&gt;SESSION_config&lt;/jsf&gt;, configFile);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    * &lt;/p&gt;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    *<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    * @param name The context object key (i.e. the name that the Var class looks for).<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    * @param object The context object.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    * @return This object (for method chaining).<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    */<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   public RestConfig addVarContextObject(String name, Object object) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.varResolverBuilder.contextObject(name, object);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      return this;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>   /**<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    * Overwrites the default config file with a custom config file.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    *<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    * &lt;p&gt;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    * By default, the config file is determined using the {@link RestResource#config() @RestResource.config()}<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    * annotation.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    * This method allows you to programmatically override it with your own custom config file.<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    *<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    * @param configFile The new config file.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    * @return This object (for method chaining).<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   public RestConfig setConfigFile(ConfigFile configFile) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      this.configFile = configFile;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return this;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>   /**<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    * Sets a property on this resource.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    *<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    * &lt;p&gt;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    * This is the programmatic equivalent to the {@link RestResource#properties()} annotation.<a name="line.358"></a>
+<span class="sourceLineNo">021</span>import java.lang.reflect.Method;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.*;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import javax.activation.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import javax.servlet.*;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import javax.servlet.http.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.encoders.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.encoders.Encoder;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.html.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.http.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.ini.*;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.internal.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.parser.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.juneau.rest.annotation.*;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.juneau.rest.response.*;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.juneau.rest.vars.*;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.juneau.rest.widget.*;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.juneau.serializer.*;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.juneau.svl.*;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.juneau.svl.vars.*;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.juneau.utils.*;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * Defines the initial configuration of a &lt;code&gt;RestServlet&lt;/code&gt; or &lt;code&gt;@RestResource&lt;/code&gt; annotated object.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * An extension of the {@link ServletConfig} object used during servlet initialization.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * &lt;p&gt;<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Provides access to the following initialized resources:<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * &lt;ul&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *    &lt;li&gt;{@link #getConfigFile()} - The external configuration file for this resource.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *    &lt;li&gt;{@link #getProperties()} - The modifiable configuration properties for this resource.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *    &lt;li&gt;{@link #getVarResolverBuilder()} - The variable resolver for this resource.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ul&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * &lt;p&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * Methods are provided for overriding or augmenting the information provided by the &lt;ja&gt;@RestResource&lt;/ja&gt; annotation.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * In general, most information provided in the &lt;ja&gt;@RestResource&lt;/ja&gt; annotation can be specified programmatically<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * through calls on this object.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * To interact with this object, simply implement the following init method in your resource class:<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * &lt;p class='bcode'&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> *    &lt;jk&gt;public synchronized void&lt;/jk&gt; init(RestConfig config) &lt;jk&gt;throws&lt;/jk&gt; Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span> *       config.addPojoSwaps(CalendarSwap.&lt;jsf&gt;RFC2822DTZ&lt;/jsf&gt;.&lt;jk&gt;class&lt;/jk&gt;);<a name="line.68"></a>
+<span class="sourceLineNo">069</span> *       config.setProperty(&lt;jsf&gt;PARSER_debug&lt;/jsf&gt;, &lt;jk&gt;true&lt;/jk&gt;);<a name="line.69"></a>
+<span class="sourceLineNo">070</span> *       &lt;jk&gt;super&lt;/jk&gt;.init(config); &lt;jc&gt;// Make sure this is the last line! (or just leave it out entirely)&lt;/jc&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *    }<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * &lt;/p&gt;<a name="line.72"></a>
+<span class="sourceLineNo">073</span> *<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * &lt;p&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * Note that this method is identical to {@link HttpServlet#init(ServletConfig)} except you get access to<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * this object instead.  Also, this method can throw any exception, not just a {@link ServletException}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> *<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * The parent &lt;code&gt;init(RestServletConfig)&lt;/code&gt; method will construct a read-only {@link RestContext} object<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * that contains a snapshot of these settings.  If you call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.init(RestServletConfig)&lt;/code&gt; before<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * you modify this config object, you won't see the changes!<a name="line.81"></a>
+<span class="sourceLineNo">082</span> */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>@SuppressWarnings({"hiding"})<a name="line.83"></a>
+<span class="sourceLineNo">084</span>public class RestConfig implements ServletConfig {<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>   final ServletConfig inner;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>   //---------------------------------------------------------------------------<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   // The following fields are meant to be modifiable.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   // They should not be declared final.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   // Read-only snapshots of these will be made in RestServletContext.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   //---------------------------------------------------------------------------<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>   ObjectMap properties;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   ConfigFile configFile;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   VarResolverBuilder varResolverBuilder;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>   List&lt;Class&lt;?&gt;&gt;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      beanFilters = new ArrayList&lt;Class&lt;?&gt;&gt;(),<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      pojoSwaps = new ArrayList&lt;Class&lt;?&gt;&gt;(),<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      paramResolvers = new ArrayList&lt;Class&lt;?&gt;&gt;();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   Class&lt;? extends SerializerListener&gt; serializerListener;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   Class&lt;? extends ParserListener&gt; parserListener;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   SerializerGroupBuilder serializers = new SerializerGroupBuilder();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   ParserGroupBuilder parsers = new ParserGroupBuilder();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   EncoderGroupBuilder encoders = new EncoderGroupBuilder().append(IdentityEncoder.INSTANCE);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   List&lt;Object&gt; converters = new ArrayList&lt;Object&gt;();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   List&lt;Object&gt; guards = new ArrayList&lt;Object&gt;();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   MimetypesFileTypeMap mimeTypes = new ExtendedMimetypesFileTypeMap();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   Map&lt;String,String&gt; defaultRequestHeaders = new TreeMap&lt;String,String&gt;(String.CASE_INSENSITIVE_ORDER);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   Map&lt;String,Object&gt; defaultResponseHeaders = new LinkedHashMap&lt;String,Object&gt;();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   List&lt;Object&gt; responseHandlers = new ArrayList&lt;Object&gt;();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   List&lt;Object&gt; childResources = new ArrayList&lt;Object&gt;();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   List&lt;MediaType&gt; supportedContentTypes, supportedAcceptTypes;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   Object favIcon;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   List&lt;Object&gt; staticFiles;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   RestContext parentContext;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   String path, htmlHeader, htmlNav, htmlAside, htmlFooter, htmlStyle, htmlStylesheet, htmlScript, htmlNoResultsMessage;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   String[] htmlLinks;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   String clientVersionHeader = "X-Client-Version";<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>   Object resourceResolver = RestResourceResolverSimple.class;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   Object logger = RestLogger.Normal.class;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   Object callHandler = RestCallHandler.class;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   Object infoProvider = RestInfoProvider.class;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>   boolean htmlNoWrap;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   Object htmlTemplate = HtmlDocTemplateBasic.class;<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>   Class&lt;?&gt; resourceClass;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   List&lt;Class&lt;? extends Widget&gt;&gt; htmlWidgets = new ArrayList&lt;Class&lt;? extends Widget&gt;&gt;();<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>   /**<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    * Constructor for top-level servlets when using dependency injection.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    *<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    * &lt;p&gt;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    * Work-in-progress.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    * @param config<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    *    The servlet config object we're extending.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    * @param resourceClass<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    *    The class annotated with the {@link RestResource @RestResource} annotation.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    * @throws ServletException<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   public RestConfig(ServletConfig config, Class&lt;?&gt; resourceClass) throws ServletException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      this(config, resourceClass, null);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>   /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    * Constructor.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    * @param config The servlet config passed into the servlet by the servlet container.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    * @param resource The class annotated with &lt;ja&gt;@RestResource&lt;/ja&gt;.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    * @throws ServletException Something bad happened.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   RestConfig(ServletConfig config, Class&lt;?&gt; resourceClass, RestContext parentContext) throws ServletException {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      this.inner = config;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      this.resourceClass = resourceClass;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      this.parentContext = parentContext;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      this.resourceResolver = parentContext == null ? RestResourceResolverSimple.class : parentContext.getResourceResolver();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      try {<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>         ConfigFileBuilder cfb = new ConfigFileBuilder();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>         properties = new ObjectMap();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>         configFile = cfb.build();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>         varResolverBuilder = new VarResolverBuilder()<a name="line.167"></a>
+<span class="sourceLineNo">168</span>            .vars(<a name="line.168"></a>
+<span class="sourceLineNo">169</span>               SystemPropertiesVar.class,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>               EnvVariablesVar.class,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>               ConfigFileVar.class,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>               IfVar.class,<a name="line.172"></a>
+<span class="sourceLineNo">173</span>               SwitchVar.class<a name="line.173"></a>
+<span class="sourceLineNo">174</span>            );<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>         VarResolver vr = varResolverBuilder.build();<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>         Map&lt;Class&lt;?&gt;,RestResource&gt; restResourceAnnotationsParentFirst = findAnnotationsMapParentFirst(RestResource.class, resourceClass);<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>         // Find our config file.  It's the last non-empty @RestResource.config().<a name="line.180"></a>
+<span class="sourceLineNo">181</span>         String configPath = "";<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         for (RestResource r : restResourceAnnotationsParentFirst.values())<a name="line.182"></a>
+<span class="sourceLineNo">183</span>            if (! r.config().isEmpty())<a name="line.183"></a>
+<span class="sourceLineNo">184</span>               configPath = r.config();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         String cf = vr.resolve(configPath);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         if (! cf.isEmpty())<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            configFile = cfb.build(cf);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>         configFile = configFile.getResolving(vr);<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>         // Add our config file to the variable resolver.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>         varResolverBuilder.contextObject(ConfigFileVar.SESSION_config, configFile);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>         vr = varResolverBuilder.build();<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>         // Add the servlet init parameters to our properties.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>         for (Enumeration&lt;String&gt; ep = config.getInitParameterNames(); ep.hasMoreElements();) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            String p = ep.nextElement();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>            String initParam = config.getInitParameter(p);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>            properties.put(vr.resolve(p), vr.resolve(initParam));<a name="line.198"></a>
+<span class="sourceLineNo">199</span>         }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>         // Load stuff from parent-to-child order.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>         // This allows child settings to overwrite parent settings.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>         for (Map.Entry&lt;Class&lt;?&gt;,RestResource&gt; e : restResourceAnnotationsParentFirst.entrySet()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>            Class&lt;?&gt; c = e.getKey();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            RestResource r = e.getValue();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>            for (Property p : r.properties())<a name="line.206"></a>
+<span class="sourceLineNo">207</span>               properties.append(vr.resolve(p.name()), vr.resolve(p.value()));<a name="line.207"></a>
+<span class="sourceLineNo">208</span>            for (String p : r.flags())<a name="line.208"></a>
+<span class="sourceLineNo">209</span>               properties.append(p, true);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            addSerializers(r.serializers());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>            addParsers(r.parsers());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            addEncoders(r.encoders());<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            addDefaultRequestHeaders(r.defaultRequestHeaders());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>            addDefaultResponseHeaders(r.defaultResponseHeaders());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            addResponseHandlers(r.responseHandlers());<a name="line.215"></a>
+<span class="sourceLineNo">216</span>            addConverters(r.converters());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            addGuards(reverse(r.guards()));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>            addChildResources(r.children());<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            addBeanFilters(r.beanFilters());<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            addPojoSwaps(r.pojoSwaps());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            addParamResolvers(r.paramResolvers());<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            serializerListener(r.serializerListener());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            parserListener(r.parserListener());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>            if (! r.favicon().isEmpty())<a name="line.224"></a>
+<span class="sourceLineNo">225</span>               setFavIcon(c, r.favicon());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>            if (! r.staticFiles().isEmpty())<a name="line.226"></a>
+<span class="sourceLineNo">227</span>               addStaticFiles(c, r.staticFiles());<a name="line.227"></a>
+<span class="sourceLineNo">228</span>            if (! r.path().isEmpty())<a name="line.228"></a>
+<span class="sourceLineNo">229</span>               setPath(r.path());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>            if (! r.clientVersionHeader().isEmpty())<a name="line.230"></a>
+<span class="sourceLineNo">231</span>               setClientVersionHeader(r.clientVersionHeader());<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>            if (r.resourceResolver() != RestResourceResolver.class)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>               setResourceResolver(r.resourceResolver());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>            if (r.logger() != RestLogger.Normal.class)<a name="line.235"></a>
+<span class="sourceLineNo">236</span>               setLogger(r.logger());<a name="line.236"></a>
+<span class="sourceLineNo">237</span>            if (r.callHandler() != RestCallHandler.class)<a name="line.237"></a>
+<span class="sourceLineNo">238</span>               setCallHandler(r.callHandler());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            if (r.infoProvider() != RestInfoProvider.class)<a name="line.239"></a>
+<span class="sourceLineNo">240</span>               setInfoProvider(r.infoProvider());<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>            HtmlDoc hd = r.htmldoc();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>            for (Class&lt;? extends Widget&gt; cw : hd.widgets())<a name="line.243"></a>
+<span class="sourceLineNo">244</span>               addHtmlWidget(cw);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            setHtmlHeader(resolveNewlineSeparatedAnnotation(hd.header(), htmlHeader));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>            setHtmlNav(resolveNewlineSeparatedAnnotation(hd.nav(), htmlNav));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            setHtmlAside(resolveNewlineSeparatedAnnotation(hd.aside(), htmlAside));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            setHtmlFooter(resolveNewlineSeparatedAnnotation(hd.footer(), htmlFooter));<a name="line.248"></a>
+<span class="sourceLineNo">249</span>            setHtmlStyle(resolveNewlineSeparatedAnnotation(hd.style(), htmlStyle));<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            setHtmlScript(resolveNewlineSeparatedAnnotation(hd.script(), htmlScript));<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            setHtmlLinks(resolveLinks(hd.links(), htmlLinks));<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>            if (! hd.stylesheet().isEmpty())<a name="line.253"></a>
+<span class="sourceLineNo">254</span>               setHtmlStylesheet(hd.stylesheet());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            if (! hd.noResultsMessage().isEmpty())<a name="line.255"></a>
+<span class="sourceLineNo">256</span>               setHtmlNoResultsMessage(hd.noResultsMessage());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>            if (hd.nowrap())<a name="line.257"></a>
+<span class="sourceLineNo">258</span>               setHtmlNoWrap(true);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            if (hd.template() != HtmlDocTemplate.class)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>               setHtmlTemplate(hd.template());<a name="line.260"></a>
+<span class="sourceLineNo">261</span>         }<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>         addResponseHandlers(<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            StreamableHandler.class,<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            WritableHandler.class,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            ReaderHandler.class,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>            InputStreamHandler.class,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            RedirectHandler.class,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>            DefaultHandler.class<a name="line.269"></a>
+<span class="sourceLineNo">270</span>         );<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      } catch (Exception e) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>         throw new ServletException(e);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>   /*<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    * Calls all @RestHook(INIT) methods on the specified resource object.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   void init(Object resource) throws ServletException {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Map&lt;String,Method&gt; map = new LinkedHashMap&lt;String,Method&gt;();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      for (Method m : ClassUtils.getAllMethods(this.resourceClass, true)) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         if (m.isAnnotationPresent(RestHook.class) &amp;&amp; m.getAnnotation(RestHook.class).value() == HookEvent.INIT) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>            String sig = ClassUtils.getMethodSignature(m);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            if (! map.containsKey(sig))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>               map.put(sig, m);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>         }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      for (Method m : map.values()) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>         ClassUtils.assertArgsOfType(m, RestConfig.class, ServletConfig.class);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>         Class&lt;?&gt;[] argTypes = m.getParameterTypes();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>         Object[] args = new Object[argTypes.length];<a name="line.292"></a>
+<span class="sourceLineNo">293</span>         for (int i = 0; i &lt; args.length; i++) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            if (argTypes[i] == RestConfig.class)<a name="line.294"></a>
+<span class="sourceLineNo">295</span>               args[i] = this;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            else<a name="line.296"></a>
+<span class="sourceLineNo">297</span>               args[i] = this.inner;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>         }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>         try {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>            m.invoke(resource, args);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>         } catch (Exception e) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>            throw new RestServletException("Exception thrown from @RestHook(INIT) method {0}.", m).initCause(e);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>         }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>   /**<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    * Adds the specified {@link Var} classes to this config.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    * &lt;p&gt;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    * These variables affect the variable resolver returned by {@link RestRequest#getVarResolverSession()} which is<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    * used to resolve string variables of the form &lt;js&gt;"$X{...}"&lt;/js&gt;.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    *<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    * &lt;p&gt;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    * By default, this config includes the following variables:<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    * &lt;ul&gt;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    *    &lt;li&gt;{@link SystemPropertiesVar}<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    *    &lt;li&gt;{@link EnvVariablesVar}<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    *    &lt;li&gt;{@link ConfigFileVar}<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    *    &lt;li&gt;{@link IfVar}<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    *    &lt;li&gt;{@link SwitchVar}<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    * &lt;/ul&gt;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    *<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    * &lt;p&gt;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    * Later during the construction of {@link RestContext}, we add the following variables:<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    * &lt;ul&gt;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    *    &lt;li&gt;{@link LocalizationVar}<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    *    &lt;li&gt;{@link RequestVar}<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    *    &lt;li&gt;{@link SerializedRequestAttrVar}<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    *    &lt;li&gt;{@link ServletInitParamVar}<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    *    &lt;li&gt;{@link UrlVar}<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    *    &lt;li&gt;{@link UrlEncodeVar}<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    *    &lt;li&gt;{@link WidgetVar}<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    * &lt;/ul&gt;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    *<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    * @param vars The {@link Var} classes to add to this config.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    * @return This object (for method chaining).<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   public RestConfig addVars(Class&lt;?&gt;...vars) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.varResolverBuilder.vars(vars);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return this;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>   /**<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    * Adds a var context object to this config.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    *<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    * &lt;p&gt;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    * Var context objects are read-only objects associated with the variable resolver for vars that require external<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    * information.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    *<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    * &lt;p&gt;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    * For example, the {@link ConfigFileVar} needs access to this resource's {@link ConfigFile} through the<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    * {@link ConfigFileVar#SESSION_config} object that can be specified as either a session object (temporary) or<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    * context object (permanent).<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    * In this case, we call the following code to add it to the context map:<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    * &lt;p class='bcode'&gt;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    *    config.addVarContextObject(&lt;jsf&gt;SESSION_config&lt;/jsf&gt;, configFile);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    * &lt;/p&gt;<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    *<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    * @param key The property name.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    * @param value The property value.<a name="line.361"></a>
+<span class="sourceLineNo">360</span>    * @param name The context object key (i.e. the name that the Var class looks for).<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    * @param object The context object.<a name="line.361"></a>
 <span class="sourceLineNo">362</span>    * @return This object (for method chaining).<a name="line.362"></a>
 <span class="sourceLineNo">363</span>    */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   public RestConfig setProperty(String key, Object value) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.properties.put(key, value);<a name="line.365"></a>
+<span class="sourceLineNo">364</span>   public RestConfig addVarContextObject(String name, Object object) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      this.varResolverBuilder.contextObject(name, object);<a name="line.365"></a>
 <span class="sourceLineNo">366</span>      return this;<a name="line.366"></a>
 <span class="sourceLineNo">367</span>   }<a name="line.367"></a>
 <span class="sourceLineNo">368</span><a name="line.368"></a>
 <span class="sourceLineNo">369</span>   /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    * Sets multiple properties on this resource.<a name="line.370"></a>
+<span class="sourceLineNo">370</span>    * Overwrites the default config file with a custom config file.<a name="line.370"></a>
 <span class="sourceLineNo">371</span>    *<a name="line.371"></a>
 <span class="sourceLineNo">372</span>    * &lt;p&gt;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    * This is the programmatic equivalent to the {@link RestResource#properties() @RestResource.properties()} annotation.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    *<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    * &lt;p&gt;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    * Values in the map are added to the existing properties and are overwritten if duplicates are found.<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    *<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    * @param properties The new properties to add to this config.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    * @return This object (for method chaining).<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   public RestConfig setProperties(Map&lt;String,Object&gt; properties) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.properties.putAll(properties);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      return this;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>   /**<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    * Adds class-level bean filters to this resource.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    *<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    * &lt;p&gt;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    * This is the programmatic equivalent to the {@link RestResource#beanFilters() @RestResource.beanFilters()}<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    * annotation.<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    *<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    * &lt;p&gt;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    * Values are added AFTER those found in the annotation and therefore take precedence over those defined via the<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    * annotation.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    *<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    * @param beanFilters The bean filters to add to this config.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    * @return This object (for method chaining).<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   public RestConfig addBeanFilters(Class&lt;?&gt;...beanFilters) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.beanFilters.addAll(Arrays.asList(beanFilters));<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return this;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>   /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    * Adds class-level pojo swaps to this resource.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    *<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    * &lt;p&gt;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    * This is the programmatic equivalent to the {@link RestResource#pojoSwaps() @RestResource.pojoSwaps()} annotation.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    *<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    * &lt;p&gt;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    * Values are added AFTER those found in the annotation and therefore take precedence over those defined via the<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    * annotation.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    *<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    * @param pojoSwaps The pojo swaps to add to this config.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    * @return This object (for method chaining).<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   public RestConfig addPojoSwaps(Class&lt;?&gt;...pojoSwaps) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      this.pojoSwaps.addAll(Arrays.asList(pojoSwaps));<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      return this;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>   /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    * Specifies the serializer listener class to use for listening to non-fatal serialization errors.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    *<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    * &lt;p&gt;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    * This is the programmatic equivalent to the<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    * {@link RestResource#serializerListener() @RestResource.serializerListener()} annotation.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    *<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    * @param listener The listener to add to this config.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    * @return This object (for method chaining).<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   public RestConfig serializerListener(Class&lt;? extends SerializerListener&gt; listener) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      if (listener != SerializerListener.class)<a name="line.434"></a>
-<span class="sourceLineNo">435</span>         this.serializerListener = listener;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      return this;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>   /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    * Specifies the parser listener class to use for listening to non-fatal parse errors.<a name="line.440"></a>
+<span class="sourceLineNo">373</span>    * By default, the config file is determined using the {@link RestResource#config() @RestResource.config()}<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    * annotation.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    * This method allows you to programmatically override it with your own custom config file.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    *<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    * @param configFile The new config file.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    * @return This object (for method chaining).<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   public RestConfig setConfigFile(ConfigFile configFile) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      this.configFile = configFile;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return this;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>   /**<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    * Sets a property on this resource.<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    *<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    * &lt;p&gt;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    * This is the programmatic equivalent to the {@link RestResource#properties()} annotation.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    *<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    * @param key The property name.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    * @param value The property value.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    * @return This object (for method chaining).<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    */<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   public RestConfig setProperty(String key, Object value) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      this.properties.put(key, value);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return this;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>   /**<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    * Sets multiple properties on this resource.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    *<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    * &lt;p&gt;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    * This is the programmatic equivalent to the {@link RestResource#properties() @RestResource.properties()} annotation.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    *<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    * &lt;p&gt;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    * Values in the map are added to the existing properties and are overwritten if duplicates are found.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    *<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    * @param properties The new properties to add to this config.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    * @return This object (for method chaining).<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    */<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   public RestConfig setProperties(Map&lt;String,Object&gt; properties) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      this.properties.putAll(properties);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      return this;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>   /**<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    * Adds class-level bean filters to this resource.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    *<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    * &lt;p&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    * This is the programmatic equivalent to the {@link RestResource#beanFilters() @RestResource.beanFilters()}<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    * annotation.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    *<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    * &lt;p&gt;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    * Values are added AFTER those found in the annotation and therefore take precedence over those defined via the<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    * annotation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    * @param beanFilters The bean filters to add to this config.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    * @return This object (for method chaining).<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   public RestConfig addBeanFilters(Class&lt;?&gt;...beanFilters) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      this.beanFilters.addAll(Arrays.asList(beanFilters));<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return this;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>   /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    * Adds class-level pojo swaps to this resource.<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    *<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    * This is the programmatic equivalent to the {@link RestResource#pojoSwaps() @RestResource.pojoSwaps()} annotation.<a name="line.440"></a>
 <span class="sourceLineNo">441</span>    *<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    * &lt;p&gt;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    * This is the programmatic equivalent to the<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    * {@link RestResource#parserListener() @RestResource.parserListener()} annotation.<a name="line.444"></a>
+<span class="sourceLineNo">443</span>    * Values are added AFTER those found in the annotation and therefore take precedence over those defined via the<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    * annotation.<a name="line.444"></a>
 <span class="sourceLineNo">445</span>    *<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    * @param listener The listener to add to this config.<a name="line.446"></a>
+<span class="sourceLineNo">446</span>    * @param pojoSwaps The pojo swaps to add to this config.<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    * @return This object (for method chaining).<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   public RestConfig parserListener(Class&lt;? extends ParserListener&gt; listener) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      if (listener != ParserListener.class)<a name="line.450"></a>
-<span class="sourceLineNo">451</span>         this.parserListener = listener;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      return this;<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   }<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>   /**<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    * Adds class-level parameter resolvers to this resource.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    *<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    * &lt;p&gt;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    * This is the programmatic equivalent to the<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    * {@link RestResource#paramResolvers() @RestResource.paramResolvers()} annotation.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    *<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    * @param paramResolvers The parameter resolvers to add to this config.<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    * @return This object (for method chaining).<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    */<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   public RestConfig addParamResolvers(Class&lt;? extends RestParam&gt;...paramResolvers) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.paramResolvers.addAll(Arrays.asList(paramResolvers));<a name="line.466"></a>
+<span class="sourceLineNo">449</span>   public RestConfig addPojoSwaps(Class&lt;?&gt;...pojoSwaps) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.pojoSwaps.addAll(Arrays.asList(pojoSwaps));<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      return this;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>   /**<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  

<TRUNCATED>


[18/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestResponse.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestResponse.html b/content/site/apidocs/org/apache/juneau/rest/RestResponse.html
index 9d9aff1..c17cd6b 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestResponse.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestResponse.html
@@ -390,7 +390,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true" title="class or interface in javax.servlet">ServletResponseWrapper</a></h3>
-<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getBufferSize--" title="class or interface in javax.servlet">getBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getCharacterEncoding--" title="class or interface in javax.servlet">getCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getLocale--" title="class or interface in javax.servlet">getLocale</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getResponse--" title="class or interface in javax.servlet">getResponse</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletR
 esponseWrapper.html?is-external=true#isCommitted--" title="class or interface in javax.servlet">isCommitted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#isWrapperFor-java.lang.Class-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#isWrapperFor-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#reset--" title="class or interface in javax.servlet">reset</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#resetBuffer--" title="class or interface in javax.servlet">resetBuffer</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setBufferSize-int-" titl
 e="class or interface in javax.servlet">setBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setCharacterEncoding-java.lang.String-" title="class or interface in javax.servlet">setCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setContentLength-int-" title="class or interface in javax.servlet">setContentLength</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setContentType-java.lang.String-" title="class or interface in javax.servlet">setContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setLocale-java.util.Locale-" title="class or interface in javax.servlet">setLocale</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setResponse-javax.servlet.Servlet
 Response-" title="class or interface in javax.servlet">setResponse</a></code></li>
+<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getBufferSize--" title="class or interface in javax.servlet">getBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getCharacterEncoding--" title="class or interface in javax.servlet">getCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getLocale--" title="class or interface in javax.servlet">getLocale</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#getResponse--" title="class or interface in javax.servlet">getResponse</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletR
 esponseWrapper.html?is-external=true#isCommitted--" title="class or interface in javax.servlet">isCommitted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#isWrapperFor-java.lang.Class-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#isWrapperFor-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#reset--" title="class or interface in javax.servlet">reset</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#resetBuffer--" title="class or interface in javax.servlet">resetBuffer</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setBufferSize-int-" titl
 e="class or interface in javax.servlet">setBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setCharacterEncoding-java.lang.String-" title="class or interface in javax.servlet">setCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setContentLength-int-" title="class or interface in javax.servlet">setContentLength</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setContentLengthLong-long-" title="class or interface in javax.servlet">setContentLengthLong</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setContentType-java.lang.String-" title="class or interface in javax.servlet">setContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setLocale-java.util.Loc
 ale-" title="class or interface in javax.servlet">setLocale</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponseWrapper.html?is-external=true#setResponse-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">setResponse</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -404,7 +404,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true" title="class or interface in javax.servlet">ServletResponse</a></h3>
-<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getBufferSize--" title="class or interface in javax.servlet">getBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getCharacterEncoding--" title="class or interface in javax.servlet">getCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getLocale--" title="class or interface in javax.servlet">getLocale</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#isCommitted--" title="class or interface in javax.servlet">isCommitted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#reset
 --" title="class or interface in javax.servlet">reset</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#resetBuffer--" title="class or interface in javax.servlet">resetBuffer</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setBufferSize-int-" title="class or interface in javax.servlet">setBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setCharacterEncoding-java.lang.String-" title="class or interface in javax.servlet">setCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setContentLength-int-" title="class or interface in javax.servlet">setContentLength</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setContentType-java.lang.String-" title="class or interface in javax.servlet">setContentType</a
 >, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setLocale-java.util.Locale-" title="class or interface in javax.servlet">setLocale</a></code></li>
+<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getBufferSize--" title="class or interface in javax.servlet">getBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getCharacterEncoding--" title="class or interface in javax.servlet">getCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getLocale--" title="class or interface in javax.servlet">getLocale</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#isCommitted--" title="class or interface in javax.servlet">isCommitted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#reset
 --" title="class or interface in javax.servlet">reset</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#resetBuffer--" title="class or interface in javax.servlet">resetBuffer</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setBufferSize-int-" title="class or interface in javax.servlet">setBufferSize</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setCharacterEncoding-java.lang.String-" title="class or interface in javax.servlet">setCharacterEncoding</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setContentLength-int-" title="class or interface in javax.servlet">setContentLength</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setContentLengthLong-long-" title="class or interface in javax.servlet">setContentLengthLong</a
 >, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setContentType-java.lang.String-" title="class or interface in javax.servlet">setContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#setLocale-java.util.Locale-" title="class or interface in javax.servlet">setLocale</a></code></li>
 </ul>
 </li>
 </ul>
@@ -635,7 +635,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputStream</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletOutputStream.html?is-external=true" title="class or interface in javax.servlet">ServletOutputStream</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.322">getOutputStream</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletOutputStream.html?is-external=true" title="class or interface in javax.servlet">ServletOutputStream</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.330">getOutputStream</a>()
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -653,7 +653,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputStreamCalled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.333">getOutputStreamCalled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.341">getOutputStreamCalled</a>()</pre>
 <div class="block">Returns <jk>true</jk> if <a href="../../../../org/apache/juneau/rest/RestResponse.html#getOutputStream--"><code>getOutputStream()</code></a> has been called.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -667,7 +667,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.345">getWriter</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.353">getWriter</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns the writer to the response body.
 
@@ -690,7 +690,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getDirectWriter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.360">getDirectWriter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contentType)
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.368">getDirectWriter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;contentType)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Convenience method meant to be used when rendering directly to a browser with no buffering.
 
@@ -713,7 +713,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getNegotiatedWriter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.374">getNegotiatedWriter</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.382">getNegotiatedWriter</a>()
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Equivalent to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html?is-external=true#getWriter--" title="class or interface in javax.servlet"><code>ServletResponse.getWriter()</code></a>, except wraps the output stream if an <a href="../../../../org/apache/juneau/encoders/Encoder.html" title="class in org.apache.juneau.encoders"><code>Encoder</code></a> was
  found that matched the <code>Accept-Encoding</code> header and sets the <code>Content-Encoding</code>
@@ -732,7 +732,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMediaType</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.402">getMediaType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.410">getMediaType</a>()</pre>
 <div class="block">Returns the <code>Content-Type</code> header stripped of the charset attribute if present.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -746,7 +746,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>sendRedirect</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.414">sendRedirect</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;uri)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.422">sendRedirect</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;uri)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Redirects to the specified URI.
 
@@ -769,7 +769,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getUrlEncodingSerializer</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/urlencoding/UrlEncodingSerializer.html" title="class in org.apache.juneau.urlencoding">UrlEncodingSerializer</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.426">getUrlEncodingSerializer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/urlencoding/UrlEncodingSerializer.html" title="class in org.apache.juneau.urlencoding">UrlEncodingSerializer</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.434">getUrlEncodingSerializer</a>()</pre>
 <div class="block">Returns the URL-encoding serializer associated with this response.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -783,7 +783,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHeader</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.431">setHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.439">setHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -799,7 +799,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlHeader</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.471">setHtmlHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.479">setHtmlHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML header section contents.
 
  <p>
@@ -839,7 +839,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlLinks</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.508">setHtmlLinks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.516">setHtmlLinks</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;value)</pre>
 <div class="block">Sets the links in the HTML nav section.
 
  <p>
@@ -881,7 +881,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlNav</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.549">setHtmlNav</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.557">setHtmlNav</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML nav section contents.
 
  <p>
@@ -926,7 +926,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlAside</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.584">setHtmlAside</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.592">setHtmlAside</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML aside section contents.
 
  <p>
@@ -965,7 +965,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlFooter</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.619">setHtmlFooter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.627">setHtmlFooter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML footer section contents.
 
  <p>
@@ -1004,7 +1004,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlStyle</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.651">setHtmlStyle</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.659">setHtmlStyle</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML CSS style section contents.
 
  <p>
@@ -1040,7 +1040,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlStylesheet</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.687">setHtmlStylesheet</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.695">setHtmlStylesheet</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the CSS URL in the HTML CSS style section.
 
  <p>
@@ -1080,7 +1080,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlScript</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.719">setHtmlScript</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.727">setHtmlScript</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Sets the HTML script section contents.
 
  <p>
@@ -1116,7 +1116,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlNoWrap</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.733">setHtmlNoWrap</a>(boolean&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.741">setHtmlNoWrap</a>(boolean&nbsp;value)</pre>
 <div class="block">Shorthand method for forcing the rendered HTML content to be no-wrap.
 
  <p>
@@ -1135,7 +1135,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlNoResultsMessage</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.748">setHtmlNoResultsMessage</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.756">setHtmlNoResultsMessage</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Specifies the text to display when serializing an empty array or collection.
 
  <p>
@@ -1155,7 +1155,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlTemplate</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.766">setHtmlTemplate</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&gt;&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.774">setHtmlTemplate</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&gt;&nbsp;value)</pre>
 <div class="block">Specifies the template class to use for rendering the HTML page.
 
  <p>
@@ -1178,7 +1178,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setHtmlTemplate</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.784">setHtmlTemplate</a>(<a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&nbsp;value)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.792">setHtmlTemplate</a>(<a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&nbsp;value)</pre>
 <div class="block">Specifies the template class to use for rendering the HTML page.
 
  <p>
@@ -1201,7 +1201,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockListLast">
 <li class="blockList">
 <h4>flushBuffer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.790">flushBuffer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestResponse.html#line.798">flushBuffer</a>()
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestServlet.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestServlet.html b/content/site/apidocs/org/apache/juneau/rest/RestServlet.html
index 2ed2594..d553ac6 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestServlet.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestServlet.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -206,22 +206,16 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
-<div class="block">Resource initialization method.</div>
-</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a></span>(<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;context)</code>
 <div class="block">Convenience method if you want to perform initialization on your resource after all configuration settings
  have been made.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a></span>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>&nbsp;servletConfig)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a>&nbsp;level,
    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
@@ -229,7 +223,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <div class="block">Convenience method for calling <code>getContext().getLogger().log(level, msg, args);</code></div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a>&nbsp;level,
    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause,
@@ -238,29 +232,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <div class="block">Convenience method for calling <code>getContext().getLogger().log(level, cause, msg, args);</code></div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a></span>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-          <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res)</code>
-<div class="block">Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is
- invoked.</div>
-</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a></span>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req)</code>
-<div class="block">Callback method that gets invoked right before the REST Java method is invoked.</div>
-</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a></span>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-         <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
-         long&nbsp;time)</code>
-<div class="block">Callback method for listening for successful completion of requests.</div>
-</td>
-</tr>
-<tr id="i14" class="altColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></span>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;r1,
        <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;r2)</code>
@@ -338,45 +310,13 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 </dl>
 </li>
 </ul>
-<a name="init-org.apache.juneau.rest.RestConfig-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.99">init</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
-          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">Resource initialization method.
-
- <p>
- Identical to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> except the config object provides access to the external config
- file, configuration properties, and variable resolver defined for this resource.
-
- <p>
- Classes can also use <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true#init--" title="class or interface in javax.servlet"><code>GenericServlet.init()</code></a> and <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--"><code>getServletConfig()</code></a> as well to perform
- initialization.
-
- <p>
- Note that if you override this method, you must first call <code><jk>super</jk>.init(servletConfig)</code>!
-
- <p>
- Resource classes that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can add this method to their class to get access to
- the config object.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>config</code> - The servlet configuration.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code> - Any exception can be thrown to signal an initialization failure.</dd>
-</dl>
-</li>
-</ul>
 <a name="init-org.apache.juneau.rest.RestContext-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.120">init</a>(<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.107">init</a>(<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;context)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Convenience method if you want to perform initialization on your resource after all configuration settings
  have been made.
@@ -400,7 +340,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>service</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.143">service</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;r1,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.131">service</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a>&nbsp;r1,
                     <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponse.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletResponse</a>&nbsp;r2)
              throws <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet">ServletException</a>,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -423,11 +363,11 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getContext</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.181">getContext</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.168">getContext</a>()</pre>
 <div class="block">Returns the read-only context object that contains all the configuration information about this resource.
 
  <p>
- This object is <jk>null</jk> during the call to <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-"><code>init(RestConfig)</code></a> but is populated by the time
+ This object is <jk>null</jk> during the call to <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-"><code>init(ServletConfig)</code></a> but is populated by the time
  <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true#init--" title="class or interface in javax.servlet"><code>GenericServlet.init()</code></a> is called.
 
  <p>
@@ -442,94 +382,13 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 </dl>
 </li>
 </ul>
-<a name="onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>onSuccess</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.202">onSuccess</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-                         <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res,
-                         long&nbsp;time)</pre>
-<div class="block">Callback method for listening for successful completion of requests.
-
- <p>
- Subclasses can override this method for gathering performance statistics.
-
- <p>
- The default implementation does nothing.
-
- <p>
- Resources that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can implement an equivalent method by overriding the
- <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-"><code>RestCallHandler.onSuccess(RestRequest, RestResponse, long)</code></a> method.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>req</code> - The HTTP request.</dd>
-<dd><code>res</code> - The HTTP response.</dd>
-<dd><code>time</code> - The time in milliseconds it took to process the request.</dd>
-</dl>
-</li>
-</ul>
-<a name="onPreCall-org.apache.juneau.rest.RestRequest-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>onPreCall</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.218">onPreCall</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req)
-                  throws <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></pre>
-<div class="block">Callback method that gets invoked right before the REST Java method is invoked.
-
- <p>
- Subclasses can override this method to override request headers or set request-duration properties before the
- Java method is invoked.
-
- <p>
- Resources that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can implement an equivalent method by overriding the
- <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onPreCall-org.apache.juneau.rest.RestRequest-"><code>RestCallHandler.onPreCall(RestRequest)</code></a> method.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>req</code> - The HTTP servlet request object.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></code> - If any error occurs.</dd>
-</dl>
-</li>
-</ul>
-<a name="onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>onPostCall</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.236">onPostCall</a>(<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;req,
-                          <a href="../../../../org/apache/juneau/rest/RestResponse.html" title="class in org.apache.juneau.rest">RestResponse</a>&nbsp;res)
-                   throws <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></pre>
-<div class="block">Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is
- invoked.
-
- <p>
- Subclasses can override this method to override request and response headers, or set/override properties used by
- the serializer.
-
- <p>
- Resources that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can implement an equivalent method by overriding the
- <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-"><code>RestCallHandler.onPostCall(RestRequest,RestResponse)</code></a> method.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>req</code> - The HTTP servlet request object.</dd>
-<dd><code>res</code> - The HTTP servlet response object.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></code> - If any error occurs.</dd>
-</dl>
-</li>
-</ul>
 <a name="log-java.util.logging.Level-java.lang.String-java.lang.Object...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>log</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.245">log</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a>&nbsp;level,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.179">log</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a>&nbsp;level,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Convenience method for calling <code>getContext().getLogger().log(level, msg, args);</code></div>
@@ -547,7 +406,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>log</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.258">log</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a>&nbsp;level,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.192">log</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html?is-external=true" title="class or interface in java.util.logging">Level</a>&nbsp;level,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
@@ -567,7 +426,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getServletConfig</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.270">getServletConfig</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.204">getServletConfig</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#getServletConfig--" title="class or interface in javax.servlet">getServletConfig</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a></code></dd>
@@ -582,7 +441,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>destroy</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.275">destroy</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.209">destroy</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#destroy--" title="class or interface in javax.servlet">destroy</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a></code></dd>
@@ -597,7 +456,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMessages</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.287">getMessages</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.221">getMessages</a>()</pre>
 <div class="block">Convenience method for calling <code>getContext().getMessages();</code></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -613,7 +472,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getProperties</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.297">getProperties</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.231">getProperties</a>()</pre>
 <div class="block">Convenience method for calling <code>getContext().getProperties();</code></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -629,7 +488,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBeanContext</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.307">getBeanContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestServlet.html#line.241">getBeanContext</a>()</pre>
 <div class="block">Convenience method for calling <code>getContext().getBeanContext();</code></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestServletDefault.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestServletDefault.html b/content/site/apidocs/org/apache/juneau/rest/RestServletDefault.html
index 309aa26..abe9d5c 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestServletDefault.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestServletDefault.html
@@ -322,7 +322,7 @@ extends <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="cla
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-jav
 a.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestServletGroupDefault.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestServletGroupDefault.html b/content/site/apidocs/org/apache/juneau/rest/RestServletGroupDefault.html
index f3f5136..df6932b 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestServletGroupDefault.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestServletGroupDefault.html
@@ -205,7 +205,7 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletDefault.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-jav
 a.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/annotation/Header.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/annotation/Header.html b/content/site/apidocs/org/apache/juneau/rest/annotation/Header.html
index 95bd6df..3f4c97d 100644
--- a/content/site/apidocs/org/apache/juneau/rest/annotation/Header.html
+++ b/content/site/apidocs/org/apache/juneau/rest/annotation/Header.html
@@ -43,7 +43,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/juneau/rest/annotation/HasQuery.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/juneau/rest/annotation/HtmlDoc.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/Header.html" target="_top">Frames</a></li>
@@ -247,7 +247,7 @@ public @interface <a href="../../../../../src-html/org/apache/juneau/rest/annota
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/juneau/rest/annotation/HasQuery.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/juneau/rest/annotation/HtmlDoc.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/juneau/rest/annotation/Header.html" target="_top">Frames</a></li>


[04/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestRequest.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestRequest.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestRequest.html
index 107410f..878cd28 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestRequest.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestRequest.html
@@ -133,1080 +133,1083 @@
 <span class="sourceLineNo">125</span><a name="line.125"></a>
 <span class="sourceLineNo">126</span>         method = _method;<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>         stylesheet = getQuery().getString("stylesheet");<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>         headers = new RequestHeaders();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>         for (Enumeration&lt;String&gt; e = getHeaderNames(); e.hasMoreElements();) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>            String name = e.nextElement();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>            headers.put(name, super.getHeaders(name));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>         }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>         body = new RequestBody(this);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>         if (context.isAllowBodyParam()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>            String b = getQuery().getString("body");<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            if (b != null) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>               headers.put("Content-Type", UonSerializer.DEFAULT.getResponseContentType());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>               body.load(b.getBytes(UTF8));<a name="line.142"></a>
-<span class="sourceLineNo">143</span>            }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>         }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>         if (context.isAllowHeaderParams())<a name="line.146"></a>
-<span class="sourceLineNo">147</span>            headers.setQueryParams(queryParams);<a name="line.147"></a>
+<span class="sourceLineNo">128</span>         String _stylesheet = getQuery().getString("stylesheet");<a name="line.128"></a>
+<span class="sourceLineNo">129</span>         if (_stylesheet != null)<a name="line.129"></a>
+<span class="sourceLineNo">130</span>            req.getSession().setAttribute("stylesheet", _stylesheet);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>         stylesheet = (String)req.getSession().getAttribute("stylesheet");<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>         headers = new RequestHeaders();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>         for (Enumeration&lt;String&gt; e = getHeaderNames(); e.hasMoreElements();) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            String name = e.nextElement();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            headers.put(name, super.getHeaders(name));<a name="line.136"></a>
+<span class="sourceLineNo">137</span>         }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>         body = new RequestBody(this);<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>         if (context.isAllowBodyParam()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>            String b = getQuery().getString("body");<a name="line.142"></a>
+<span class="sourceLineNo">143</span>            if (b != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>               headers.put("Content-Type", UonSerializer.DEFAULT.getResponseContentType());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>               body.load(b.getBytes(UTF8));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>         }<a name="line.147"></a>
 <span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>         debug = "true".equals(getQuery().getString("debug", "false")) || "true".equals(getHeaders().getString("Debug", "false"));<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>         this.pathParams = new RequestPathMatch();<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>      } catch (RestException e) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>         throw e;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      } catch (Exception e) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>         throw new ServletException(e);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>   /*<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    * Called from RestServlet after a match has been made but before the guard or method invocation.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   @SuppressWarnings("hiding")<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   final void init(Method javaMethod, ObjectMap properties, Map&lt;String,String&gt; defHeader,<a name="line.164"></a>
-<span class="sourceLineNo">165</span>         Map&lt;String,String&gt; defQuery, Map&lt;String,String&gt; defFormData, String defaultCharset,<a name="line.165"></a>
-<span class="sourceLineNo">166</span>         SerializerGroup mSerializers, ParserGroup mParsers, UrlEncodingParser mUrlEncodingParser,<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         BeanContext beanContext, EncoderGroup encoders, Map&lt;String,Widget&gt; widgets) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      this.javaMethod = javaMethod;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      this.properties = properties;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      this.urlEncodingParser = mUrlEncodingParser;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.beanSession = beanContext.createSession();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      this.pathParams<a name="line.172"></a>
-<span class="sourceLineNo">173</span>         .setParser(urlEncodingParser)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>         .setBeanSession(beanSession);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      this.queryParams<a name="line.175"></a>
-<span class="sourceLineNo">176</span>         .addDefault(defQuery)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>         .setParser(urlEncodingParser)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>         .setBeanSession(beanSession);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.headers<a name="line.179"></a>
-<span class="sourceLineNo">180</span>         .addDefault(defHeader)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>         .addDefault(context.getDefaultRequestHeaders())<a name="line.181"></a>
-<span class="sourceLineNo">182</span>         .setParser(urlEncodingParser)<a name="line.182"></a>
-<span class="sourceLineNo">183</span>         .setBeanSession(beanSession);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      this.body<a name="line.184"></a>
-<span class="sourceLineNo">185</span>         .setEncoders(encoders)<a name="line.185"></a>
-<span class="sourceLineNo">186</span>         .setParsers(mParsers)<a name="line.186"></a>
-<span class="sourceLineNo">187</span>         .setHeaders(headers)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>         .setBeanSession(beanSession)<a name="line.188"></a>
-<span class="sourceLineNo">189</span>         .setUrlEncodingParser(mUrlEncodingParser);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.serializerGroup = mSerializers;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.parserGroup = mParsers;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.defaultCharset = defaultCharset;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      this.defFormData = defFormData;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      this.widgets = widgets;<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      if (debug) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>         String msg = ""<a name="line.197"></a>
-<span class="sourceLineNo">198</span>            + "\n=== HTTP Request (incoming) ===================================================="<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            + toString()<a name="line.199"></a>
-<span class="sourceLineNo">200</span>            + "\n=== END ========================================================================";<a name="line.200"></a>
-<span class="sourceLineNo">201</span>         context.getLogger().log(Level.WARNING, msg);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>      if (isPlainText())<a name="line.204"></a>
-<span class="sourceLineNo">205</span>         this.properties.put(SerializerContext.SERIALIZER_useWhitespace, true);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>   /**<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * Returns a string of the form &lt;js&gt;"HTTP method-name full-url"&lt;/js&gt;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    *<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    * @return A description of the request.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   public String getDescription() {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      String qs = getQueryString();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return "HTTP " + getMethod() + " " + getRequestURI() + (qs == null ? "" : "?" + qs);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>   /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    * Same as {@link #getAttribute(String)} but returns a default value if not found.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    *<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    * @param name The request attribute name.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    * @param def The default value if the attribute doesn't exist.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    * @return The request attribute value.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   public Object getAttribute(String name, Object def) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      Object o = super.getAttribute(name);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return (o == null ? def : o);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>   /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    * Shorthand method for calling {@link #setAttribute(String, Object)} fluently.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    *<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * @param name The request attribute name.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * @param value The request attribute value.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    * @return This object (for method chaining).<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   public RestRequest attr(String name, Object value) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      setAttribute(name, value);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return this;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>   /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    * Resolves the specified property.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    *<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    * @param cm<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    *    The &lt;code&gt;CallMethod&lt;/code&gt; object where the &lt;code&gt;HtmlDocSerializer&lt;/code&gt; settings are defined.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    *    Optional value.  If not specified, then won't resolve &lt;code&gt;HtmlDocSerializer&lt;/code&gt; properties.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    * @param category<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    *    The property category.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    *    The possible values are:<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    *    &lt;ul&gt;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    *       &lt;li&gt;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    *          &lt;js&gt;"Attribute"&lt;/js&gt; - Value returned by {@link HttpServletRequest#getAttribute(String)}.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    *       &lt;li&gt;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    *          &lt;js&gt;"FormData"&lt;/js&gt; - Value returned by {@link RestRequest#getFormData(String)}.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    *       &lt;li&gt;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    *          &lt;js&gt;"Header"&lt;/js&gt; - Value returned by {@link RestRequest#getHeader(String)}.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    *       &lt;li&gt;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    *          &lt;js&gt;"HtmlDocSerializer"&lt;/js&gt;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    *          &lt;br&gt;Valid names:<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    *          &lt;ul&gt;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    *             &lt;li&gt;&lt;js&gt;"aside"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_aside}<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    *             &lt;li&gt;&lt;js&gt;"footer"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_footer}<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    *             &lt;li&gt;&lt;js&gt;"header"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_header}<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    *             &lt;li&gt;&lt;js&gt;"links.list"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_links}<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    *             &lt;li&gt;&lt;js&gt;"nav"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_nav}<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    *             &lt;li&gt;&lt;js&gt;"noResultsMessage"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_noResultsMessage}<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    *             &lt;li&gt;&lt;js&gt;"nowrap"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_nowrap}<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    *             &lt;li&gt;&lt;js&gt;"script.list"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_script}<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    *             &lt;li&gt;&lt;js&gt;"style.list"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_style}<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    *             &lt;li&gt;&lt;js&gt;"stylesheet"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_stylesheet}<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    *             &lt;li&gt;&lt;js&gt;"template"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_template}<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    *          &lt;/ul&gt;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    *       &lt;li&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    *          &lt;js&gt;"Path"&lt;/js&gt; - Value returned by {@link RestRequest#getPath(String)}.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    *       &lt;li&gt;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    *          &lt;js&gt;"Query"&lt;/js&gt; = Value returned by {@link RestRequest#getQuery(String)}.<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    *       &lt;li&gt;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    *          &lt;js&gt;"Request"&lt;/js&gt;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    *          &lt;br&gt;Valid names:<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    *          &lt;ul&gt;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    *             &lt;li&gt;&lt;js&gt;"contextPath"&lt;/js&gt; - Value returned by {@link RestRequest#getContextPath()}<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    *             &lt;li&gt;&lt;js&gt;"method"&lt;/js&gt; - Value returned by {@link RestRequest#getMethod()}<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    *             &lt;li&gt;&lt;js&gt;"methodDescription"&lt;/js&gt; - Value returned by {@link RestRequest#getMethodDescription()}<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    *             &lt;li&gt;&lt;js&gt;"methodSummary"&lt;/js&gt; - Value returned by {@link RestRequest#getMethodSummary()}<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    *             &lt;li&gt;&lt;js&gt;"pathInfo"&lt;/js&gt; - Value returned by {@link RestRequest#getPathInfo()}<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    *             &lt;li&gt;&lt;js&gt;"requestParentURI"&lt;/js&gt; - Value returned by {@link UriContext#getRootRelativePathInfoParent()}<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    *             &lt;li&gt;&lt;js&gt;"requestURI"&lt;/js&gt; - Value returned by {@link RestRequest#getRequestURI()}<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    *             &lt;li&gt;&lt;js&gt;"servletClass"&lt;/js&gt; - The class name of the servlet<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    *             &lt;li&gt;&lt;js&gt;"servletClassSimple"&lt;/js&gt; - The simple class name of the servlet.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    *             &lt;li&gt;&lt;js&gt;"servletDescription"&lt;/js&gt; - Value returned by {@link RestRequest#getServletDescription()}<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    *             &lt;li&gt;&lt;js&gt;"servletParentURI"&lt;/js&gt; - Value returned by {@link UriContext#getRootRelativeServletPathParent()}<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    *             &lt;li&gt;&lt;js&gt;"servletPath"&lt;/js&gt; - See {@link RestRequest#getServletPath()}<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    *             &lt;li&gt;&lt;js&gt;"servletTitle"&lt;/js&gt; - See {@link RestRequest#getServletTitle()}<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    *             &lt;li&gt;&lt;js&gt;"servletURI"&lt;/js&gt; - See {@link UriContext#getRootRelativeServletPath()}<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    *             &lt;li&gt;&lt;js&gt;"siteName"&lt;/js&gt; - See {@link RestRequest#getSiteName()}<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    *          &lt;/ul&gt;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    *    &lt;/ul&gt;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    * @param name The property name.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    * @return The resolve property, or &lt;jk&gt;null&lt;/jk&gt; if it wasn't found.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    */<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   public Object resolveProperty(CallMethod cm, String category, String name) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      char c = category.charAt(0);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      if (c == 'A') {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>         if ("Attribute".equals(category))<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            return getAttribute(name);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      } else if (c == 'F') {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>         if ("FormData".equals(category))<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            return getFormData(name);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      } else if (c == 'H') {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>         if ("Header".equals(category))<a name="line.312"></a>
-<span class="sourceLineNo">313</span>            return getHeader(name);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>         if ("HtmlDocSerializer".equals(category) &amp;&amp; cm != null) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>            char c2 = StringUtils.charAt(name, 0);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            if (c2 == 'a') {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>               if ("aside".equals(name))<a name="line.317"></a>
-<span class="sourceLineNo">318</span>                  return cm.htmlAside == null ? null : resolveVars(cm.htmlAside);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>            } else if (c2 == 'f') {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>               if ("footer".equals(name))<a name="line.320"></a>
-<span class="sourceLineNo">321</span>                  return cm.htmlFooter == null ? null : resolveVars(cm.htmlFooter);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>            } else if (c2 == 'h') {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>               if ("header".equals(name))<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                  return cm.htmlHeader == null ? null : resolveVars(cm.htmlHeader);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>            } else if (c2 == 'l') {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>               if ("links.list".equals(name)) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>                  if (cm.htmlLinks == null || cm.htmlLinks.length == 0)<a name="line.327"></a>
-<span class="sourceLineNo">328</span>                     return null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                  try {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                     List&lt;String&gt; la = new ArrayList&lt;String&gt;();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>                     for (String l : cm.htmlLinks) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>                        // Temporary backwards compatibility with JSON object format.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>                        if (l.startsWith("{")) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>                           ObjectMap m = new ObjectMap(l);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>                           for (Map.Entry&lt;String,Object&gt; e : m.entrySet())<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                              la.add(resolveVars(e.getKey()) + ":" + resolveVars(StringUtils.toString(e.getValue())));<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                        } else {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                           la.add(resolveVars(l));<a name="line.338"></a>
-<span class="sourceLineNo">339</span>                        }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>                     }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>                     return la;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>                  } catch (ParseException e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>                     throw new RuntimeException(e);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>               }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            } else if (c2 == 'n') {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>               if ("nav".equals(name))<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                  return cm.htmlNav == null ? null : resolveVars(cm.htmlNav);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>               if ("noResultsMessage".equals(name))<a name="line.349"></a>
-<span class="sourceLineNo">350</span>                  return cm.htmlNoResultsMessage == null ? null : resolveVars(cm.htmlNoResultsMessage);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>               if ("nowrap".equals(name))<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                  return cm.htmlNoWrap;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            } else if (c2 == 's') {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>               if ("script.list".equals(name)) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>                  Set&lt;String&gt; l = new LinkedHashSet&lt;String&gt;();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>                  if (cm.htmlScript != null)<a name="line.356"></a>
-<span class="sourceLineNo">357</span>                     l.add(resolveVars(cm.htmlScript));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>                  for (Widget w : getWidgets().values()) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>                     String script;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>                     try {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>                        script = w.getScript(this);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>                     } catch (Exception e) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>                        script = e.getLocalizedMessage();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>                     }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>                     if (script != null)<a name="line.365"></a>
-<span class="sourceLineNo">366</span>                        l.add(resolveVars(script));<a name="line.366"></a>
-<span class="sourceLineNo">367</span>                  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                  return l;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>               }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>               if ("style.list".equals(name)) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>                  Set&lt;String&gt; l = new LinkedHashSet&lt;String&gt;();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>                  if (cm.htmlStyle != null)<a name="line.372"></a>
-<span class="sourceLineNo">373</span>                     l.add(resolveVars(cm.htmlStyle));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>                  for (Widget w : getWidgets().values()) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>                     String style;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>                     try {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>                        style = w.getStyle(this);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>                     } catch (Exception e) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>                        style = e.getLocalizedMessage();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                     }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>                     if (style != null)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>                        l.add(resolveVars(style));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>                  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>                  return l;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>               }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>               if ("stylesheet".equals(name)) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>                  String s = getStylesheet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>                  // Exclude absolute URIs to stylesheets for security reasons.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>                  if (s == null || isAbsoluteUri(s))<a name="line.389"></a>
-<span class="sourceLineNo">390</span>                     s = cm.htmlStylesheet;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>                  return s == null ? null : resolveVars(s);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>               }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>            } else if (c2 == 't') {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>               if ("template".equals(name))<a name="line.394"></a>
-<span class="sourceLineNo">395</span>                  return cm.htmlTemplate;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            }<a name="line.396"></a>
-<span class="sourceLineNo">397</span>         }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      } else if (c == 'P') {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>         if ("Path".equals(category))<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            return getPath(name);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } else if (c == 'Q') {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>         if ("Query".equals(category))<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            return getQuery(name);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      } else if (c == 'R') {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>         if ("Request".equals(category)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>            char c2 = StringUtils.charAt(name, 0);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>            if (c == 'c') {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>               if ("contextPath".equals(name))<a name="line.408"></a>
-<span class="sourceLineNo">409</span>                  return getContextPath();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>            } else if (c2 == 'm') {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>               if ("method".equals(name))<a name="line.411"></a>
-<span class="sourceLineNo">412</span>                  return getMethod();<a name="line.412"></a>
-<span class="sourceLineNo">413</span>               if ("methodDescription".equals(name))<a name="line.413"></a>
-<span class="sourceLineNo">414</span>                  return getMethodDescription();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>               if ("methodSummary".equals(name))<a name="line.415"></a>
-<span class="sourceLineNo">416</span>                  return getMethodSummary();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            } else if (c2 == 'p') {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>               if ("pathInfo".equals(name))<a name="line.418"></a>
-<span class="sourceLineNo">419</span>                  return getPathInfo();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>            } else if (c2 == 'r') {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>               if ("requestParentURI".equals(name))<a name="line.421"></a>
-<span class="sourceLineNo">422</span>                  return getUriContext().getRootRelativePathInfoParent();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>               if ("requestURI".equals(name))<a name="line.423"></a>
-<span class="sourceLineNo">424</span>                  return getRequestURI();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>            } else if (c2 == 's') {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>               if ("servletClass".equals(name))<a name="line.426"></a>
-<span class="sourceLineNo">427</span>                  return getContext().getResource().getClass().getName();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>               if ("servletClassSimple".equals(name))<a name="line.428"></a>
-<span class="sourceLineNo">429</span>                  return getContext().getResource().getClass().getSimpleName();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>               if ("servletDescription".equals(name))<a name="line.430"></a>
-<span class="sourceLineNo">431</span>                  return getServletDescription();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>               if ("servletParentURI".equals(name))<a name="line.432"></a>
-<span class="sourceLineNo">433</span>                  return getUriContext().getRootRelativeServletPathParent();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>               if ("servletPath".equals(name))<a name="line.434"></a>
-<span class="sourceLineNo">435</span>                  return getServletPath();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>               if ("servletTitle".equals(name))<a name="line.436"></a>
-<span class="sourceLineNo">437</span>                  return getServletTitle();<a name="line.437"></a>
-<span class="sourceLineNo">438</span>               if ("servletURI".equals(name))<a name="line.438"></a>
-<span class="sourceLineNo">439</span>                  return getUriContext().getRootRelativeServletPath();<a name="line.439"></a>
-<span class="sourceLineNo">440</span>               if ("siteName".equals(name))<a name="line.440"></a>
-<span class="sourceLineNo">441</span>                  return getSiteName();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>         }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      return null;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   }<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>   //--------------------------------------------------------------------------------<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   // Properties<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   //--------------------------------------------------------------------------------<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>   /**<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    * Servlet calls this method to initialize the properties.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    */<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   RestRequest setProperties(ObjectMap properties) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      this.properties = properties;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      return this;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>   /**<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    * Retrieve the properties active for this request.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    *<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    * &lt;p&gt;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    * These properties can be modified by the request.<a name="line.464"></a>
+<span class="sourceLineNo">149</span>         if (context.isAllowHeaderParams())<a name="line.149"></a>
+<span class="sourceLineNo">150</span>            headers.setQueryParams(queryParams);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>         debug = "true".equals(getQuery().getString("debug", "false")) || "true".equals(getHeaders().getString("Debug", "false"));<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>         this.pathParams = new RequestPathMatch();<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      } catch (RestException e) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>         throw e;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      } catch (Exception e) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>         throw new ServletException(e);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>   /*<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    * Called from RestServlet after a match has been made but before the guard or method invocation.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   @SuppressWarnings("hiding")<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   final void init(Method javaMethod, ObjectMap properties, Map&lt;String,String&gt; defHeader,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>         Map&lt;String,String&gt; defQuery, Map&lt;String,String&gt; defFormData, String defaultCharset,<a name="line.168"></a>
+<span class="sourceLineNo">169</span>         SerializerGroup mSerializers, ParserGroup mParsers, UrlEncodingParser mUrlEncodingParser,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>         BeanContext beanContext, EncoderGroup encoders, Map&lt;String,Widget&gt; widgets) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      this.javaMethod = javaMethod;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      this.properties = properties;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      this.urlEncodingParser = mUrlEncodingParser;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      this.beanSession = beanContext.createSession();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      this.pathParams<a name="line.175"></a>
+<span class="sourceLineNo">176</span>         .setParser(urlEncodingParser)<a name="line.176"></a>
+<span class="sourceLineNo">177</span>         .setBeanSession(beanSession);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      this.queryParams<a name="line.178"></a>
+<span class="sourceLineNo">179</span>         .addDefault(defQuery)<a name="line.179"></a>
+<span class="sourceLineNo">180</span>         .setParser(urlEncodingParser)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>         .setBeanSession(beanSession);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      this.headers<a name="line.182"></a>
+<span class="sourceLineNo">183</span>         .addDefault(defHeader)<a name="line.183"></a>
+<span class="sourceLineNo">184</span>         .addDefault(context.getDefaultRequestHeaders())<a name="line.184"></a>
+<span class="sourceLineNo">185</span>         .setParser(urlEncodingParser)<a name="line.185"></a>
+<span class="sourceLineNo">186</span>         .setBeanSession(beanSession);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      this.body<a name="line.187"></a>
+<span class="sourceLineNo">188</span>         .setEncoders(encoders)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>         .setParsers(mParsers)<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         .setHeaders(headers)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>         .setBeanSession(beanSession)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>         .setUrlEncodingParser(mUrlEncodingParser);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      this.serializerGroup = mSerializers;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      this.parserGroup = mParsers;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      this.defaultCharset = defaultCharset;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      this.defFormData = defFormData;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      this.widgets = widgets;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (debug) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>         String msg = ""<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            + "\n=== HTTP Request (incoming) ===================================================="<a name="line.201"></a>
+<span class="sourceLineNo">202</span>            + toString()<a name="line.202"></a>
+<span class="sourceLineNo">203</span>            + "\n=== END ========================================================================";<a name="line.203"></a>
+<span class="sourceLineNo">204</span>         context.getLogger().log(Level.WARNING, msg);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (isPlainText())<a name="line.207"></a>
+<span class="sourceLineNo">208</span>         this.properties.put(SerializerContext.SERIALIZER_useWhitespace, true);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>   /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    * Returns a string of the form &lt;js&gt;"HTTP method-name full-url"&lt;/js&gt;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    *<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    * @return A description of the request.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   public String getDescription() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      String qs = getQueryString();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return "HTTP " + getMethod() + " " + getRequestURI() + (qs == null ? "" : "?" + qs);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>   /**<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    * Same as {@link #getAttribute(String)} but returns a default value if not found.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    * @param name The request attribute name.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    * @param def The default value if the attribute doesn't exist.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    * @return The request attribute value.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   public Object getAttribute(String name, Object def) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      Object o = super.getAttribute(name);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      return (o == null ? def : o);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>   /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    * Shorthand method for calling {@link #setAttribute(String, Object)} fluently.<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    *<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * @param name The request attribute name.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * @param value The request attribute value.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * @return This object (for method chaining).<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   public RestRequest attr(String name, Object value) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      setAttribute(name, value);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return this;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>   /**<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    * Resolves the specified property.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    *<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    * @param cm<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    *    The &lt;code&gt;CallMethod&lt;/code&gt; object where the &lt;code&gt;HtmlDocSerializer&lt;/code&gt; settings are defined.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    *    Optional value.  If not specified, then won't resolve &lt;code&gt;HtmlDocSerializer&lt;/code&gt; properties.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    * @param category<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    *    The property category.<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    *    The possible values are:<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    *    &lt;ul&gt;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    *       &lt;li&gt;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    *          &lt;js&gt;"Attribute"&lt;/js&gt; - Value returned by {@link HttpServletRequest#getAttribute(String)}.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    *       &lt;li&gt;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    *          &lt;js&gt;"FormData"&lt;/js&gt; - Value returned by {@link RestRequest#getFormData(String)}.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    *       &lt;li&gt;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    *          &lt;js&gt;"Header"&lt;/js&gt; - Value returned by {@link RestRequest#getHeader(String)}.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    *       &lt;li&gt;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    *          &lt;js&gt;"HtmlDocSerializer"&lt;/js&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    *          &lt;br&gt;Valid names:<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    *          &lt;ul&gt;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    *             &lt;li&gt;&lt;js&gt;"aside"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_aside}<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    *             &lt;li&gt;&lt;js&gt;"footer"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_footer}<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    *             &lt;li&gt;&lt;js&gt;"header"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_header}<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    *             &lt;li&gt;&lt;js&gt;"links.list"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_links}<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    *             &lt;li&gt;&lt;js&gt;"nav"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_nav}<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    *             &lt;li&gt;&lt;js&gt;"noResultsMessage"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_noResultsMessage}<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    *             &lt;li&gt;&lt;js&gt;"nowrap"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_nowrap}<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    *             &lt;li&gt;&lt;js&gt;"script.list"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_script}<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    *             &lt;li&gt;&lt;js&gt;"style.list"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_style}<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    *             &lt;li&gt;&lt;js&gt;"stylesheet"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_stylesheet}<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    *             &lt;li&gt;&lt;js&gt;"template"&lt;/js&gt; - See {@link HtmlDocSerializerContext#HTMLDOC_template}<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    *          &lt;/ul&gt;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    *       &lt;li&gt;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    *          &lt;js&gt;"Path"&lt;/js&gt; - Value returned by {@link RestRequest#getPath(String)}.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    *       &lt;li&gt;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    *          &lt;js&gt;"Query"&lt;/js&gt; = Value returned by {@link RestRequest#getQuery(String)}.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    *       &lt;li&gt;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    *          &lt;js&gt;"Request"&lt;/js&gt;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    *          &lt;br&gt;Valid names:<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    *          &lt;ul&gt;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    *             &lt;li&gt;&lt;js&gt;"contextPath"&lt;/js&gt; - Value returned by {@link RestRequest#getContextPath()}<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    *             &lt;li&gt;&lt;js&gt;"method"&lt;/js&gt; - Value returned by {@link RestRequest#getMethod()}<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    *             &lt;li&gt;&lt;js&gt;"methodDescription"&lt;/js&gt; - Value returned by {@link RestRequest#getMethodDescription()}<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    *             &lt;li&gt;&lt;js&gt;"methodSummary"&lt;/js&gt; - Value returned by {@link RestRequest#getMethodSummary()}<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    *             &lt;li&gt;&lt;js&gt;"pathInfo"&lt;/js&gt; - Value returned by {@link RestRequest#getPathInfo()}<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    *             &lt;li&gt;&lt;js&gt;"requestParentURI"&lt;/js&gt; - Value returned by {@link UriContext#getRootRelativePathInfoParent()}<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    *             &lt;li&gt;&lt;js&gt;"requestURI"&lt;/js&gt; - Value returned by {@link RestRequest#getRequestURI()}<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    *             &lt;li&gt;&lt;js&gt;"servletClass"&lt;/js&gt; - The class name of the servlet<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    *             &lt;li&gt;&lt;js&gt;"servletClassSimple"&lt;/js&gt; - The simple class name of the servlet.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    *             &lt;li&gt;&lt;js&gt;"servletDescription"&lt;/js&gt; - Value returned by {@link RestRequest#getServletDescription()}<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    *             &lt;li&gt;&lt;js&gt;"servletParentURI"&lt;/js&gt; - Value returned by {@link UriContext#getRootRelativeServletPathParent()}<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    *             &lt;li&gt;&lt;js&gt;"servletPath"&lt;/js&gt; - See {@link RestRequest#getServletPath()}<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    *             &lt;li&gt;&lt;js&gt;"servletTitle"&lt;/js&gt; - See {@link RestRequest#getServletTitle()}<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    *             &lt;li&gt;&lt;js&gt;"servletURI"&lt;/js&gt; - See {@link UriContext#getRootRelativeServletPath()}<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    *             &lt;li&gt;&lt;js&gt;"siteName"&lt;/js&gt; - See {@link RestRequest#getSiteName()}<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    *          &lt;/ul&gt;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    *    &lt;/ul&gt;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    * @param name The property name.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    * @return The resolve property, or &lt;jk&gt;null&lt;/jk&gt; if it wasn't found.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public Object resolveProperty(CallMethod cm, String category, String name) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      char c = category.charAt(0);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (c == 'A') {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>         if ("Attribute".equals(category))<a name="line.309"></a>
+<span class="sourceLineNo">310</span>            return getAttribute(name);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      } else if (c == 'F') {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>         if ("FormData".equals(category))<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            return getFormData(name);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      } else if (c == 'H') {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         if ("Header".equals(category))<a name="line.315"></a>
+<span class="sourceLineNo">316</span>            return getHeader(name);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         if ("HtmlDocSerializer".equals(category) &amp;&amp; cm != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            char c2 = StringUtils.charAt(name, 0);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>            if (c2 == 'a') {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>               if ("aside".equals(name))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>                  return cm.htmlAside == null ? null : resolveVars(cm.htmlAside);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            } else if (c2 == 'f') {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>               if ("footer".equals(name))<a name="line.323"></a>
+<span class="sourceLineNo">324</span>                  return cm.htmlFooter == null ? null : resolveVars(cm.htmlFooter);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>            } else if (c2 == 'h') {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>               if ("header".equals(name))<a name="line.326"></a>
+<span class="sourceLineNo">327</span>                  return cm.htmlHeader == null ? null : resolveVars(cm.htmlHeader);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>            } else if (c2 == 'l') {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>               if ("links.list".equals(name)) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                  if (cm.htmlLinks == null || cm.htmlLinks.length == 0)<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                     return null;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>                  try {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>                     List&lt;String&gt; la = new ArrayList&lt;String&gt;();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>                     for (String l : cm.htmlLinks) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                        // Temporary backwards compatibility with JSON object format.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                        if (l.startsWith("{")) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>                           ObjectMap m = new ObjectMap(l);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>                           for (Map.Entry&lt;String,Object&gt; e : m.entrySet())<a name="line.338"></a>
+<span class="sourceLineNo">339</span>                              la.add(resolveVars(e.getKey()) + ":" + resolveVars(StringUtils.toString(e.getValue())));<a name="line.339"></a>
+<span class="sourceLineNo">340</span>                        } else {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>                           la.add(resolveVars(l));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>                        }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>                     }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                     return la;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                  } catch (ParseException e) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                     throw new RuntimeException(e);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>                  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>               }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            } else if (c2 == 'n') {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>               if ("nav".equals(name))<a name="line.350"></a>
+<span class="sourceLineNo">351</span>                  return cm.htmlNav == null ? null : resolveVars(cm.htmlNav);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>               if ("noResultsMessage".equals(name))<a name="line.352"></a>
+<span class="sourceLineNo">353</span>                  return cm.htmlNoResultsMessage == null ? null : resolveVars(cm.htmlNoResultsMessage);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>               if ("nowrap".equals(name))<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                  return cm.htmlNoWrap;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>            } else if (c2 == 's') {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>               if ("script.list".equals(name)) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>                  Set&lt;String&gt; l = new LinkedHashSet&lt;String&gt;();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>                  if (cm.htmlScript != null)<a name="line.359"></a>
+<span class="sourceLineNo">360</span>                     l.add(resolveVars(cm.htmlScript));<a name="line.360"></a>
+<span class="sourceLineNo">361</span>                  for (Widget w : getWidgets().values()) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>                     String script;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>                     try {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                        script = w.getScript(this);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>                     } catch (Exception e) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>                        script = e.getLocalizedMessage();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>                     }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>                     if (script != null)<a name="line.368"></a>
+<span class="sourceLineNo">369</span>                        l.add(resolveVars(script));<a name="line.369"></a>
+<span class="sourceLineNo">370</span>                  }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>                  return l;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>               }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>               if ("style.list".equals(name)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>                  Set&lt;String&gt; l = new LinkedHashSet&lt;String&gt;();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>                  if (cm.htmlStyle != null)<a name="line.375"></a>
+<span class="sourceLineNo">376</span>                     l.add(resolveVars(cm.htmlStyle));<a name="line.376"></a>
+<span class="sourceLineNo">377</span>                  for (Widget w : getWidgets().values()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>                     String style;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>                     try {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>                        style = w.getStyle(this);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                     } catch (Exception e) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>                        style = e.getLocalizedMessage();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>                     }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>                     if (style != null)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>                        l.add(resolveVars(style));<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>                  return l;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>               }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>               if ("stylesheet".equals(name)) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                  String s = getStylesheet();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>                  // Exclude absolute URIs to stylesheets for security reasons.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>                  if (s == null || isAbsoluteUri(s))<a name="line.392"></a>
+<span class="sourceLineNo">393</span>                     s = cm.htmlStylesheet;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>                  return s == null ? null : resolveVars(s);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>               }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>            } else if (c2 == 't') {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>               if ("template".equals(name))<a name="line.397"></a>
+<span class="sourceLineNo">398</span>                  return cm.htmlTemplate;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>            }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>         }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      } else if (c == 'P') {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>         if ("Path".equals(category))<a name="line.402"></a>
+<span class="sourceLineNo">403</span>            return getPath(name);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      } else if (c == 'Q') {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>         if ("Query".equals(category))<a name="line.405"></a>
+<span class="sourceLineNo">406</span>            return getQuery(name);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } else if (c == 'R') {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>         if ("Request".equals(category)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            char c2 = StringUtils.charAt(name, 0);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>            if (c == 'c') {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>               if ("contextPath".equals(name))<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                  return getContextPath();<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            } else if (c2 == 'm') {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>               if ("method".equals(name))<a name="line.414"></a>
+<span class="sourceLineNo">415</span>                  return getMethod();<a name="line.415"></a>
+<span class="sourceLineNo">416</span>               if ("methodDescription".equals(name))<a name="line.416"></a>
+<span class="sourceLineNo">417</span>                  return getMethodDescription();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>               if ("methodSummary".equals(name))<a name="line.418"></a>
+<span class="sourceLineNo">419</span>                  return getMethodSummary();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>            } else if (c2 == 'p') {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>               if ("pathInfo".equals(name))<a name="line.421"></a>
+<span class="sourceLineNo">422</span>                  return getPathInfo();<a name="line.422"></a>
+<span class="sourceLineNo">423</span>            } else if (c2 == 'r') {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>               if ("requestParentURI".equals(name))<a name="line.424"></a>
+<span class="sourceLineNo">425</span>                  return getUriContext().getRootRelativePathInfoParent();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>               if ("requestURI".equals(name))<a name="line.426"></a>
+<span class="sourceLineNo">427</span>                  return getRequestURI();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>            } else if (c2 == 's') {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>               if ("servletClass".equals(name))<a name="line.429"></a>
+<span class="sourceLineNo">430</span>                  return getContext().getResource().getClass().getName();<a name="line.430"></a>
+<span class="sourceLineNo">431</span>               if ("servletClassSimple".equals(name))<a name="line.431"></a>
+<span class="sourceLineNo">432</span>                  return getContext().getResource().getClass().getSimpleName();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>               if ("servletDescription".equals(name))<a name="line.433"></a>
+<span class="sourceLineNo">434</span>                  return getServletDescription();<a name="line.434"></a>
+<span class="sourceLineNo">435</span>               if ("servletParentURI".equals(name))<a name="line.435"></a>
+<span class="sourceLineNo">436</span>                  return getUriContext().getRootRelativeServletPathParent();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>               if ("servletPath".equals(name))<a name="line.437"></a>
+<span class="sourceLineNo">438</span>                  return getServletPath();<a name="line.438"></a>
+<span class="sourceLineNo">439</span>               if ("servletTitle".equals(name))<a name="line.439"></a>
+<span class="sourceLineNo">440</span>                  return getServletTitle();<a name="line.440"></a>
+<span class="sourceLineNo">441</span>               if ("servletURI".equals(name))<a name="line.441"></a>
+<span class="sourceLineNo">442</span>                  return getUriContext().getRootRelativeServletPath();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>               if ("siteName".equals(name))<a name="line.443"></a>
+<span class="sourceLineNo">444</span>                  return getSiteName();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>         }<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return null;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span>   //--------------------------------------------------------------------------------<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   // Properties<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   //--------------------------------------------------------------------------------<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>   /**<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    * Servlet calls this method to initialize the properties.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    */<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   RestRequest setProperties(ObjectMap properties) {<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      this.properties = properties;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>   /**<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    * Retrieve the properties active for this request.<a name="line.464"></a>
 <span class="sourceLineNo">465</span>    *<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    * @return The properties active for this request.<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    */<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   public ObjectMap getProperties() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      return this.properties;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>   /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    * Shortcut for calling &lt;code&gt;getProperties().append(name, value);&lt;/code&gt; fluently.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    *<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    * @param name The property name.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    * @param value The property value.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    * @return This object (for method chaining).<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   public RestRequest prop(String name, Object value) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      this.properties.append(name, value);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return this;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>   //--------------------------------------------------------------------------------<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   // Headers<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   //--------------------------------------------------------------------------------<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>   /**<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    * Returns the headers on this request.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    *<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    * @return The headers on this request.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    */<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   public RequestHeaders getHeaders() {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return headers;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>   @Override /* ServletRequest */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   public String getHeader(String name) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      return getHeaders().getString(name);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>   @Override /* ServletRequest */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   public Enumeration&lt;String&gt; getHeaders(String name) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      String[] v = headers.get(name);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (v == null || v.length == 0)<a name="line.506"></a>
-<span class="sourceLineNo">507</span>         return Collections.enumeration(Collections.EMPTY_LIST);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return Collections.enumeration(Arrays.asList(v));<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>   /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    * Returns the media types that are valid for &lt;code&gt;Content-Type&lt;/code&gt; headers on the request.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    * @return The set of media types registered in the parser group of this request.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    */<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   public List&lt;MediaType&gt; getSupportedMediaTypes() {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      return parserGroup.getSupportedMediaTypes();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>   /**<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    * Sets the charset to expect on the request body.<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    */<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   @Override /* ServletRequest */<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   public void setCharacterEncoding(String charset) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      this.charset = charset;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>   /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    * Returns the charset specified on the &lt;code&gt;Content-Type&lt;/code&gt; header, or &lt;js&gt;"UTF-8"&lt;/js&gt; if not specified.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    */<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   @Override /* ServletRequest */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   public String getCharacterEncoding() {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      if (charset == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>         // Determine charset<a name="line.534"></a>
-<span class="sourceLineNo">535</span>         // NOTE:  Don't use super.getCharacterEncoding() because the spec is implemented inconsistently.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>         // Jetty returns the default charset instead of null if the character is not specified on the request.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>         String h = getHeader("Content-Type");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>         if (h != null) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            int i = h.indexOf(";charset=");<a name="line.539"></a>
-<span class="sourceLineNo">540</span>            if (i &gt; 0)<a name="line.540"></a>
-<span class="sourceLineNo">541</span>               charset = h.substring(i+9).trim();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>         }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>         if (charset == null)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>            charset = defaultCharset;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>         if (! Charset.isSupported(charset))<a name="line.545"></a>
-<span class="sourceLineNo">546</span>            throw new RestException(SC_UNSUPPORTED_MEDIA_TYPE, "Unsupported charset in header ''Content-Type'': ''{0}''", h);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      return charset;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span>   @Override /* ServletRequest */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   public Locale getLocale() {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      String h = headers.getString("Accept-Language");<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      if (h != null) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>         MediaTypeRange[] mr = MediaTypeRange.parse(h);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>         if (mr.length &gt; 0)<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            return toLocale(mr[0].getMediaType().getType());<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      }<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      return super.getLocale();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>   @Override /* ServletRequest */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   public Enumeration&lt;Locale&gt; getLocales() {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      String h = headers.getString("Accept-Language");<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      if (h != null) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>         MediaTypeRange[] mr = MediaTypeRange.parse(h);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>         if (mr.length &gt; 0) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            List&lt;Locale&gt; l = new ArrayList&lt;Locale&gt;(mr.length);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>            for (MediaTypeRange r : mr)<a name="line.569"></a>
-<span class="sourceLineNo">570</span>               l.add(toLocale(r.getMediaType().getType()));<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            return enumeration(l);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>         }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      return super.getLocales();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>   //--------------------------------------------------------------------------------<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   // Query parameters<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   //--------------------------------------------------------------------------------<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>   /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    * Equivalent to {@link #getParameterMap()}, but only looks for query parameters in the URL, not form posts.<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    *<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    * &lt;p&gt;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    * This method can be used to retrieve query parameters without triggering the underlying servlet API to load and<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    * parse the request body.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    *<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    * &lt;p&gt;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    * This object is modifiable.<a name="line.590"></a>
+<span class="sourceLineNo">466</span>    * &lt;p&gt;<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    * These properties can be modified by the request.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    *<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    * @return The properties active for this request.<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    */<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   public ObjectMap getProperties() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.properties;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>   /**<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    * Shortcut for calling &lt;code&gt;getProperties().append(name, value);&lt;/code&gt; fluently.<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    *<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    * @param name The property name.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    * @param value The property value.<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    * @return This object (for method chaining).<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    */<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   public RestRequest prop(String name, Object value) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      this.properties.append(name, value);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return this;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>   //--------------------------------------------------------------------------------<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   // Headers<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   //--------------------------------------------------------------------------------<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>   /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    * Returns the headers on this request.<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    *<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    * @return The headers on this request.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   public RequestHeaders getHeaders() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      return headers;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>   @Override /* ServletRequest */<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   public String getHeader(String name) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      return getHeaders().getString(name);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span>   @Override /* ServletRequest */<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   public Enumeration&lt;String&gt; getHeaders(String name) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      String[] v = headers.get(name);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      if (v == null || v.length == 0)<a name="line.509"></a>
+<span class="sourceLineNo">510</span>         return Collections.enumeration(Collections.EMPTY_LIST);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return Collections.enumeration(Arrays.asList(v));<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   }<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class=

<TRUNCATED>


[20/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestContext.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestContext.html b/content/site/apidocs/org/apache/juneau/rest/RestContext.html
index ff9ae7a..289d934 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestContext.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestContext.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public final class <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.57">RestContext</a>
+<pre>public final class <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.58">RestContext</a>
 extends <a href="../../../../org/apache/juneau/Context.html" title="class in org.apache.juneau">Context</a></pre>
 <div class="block">Contains all the configuration on a REST resource and the entry points for handling REST calls.
 
@@ -242,9 +242,10 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest">RestParam</a>[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestContext.html#findParams-java.lang.reflect.Method-boolean-org.apache.juneau.rest.UrlPathPattern-">findParams</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;method,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/rest/RestContext.html#findParams-java.lang.reflect.Method-boolean-org.apache.juneau.rest.UrlPathPattern-boolean-">findParams</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;method,
           boolean&nbsp;methodPlainParams,
-          <a href="../../../../org/apache/juneau/rest/UrlPathPattern.html" title="class in org.apache.juneau.rest">UrlPathPattern</a>&nbsp;pathPattern)</code>
+          <a href="../../../../org/apache/juneau/rest/UrlPathPattern.html" title="class in org.apache.juneau.rest">UrlPathPattern</a>&nbsp;pathPattern,
+          boolean&nbsp;isPreOrPost)</code>
 <div class="block">Finds the <a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest"><code>RestParam</code></a> instances to handle resolving objects on the calls to the specified Java method.</div>
 </td>
 </tr>
@@ -645,7 +646,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_allowHeaderParams</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.82">REST_allowHeaderParams</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.83">REST_allowHeaderParams</a></pre>
 <div class="block"><b>Configuration property:</b>  Enable header URL parameters.
 
  <ul>
@@ -679,7 +680,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_allowMethodParam</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.115">REST_allowMethodParam</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.116">REST_allowMethodParam</a></pre>
 <div class="block"><b>Configuration property:</b>  Enable <js>"method"</js> URL parameter for specific HTTP methods.
 
  <ul>
@@ -721,7 +722,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_allowBodyParam</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.140">REST_allowBodyParam</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.141">REST_allowBodyParam</a></pre>
 <div class="block"><b>Configuration property:</b>  Enable <js>"body"</js> URL parameter.
 
  <ul>
@@ -755,7 +756,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_renderResponseStackTraces</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.161">REST_renderResponseStackTraces</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.162">REST_renderResponseStackTraces</a></pre>
 <div class="block"><b>Configuration property:</b>  Render stack traces.
 
  <ul>
@@ -785,7 +786,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_useStackTraceHashes</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.179">REST_useStackTraceHashes</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.180">REST_useStackTraceHashes</a></pre>
 <div class="block"><b>Configuration property:</b>  Use stack trace hashes.
 
  <ul>
@@ -812,7 +813,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_defaultCharset</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.196">REST_defaultCharset</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.197">REST_defaultCharset</a></pre>
 <div class="block"><b>Configuration property:</b>  Default character encoding.
 
  <ul>
@@ -838,7 +839,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>REST_paramFormat</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.230">REST_paramFormat</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.231">REST_paramFormat</a></pre>
 <div class="block"><b>Configuration property:</b>  Expected format of request parameters.
 
  <ul>
@@ -881,7 +882,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockListLast">
 <li class="blockList">
 <h4>REST_resourceResolver</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.248">REST_resourceResolver</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.249">REST_resourceResolver</a></pre>
 <div class="block"><b>Configuration property:</b>  REST resource resolver.
 
  <ul>
@@ -916,7 +917,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RestContext</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.333">RestContext</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;resource,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.353">RestContext</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;resource,
                    <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html?is-external=true" title="class or interface in javax.servlet">ServletContext</a>&nbsp;servletContext,
                    <a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -946,7 +947,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getResourceResolver</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestResourceResolver.html" title="interface in org.apache.juneau.rest">RestResourceResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.738">getResourceResolver</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestResourceResolver.html" title="interface in org.apache.juneau.rest">RestResourceResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.839">getResourceResolver</a>()</pre>
 <div class="block">Returns the resource resolver associated with this context.
 
  <p>
@@ -969,7 +970,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getVarResolver</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.818">getVarResolver</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolver.html" title="class in org.apache.juneau.svl">VarResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.919">getVarResolver</a>()</pre>
 <div class="block">Returns the variable resolver for this servlet.
 
  <p>
@@ -1054,7 +1055,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfigFile</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.834">getConfigFile</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.935">getConfigFile</a>()</pre>
 <div class="block">Returns the config file associated with this servlet.
 
  <p>
@@ -1075,7 +1076,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>resolveStaticFile</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/StreamResource.html" title="class in org.apache.juneau.rest">StreamResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.852">resolveStaticFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathInfo)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/StreamResource.html" title="class in org.apache.juneau.rest">StreamResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.953">resolveStaticFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathInfo)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Resolve a static resource file.
 
@@ -1101,7 +1102,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getResource</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.905">getResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1006">getResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&nbsp;locale)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true#getResourceAsStream-java.lang.String-" title="class or interface in java.lang"><code>Class.getResourceAsStream(String)</code></a> except if it doesn't find the resource on this class, searches
@@ -1136,7 +1137,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getResourceAsString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.917">getResourceAsString</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1018">getResourceAsString</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&nbsp;locale)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Reads the input stream from <a href="../../../../org/apache/juneau/rest/RestContext.html#getResource-java.lang.String-java.util.Locale-"><code>getResource(String, Locale)</code></a> into a String.</div>
@@ -1157,7 +1158,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getResource</h4>
-<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.936">getResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
+<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1037">getResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;c,
                          <a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>&nbsp;mediaType,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&nbsp;locale)
@@ -1188,7 +1189,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.969">getPath</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1070">getPath</a>()</pre>
 <div class="block">Returns the path for this resource as defined by the <a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#path--"><code>RestResource.path()</code></a> annotation or
  <a href="../../../../org/apache/juneau/rest/RestConfig.html#setPath-java.lang.String-"><code>RestConfig.setPath(String)</code></a> method concatenated with those on all parent classes.
 
@@ -1209,7 +1210,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlHeader</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.981">getHtmlHeader</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1082">getHtmlHeader</a>()</pre>
 <div class="block">The HTML page header contents.
 
  <p>
@@ -1226,7 +1227,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlLinks</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.993">getHtmlLinks</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1094">getHtmlLinks</a>()</pre>
 <div class="block">The HTML page nav section links.
 
  <p>
@@ -1243,7 +1244,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlNav</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1005">getHtmlNav</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1106">getHtmlNav</a>()</pre>
 <div class="block">The HTML page nav section contents.
 
  <p>
@@ -1260,7 +1261,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlAside</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1017">getHtmlAside</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1118">getHtmlAside</a>()</pre>
 <div class="block">The HTML page aside section contents.
 
  <p>
@@ -1277,7 +1278,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlFooter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1029">getHtmlFooter</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1130">getHtmlFooter</a>()</pre>
 <div class="block">The HTML page footer section contents.
 
  <p>
@@ -1294,7 +1295,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlStylesheet</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1041">getHtmlStylesheet</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1142">getHtmlStylesheet</a>()</pre>
 <div class="block">The HTML page stylesheet URL.
 
  <p>
@@ -1311,7 +1312,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlStyle</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1053">getHtmlStyle</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1154">getHtmlStyle</a>()</pre>
 <div class="block">The HTML page CSS contents.
 
  <p>
@@ -1328,7 +1329,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlScript</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1065">getHtmlScript</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1166">getHtmlScript</a>()</pre>
 <div class="block">The HTML page Javascript contents.
 
  <p>
@@ -1345,7 +1346,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlNoWrap</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1077">getHtmlNoWrap</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1178">getHtmlNoWrap</a>()</pre>
 <div class="block">The HTML page nowrap setting.
 
  <p>
@@ -1362,7 +1363,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlTemplate</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1089">getHtmlTemplate</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/html/HtmlDocTemplate.html" title="interface in org.apache.juneau.html">HtmlDocTemplate</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1190">getHtmlTemplate</a>()</pre>
 <div class="block">The HTML page template.
 
  <p>
@@ -1379,7 +1380,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlNoResultsMessage</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1102">getHtmlNoResultsMessage</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1203">getHtmlNoResultsMessage</a>()</pre>
 <div class="block">The HTML page no-results message.
 
  <p>
@@ -1397,7 +1398,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getHtmlWidgets</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../org/apache/juneau/rest/widget/Widget.html" title="class in org.apache.juneau.rest.widget">Widget</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1114">getHtmlWidgets</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../org/apache/juneau/rest/widget/Widget.html" title="class in org.apache.juneau.rest.widget">Widget</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1215">getHtmlWidgets</a>()</pre>
 <div class="block">The widgets used for resolving <js>"$W{...}"<js> variables.
 
  <p>
@@ -1414,7 +1415,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogger</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1130">getLogger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1231">getLogger</a>()</pre>
 <div class="block">Returns the logger to use for this resource.
 
  <p>
@@ -1435,7 +1436,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getMessages</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1145">getMessages</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1246">getMessages</a>()</pre>
 <div class="block">Returns the resource bundle used by this resource.
 
  <p>
@@ -1455,7 +1456,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getInfoProvider</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1161">getInfoProvider</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1262">getInfoProvider</a>()</pre>
 <div class="block">Returns the REST information provider used by this resource.
 
  <p>
@@ -1476,7 +1477,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getCallHandler</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1177">getCallHandler</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1278">getCallHandler</a>()</pre>
 <div class="block">Returns the REST call handler used by this resource.
 
  <p>
@@ -1497,7 +1498,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getCallRouters</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.juneau.rest.CallRouter&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1186">getCallRouters</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.juneau.rest.CallRouter&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1287">getCallRouters</a>()</pre>
 <div class="block">Returns a map of HTTP method names to call routers.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1511,7 +1512,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getResource</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1199">getResource</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1300">getResource</a>()</pre>
 <div class="block">Returns the resource object.
 
  <p>
@@ -1529,7 +1530,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getRestServlet</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1210">getRestServlet</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1311">getRestServlet</a>()</pre>
 <div class="block">Returns the resource object as a <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1544,7 +1545,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>checkForInitException</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1219">checkForInitException</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1320">checkForInitException</a>()
                               throws <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></pre>
 <div class="block">Throws a <a href="../../../../org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest"><code>RestException</code></a> if an exception occurred in the constructor of this object.</div>
 <dl>
@@ -1559,7 +1560,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentContext</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1233">getParentContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1334">getParentContext</a>()</pre>
 <div class="block">Returns the parent resource context (if this resource was initialized from a parent).
 
  <p>
@@ -1577,7 +1578,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getBeanContext</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1242">getBeanContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau">BeanContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1343">getBeanContext</a>()</pre>
 <div class="block">Returns the <a href="../../../../org/apache/juneau/BeanContext.html" title="class in org.apache.juneau"><code>BeanContext</code></a> object used for parsing path variables and header values.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1591,7 +1592,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getProperties</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1264">getProperties</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1365">getProperties</a>()</pre>
 <div class="block">Returns the class-level properties associated with this servlet.
 
  <p>
@@ -1618,7 +1619,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getSerializers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/serializer/SerializerGroup.html" title="class in org.apache.juneau.serializer">SerializerGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1280">getSerializers</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/serializer/SerializerGroup.html" title="class in org.apache.juneau.serializer">SerializerGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1381">getSerializers</a>()</pre>
 <div class="block">Returns the serializers registered with this resource.
 
  <p>
@@ -1639,7 +1640,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getParsers</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/parser/ParserGroup.html" title="class in org.apache.juneau.parser">ParserGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1296">getParsers</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/parser/ParserGroup.html" title="class in org.apache.juneau.parser">ParserGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1397">getParsers</a>()</pre>
 <div class="block">Returns the parsers registered with this resource.
 
  <p>
@@ -1660,7 +1661,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getServletInitParameter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1306">getServletInitParameter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1407">getServletInitParameter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the servlet init parameter returned by <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true#getInitParameter-java.lang.String-" title="class or interface in javax.servlet"><code>ServletConfig.getInitParameter(String)</code></a>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1676,7 +1677,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getChildResources</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1317">getChildResources</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1418">getChildResources</a>()</pre>
 <div class="block">Returns the child resources associated with this servlet.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1691,7 +1692,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getStackTraceOccurrence</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1329">getStackTraceOccurrence</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1430">getStackTraceOccurrence</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <div class="block">Returns the number of times this exception was thrown based on a hash of its stacktrace.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1708,7 +1709,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>isRenderResponseStackTraces</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1342">isRenderResponseStackTraces</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1443">isRenderResponseStackTraces</a>()</pre>
 <div class="block">Returns the value of the <a href="../../../../org/apache/juneau/rest/RestContext.html#REST_renderResponseStackTraces"><code>REST_renderResponseStackTraces</code></a> setting.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1722,7 +1723,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>isAllowHeaderParams</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1351">isAllowHeaderParams</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1452">isAllowHeaderParams</a>()</pre>
 <div class="block">Returns the value of the <a href="../../../../org/apache/juneau/rest/RestContext.html#REST_allowHeaderParams"><code>REST_allowHeaderParams</code></a> setting.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1736,7 +1737,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>isAllowBodyParam</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1360">isAllowBodyParam</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1461">isAllowBodyParam</a>()</pre>
 <div class="block">Returns the value of the <a href="../../../../org/apache/juneau/rest/RestContext.html#REST_allowBodyParam"><code>REST_allowBodyParam</code></a> setting.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1750,7 +1751,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultCharset</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1369">getDefaultCharset</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1470">getDefaultCharset</a>()</pre>
 <div class="block">Returns the value of the <a href="../../../../org/apache/juneau/rest/RestContext.html#REST_defaultCharset"><code>REST_defaultCharset</code></a> setting.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1764,7 +1765,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getParamFormat</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1378">getParamFormat</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1479">getParamFormat</a>()</pre>
 <div class="block">Returns the value of the <a href="../../../../org/apache/juneau/rest/RestContext.html#REST_paramFormat"><code>REST_paramFormat</code></a> setting.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1778,7 +1779,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getClientVersionHeader</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1396">getClientVersionHeader</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1497">getClientVersionHeader</a>()</pre>
 <div class="block">Returns the name of the client version header name used by this resource.
 
  <p>
@@ -1801,7 +1802,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>allowMethodParam</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1407">allowMethodParam</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;m)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1508">allowMethodParam</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;m)</pre>
 <div class="block">Returns <jk>true</jk> if the specified <code>Method</code> GET parameter value can be used to override
  the method name in the HTTP header.</div>
 <dl>
@@ -1818,7 +1819,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getBeanFilters</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1423">getBeanFilters</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1524">getBeanFilters</a>()</pre>
 <div class="block">Returns the bean filters associated with this resource.
 
  <p>
@@ -1839,7 +1840,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getPojoSwaps</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1439">getPojoSwaps</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1540">getPojoSwaps</a>()</pre>
 <div class="block">Returns the POJO swaps associated with this resource.
 
  <p>
@@ -1854,15 +1855,16 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 </dl>
 </li>
 </ul>
-<a name="findParams-java.lang.reflect.Method-boolean-org.apache.juneau.rest.UrlPathPattern-">
+<a name="findParams-java.lang.reflect.Method-boolean-org.apache.juneau.rest.UrlPathPattern-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>findParams</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest">RestParam</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1452">findParams</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;method,
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest">RestParam</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1554">findParams</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;method,
                                  boolean&nbsp;methodPlainParams,
-                                 <a href="../../../../org/apache/juneau/rest/UrlPathPattern.html" title="class in org.apache.juneau.rest">UrlPathPattern</a>&nbsp;pathPattern)
+                                 <a href="../../../../org/apache/juneau/rest/UrlPathPattern.html" title="class in org.apache.juneau.rest">UrlPathPattern</a>&nbsp;pathPattern,
+                                 boolean&nbsp;isPreOrPost)
                           throws <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletException.html?is-external=true" title="class or interface in javax.servlet">ServletException</a></pre>
 <div class="block">Finds the <a href="../../../../org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest"><code>RestParam</code></a> instances to handle resolving objects on the calls to the specified Java method.</div>
 <dl>
@@ -1870,6 +1872,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <dd><code>method</code> - The Java method being called.</dd>
 <dd><code>methodPlainParams</code> - Whether plain-params setting is specified.</dd>
 <dd><code>pathPattern</code> - The parsed URL path pattern.</dd>
+<dd><code>isPreOrPost</code> - Whether this is a <ja>@RestMethodPre</ja> or <ja>@RestMethodPost</ja>.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>The array of resolvers.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1883,7 +1886,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getUrlEncodingParser</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/urlencoding/UrlEncodingParser.html" title="class in org.apache.juneau.urlencoding">UrlEncodingParser</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1529">getUrlEncodingParser</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/urlencoding/UrlEncodingParser.html" title="class in org.apache.juneau.urlencoding">UrlEncodingParser</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1753">getUrlEncodingParser</a>()</pre>
 <div class="block">Returns the URL-encoding parser associated with this resource.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1897,7 +1900,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getUrlEncodingSerializer</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/urlencoding/UrlEncodingSerializer.html" title="class in org.apache.juneau.urlencoding">UrlEncodingSerializer</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1538">getUrlEncodingSerializer</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/urlencoding/UrlEncodingSerializer.html" title="class in org.apache.juneau.urlencoding">UrlEncodingSerializer</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1762">getUrlEncodingSerializer</a>()</pre>
 <div class="block">Returns the URL-encoding serializer associated with this resource.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1911,7 +1914,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncoders</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/encoders/EncoderGroup.html" title="class in org.apache.juneau.encoders">EncoderGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1558">getEncoders</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/encoders/EncoderGroup.html" title="class in org.apache.juneau.encoders">EncoderGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1782">getEncoders</a>()</pre>
 <div class="block">Returns the encoders associated with this resource.
 
  <p>
@@ -1936,7 +1939,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getSupportedAcceptTypes</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1572">getSupportedAcceptTypes</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1796">getSupportedAcceptTypes</a>()</pre>
 <div class="block">Returns the explicit list of supported accept types for this resource.
 
  <p>
@@ -1955,7 +1958,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getSupportedContentTypes</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1586">getSupportedContentTypes</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1810">getSupportedContentTypes</a>()</pre>
 <div class="block">Returns the explicit list of supported content types for this resource.
 
  <p>
@@ -1974,7 +1977,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRequestHeaders</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1605">getDefaultRequestHeaders</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1829">getDefaultRequestHeaders</a>()</pre>
 <div class="block">Returns the default request headers for this resource.
 
  <p>
@@ -1998,7 +2001,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultResponseHeaders</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1625">getDefaultResponseHeaders</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1849">getDefaultResponseHeaders</a>()</pre>
 <div class="block">Returns the default response headers for this resource.
 
  <p>
@@ -2023,7 +2026,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getConverters</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest">RestConverter</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1644">getConverters</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest">RestConverter</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1868">getConverters</a>()</pre>
 <div class="block">Returns the converters associated with this resource at the class level.
 
  <p>
@@ -2047,7 +2050,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getGuards</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest">RestGuard</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1663">getGuards</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest">RestGuard</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1887">getGuards</a>()</pre>
 <div class="block">Returns the guards associated with this resource at the class level.
 
  <p>
@@ -2071,7 +2074,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getResponseHandlers</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/ResponseHandler.html" title="interface in org.apache.juneau.rest">ResponseHandler</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1683">getResponseHandlers</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/ResponseHandler.html" title="interface in org.apache.juneau.rest">ResponseHandler</a>[]&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1907">getResponseHandlers</a>()</pre>
 <div class="block">Returns the response handlers associated with this resource.
 
  <p>
@@ -2096,7 +2099,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getMediaTypeForName</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1697">getMediaTypeForName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1921">getMediaTypeForName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the media type for the specified file name.
 
  <p>
@@ -2116,7 +2119,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavIcon</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/StreamResource.html" title="class in org.apache.juneau.rest">StreamResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1716">getFavIcon</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/StreamResource.html" title="class in org.apache.juneau.rest">StreamResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1940">getFavIcon</a>()</pre>
 <div class="block">Returns the favicon of the resource.
 
  <p>
@@ -2140,7 +2143,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>isStaticFile</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1736">isStaticFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1960">isStaticFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p)</pre>
 <div class="block">Returns <jk>true</jk> if the specified path refers to a static file.
 
  <p>
@@ -2166,7 +2169,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>getCallMethods</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.juneau.rest.CallMethod&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1748">getCallMethods</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.juneau.rest.CallMethod&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1972">getCallMethods</a>()</pre>
 <div class="block">Returns the REST Java methods defined in this resource.
 
  <p>
@@ -2183,7 +2186,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>destroy</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1755">destroy</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1979">destroy</a>()</pre>
 <div class="block">Calls <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#destroy--" title="class or interface in javax.servlet"><code>Servlet.destroy()</code></a> on any child resources defined on this resource.</div>
 </li>
 </ul>
@@ -2193,7 +2196,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockList">
 <li class="blockList">
 <h4>hasChildResources</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1768">hasChildResources</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.2000">hasChildResources</a>()</pre>
 <div class="block">Returns <jk>true</jk> if this resource has any child resources associated with it.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2207,7 +2210,7 @@ extends <a href="../../../../org/apache/juneau/Context.html" title="class in org
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getChildResource</h4>
-<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.1778">getChildResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>protected&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestContext.html#line.2010">getChildResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 <div class="block">Returns the context of the child resource associated with the specified path.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>


[25/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
Add @RestHook support.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/commit/84931d4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/tree/84931d4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/diff/84931d4d

Branch: refs/heads/asf-site
Commit: 84931d4dbe54a6cfd2caeb1924b366b3a62d0ee9
Parents: 58c75a0
Author: JamesBognar <ja...@apache.org>
Authored: Sun Aug 13 20:27:25 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Sun Aug 13 20:27:25 2017 -0400

----------------------------------------------------------------------
 content/site/apidocs/allclasses-frame.html      |    2 +
 content/site/apidocs/allclasses-noframe.html    |    2 +
 content/site/apidocs/index-all.html             |  109 +-
 .../juneau/html/HtmlBeanPropertyMeta.html       |   49 +-
 .../org/apache/juneau/html/annotation/Html.html |   49 +-
 .../org/apache/juneau/internal/ClassUtils.html  |  214 +-
 .../org/apache/juneau/internal/StringUtils.html |   54 +-
 .../apache/juneau/microservice/Resource.html    |   43 +-
 .../juneau/microservice/ResourceGroup.html      |   43 +-
 .../juneau/microservice/ResourceJena.html       |    2 +-
 .../juneau/microservice/ResourceJenaGroup.html  |   43 +-
 .../juneau/microservice/RestMicroservice.html   |  162 +-
 .../juneau/microservice/package-summary.html    |    4 +-
 .../juneau/microservice/package-tree.html       |    2 +-
 .../microservice/resources/ConfigResource.html  |    4 +-
 .../resources/DirectoryResource.html            |    4 +-
 .../resources/LogsResource.FileResource.html    |   22 +-
 .../microservice/resources/LogsResource.html    |   54 +-
 .../resources/SampleRootResource.html           |    4 +-
 .../resources/ShutdownResource.html             |    4 +-
 .../microservice/resources/package-tree.html    |    2 +-
 .../org/apache/juneau/rest/RestCallHandler.html |  113 +-
 .../org/apache/juneau/rest/RestConfig.html      |  142 +-
 .../org/apache/juneau/rest/RestContext.html     |  157 +-
 .../org/apache/juneau/rest/RestRequest.html     |  114 +-
 .../org/apache/juneau/rest/RestResponse.html    |   48 +-
 .../org/apache/juneau/rest/RestServlet.html     |  173 +-
 .../apache/juneau/rest/RestServletDefault.html  |    2 +-
 .../juneau/rest/RestServletGroupDefault.html    |    2 +-
 .../apache/juneau/rest/annotation/Header.html   |    4 +-
 .../juneau/rest/annotation/HookEvent.html       |  783 ++++
 .../apache/juneau/rest/annotation/HtmlDoc.html  |    4 +-
 .../apache/juneau/rest/annotation/Response.html |    4 +-
 .../apache/juneau/rest/annotation/RestHook.html |  271 ++
 .../juneau/rest/annotation/RestMethod.html      |    4 +-
 .../juneau/rest/annotation/package-frame.html   |    2 +
 .../juneau/rest/annotation/package-summary.html |   16 +-
 .../juneau/rest/annotation/package-tree.html    |    2 +
 .../juneau/rest/jaxrs/package-summary.html      |  237 +-
 .../juneau/rest/jaxrs/rdf/package-summary.html  |    4 +-
 .../rest/jena/RestServletJenaDefault.html       |    2 +-
 .../rest/jena/RestServletJenaGroupDefault.html  |    2 +-
 .../apache/juneau/rest/jena/package-tree.html   |    2 +-
 .../org/apache/juneau/rest/package-summary.html |   23 +-
 .../org/apache/juneau/rest/package-tree.html    |    2 +-
 .../rest/remoteable/RemoteableServlet.html      |    2 +-
 .../juneau/rest/remoteable/package-tree.html    |    2 +-
 content/site/apidocs/overview-summary.html      |   57 +-
 content/site/apidocs/overview-tree.html         |    4 +-
 .../juneau/html/HtmlBeanPropertyMeta.html       |  195 +-
 .../juneau/html/HtmlSerializerSession.html      |  673 ++--
 .../org/apache/juneau/html/annotation/Html.html |   21 +-
 .../internal/ClassUtils.ClassComparator.html    |  438 ++-
 .../juneau/internal/ClassUtils.MethodInfo.html  |  438 ++-
 .../org/apache/juneau/internal/ClassUtils.html  |  438 ++-
 .../org/apache/juneau/internal/StringUtils.html | 1233 +++---
 .../apache/juneau/microservice/Resource.html    |  110 +-
 .../juneau/microservice/ResourceGroup.html      |  112 +-
 .../juneau/microservice/ResourceJenaGroup.html  |  114 +-
 .../juneau/microservice/RestMicroservice.html   | 1299 +++---
 .../resources/LogsResource.FileResource.html    |  646 +--
 .../microservice/resources/LogsResource.html    |  646 +--
 .../org/apache/juneau/rest/RequestBody.html     |   19 +-
 .../org/apache/juneau/rest/RestCallHandler.html |  514 ++-
 .../org/apache/juneau/rest/RestConfig.html      | 3049 +++++++-------
 .../org/apache/juneau/rest/RestContext.html     | 3704 ++++++++++--------
 .../org/apache/juneau/rest/RestRequest.html     | 2121 +++++-----
 .../org/apache/juneau/rest/RestResponse.html    |  966 ++---
 .../org/apache/juneau/rest/RestServlet.html     |  452 +--
 .../apache/juneau/rest/RestServletDefault.html  |    2 +-
 .../juneau/rest/annotation/HookEvent.html       |  491 +++
 .../apache/juneau/rest/annotation/RestHook.html |  158 +
 .../rest/jena/RestServletJenaDefault.html       |    2 +-
 .../juneau/rest/widget/StyleMenuItem.html       |    2 +-
 74 files changed, 11412 insertions(+), 9481 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/allclasses-frame.html b/content/site/apidocs/allclasses-frame.html
index 3b73272..2e1051a 100644
--- a/content/site/apidocs/allclasses-frame.html
+++ b/content/site/apidocs/allclasses-frame.html
@@ -275,6 +275,7 @@
 <li><a href="org/apache/juneau/http/HeaderString.html" title="class in org.apache.juneau.http" target="classFrame">HeaderString</a></li>
 <li><a href="org/apache/juneau/http/HeaderStringArray.html" title="class in org.apache.juneau.http" target="classFrame">HeaderStringArray</a></li>
 <li><a href="org/apache/juneau/http/HeaderUri.html" title="class in org.apache.juneau.http" target="classFrame">HeaderUri</a></li>
+<li><a href="org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation" target="classFrame">HookEvent</a></li>
 <li><a href="org/apache/juneau/http/Host.html" title="class in org.apache.juneau.http" target="classFrame">Host</a></li>
 <li><a href="org/apache/juneau/dto/html5/Hr.html" title="class in org.apache.juneau.dto.html5" target="classFrame">Hr</a></li>
 <li><a href="org/apache/juneau/dto/html5/Html.html" title="class in org.apache.juneau.dto.html5" target="classFrame">Html</a></li>
@@ -582,6 +583,7 @@
 <li><a href="org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest" target="classFrame"><span class="interfaceName">RestConverter</span></a></li>
 <li><a href="org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest" target="classFrame">RestException</a></li>
 <li><a href="org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest" target="classFrame">RestGuard</a></li>
+<li><a href="org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation" target="classFrame">RestHook</a></li>
 <li><a href="org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest" target="classFrame">RestInfoProvider</a></li>
 <li><a href="org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest" target="classFrame">RestLogger</a></li>
 <li><a href="org/apache/juneau/rest/RestLogger.NoOp.html" title="class in org.apache.juneau.rest" target="classFrame">RestLogger.NoOp</a></li>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/allclasses-noframe.html b/content/site/apidocs/allclasses-noframe.html
index d1391eb..05b9365 100644
--- a/content/site/apidocs/allclasses-noframe.html
+++ b/content/site/apidocs/allclasses-noframe.html
@@ -275,6 +275,7 @@
 <li><a href="org/apache/juneau/http/HeaderString.html" title="class in org.apache.juneau.http">HeaderString</a></li>
 <li><a href="org/apache/juneau/http/HeaderStringArray.html" title="class in org.apache.juneau.http">HeaderStringArray</a></li>
 <li><a href="org/apache/juneau/http/HeaderUri.html" title="class in org.apache.juneau.http">HeaderUri</a></li>
+<li><a href="org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a></li>
 <li><a href="org/apache/juneau/http/Host.html" title="class in org.apache.juneau.http">Host</a></li>
 <li><a href="org/apache/juneau/dto/html5/Hr.html" title="class in org.apache.juneau.dto.html5">Hr</a></li>
 <li><a href="org/apache/juneau/dto/html5/Html.html" title="class in org.apache.juneau.dto.html5">Html</a></li>
@@ -582,6 +583,7 @@
 <li><a href="org/apache/juneau/rest/RestConverter.html" title="interface in org.apache.juneau.rest"><span class="interfaceName">RestConverter</span></a></li>
 <li><a href="org/apache/juneau/rest/RestException.html" title="class in org.apache.juneau.rest">RestException</a></li>
 <li><a href="org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest">RestGuard</a></li>
+<li><a href="org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation">RestHook</a></li>
 <li><a href="org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest">RestInfoProvider</a></li>
 <li><a href="org/apache/juneau/rest/RestLogger.html" title="class in org.apache.juneau.rest">RestLogger</a></li>
 <li><a href="org/apache/juneau/rest/RestLogger.NoOp.html" title="class in org.apache.juneau.rest">RestLogger.NoOp</a></li>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/index-all.html b/content/site/apidocs/index-all.html
index 1c00e57..007a6a2 100644
--- a/content/site/apidocs/index-all.html
+++ b/content/site/apidocs/index-all.html
@@ -351,6 +351,18 @@
 <dd>
 <div class="block">Add a dictionary name mapping for the specified collection class with the specified entry class.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Resource.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></dt>
+<dd>
+<div class="block">Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/ResourceGroup.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/ResourceGroup.html" title="class in org.apache.juneau.microservice">ResourceGroup</a></dt>
+<dd>
+<div class="block">Initializes the registry URL and rest clent.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/ResourceJenaGroup.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/ResourceJenaGroup.html" title="class in org.apache.juneau.microservice">ResourceJenaGroup</a></dt>
+<dd>
+<div class="block">Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/swagger/Operation.html#addConsumes-org.apache.juneau.http.MediaType...-">addConsumes(MediaType...)</a></span> - Method in class org.apache.juneau.dto.swagger.<a href="org/apache/juneau/dto/swagger/Operation.html" title="class in org.apache.juneau.dto.swagger">Operation</a></dt>
 <dd>
 <div class="block">Bean property adder:  <property>consumes</property>.</div>
@@ -1435,6 +1447,10 @@
 <dd>
 <div class="block">Returns the list of the media ranges that make up this header.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ClassUtils.html#assertArgsOfType-java.lang.reflect.Method-java.lang.Class...-">assertArgsOfType(Method, Class&lt;?&gt;...)</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ClassUtils.html" title="class in org.apache.juneau.internal">ClassUtils</a></dt>
+<dd>
+<div class="block">Throws an <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><code>IllegalArgumentException</code></a> if the parameters on the method are not in the specified list provided.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ThrowableUtils.html#assertFieldNotNull-java.lang.Object-java.lang.String-">assertFieldNotNull(Object, String)</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ThrowableUtils.html" title="class in org.apache.juneau.internal">ThrowableUtils</a></dt>
 <dd>
 <div class="block">Throws an <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><code>IllegalArgumentException</code></a> if the specified field is <jk>null</jk>.</div>
@@ -7336,7 +7352,7 @@
 <dd>
 <div class="block">Returns the first entry that exists converted to a <a href="org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau"><code>ObjectMap</code></a>.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestContext.html#findParams-java.lang.reflect.Method-boolean-org.apache.juneau.rest.UrlPathPattern-">findParams(Method, boolean, UrlPathPattern)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestContext.html#findParams-java.lang.reflect.Method-boolean-org.apache.juneau.rest.UrlPathPattern-boolean-">findParams(Method, boolean, UrlPathPattern, boolean)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a></dt>
 <dd>
 <div class="block">Finds the <a href="org/apache/juneau/rest/RestParam.html" title="class in org.apache.juneau.rest"><code>RestParam</code></a> instances to handle resolving objects on the calls to the specified Java method.</div>
 </dd>
@@ -8162,6 +8178,10 @@
 <dd>
 <div class="block">Bean property getter:  <property>allowEmptyValue</property>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/html/HtmlBeanPropertyMeta.html#getAnchorText--">getAnchorText()</a></span> - Method in class org.apache.juneau.html.<a href="org/apache/juneau/html/HtmlBeanPropertyMeta.html" title="class in org.apache.juneau.html">HtmlBeanPropertyMeta</a></dt>
+<dd>
+<div class="block">Specifies the anchor text for this property.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/html/HtmlSerializerSession.html#getAnchorText-org.apache.juneau.BeanPropertyMeta-java.lang.Object-">getAnchorText(BeanPropertyMeta, Object)</a></span> - Method in class org.apache.juneau.html.<a href="org/apache/juneau/html/HtmlSerializerSession.html" title="class in org.apache.juneau.html">HtmlSerializerSession</a></dt>
 <dd>
 <div class="block">Returns the anchor text to use for the specified URL object.</div>
@@ -11412,10 +11432,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestConfig.html#getServletContext--">getServletContext()</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/RestMicroservice.html#getServletContextHandler--">getServletContextHandler()</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></dt>
-<dd>
-<div class="block">Returns the underlying servlet context handler.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestRequest.html#getServletDescription--">getServletDescription()</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a></dt>
 <dd>
 <div class="block">Returns the localized servlet description.</div>
@@ -12654,6 +12670,11 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html#highlighted">highlighted</a></span> - Variable in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.FileResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource.FileResource</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation"><span class="typeNameLink">HookEvent</span></a> - Enum in <a href="org/apache/juneau/rest/annotation/package-summary.html">org.apache.juneau.rest.annotation</a></dt>
+<dd>
+<div class="block">Identifies servlet and REST call lifecycle events which cause <a href="org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><code>@RestHook</code></a>-annotated Java methods
+ to be called.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/swagger/Swagger.html#host-java.lang.String-">host(String)</a></span> - Method in class org.apache.juneau.dto.swagger.<a href="org/apache/juneau/dto/swagger/Swagger.html" title="class in org.apache.juneau.dto.swagger">Swagger</a></dt>
 <dd>
 <div class="block">Synonym for <a href="org/apache/juneau/dto/swagger/Swagger.html#setHost-java.lang.String-"><code>Swagger.setHost(String)</code></a>.</div>
@@ -14189,22 +14210,14 @@
 <div class="block">Inheritance values for the <a href="org/apache/juneau/rest/annotation/RestMethod.html#serializersInherit--"><code>RestMethod.serializersInherit()</code></a> and <a href="org/apache/juneau/rest/annotation/RestMethod.html#parsersInherit--"><code>RestMethod.parsersInherit()</code></a>
  annotations.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-">init(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/ResourceGroup.html#init-org.apache.juneau.rest.RestConfig-">init(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/ResourceGroup.html" title="class in org.apache.juneau.microservice">ResourceGroup</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/ResourceJenaGroup.html#init-org.apache.juneau.rest.RestConfig-">init(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/ResourceJenaGroup.html" title="class in org.apache.juneau.microservice">ResourceJenaGroup</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/DirectoryResource.html#init--">init()</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/DirectoryResource.html" title="class in org.apache.juneau.microservice.resources">DirectoryResource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/resources/LogsResource.html#init-org.apache.juneau.rest.RestConfig-">init(RestConfig)</a></span> - Method in class org.apache.juneau.microservice.resources.<a href="org/apache/juneau/microservice/resources/LogsResource.html" title="class in org.apache.juneau.microservice.resources">LogsResource</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init(ServletConfig)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init(RestConfig)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
 <dd>
-<div class="block">Resource initialization method.</div>
+<div class="block">Initializes the log directory and formatter.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init(ServletConfig)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init(RestContext)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
 <dd>
 <div class="block">Convenience method if you want to perform initialization on your resource after all configuration settings
@@ -17976,16 +17989,6 @@
 <dd>
 <div class="block"><a class="./org/apache/juneau/dto/html5/doclink" href="https://www.w3.org/TR/html5/webappapis.html#handler-onplaying">onplaying</a> attribute.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestCallHandler.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall(RestRequest, RestResponse)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a></dt>
-<dd>
-<div class="block">Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is
- invoked.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall(RestRequest, RestResponse)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
-<dd>
-<div class="block">Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is
- invoked.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/RestMicroservice.html#onPostStartServer--">onPostStartServer()</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></dt>
 <dd>
 <div class="block">Called after the Jetty server is started.</div>
@@ -17994,14 +17997,6 @@
 <dd>
 <div class="block">Called after the Jetty server is stopped.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestCallHandler.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall(RestRequest)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a></dt>
-<dd>
-<div class="block">Callback method that gets invoked right before the REST Java method is invoked.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall(RestRequest)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
-<dd>
-<div class="block">Callback method that gets invoked right before the REST Java method is invoked.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/html5/HtmlElement.html#onprogress-java.lang.String-">onprogress(String)</a></span> - Method in class org.apache.juneau.dto.html5.<a href="org/apache/juneau/dto/html5/HtmlElement.html" title="class in org.apache.juneau.dto.html5">HtmlElement</a></dt>
 <dd>
 <div class="block"><a class="./org/apache/juneau/dto/html5/doclink" href="https://www.w3.org/TR/html5/webappapis.html#handler-onprogress">onprogress</a> attribute.</div>
@@ -18082,14 +18077,6 @@
 <dd>
 <div class="block"><a class="./org/apache/juneau/dto/html5/doclink" href="https://www.w3.org/TR/html5/webappapis.html#handler-onsubmit">onsubmit</a> attribute.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestCallHandler.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess(RestRequest, RestResponse, long)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestCallHandler.html" title="class in org.apache.juneau.rest">RestCallHandler</a></dt>
-<dd>
-<div class="block">Callback method for listening for successful completion of requests.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess(RestRequest, RestResponse, long)</a></span> - Method in class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></dt>
-<dd>
-<div class="block">Callback method for listening for successful completion of requests.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/html5/HtmlElement.html#onsuspend-java.lang.String-">onsuspend(String)</a></span> - Method in class org.apache.juneau.dto.html5.<a href="org/apache/juneau/dto/html5/HtmlElement.html" title="class in org.apache.juneau.dto.html5">HtmlElement</a></dt>
 <dd>
 <div class="block"><a class="./org/apache/juneau/dto/html5/doclink" href="https://www.w3.org/TR/html5/webappapis.html#handler-onsuspend">onsuspend</a> attribute.</div>
@@ -18295,11 +18282,11 @@
 </dd>
 <dt><a href="org/apache/juneau/rest/jaxrs/package-summary.html">org.apache.juneau.rest.jaxrs</a> - package org.apache.juneau.rest.jaxrs</dt>
 <dd>
-<div class="block">JAX-RS / Wink integration components</div>
+<div class="block">JAX-RS integration components</div>
 </dd>
 <dt><a href="org/apache/juneau/rest/jaxrs/rdf/package-summary.html">org.apache.juneau.rest.jaxrs.rdf</a> - package org.apache.juneau.rest.jaxrs.rdf</dt>
 <dd>
-<div class="block">JAX-RS / Wink integration components with RDF support</div>
+<div class="block">JAX-RS integration components with RDF support</div>
 </dd>
 <dt><a href="org/apache/juneau/rest/jena/package-summary.html">org.apache.juneau.rest.jena</a> - package org.apache.juneau.rest.jena</dt>
 <dd>
@@ -21969,6 +21956,11 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/RestGuard.html#RestGuard--">RestGuard()</a></span> - Constructor for class org.apache.juneau.rest.<a href="org/apache/juneau/rest/RestGuard.html" title="class in org.apache.juneau.rest">RestGuard</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation"><span class="typeNameLink">RestHook</span></a> - Annotation Type in <a href="org/apache/juneau/rest/annotation/package-summary.html">org.apache.juneau.rest.annotation</a></dt>
+<dd>
+<div class="block">Identifies Java methods on a resource/servlet class that get invoked during particular lifecycle events of
+ the servlet or REST call.</div>
+</dd>
 <dt><a href="org/apache/juneau/rest/RestInfoProvider.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestInfoProvider</span></a> - Class in <a href="org/apache/juneau/rest/package-summary.html">org.apache.juneau.rest</a></dt>
 <dd>
 <div class="block">Class that provides documentation and other related information about a REST resource.</div>
@@ -23852,6 +23844,10 @@
 <dd>
 <div class="block">Bean property setter:  <property>items</property>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/microservice/RestMicroservice.html#setJettyXml-java.lang.Object-">setJettyXml(Object)</a></span> - Method in class org.apache.juneau.microservice.<a href="org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></dt>
+<dd>
+<div class="block">Sets the <code>jetty.xml</code> used to configure the Jetty server.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/client/RestClientBuilder.html#setKeepAliveStrategy-org.apache.http.conn.ConnectionKeepAliveStrategy-">setKeepAliveStrategy(ConnectionKeepAliveStrategy)</a></span> - Method in class org.apache.juneau.rest.client.<a href="org/apache/juneau/rest/client/RestClientBuilder.html" title="class in org.apache.juneau.rest.client">RestClientBuilder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/dto/cognos/Column.html#setLength-java.lang.Integer-">setLength(Integer)</a></span> - Method in class org.apache.juneau.dto.cognos.<a href="org/apache/juneau/dto/cognos/Column.html" title="class in org.apache.juneau.dto.cognos">Column</a></dt>
@@ -25109,6 +25105,14 @@
 <dd>
 <div class="block">Create a new session using properties specified in the context.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ClassUtils.html#sort-java.lang.reflect.Method:A-">sort(Method[])</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ClassUtils.html" title="class in org.apache.juneau.internal">ClassUtils</a></dt>
+<dd>
+<div class="block">Sorts methods in alphabetical order.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ClassUtils.html#sort-java.lang.reflect.Field:A-">sort(Field[])</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ClassUtils.html" title="class in org.apache.juneau.internal">ClassUtils</a></dt>
+<dd>
+<div class="block">Sorts methods in alphabetical order.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/serializer/SerializerSession.html#sort-java.util.Map-">sort(Map&lt;K, V&gt;)</a></span> - Method in class org.apache.juneau.serializer.<a href="org/apache/juneau/serializer/SerializerSession.html" title="class in org.apache.juneau.serializer">SerializerSession</a></dt>
 <dd>
 <div class="block">Sorts the specified map if <a href="org/apache/juneau/serializer/SerializerSession.html#isSortMaps--"><code>SerializerSession.isSortMaps()</code></a> returns <jk>true</jk>.</div>
@@ -26924,6 +26928,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/CharSequenceReader.html#toString--">toString()</a></span> - Method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/CharSequenceReader.html" title="class in org.apache.juneau.internal">CharSequenceReader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ClassUtils.html#toString-java.lang.reflect.Method-">toString(Method)</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ClassUtils.html" title="class in org.apache.juneau.internal">ClassUtils</a></dt>
+<dd>
+<div class="block">Returns a readable representation of the specified method.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/internal/ClassUtils.html#toString-java.lang.reflect.Field-">toString(Field)</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/ClassUtils.html" title="class in org.apache.juneau.internal">ClassUtils</a></dt>
+<dd>
+<div class="block">Returns a readable representation of the specified field.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/StringBuilderWriter.html#toString--">toString()</a></span> - Method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/StringBuilderWriter.html" title="class in org.apache.juneau.internal">StringBuilderWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/internal/StringUtils.html#toString-java.lang.Object-">toString(Object)</a></span> - Static method in class org.apache.juneau.internal.<a href="org/apache/juneau/internal/StringUtils.html" title="class in org.apache.juneau.internal">StringUtils</a></dt>
@@ -28460,6 +28472,10 @@
 <dd>
 <div class="block">Returns the enum constant of this type with the specified name.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/annotation/HookEvent.html#valueOf-java.lang.String-">valueOf(String)</a></span> - Static method in enum org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a></dt>
+<dd>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/annotation/Inherit.html#valueOf-java.lang.String-">valueOf(String)</a></span> - Static method in enum org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation">Inherit</a></dt>
 <dd>
 <div class="block">Returns the enum constant of this type with the specified name.</div>
@@ -28543,6 +28559,11 @@ the order they are declared.</div>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/juneau/rest/annotation/HookEvent.html#values--">values()</a></span> - Static method in enum org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/HookEvent.html" title="enum in org.apache.juneau.rest.annotation">HookEvent</a></dt>
+<dd>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/juneau/rest/annotation/Inherit.html#values--">values()</a></span> - Static method in enum org.apache.juneau.rest.annotation.<a href="org/apache/juneau/rest/annotation/Inherit.html" title="enum in org.apache.juneau.rest.annotation">Inherit</a></dt>
 <dd>
 <div class="block">Returns an array containing the constants of this enum type, in

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/html/HtmlBeanPropertyMeta.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/html/HtmlBeanPropertyMeta.html b/content/site/apidocs/org/apache/juneau/html/HtmlBeanPropertyMeta.html
index b17862b..1657746 100644
--- a/content/site/apidocs/org/apache/juneau/html/HtmlBeanPropertyMeta.html
+++ b/content/site/apidocs/org/apache/juneau/html/HtmlBeanPropertyMeta.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -156,35 +156,41 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#getAnchorText--">getAnchorText</a></span>()</code>
+<div class="block">Specifies the anchor text for this property.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#getLink--">getLink</a></span>()</code>
 <div class="block">Adds a hyperlink to this value in HTML.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/html/HtmlRender.html" title="class in org.apache.juneau.html">HtmlRender</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#getRender--">getRender</a></span>()</code>
 <div class="block">Returns the render class for rendering the style and contents of this property value in HTML.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#isAsPlainText--">isAsPlainText</a></span>()</code>
 <div class="block">Returns whether this bean property should be serialized as plain text instead of HTML.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#isAsXml--">isAsXml</a></span>()</code>
 <div class="block">Returns whether this bean property should be serialized as XML instead of HTML.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#isNoTableHeaders--">isNoTableHeaders</a></span>()</code>
 <div class="block">Returns whether this bean property should not include table headers when serialized as an HTML table.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/html/HtmlBeanPropertyMeta.html#isNoTables--">isNoTables</a></span>()</code>
 <div class="block">Returns whether this bean property should not be serialized as an HTML table.</div>
@@ -250,7 +256,7 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isAsXml</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.82">isAsXml</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.85">isAsXml</a>()</pre>
 <div class="block">Returns whether this bean property should be serialized as XML instead of HTML.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -264,7 +270,7 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isAsPlainText</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.93">isAsPlainText</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.96">isAsPlainText</a>()</pre>
 <div class="block">Returns whether this bean property should be serialized as plain text instead of HTML.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -279,7 +285,7 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isNoTables</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.104">isNoTables</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.107">isNoTables</a>()</pre>
 <div class="block">Returns whether this bean property should not be serialized as an HTML table.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -294,7 +300,7 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>isNoTableHeaders</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.115">isNoTableHeaders</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.118">isNoTableHeaders</a>()</pre>
 <div class="block">Returns whether this bean property should not include table headers when serialized as an HTML table.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -309,7 +315,7 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>getRender</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/html/HtmlRender.html" title="class in org.apache.juneau.html">HtmlRender</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.127">getRender</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/html/HtmlRender.html" title="class in org.apache.juneau.html">HtmlRender</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.130">getRender</a>()</pre>
 <div class="block">Returns the render class for rendering the style and contents of this property value in HTML.
 
  <p>
@@ -323,10 +329,10 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 <a name="getLink--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getLink</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.139">getLink</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.142">getLink</a>()</pre>
 <div class="block">Adds a hyperlink to this value in HTML.
 
  <p>
@@ -337,6 +343,23 @@ extends <a href="../../../../org/apache/juneau/BeanPropertyMetaExtended.html" ti
 </dl>
 </li>
 </ul>
+<a name="getAnchorText--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getAnchorText</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/html/HtmlBeanPropertyMeta.html#line.154">getAnchorText</a>()</pre>
+<div class="block">Specifies the anchor text for this property.
+
+ <p>
+ This value is specified via the <a href="../../../../org/apache/juneau/html/annotation/Html.html#anchorText--"><code>Html.anchorText()</code></a> annotation.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The link string, or <jk>null</jk> if not specified.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/html/annotation/Html.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/html/annotation/Html.html b/content/site/apidocs/org/apache/juneau/html/annotation/Html.html
index 1e62822..3cd1934 100644
--- a/content/site/apidocs/org/apache/juneau/html/annotation/Html.html
+++ b/content/site/apidocs/org/apache/juneau/html/annotation/Html.html
@@ -117,36 +117,42 @@ public @interface <a href="../../../../../src-html/org/apache/juneau/html/annota
 <th class="colLast" scope="col">Optional Element and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#anchorText--">anchorText</a></span></code>
+<div class="block">Use the specified anchor text when serializing a URI.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#asPlainText--">asPlainText</a></span></code>
 <div class="block">Treat as plain text.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#asXml--">asXml</a></span></code>
 <div class="block">Treat as XML.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#link--">link</a></span></code>
 <div class="block">Adds a hyperlink to a bean property when rendered as HTML.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#noTableHeaders--">noTableHeaders</a></span></code>
 <div class="block">When <jk>true</jk>, don't add headers to tables.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#noTables--">noTables</a></span></code>
 <div class="block">When <jk>true</jk>, collections of beans should be rendered as trees instead of tables.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/juneau/html/HtmlRender.html" title="class in org.apache.juneau.html">HtmlRender</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/juneau/html/annotation/Html.html#render--">render</a></span></code>
 <div class="block">Associates an <a href="../../../../../org/apache/juneau/html/HtmlRender.html" title="class in org.apache.juneau.html"><code>HtmlRender</code></a> with a bean property for custom HTML rendering of the property.</div>
@@ -271,7 +277,7 @@ public @interface <a href="../../../../../src-html/org/apache/juneau/html/annota
 <li class="blockList"><a name="link--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>link</h4>
 <pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/html/annotation/Html.html#line.100">link</a></pre>
@@ -308,6 +314,37 @@ public @interface <a href="../../../../../src-html/org/apache/juneau/html/annota
 </ul>
 </li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="anchorText--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>anchorText</h4>
+<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/juneau/html/annotation/Html.html#line.119">anchorText</a></pre>
+<div class="block">Use the specified anchor text when serializing a URI.
+
+ <p>
+ The text can contain any bean property values resolved through variables of the form <js>"{property-name}"</js>.
+
+ <h6 class='figure'>Example:</h6>
+ <p class='bcode'>
+   <jk>public class</jk> FileSpace {
+
+      <ja>@Html</ja>(anchorText=<js>"drive/{drive}"</js>)
+      <jk>public</jk> String getDrive() {
+         ...;
+      }
+   }
+ </p></div>
+<dl>
+<dt>Default:</dt>
+<dd>""</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
 </li>
 </ul>
 </div>


[09/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html b/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
index ae5b08a..3b7caa2 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
@@ -23,331 +23,337 @@
 <span class="sourceLineNo">015</span>import static javax.servlet.http.HttpServletResponse.*;<a name="line.15"></a>
 <span class="sourceLineNo">016</span>import static org.apache.juneau.html.HtmlDocSerializerContext.*;<a name="line.16"></a>
 <span class="sourceLineNo">017</span>import static org.apache.juneau.rest.RestContext.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.*;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.net.URI;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.nio.charset.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.juneau.*;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.juneau.annotation.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.juneau.dto.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.juneau.ini.*;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.microservice.*;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.juneau.rest.*;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.juneau.rest.annotation.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.juneau.rest.annotation.Properties;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.rest.converters.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.juneau.transforms.*;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * REST resource for viewing and accessing log files.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>@RestResource(<a name="line.39"></a>
-<span class="sourceLineNo">040</span>   path="/logs",<a name="line.40"></a>
-<span class="sourceLineNo">041</span>   title="Log files",<a name="line.41"></a>
-<span class="sourceLineNo">042</span>   description="Log files from this service",<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   properties={<a name="line.43"></a>
-<span class="sourceLineNo">044</span>      @Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   },<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   flags={REST_allowMethodParam},<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   pojoSwaps={<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      IteratorSwap.class,       // Allows Iterators and Iterables to be serialized.<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      DateSwap.ISO8601DT.class  // Serialize Date objects as ISO8601 strings.<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   }<a name="line.50"></a>
-<span class="sourceLineNo">051</span>)<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@SuppressWarnings("nls")<a name="line.52"></a>
-<span class="sourceLineNo">053</span>public class LogsResource extends Resource {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   private static final long serialVersionUID = 1L;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>   private File logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   private LogEntryFormatter leFormatter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>   private final FileFilter filter = new FileFilter() {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      @Override /* FileFilter */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      public boolean accept(File f) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>         return f.isDirectory() || f.getName().endsWith(".log");<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      }<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   };<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>   @Override /* RestServlet */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   public synchronized void init(RestConfig config) throws Exception {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      super.init(config);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      ConfigFile cf = config.getConfigFile();<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>      logDir = new File(cf.getString("Logging/logDir", "."));<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      leFormatter = new LogEntryFormatter(<a name="line.72"></a>
-<span class="sourceLineNo">073</span>         cf.getString("Logging/format", "[{date} {level}] {msg}%n"),<a name="line.73"></a>
-<span class="sourceLineNo">074</span>         cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss"),<a name="line.74"></a>
-<span class="sourceLineNo">075</span>         cf.getBoolean("Logging/useStackTraceHashes")<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      );<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>   /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    * [GET /*] - Get file details or directory listing.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    *<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    * @param req The HTTP request<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    * @param res The HTTP response<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * @param properties The writable properties for setting the descriptions.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    * @param path The log file path.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * @return The log file.<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * @throws Exception<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   @RestMethod(<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      name="GET",<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      path="/*",<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      swagger=@MethodSwagger(<a name="line.92"></a>
-<span class="sourceLineNo">093</span>         responses={@Response(200),@Response(404)}<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      )<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   )<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   public Object getFileOrDirectory(RestRequest req, RestResponse res, @Properties ObjectMap properties, @PathRemainder String path) throws Exception {<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>      File f = getFile(path);<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>      if (f.isDirectory()) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>         Set&lt;FileResource&gt; l = new TreeSet&lt;FileResource&gt;(new FileResourceComparator());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>         File[] files = f.listFiles(filter);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>         if (files != null) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>            for (File fc : files) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>               URI fUrl = new URI("servlet:/" + fc.getName());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>               l.add(new FileResource(fc, fUrl));<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>         }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>         return l;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      return new FileResource(f, new URI("servlet:/"));<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>   /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    * [VIEW /*] - Retrieve the contents of a log file.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    * @param req The HTTP request.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    * @param res The HTTP response.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    * @param path The log file path.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    * @param properties The writable properties for setting the descriptions.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    * @param highlight If &lt;code&gt;true&lt;/code&gt;, add color highlighting based on severity.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    * @throws Exception<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   @RestMethod(<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      name="VIEW",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      path="/*",<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      swagger=@MethodSwagger(<a name="line.133"></a>
-<span class="sourceLineNo">134</span>         responses={@Response(200),@Response(404)}<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      )<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   )<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   @SuppressWarnings("nls")<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   public void viewFile(RestRequest req, RestResponse res, @PathRemainder String path, @Properties ObjectMap properties, @Query("highlight") boolean highlight, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>      File f = getFile(path);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (f.isDirectory())<a name="line.141"></a>
-<span class="sourceLineNo">142</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.144"></a>
+<span class="sourceLineNo">018</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.net.URI;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.nio.charset.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.annotation.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.dto.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.ini.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.microservice.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.rest.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.rest.annotation.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.rest.annotation.Properties;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.rest.converters.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.transforms.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * REST resource for viewing and accessing log files.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>@RestResource(<a name="line.40"></a>
+<span class="sourceLineNo">041</span>   path="/logs",<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   title="Log files",<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   description="Log files from this service",<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   properties={<a name="line.44"></a>
+<span class="sourceLineNo">045</span>      @Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   },<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   flags={REST_allowMethodParam},<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   pojoSwaps={<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      IteratorSwap.class,       // Allows Iterators and Iterables to be serialized.<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      DateSwap.ISO8601DT.class  // Serialize Date objects as ISO8601 strings.<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   }<a name="line.51"></a>
+<span class="sourceLineNo">052</span>)<a name="line.52"></a>
+<span class="sourceLineNo">053</span>@SuppressWarnings("nls")<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class LogsResource extends Resource {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   private static final long serialVersionUID = 1L;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>   private File logDir;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   private LogEntryFormatter leFormatter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>   private final FileFilter filter = new FileFilter() {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      @Override /* FileFilter */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      public boolean accept(File f) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>         return f.isDirectory() || f.getName().endsWith(".log");<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      }<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   };<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>   /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    * Initializes the log directory and formatter.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    * <a name="line.69"></a>
+<span class="sourceLineNo">070</span>    * @param config The resource config.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    * @throws Exception<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   @RestHook(INIT) <a name="line.73"></a>
+<span class="sourceLineNo">074</span>   public void init(RestConfig config) throws Exception {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      ConfigFile cf = config.getConfigFile();<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>      logDir = new File(cf.getString("Logging/logDir", "."));<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      leFormatter = new LogEntryFormatter(<a name="line.78"></a>
+<span class="sourceLineNo">079</span>         cf.getString("Logging/format", "[{date} {level}] {msg}%n"),<a name="line.79"></a>
+<span class="sourceLineNo">080</span>         cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss"),<a name="line.80"></a>
+<span class="sourceLineNo">081</span>         cf.getBoolean("Logging/useStackTraceHashes")<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      );<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>   /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    * [GET /*] - Get file details or directory listing.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    *<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    * @param req The HTTP request<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    * @param res The HTTP response<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    * @param properties The writable properties for setting the descriptions.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    * @param path The log file path.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    * @return The log file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    * @throws Exception<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   @RestMethod(<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      name="GET",<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      path="/*",<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      swagger=@MethodSwagger(<a name="line.98"></a>
+<span class="sourceLineNo">099</span>         responses={@Response(200),@Response(404)}<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      )<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   )<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public Object getFileOrDirectory(RestRequest req, RestResponse res, @Properties ObjectMap properties, @PathRemainder String path) throws Exception {<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>      File f = getFile(path);<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      if (f.isDirectory()) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         Set&lt;FileResource&gt; l = new TreeSet&lt;FileResource&gt;(new FileResourceComparator());<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         File[] files = f.listFiles(filter);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         if (files != null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>            for (File fc : files) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>               URI fUrl = new URI("servlet:/" + fc.getName());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>               l.add(new FileResource(fc, fUrl));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>         }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>         return l;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>      return new FileResource(f, new URI("servlet:/"));<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>   /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    * [VIEW /*] - Retrieve the contents of a log file.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    * @param req The HTTP request.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    * @param res The HTTP response.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    * @param path The log file path.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    * @param properties The writable properties for setting the descriptions.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * @param highlight If &lt;code&gt;true&lt;/code&gt;, add color highlighting based on severity.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    * @throws Exception<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   @RestMethod(<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      name="VIEW",<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      path="/*",<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      swagger=@MethodSwagger(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>         responses={@Response(200),@Response(404)}<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      )<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   )<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   @SuppressWarnings("nls")<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   public void viewFile(RestRequest req, RestResponse res, @PathRemainder String path, @Properties ObjectMap properties, @Query("highlight") boolean highlight, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.144"></a>
 <span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      if (! highlight) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>         res.setContentType("text/plain");<a name="line.148"></a>
-<span class="sourceLineNo">149</span>         if (o instanceof Reader)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            res.setOutput(o);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         else {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>            LogParser p = (LogParser)o;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            Writer w = res.getNegotiatedWriter();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>            try {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>               p.writeTo(w);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            } finally {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>               w.flush();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>               w.close();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>         }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>         return;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>      res.setContentType("text/html");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      PrintWriter w = res.getNegotiatedWriter();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      try {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>         LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>         try {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>            if (! lp.hasNext())<a name="line.170"></a>
-<span class="sourceLineNo">171</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            else for (LogParser.Entry le : lp) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>               char s = le.severity.charAt(0);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>               String color = "black";<a name="line.174"></a>
-<span class="sourceLineNo">175</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.175"></a>
-<span class="sourceLineNo">176</span>               if (s == 'I')<a name="line.176"></a>
-<span class="sourceLineNo">177</span>                  color = "#006400";<a name="line.177"></a>
-<span class="sourceLineNo">178</span>               else if (s == 'W')<a name="line.178"></a>
-<span class="sourceLineNo">179</span>                  color = "#CC8400";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>               else if (s == 'E' || s == 'S')<a name="line.180"></a>
-<span class="sourceLineNo">181</span>                  color = "#DD0000";<a name="line.181"></a>
-<span class="sourceLineNo">182</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.182"></a>
-<span class="sourceLineNo">183</span>                  color = "#000064";<a name="line.183"></a>
-<span class="sourceLineNo">184</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>         } finally {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>            lp.close();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>         }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         w.close();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>   /**<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    * [VIEW /*] - Retrieve the contents of a log file as parsed entries.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    *<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * @param req The HTTP request.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    * @param path The log file path.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    * @return The parsed contents of the log file.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * @throws Exception<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   @RestMethod(<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      name="PARSE",<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      path="/*",<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      converters=Queryable.class,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      swagger=@MethodSwagger(<a name="line.213"></a>
-<span class="sourceLineNo">214</span>         responses={@Response(200),@Response(404)}<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      )<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   )<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   public LogParser viewParsedEntries(RestRequest req, @PathRemainder String path, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>      File f = getFile(path);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>      if (f.isDirectory())<a name="line.222"></a>
-<span class="sourceLineNo">223</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.223"></a>
+<span class="sourceLineNo">146</span>      File f = getFile(path);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      if (f.isDirectory())<a name="line.147"></a>
+<span class="sourceLineNo">148</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>      if (! highlight) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>         res.setContentType("text/plain");<a name="line.154"></a>
+<span class="sourceLineNo">155</span>         if (o instanceof Reader)<a name="line.155"></a>
+<span class="sourceLineNo">156</span>            res.setOutput(o);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>         else {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            LogParser p = (LogParser)o;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>            Writer w = res.getNegotiatedWriter();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>            try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>               p.writeTo(w);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>            } finally {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>               w.flush();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>               w.close();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>            }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>         }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>         return;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>      res.setContentType("text/html");<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      PrintWriter w = res.getNegotiatedWriter();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      try {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         try {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>            if (! lp.hasNext())<a name="line.176"></a>
+<span class="sourceLineNo">177</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.177"></a>
+<span class="sourceLineNo">178</span>            else for (LogParser.Entry le : lp) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>               char s = le.severity.charAt(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>               String color = "black";<a name="line.180"></a>
+<span class="sourceLineNo">181</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.181"></a>
+<span class="sourceLineNo">182</span>               if (s == 'I')<a name="line.182"></a>
+<span class="sourceLineNo">183</span>                  color = "#006400";<a name="line.183"></a>
+<span class="sourceLineNo">184</span>               else if (s == 'W')<a name="line.184"></a>
+<span class="sourceLineNo">185</span>                  color = "#CC8400";<a name="line.185"></a>
+<span class="sourceLineNo">186</span>               else if (s == 'E' || s == 'S')<a name="line.186"></a>
+<span class="sourceLineNo">187</span>                  color = "#DD0000";<a name="line.187"></a>
+<span class="sourceLineNo">188</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.188"></a>
+<span class="sourceLineNo">189</span>                  color = "#000064";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.191"></a>
+<span class="sourceLineNo">192</span>            }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         } finally {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            lp.close();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } finally {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         w.close();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>   /**<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    * [VIEW /*] - Retrieve the contents of a log file as parsed entries.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    *<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    * @param req The HTTP request.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * @param path The log file path.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    * @return The parsed contents of the log file.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * @throws Exception<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   @RestMethod(<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      name="PARSE",<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      path="/*",<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      converters=Queryable.class,<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      swagger=@MethodSwagger(<a name="line.219"></a>
+<span class="sourceLineNo">220</span>         responses={@Response(200),@Response(404)}<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      )<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   )<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   public LogParser viewParsedEntries(RestRequest req, @PathRemainder String path, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.223"></a>
 <span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   }<a name="line.226"></a>
+<span class="sourceLineNo">225</span>      File f = getFile(path);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.226"></a>
 <span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>   /**<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * [DOWNLOAD /*] - Download file.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    *<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    * @param res The HTTP response.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    * @param path The log file path.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * @return The contents of the log file.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   @RestMethod(<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      name="DOWNLOAD",<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      path="/*",<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      swagger=@MethodSwagger(<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         responses={@Response(200),@Response(404)}<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      )<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   )<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   public Object downloadFile(RestResponse res, @PathRemainder String path) throws Exception {<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>      File f = getFile(path);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>      if (f.isDirectory())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "Download not available on directories");<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>      res.setContentType("application/octet-stream");<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      res.setContentLength((int)f.length());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return new FileInputStream(f);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>   /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    * [DELETE /*] - Delete a file.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    *<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    * @param path The log file path.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    * @return A redirect object to the root.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    * @throws Exception<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   @RestMethod(<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      name="DELETE",<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      path="/*",<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      swagger=@MethodSwagger(<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         responses={@Response(200),@Response(404)}<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      )<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   )<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   public Object deleteFile(@PathRemainder String path) throws Exception {<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      File f = getFile(path);<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (f.isDirectory())<a name="line.273"></a>
-<span class="sourceLineNo">274</span>         throw new RestException(SC_BAD_REQUEST, "Delete not available on directories.");<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if (f.canWrite())<a name="line.276"></a>
-<span class="sourceLineNo">277</span>         if (! f.delete())<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            throw new RestException(SC_FORBIDDEN, "Could not delete file.");<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return new Redirect(path + "/..");<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>   private static BufferedReader getReader(File f) throws IOException {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>   private File getFile(String path) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      if (path != null &amp;&amp; path.indexOf("..") != -1)<a name="line.288"></a>
-<span class="sourceLineNo">289</span>         throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      File f = (path == null ? logDir : new File(logDir.getAbsolutePath() + '/' + path));<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (filter.accept(f))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         return f;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>   /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    * File bean.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   @SuppressWarnings("javadoc")<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   public static class FileResource {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      private File f;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      public String type;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public Object name;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      public Long size;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      @BeanProperty(swap=DateSwap.DateTimeMedium.class) public Date lastModified;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      public URI view, highlighted, parsed, download, delete;<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public FileResource(File f, URI uri) throws Exception {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>         this.f = f;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>         this.type = (f.isDirectory() ? "dir" : "file");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>         this.name = f.isDirectory() ? new Link(f.getName(), uri.toString()) : f.getName();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>         this.size = f.isDirectory() ? null : f.length();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>         this.lastModified = new Date(f.lastModified());<a name="line.313"></a>
-<span class="sourceLineNo">314</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>            this.view = new URI(uri + "?method=VIEW");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            this.highlighted = new URI(uri + "?method=VIEW&amp;highlight=true");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            this.parsed = new URI(uri + "?method=PARSE");<a name="line.317"></a>
-<span class="sourceLineNo">318</span>            this.download = new URI(uri + "?method=DOWNLOAD");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>            this.delete = new URI(uri + "?method=DELETE");<a name="line.319"></a>
-<span class="sourceLineNo">320</span>         }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>   private static class FileResourceComparator implements Comparator&lt;FileResource&gt;, Serializable {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      private static final long serialVersionUID = 1L;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      @Override /* Comparator */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      public int compare(FileResource o1, FileResource o2) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>         int c = o1.type.compareTo(o2.type);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>         return c != 0 ? c : o1.f.getName().compareTo(o2.f.getName());<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.334"></a>
-<span class="sourceLineNo">335</span>         return getReader(f);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.336"></a>
+<span class="sourceLineNo">228</span>      if (f.isDirectory())<a name="line.228"></a>
+<span class="sourceLineNo">229</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>   /**<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    * [DOWNLOAD /*] - Download file.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * @param res The HTTP response.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * @param path The log file path.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    * @return The contents of the log file.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    * @throws Exception<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   @RestMethod(<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      name="DOWNLOAD",<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      path="/*",<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      swagger=@MethodSwagger(<a name="line.245"></a>
+<span class="sourceLineNo">246</span>         responses={@Response(200),@Response(404)}<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      )<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   )<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   public Object downloadFile(RestResponse res, @PathRemainder String path) throws Exception {<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>      File f = getFile(path);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>      if (f.isDirectory())<a name="line.253"></a>
+<span class="sourceLineNo">254</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "Download not available on directories");<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>      res.setContentType("application/octet-stream");<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      res.setContentLength((int)f.length());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return new FileInputStream(f);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>   /**<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    * [DELETE /*] - Delete a file.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    *<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    * @param path The log file path.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    * @return A redirect object to the root.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    * @throws Exception<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   @RestMethod(<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      name="DELETE",<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      path="/*",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      swagger=@MethodSwagger(<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         responses={@Response(200),@Response(404)}<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      )<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   )<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   public Object deleteFile(@PathRemainder String path) throws Exception {<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>      File f = getFile(path);<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>      if (f.isDirectory())<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         throw new RestException(SC_BAD_REQUEST, "Delete not available on directories.");<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>      if (f.canWrite())<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         if (! f.delete())<a name="line.283"></a>
+<span class="sourceLineNo">284</span>            throw new RestException(SC_FORBIDDEN, "Could not delete file.");<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return new Redirect(path + "/..");<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>   private static BufferedReader getReader(File f) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>   private File getFile(String path) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (path != null &amp;&amp; path.indexOf("..") != -1)<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      File f = (path == null ? logDir : new File(logDir.getAbsolutePath() + '/' + path));<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (filter.accept(f))<a name="line.297"></a>
+<span class="sourceLineNo">298</span>         return f;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>   /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    * File bean.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   @SuppressWarnings("javadoc")<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class FileResource {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      private File f;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      public String type;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Object name;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public Long size;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      @BeanProperty(swap=DateSwap.DateTimeMedium.class) public Date lastModified;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      public URI view, highlighted, parsed, download, delete;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      public FileResource(File f, URI uri) throws Exception {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         this.f = f;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         this.type = (f.isDirectory() ? "dir" : "file");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         this.name = f.isDirectory() ? new Link(f.getName(), uri.toString()) : f.getName();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>         this.size = f.isDirectory() ? null : f.length();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         this.lastModified = new Date(f.lastModified());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            this.view = new URI(uri + "?method=VIEW");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            this.highlighted = new URI(uri + "?method=VIEW&amp;highlight=true");<a name="line.322"></a>
+<span class="sourceLineNo">323</span>            this.parsed = new URI(uri + "?method=PARSE");<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            this.download = new URI(uri + "?method=DOWNLOAD");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>            this.delete = new URI(uri + "?method=DELETE");<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>   private static class FileResourceComparator implements Comparator&lt;FileResource&gt;, Serializable {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      private static final long serialVersionUID = 1L;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      @Override /* Comparator */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      public int compare(FileResource o1, FileResource o2) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>         int c = o1.type.compareTo(o2.type);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>         return c != 0 ? c : o1.f.getName().compareTo(o2.f.getName());<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>   }<a name="line.337"></a>
 <span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>}<a name="line.342"></a>
+<span class="sourceLineNo">339</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.340"></a>
+<span class="sourceLineNo">341</span>         return getReader(f);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>}<a name="line.348"></a>
 
 
 


[07/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestCallHandler.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestCallHandler.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestCallHandler.html
index a4b748a..f317b10 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestCallHandler.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestCallHandler.html
@@ -52,94 +52,94 @@
 <span class="sourceLineNo">044</span><a name="line.44"></a>
 <span class="sourceLineNo">045</span>   private final RestContext context;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>   private final RestLogger logger;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   private final RestServlet restServlet;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   private final Map&lt;String,CallRouter&gt; callRouters;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>   /**<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    * Constructor.<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    *<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    * @param context The resource context.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   public RestCallHandler(RestContext context) {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      this.context = context;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      this.logger = context.getLogger();<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      this.callRouters = context.getCallRouters();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      this.restServlet = context.getRestServlet();  // Null if this isn't a RestServlet!<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   }<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>   /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    * Creates a {@link RestRequest} object based on the specified incoming {@link HttpServletRequest} object.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    *<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    * &lt;p&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    * Subclasses may choose to override this method to provide a specialized request object.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    *<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    * @param req The request object from the {@link #service(HttpServletRequest, HttpServletResponse)} method.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    * @return The wrapped request object.<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    * @throws ServletException If any errors occur trying to interpret the request.<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   protected RestRequest createRequest(HttpServletRequest req) throws ServletException {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      return new RestRequest(context, req);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   }<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>   /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    * Creates a {@link RestResponse} object based on the specified incoming {@link HttpServletResponse} object<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    * and the request returned by {@link #createRequest(HttpServletRequest)}.<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    *<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    * &lt;p&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    * Subclasses may choose to override this method to provide a specialized response object.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    *<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    * @param req The request object returned by {@link #createRequest(HttpServletRequest)}.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * @param res The response object from the {@link #service(HttpServletRequest, HttpServletResponse)} method.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    * @return The wrapped response object.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * @throws ServletException If any errors occur trying to interpret the request or response.<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    */<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   protected RestResponse createResponse(RestRequest req, HttpServletResponse res) throws ServletException {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      return new RestResponse(context, req, res);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>   /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    * The main service method.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    *<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    * &lt;p&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    * Subclasses can optionally override this method if they want to tailor the behavior of requests.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    *<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    * @param r1 The incoming HTTP servlet request object.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    * @param r2 The incoming HTTP servlet response object.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    * @throws ServletException<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    * @throws IOException<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    */<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   protected void service(HttpServletRequest r1, HttpServletResponse r2) throws ServletException, IOException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>      logger.log(FINE, "HTTP: {0} {1}", r1.getMethod(), r1.getRequestURI());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      long startTime = System.currentTimeMillis();<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>      try {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>         context.checkForInitException();<a name="line.109"></a>
+<span class="sourceLineNo">047</span>   private final Map&lt;String,CallRouter&gt; callRouters;<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>   /**<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    * Constructor.<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    *<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    * @param context The resource context.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   public RestCallHandler(RestContext context) {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      this.context = context;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      this.logger = context.getLogger();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      this.callRouters = context.getCallRouters();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>   /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    * Creates a {@link RestRequest} object based on the specified incoming {@link HttpServletRequest} object.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    *<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    * &lt;p&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    * Subclasses may choose to override this method to provide a specialized request object.<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    *<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    * @param req The request object from the {@link #service(HttpServletRequest, HttpServletResponse)} method.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    * @return The wrapped request object.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    * @throws ServletException If any errors occur trying to interpret the request.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   protected RestRequest createRequest(HttpServletRequest req) throws ServletException {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      return new RestRequest(context, req);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   }<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>   /**<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    * Creates a {@link RestResponse} object based on the specified incoming {@link HttpServletResponse} object<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    * and the request returned by {@link #createRequest(HttpServletRequest)}.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    *<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    * Subclasses may choose to override this method to provide a specialized response object.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    *<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    * @param req The request object returned by {@link #createRequest(HttpServletRequest)}.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    * @param res The response object from the {@link #service(HttpServletRequest, HttpServletResponse)} method.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    * @return The wrapped response object.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    * @throws ServletException If any errors occur trying to interpret the request or response.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   protected RestResponse createResponse(RestRequest req, HttpServletResponse res) throws ServletException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      return new RestResponse(context, req, res);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>   /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    * The main service method.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    *<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    * &lt;p&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    * Subclasses can optionally override this method if they want to tailor the behavior of requests.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    *<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    * @param r1 The incoming HTTP servlet request object.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    * @param r2 The incoming HTTP servlet response object.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    * @throws ServletException<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * @throws IOException<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   protected void service(HttpServletRequest r1, HttpServletResponse r2) throws ServletException, IOException {<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>      logger.log(FINE, "HTTP: {0} {1}", r1.getMethod(), r1.getRequestURI());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      long startTime = System.currentTimeMillis();<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      try {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         context.checkForInitException();<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>         String pathInfo = RestUtils.getPathInfoUndecoded(r1);  // Can't use r1.getPathInfo() because we don't want '%2F' resolved.<a name="line.109"></a>
 <span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>         String pathInfo = RestUtils.getPathInfoUndecoded(r1);  // Can't use r1.getPathInfo() because we don't want '%2F' resolved.<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>         // If this resource has child resources, try to recursively call them.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>         if (pathInfo != null &amp;&amp; context.hasChildResources() &amp;&amp; (! pathInfo.equals("/"))) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>            int i = pathInfo.indexOf('/', 1);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>            String pathInfoPart = i == -1 ? pathInfo.substring(1) : pathInfo.substring(1, i);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>            RestContext childResource = context.getChildResource(pathInfoPart);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>            if (childResource != null) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>               final String pathInfoRemainder = (i == -1 ? null : pathInfo.substring(i));<a name="line.119"></a>
-<span class="sourceLineNo">120</span>               final String servletPath = r1.getServletPath() + "/" + pathInfoPart;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>               final HttpServletRequest childRequest = new HttpServletRequestWrapper(r1) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                  @Override /* ServletRequest */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>                  public String getPathInfo() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>                     return urlDecode(pathInfoRemainder);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>                  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>                  @Override /* ServletRequest */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>                  public String getServletPath() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>                     return servletPath;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>                  }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>               };<a name="line.130"></a>
-<span class="sourceLineNo">131</span>               childResource.getCallHandler().service(childRequest, r2);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>               return;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>            }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>         }<a name="line.134"></a>
+<span class="sourceLineNo">111</span>         // If this resource has child resources, try to recursively call them.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         if (pathInfo != null &amp;&amp; context.hasChildResources() &amp;&amp; (! pathInfo.equals("/"))) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            int i = pathInfo.indexOf('/', 1);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            String pathInfoPart = i == -1 ? pathInfo.substring(1) : pathInfo.substring(1, i);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>            RestContext childResource = context.getChildResource(pathInfoPart);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>            if (childResource != null) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>               final String pathInfoRemainder = (i == -1 ? null : pathInfo.substring(i));<a name="line.117"></a>
+<span class="sourceLineNo">118</span>               final String servletPath = r1.getServletPath() + "/" + pathInfoPart;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>               final HttpServletRequest childRequest = new HttpServletRequestWrapper(r1) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>                  @Override /* ServletRequest */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>                  public String getPathInfo() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>                     return urlDecode(pathInfoRemainder);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>                  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>                  @Override /* ServletRequest */<a name="line.124"></a>
+<span class="sourceLineNo">125</span>                  public String getServletPath() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>                     return servletPath;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>                  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>               };<a name="line.128"></a>
+<span class="sourceLineNo">129</span>               childResource.getCallHandler().service(childRequest, r2);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>               return;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>         }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>         context.startCall(r1, r2);<a name="line.134"></a>
 <span class="sourceLineNo">135</span><a name="line.135"></a>
 <span class="sourceLineNo">136</span>         RestRequest req = createRequest(r1);<a name="line.136"></a>
 <span class="sourceLineNo">137</span>         RestResponse res = createResponse(req, r2);<a name="line.137"></a>
@@ -186,203 +186,159 @@
 <span class="sourceLineNo">178</span>            handleResponse(req, res, output);<a name="line.178"></a>
 <span class="sourceLineNo">179</span>         }<a name="line.179"></a>
 <span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>         onSuccess(req, res, System.currentTimeMillis() - startTime);<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>         // Make sure our writer in RestResponse gets written.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>         res.flushBuffer();<a name="line.184"></a>
+<span class="sourceLineNo">181</span>         // Make sure our writer in RestResponse gets written.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>         res.flushBuffer();<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>         r1.setAttribute("ExecTime", System.currentTimeMillis() - startTime);<a name="line.184"></a>
 <span class="sourceLineNo">185</span><a name="line.185"></a>
 <span class="sourceLineNo">186</span>      } catch (RestException e) {<a name="line.186"></a>
 <span class="sourceLineNo">187</span>         handleError(r1, r2, e);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      } catch (Throwable e) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>         handleError(r1, r2, new RestException(SC_INTERNAL_SERVER_ERROR, e));<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      logger.log(FINE, "HTTP: [{0} {1}] finished in {2}ms", r1.getMethod(), r1.getRequestURI(), System.currentTimeMillis()-startTime);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>   /**<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    * The main method for serializing POJOs passed in through the {@link RestResponse#setOutput(Object)} method or<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * returned by the Java method.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    * &lt;p&gt;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * Subclasses may override this method if they wish to modify the way the output is rendered or support other output<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    * formats.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    *<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    * &lt;p&gt;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * The default implementation simply iterates through the response handlers on this resource<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    * looking for the first one whose {@link ResponseHandler#handle(RestRequest, RestResponse, Object)} method returns<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * &lt;jk&gt;true&lt;/jk&gt;.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    *<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * @param req The HTTP request.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    * @param res The HTTP response.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * @param output The output to serialize in the response.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * @throws IOException<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    * @throws RestException<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   protected void handleResponse(RestRequest req, RestResponse res, Object output) throws IOException, RestException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Loop until we find the correct handler for the POJO.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      for (ResponseHandler h : context.getResponseHandlers())<a name="line.215"></a>
-<span class="sourceLineNo">216</span>         if (h.handle(req, res, output))<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            return;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      throw new RestException(SC_NOT_IMPLEMENTED, "No response handlers found to process output of type '"+(output == null ? null : output.getClass().getName())+"'");<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>   /**<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    * Handle the case where a matching method was not found.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    *<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    * &lt;p&gt;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    * Subclasses can override this method to provide a 2nd-chance for specifying a response.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    * The default implementation will simply throw an exception with an appropriate message.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    *<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    * @param rc The HTTP response code.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * @param req The HTTP request.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    * @param res The HTTP response.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    * @throws Exception<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   protected void handleNotFound(int rc, RestRequest req, RestResponse res) throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      String pathInfo = req.getPathInfo();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      String methodUC = req.getMethod();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      String onPath = pathInfo == null ? " on no pathInfo"  : String.format(" on path '%s'", pathInfo);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      if (rc == SC_NOT_FOUND)<a name="line.237"></a>
-<span class="sourceLineNo">238</span>         throw new RestException(rc, "Method ''{0}'' not found on resource with matching pattern{1}.", methodUC, onPath);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      else if (rc == SC_PRECONDITION_FAILED)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         throw new RestException(rc, "Method ''{0}'' not found on resource{1} with matching matcher.", methodUC, onPath);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      else if (rc == SC_METHOD_NOT_ALLOWED)<a name="line.241"></a>
-<span class="sourceLineNo">242</span>         throw new RestException(rc, "Method ''{0}'' not found on resource.", methodUC);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      else<a name="line.243"></a>
-<span class="sourceLineNo">244</span>         throw new ServletException("Invalid method response: " + rc);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>   /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    * Method for handling response errors.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    *<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    * &lt;p&gt;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    * The default implementation logs the error and calls<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    * {@link #renderError(HttpServletRequest,HttpServletResponse,RestException)}.<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    *<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    * &lt;p&gt;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    * Subclasses can override this method to provide their own custom error response handling.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    *<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    * @param req The servlet request.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    * @param res The servlet response.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    * @param e The exception that occurred.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    * @throws IOException Can be thrown if a problem occurred trying to write to the output stream.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   protected synchronized void handleError(HttpServletRequest req, HttpServletResponse res, RestException e) throws IOException {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      e.setOccurrence(context == null ? 0 : context.getStackTraceOccurrence(e));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      logger.onError(req, res, e);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      renderError(req, res, e);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>   /**<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    * Method for rendering response errors.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    *<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    * &lt;p&gt;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    * The default implementation renders a plain text English message, optionally with a stack trace if<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    * {@link RestContext#REST_renderResponseStackTraces} is enabled.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    *<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    * &lt;p&gt;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    * Subclasses can override this method to provide their own custom error response handling.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    *<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    * @param req The servlet request.<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    * @param res The servlet response.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    * @param e The exception that occurred.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    * @throws IOException Can be thrown if a problem occurred trying to write to the output stream.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    */<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   protected void renderError(HttpServletRequest req, HttpServletResponse res, RestException e) throws IOException {<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>      int status = e.getStatus();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      res.setStatus(status);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      res.setContentType("text/plain");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      res.setHeader("Content-Encoding", "identity");<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>      Throwable t = e.getRootCause();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (t != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         res.setHeader("Exception-Name", t.getClass().getName());<a name="line.292"></a>
-<span class="sourceLineNo">293</span>         res.setHeader("Exception-Message", t.getMessage());<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">188</span>         r1.setAttribute("Exception", e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      } catch (Throwable e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>         RestException e2 = new RestException(SC_INTERNAL_SERVER_ERROR, e);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>         handleError(r1, r2, e2);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>         r1.setAttribute("Exception", e);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>      context.finishCall(r1, r2);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>      logger.log(FINE, "HTTP: [{0} {1}] finished in {2}ms", r1.getMethod(), r1.getRequestURI(), System.currentTimeMillis()-startTime);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>   /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    * The main method for serializing POJOs passed in through the {@link RestResponse#setOutput(Object)} method or<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    * returned by the Java method.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    *<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    * &lt;p&gt;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    * Subclasses may override this method if they wish to modify the way the output is rendered or support other output<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * formats.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    *<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * &lt;p&gt;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * The default implementation simply iterates through the response handlers on this resource<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * looking for the first one whose {@link ResponseHandler#handle(RestRequest, RestResponse, Object)} method returns<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * &lt;jk&gt;true&lt;/jk&gt;.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * @param req The HTTP request.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    * @param res The HTTP response.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    * @param output The output to serialize in the response.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    * @throws IOException<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    * @throws RestException<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   protected void handleResponse(RestRequest req, RestResponse res, Object output) throws IOException, RestException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // Loop until we find the correct handler for the POJO.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      for (ResponseHandler h : context.getResponseHandlers())<a name="line.221"></a>
+<span class="sourceLineNo">222</span>         if (h.handle(req, res, output))<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            return;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      throw new RestException(SC_NOT_IMPLEMENTED, "No response handlers found to process output of type '"+(output == null ? null : output.getClass().getName())+"'");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>   /**<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    * Handle the case where a matching method was not found.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    *<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    * &lt;p&gt;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    * Subclasses can override this method to provide a 2nd-chance for specifying a response.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    * The default implementation will simply throw an exception with an appropriate message.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    *<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    * @param rc The HTTP response code.<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    * @param req The HTTP request.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * @param res The HTTP response.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * @throws Exception<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   protected void handleNotFound(int rc, RestRequest req, RestResponse res) throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      String pathInfo = req.getPathInfo();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      String methodUC = req.getMethod();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      String onPath = pathInfo == null ? " on no pathInfo"  : String.format(" on path '%s'", pathInfo);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (rc == SC_NOT_FOUND)<a name="line.243"></a>
+<span class="sourceLineNo">244</span>         throw new RestException(rc, "Method ''{0}'' not found on resource with matching pattern{1}.", methodUC, onPath);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      else if (rc == SC_PRECONDITION_FAILED)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>         throw new RestException(rc, "Method ''{0}'' not found on resource{1} with matching matcher.", methodUC, onPath);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      else if (rc == SC_METHOD_NOT_ALLOWED)<a name="line.247"></a>
+<span class="sourceLineNo">248</span>         throw new RestException(rc, "Method ''{0}'' not found on resource.", methodUC);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      else<a name="line.249"></a>
+<span class="sourceLineNo">250</span>         throw new ServletException("Invalid method response: " + rc);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   }<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>   /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    * Method for handling response errors.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    *<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    * &lt;p&gt;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    * The default implementation logs the error and calls<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    * {@link #renderError(HttpServletRequest,HttpServletResponse,RestException)}.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    *<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    * &lt;p&gt;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    * Subclasses can override this method to provide their own custom error response handling.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    *<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    * @param req The servlet request.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    * @param res The servlet response.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    * @param e The exception that occurred.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    * @throws IOException Can be thrown if a problem occurred trying to write to the output stream.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   protected synchronized void handleError(HttpServletRequest req, HttpServletResponse res, RestException e) throws IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      e.setOccurrence(context == null ? 0 : context.getStackTraceOccurrence(e));<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      logger.onError(req, res, e);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      renderError(req, res, e);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>   /**<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    * Method for rendering response errors.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    *<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    * &lt;p&gt;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    * The default implementation renders a plain text English message, optionally with a stack trace if<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    * {@link RestContext#REST_renderResponseStackTraces} is enabled.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    *<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    * &lt;p&gt;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    * Subclasses can override this method to provide their own custom error response handling.<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    *<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    * @param req The servlet request.<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    * @param res The servlet response.<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    * @param e The exception that occurred.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    * @throws IOException Can be thrown if a problem occurred trying to write to the output stream.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   protected void renderError(HttpServletRequest req, HttpServletResponse res, RestException e) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>      int status = e.getStatus();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      res.setStatus(status);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      res.setContentType("text/plain");<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      res.setHeader("Content-Encoding", "identity");<a name="line.294"></a>
 <span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>      PrintWriter w = null;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>         w = res.getWriter();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (IllegalStateException e2) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>         w = new PrintWriter(new OutputStreamWriter(res.getOutputStream(), UTF8));<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      String httpMessage = RestUtils.getHttpResponseText(status);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      if (httpMessage != null)<a name="line.303"></a>
-<span class="sourceLineNo">304</span>         w.append("HTTP ").append(String.valueOf(status)).append(": ").append(httpMessage).append("\n\n");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      if (context != null &amp;&amp; context.isRenderResponseStackTraces())<a name="line.305"></a>
-<span class="sourceLineNo">306</span>         e.printStackTrace(w);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      else<a name="line.307"></a>
-<span class="sourceLineNo">308</span>         w.append(e.getFullStackMessage(true));<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      w.flush();<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      w.close();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>   /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    * Callback method for listening for successful completion of requests.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    *<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    * &lt;p&gt;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    * Subclasses can override this method for gathering performance statistics.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    *<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    * &lt;p&gt;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    * The default implementation does nothing.<a name="line.320"></a>
+<span class="sourceLineNo">296</span>      Throwable t = e.getRootCause();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (t != null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>         res.setHeader("Exception-Name", t.getClass().getName());<a name="line.298"></a>
+<span class="sourceLineNo">299</span>         res.setHeader("Exception-Message", t.getMessage());<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>      PrintWriter w = null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>         w = res.getWriter();<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (IllegalStateException e2) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>         w = new PrintWriter(new OutputStreamWriter(res.getOutputStream(), UTF8));<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      String httpMessage = RestUtils.getHttpResponseText(status);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      if (httpMessage != null)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>         w.append("HTTP ").append(String.valueOf(status)).append(": ").append(httpMessage).append("\n\n");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (context != null &amp;&amp; context.isRenderResponseStackTraces())<a name="line.311"></a>
+<span class="sourceLineNo">312</span>         e.printStackTrace(w);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      else<a name="line.313"></a>
+<span class="sourceLineNo">314</span>         w.append(e.getFullStackMessage(true));<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      w.flush();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      w.close();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>   /**<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    * Returns the session objects for the specified request.<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    *<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    * @param req The HTTP request.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    * @param res The HTTP response.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    * @param time The time in milliseconds it took to process the request.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   protected void onSuccess(RestRequest req, RestResponse res, long time) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      if (restServlet != null)<a name="line.327"></a>
-<span class="sourceLineNo">328</span>         restServlet.onSuccess(req, res, time);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>   /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    * Callback method that gets invoked right before the REST Java method is invoked.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    * &lt;p&gt;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    * Subclasses can override this method to override request headers or set request-duration properties before the<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    * Java method is invoked.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    *<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    * @param req The HTTP servlet request object.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    * @throws RestException If any error occurs.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   protected void onPreCall(RestRequest req) throws RestException {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      if (restServlet != null)<a name="line.342"></a>
-<span class="sourceLineNo">343</span>         restServlet.onPreCall(req);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>   /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    * Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    * invoked.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    *<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    * &lt;p&gt;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    * Subclasses can override this method to override request and response headers, or set/override properties used by<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    * the serializer.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    *<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    * @param req The HTTP servlet request object.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    * @param res The HTTP servlet response object.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    * @throws RestException If any error occurs.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    */<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   protected void onPostCall(RestRequest req, RestResponse res) throws RestException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (restServlet != null)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>         restServlet.onPostCall(req, res);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>   /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    * Returns the session objects for the specified request.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    *<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    * &lt;p&gt;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    * The default implementation simply returns a single map containing &lt;code&gt;{'req':req}&lt;/code&gt;.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    *<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    * @param req The REST request.<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    * @return The session objects for that request.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   public Map&lt;String,Object&gt; getSessionObjects(RestRequest req) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      Map&lt;String,Object&gt; m = new HashMap&lt;String,Object&gt;();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      m.put(RequestVar.SESSION_req, req);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      return m;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>}<a name="line.377"></a>
+<span class="sourceLineNo">322</span>    * &lt;p&gt;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    * The default implementation simply returns a single map containing &lt;code&gt;{'req':req}&lt;/code&gt;.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    *<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    * @param req The REST request.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    * @return The session objects for that request.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   public Map&lt;String,Object&gt; getSessionObjects(RestRequest req) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      Map&lt;String,Object&gt; m = new HashMap&lt;String,Object&gt;();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      m.put(RequestVar.SESSION_req, req);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return m;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>}<a name="line.333"></a>
 
 
 


[19/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/rest/RestRequest.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/rest/RestRequest.html b/content/site/apidocs/org/apache/juneau/rest/RestRequest.html
index 4d08fdf..43fde2a 100644
--- a/content/site/apidocs/org/apache/juneau/rest/RestRequest.html
+++ b/content/site/apidocs/org/apache/juneau/rest/RestRequest.html
@@ -512,14 +512,14 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequestWrapper</a></h3>
-<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#authenticate-javax.servlet.http.HttpServletResponse-" title="class or interface in javax.servlet.http">authenticate</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getAuthType--" title="class or interface in javax.servlet.http">getAuthType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getContextPath--" title="class or interface in javax.servlet.http">getContextPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getCookies--" title="class or interface in javax.servlet.http">getCookies</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getDateHeader-java.lang.String-" title="class or interface in j
 avax.servlet.http">getDateHeader</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getHeaderNames--" title="class or interface in javax.servlet.http">getHeaderNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getIntHeader-java.lang.String-" title="class or interface in javax.servlet.http">getIntHeader</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getPart-java.lang.String-" title="class or interface in javax.servlet.http">getPart</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getParts--" title="class or interface in javax.servlet.http">getParts</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getPathInfo--" title="class or interface in javax
 .servlet.http">getPathInfo</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getPathTranslated--" title="class or interface in javax.servlet.http">getPathTranslated</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getQueryString--" title="class or interface in javax.servlet.http">getQueryString</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRemoteUser--" title="class or interface in javax.servlet.http">getRemoteUser</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRequestedSessionId--" title="class or interface in javax.servlet.http">getRequestedSessionId</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRequestURI--" title="class or interf
 ace in javax.servlet.http">getRequestURI</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRequestURL--" title="class or interface in javax.servlet.http">getRequestURL</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getServletPath--" title="class or interface in javax.servlet.http">getServletPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getSession--" title="class or interface in javax.servlet.http">getSession</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getSession-boolean-" title="class or interface in javax.servlet.http">getSession</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getUserPrincipal--" title="class or interface in javax
 .servlet.http">getUserPrincipal</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdFromCookie--" title="class or interface in javax.servlet.http">isRequestedSessionIdFromCookie</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdFromUrl--" title="class or interface in javax.servlet.http">isRequestedSessionIdFromUrl</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdFromURL--" title="class or interface in javax.servlet.http">isRequestedSessionIdFromURL</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdValid--" title="class or interface in javax.servlet.http">isRequestedSessionIdValid</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet
 /http/HttpServletRequestWrapper.html?is-external=true#isUserInRole-java.lang.String-" title="class or interface in javax.servlet.http">isUserInRole</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#login-java.lang.String-java.lang.String-" title="class or interface in javax.servlet.http">login</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#logout--" title="class or interface in javax.servlet.http">logout</a></code></li>
+<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#authenticate-javax.servlet.http.HttpServletResponse-" title="class or interface in javax.servlet.http">authenticate</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#changeSessionId--" title="class or interface in javax.servlet.http">changeSessionId</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getAuthType--" title="class or interface in javax.servlet.http">getAuthType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getContextPath--" title="class or interface in javax.servlet.http">getContextPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getCookies--" title="class or interface in javax.serv
 let.http">getCookies</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getDateHeader-java.lang.String-" title="class or interface in javax.servlet.http">getDateHeader</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getHeaderNames--" title="class or interface in javax.servlet.http">getHeaderNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getIntHeader-java.lang.String-" title="class or interface in javax.servlet.http">getIntHeader</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getPart-java.lang.String-" title="class or interface in javax.servlet.http">getPart</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getParts--" title="class or interfa
 ce in javax.servlet.http">getParts</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getPathInfo--" title="class or interface in javax.servlet.http">getPathInfo</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getPathTranslated--" title="class or interface in javax.servlet.http">getPathTranslated</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getQueryString--" title="class or interface in javax.servlet.http">getQueryString</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRemoteUser--" title="class or interface in javax.servlet.http">getRemoteUser</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRequestedSessionId--" title="class or interface 
 in javax.servlet.http">getRequestedSessionId</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRequestURI--" title="class or interface in javax.servlet.http">getRequestURI</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getRequestURL--" title="class or interface in javax.servlet.http">getRequestURL</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getServletPath--" title="class or interface in javax.servlet.http">getServletPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getSession--" title="class or interface in javax.servlet.http">getSession</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getSession-boolean-" title="class or interface in j
 avax.servlet.http">getSession</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#getUserPrincipal--" title="class or interface in javax.servlet.http">getUserPrincipal</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdFromCookie--" title="class or interface in javax.servlet.http">isRequestedSessionIdFromCookie</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdFromUrl--" title="class or interface in javax.servlet.http">isRequestedSessionIdFromUrl</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isRequestedSessionIdFromURL--" title="class or interface in javax.servlet.http">isRequestedSessionIdFromURL</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletReq
 uestWrapper.html?is-external=true#isRequestedSessionIdValid--" title="class or interface in javax.servlet.http">isRequestedSessionIdValid</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#isUserInRole-java.lang.String-" title="class or interface in javax.servlet.http">isUserInRole</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#login-java.lang.String-java.lang.String-" title="class or interface in javax.servlet.http">login</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#logout--" title="class or interface in javax.servlet.http">logout</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequestWrapper.html?is-external=true#upgrade-java.lang.Class-" title="class or interface in javax.servlet.http">upgrade</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.ServletRequestWrapper">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true" title="class or interface in javax.servlet">ServletRequestWrapper</a></h3>
-<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAsyncContext--" title="class or interface in javax.servlet">getAsyncContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAttribute-java.lang.String-" title="class or interface in javax.servlet">getAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAttributeNames--" title="class or interface in javax.servlet">getAttributeNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getDispatcherType--" title="class or interface in javax.servlet">getDispatcherType</a>, <a href="http://docs.oracle.com/javaee/5
 /api/javax/servlet/ServletRequestWrapper.html?is-external=true#getLocalAddr--" title="class or interface in javax.servlet">getLocalAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getLocalName--" title="class or interface in javax.servlet">getLocalName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getLocalPort--" title="class or interface in javax.servlet">getLocalPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameter-java.lang.String-" title="class or interface in javax.servlet">getParameter</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameterMap--" title="class or interface in javax.servlet">getParameterMap</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getPara
 meterNames--" title="class or interface in javax.servlet">getParameterNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameterValues-java.lang.String-" title="class or interface in javax.servlet">getParameterValues</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getProtocol--" title="class or interface in javax.servlet">getProtocol</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRealPath-java.lang.String-" title="class or interface in javax.servlet">getRealPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRemoteAddr--" title="class or interface in javax.servlet">getRemoteAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRemoteHost--" title="class or interface in j
 avax.servlet">getRemoteHost</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRemotePort--" title="class or interface in javax.servlet">getRemotePort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRequest--" title="class or interface in javax.servlet">getRequest</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRequestDispatcher-java.lang.String-" title="class or interface in javax.servlet">getRequestDispatcher</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getScheme--" title="class or interface in javax.servlet">getScheme</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getServerName--" title="class or interface in javax.servlet">getServerName</a>, <a href="http://docs.oracle.com/j
 avaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getServerPort--" title="class or interface in javax.servlet">getServerPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getServletContext--" title="class or interface in javax.servlet">getServletContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isAsyncStarted--" title="class or interface in javax.servlet">isAsyncStarted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isAsyncSupported--" title="class or interface in javax.servlet">isAsyncSupported</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isSecure--" title="class or interface in javax.servlet">isSecure</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isWrap
 perFor-java.lang.Class-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isWrapperFor-javax.servlet.ServletRequest-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#removeAttribute-java.lang.String-" title="class or interface in javax.servlet">removeAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#setAttribute-java.lang.String-java.lang.Object-" title="class or interface in javax.servlet">setAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#setRequest-javax.servlet.ServletRequest-" title="class or interface in javax.servlet">setRequest</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrappe
 r.html?is-external=true#startAsync--" title="class or interface in javax.servlet">startAsync</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#startAsync-javax.servlet.ServletRequest-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">startAsync</a></code></li>
+<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAsyncContext--" title="class or interface in javax.servlet">getAsyncContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAttribute-java.lang.String-" title="class or interface in javax.servlet">getAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAttributeNames--" title="class or interface in javax.servlet">getAttributeNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getContentLengthLong--" title="class or interface in javax.servlet">getContentLengthLong</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/ja
 vaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getDispatcherType--" title="class or interface in javax.servlet">getDispatcherType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getLocalAddr--" title="class or interface in javax.servlet">getLocalAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getLocalName--" title="class or interface in javax.servlet">getLocalName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getLocalPort--" title="class or interface in javax.servlet">getLocalPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameter-java.lang.String-" title="class or interface in javax.servlet">getParameter</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=tr
 ue#getParameterMap--" title="class or interface in javax.servlet">getParameterMap</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameterNames--" title="class or interface in javax.servlet">getParameterNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameterValues-java.lang.String-" title="class or interface in javax.servlet">getParameterValues</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getProtocol--" title="class or interface in javax.servlet">getProtocol</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRealPath-java.lang.String-" title="class or interface in javax.servlet">getRealPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRemoteAddr--" title="class or 
 interface in javax.servlet">getRemoteAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRemoteHost--" title="class or interface in javax.servlet">getRemoteHost</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRemotePort--" title="class or interface in javax.servlet">getRemotePort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRequest--" title="class or interface in javax.servlet">getRequest</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getRequestDispatcher-java.lang.String-" title="class or interface in javax.servlet">getRequestDispatcher</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getScheme--" title="class or interface in javax.servlet">getScheme</a>, <a href="http://doc
 s.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getServerName--" title="class or interface in javax.servlet">getServerName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getServerPort--" title="class or interface in javax.servlet">getServerPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getServletContext--" title="class or interface in javax.servlet">getServletContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isAsyncStarted--" title="class or interface in javax.servlet">isAsyncStarted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isAsyncSupported--" title="class or interface in javax.servlet">isAsyncSupported</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html
 ?is-external=true#isSecure--" title="class or interface in javax.servlet">isSecure</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isWrapperFor-java.lang.Class-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#isWrapperFor-javax.servlet.ServletRequest-" title="class or interface in javax.servlet">isWrapperFor</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#removeAttribute-java.lang.String-" title="class or interface in javax.servlet">removeAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#setAttribute-java.lang.String-java.lang.Object-" title="class or interface in javax.servlet">setAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?i
 s-external=true#setRequest-javax.servlet.ServletRequest-" title="class or interface in javax.servlet">setRequest</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#startAsync--" title="class or interface in javax.servlet">startAsync</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#startAsync-javax.servlet.ServletRequest-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">startAsync</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -533,7 +533,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true" title="class or interface in javax.servlet">ServletRequest</a></h3>
-<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getAsyncContext--" title="class or interface in javax.servlet">getAsyncContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getAttribute-java.lang.String-" title="class or interface in javax.servlet">getAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getAttributeNames--" title="class or interface in javax.servlet">getAttributeNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getDispatcherType--" title="class or interface in javax.servlet">getDispatcherType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.h
 tml?is-external=true#getLocalAddr--" title="class or interface in javax.servlet">getLocalAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocalName--" title="class or interface in javax.servlet">getLocalName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocalPort--" title="class or interface in javax.servlet">getLocalPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameter-java.lang.String-" title="class or interface in javax.servlet">getParameter</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameterMap--" title="class or interface in javax.servlet">getParameterMap</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameterNames--" title="class or interface in javax.servlet">getParameterNames</
 a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameterValues-java.lang.String-" title="class or interface in javax.servlet">getParameterValues</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getProtocol--" title="class or interface in javax.servlet">getProtocol</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRealPath-java.lang.String-" title="class or interface in javax.servlet">getRealPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRemoteAddr--" title="class or interface in javax.servlet">getRemoteAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRemoteHost--" title="class or interface in javax.servlet">getRemoteHost</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?
 is-external=true#getRemotePort--" title="class or interface in javax.servlet">getRemotePort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRequestDispatcher-java.lang.String-" title="class or interface in javax.servlet">getRequestDispatcher</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getScheme--" title="class or interface in javax.servlet">getScheme</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getServerName--" title="class or interface in javax.servlet">getServerName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getServerPort--" title="class or interface in javax.servlet">getServerPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getServletContext--" title="class or interface in javax.servlet">getServletCon
 text</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#isAsyncStarted--" title="class or interface in javax.servlet">isAsyncStarted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#isAsyncSupported--" title="class or interface in javax.servlet">isAsyncSupported</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#isSecure--" title="class or interface in javax.servlet">isSecure</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#removeAttribute-java.lang.String-" title="class or interface in javax.servlet">removeAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#setAttribute-java.lang.String-java.lang.Object-" title="class or interface in javax.servlet">setAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet
 /ServletRequest.html?is-external=true#startAsync--" title="class or interface in javax.servlet">startAsync</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#startAsync-javax.servlet.ServletRequest-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">startAsync</a></code></li>
+<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getAsyncContext--" title="class or interface in javax.servlet">getAsyncContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getAttribute-java.lang.String-" title="class or interface in javax.servlet">getAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getAttributeNames--" title="class or interface in javax.servlet">getAttributeNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getContentLengthLong--" title="class or interface in javax.servlet">getContentLengthLong</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getContentType--" title="class or interface in javax.servlet">getContentType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletReq
 uest.html?is-external=true#getDispatcherType--" title="class or interface in javax.servlet">getDispatcherType</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocalAddr--" title="class or interface in javax.servlet">getLocalAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocalName--" title="class or interface in javax.servlet">getLocalName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocalPort--" title="class or interface in javax.servlet">getLocalPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameter-java.lang.String-" title="class or interface in javax.servlet">getParameter</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameterMap--" title="class or interface in javax.servlet">getParamete
 rMap</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameterNames--" title="class or interface in javax.servlet">getParameterNames</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getParameterValues-java.lang.String-" title="class or interface in javax.servlet">getParameterValues</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getProtocol--" title="class or interface in javax.servlet">getProtocol</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRealPath-java.lang.String-" title="class or interface in javax.servlet">getRealPath</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRemoteAddr--" title="class or interface in javax.servlet">getRemoteAddr</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servle
 tRequest.html?is-external=true#getRemoteHost--" title="class or interface in javax.servlet">getRemoteHost</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRemotePort--" title="class or interface in javax.servlet">getRemotePort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getRequestDispatcher-java.lang.String-" title="class or interface in javax.servlet">getRequestDispatcher</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getScheme--" title="class or interface in javax.servlet">getScheme</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getServerName--" title="class or interface in javax.servlet">getServerName</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getServerPort--" title="class or interface in javax.servlet">get
 ServerPort</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getServletContext--" title="class or interface in javax.servlet">getServletContext</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#isAsyncStarted--" title="class or interface in javax.servlet">isAsyncStarted</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#isAsyncSupported--" title="class or interface in javax.servlet">isAsyncSupported</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#isSecure--" title="class or interface in javax.servlet">isSecure</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#removeAttribute-java.lang.String-" title="class or interface in javax.servlet">removeAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.h
 tml?is-external=true#setAttribute-java.lang.String-java.lang.Object-" title="class or interface in javax.servlet">setAttribute</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#startAsync--" title="class or interface in javax.servlet">startAsync</a>, <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#startAsync-javax.servlet.ServletRequest-javax.servlet.ServletResponse-" title="class or interface in javax.servlet">startAsync</a></code></li>
 </ul>
 </li>
 </ul>
@@ -555,7 +555,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getDescription</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.213">getDescription</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.216">getDescription</a>()</pre>
 <div class="block">Returns a string of the form <js>"HTTP method-name full-url"</js></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -569,7 +569,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getAttribute</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.225">getAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.228">getAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;def)</pre>
 <div class="block">Same as <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getAttribute-java.lang.String-" title="class or interface in javax.servlet"><code>ServletRequestWrapper.getAttribute(String)</code></a> but returns a default value if not found.</div>
 <dl>
@@ -587,7 +587,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>attr</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.237">attr</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.240">attr</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Shorthand method for calling <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#setAttribute-java.lang.String-java.lang.Object-" title="class or interface in javax.servlet"><code>ServletRequestWrapper.setAttribute(String, Object)</code></a> fluently.</div>
 <dl>
@@ -605,7 +605,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>resolveProperty</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.303">resolveProperty</a>(org.apache.juneau.rest.CallMethod&nbsp;cm,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.306">resolveProperty</a>(org.apache.juneau.rest.CallMethod&nbsp;cm,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;category,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Resolves the specified property.</div>
@@ -675,7 +675,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getProperties</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.468">getProperties</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ObjectMap.html" title="class in org.apache.juneau">ObjectMap</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.471">getProperties</a>()</pre>
 <div class="block">Retrieve the properties active for this request.
 
  <p>
@@ -692,7 +692,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>prop</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.479">prop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestRequest.html" title="class in org.apache.juneau.rest">RestRequest</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.482">prop</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Shortcut for calling <code>getProperties().append(name, value);</code> fluently.</div>
 <dl>
@@ -710,7 +710,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeaders</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestHeaders.html" title="class in org.apache.juneau.rest">RequestHeaders</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.494">getHeaders</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestHeaders.html" title="class in org.apache.juneau.rest">RequestHeaders</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.497">getHeaders</a>()</pre>
 <div class="block">Returns the headers on this request.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -724,7 +724,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeader</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.499">getHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.502">getHeader</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true#getHeader-java.lang.String-" title="class or interface in javax.servlet.http">getHeader</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a></code></dd>
@@ -739,7 +739,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeaders</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.504">getHeaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.507">getHeaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true#getHeaders-java.lang.String-" title="class or interface in javax.servlet.http">getHeaders</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html?is-external=true" title="class or interface in javax.servlet.http">HttpServletRequest</a></code></dd>
@@ -754,7 +754,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getSupportedMediaTypes</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.516">getSupportedMediaTypes</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.519">getSupportedMediaTypes</a>()</pre>
 <div class="block">Returns the media types that are valid for <code>Content-Type</code> headers on the request.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -768,7 +768,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>setCharacterEncoding</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.524">setCharacterEncoding</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;charset)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.527">setCharacterEncoding</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;charset)</pre>
 <div class="block">Sets the charset to expect on the request body.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -784,7 +784,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getCharacterEncoding</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.532">getCharacterEncoding</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.535">getCharacterEncoding</a>()</pre>
 <div class="block">Returns the charset specified on the <code>Content-Type</code> header, or <js>"UTF-8"</js> if not specified.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -800,7 +800,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocale</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.552">getLocale</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.555">getLocale</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocale--" title="class or interface in javax.servlet">getLocale</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true" title="class or interface in javax.servlet">ServletRequest</a></code></dd>
@@ -815,7 +815,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocales</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.563">getLocales</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html?is-external=true" title="class or interface in java.util">Locale</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.566">getLocales</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getLocales--" title="class or interface in javax.servlet">getLocales</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true" title="class or interface in javax.servlet">ServletRequest</a></code></dd>
@@ -830,7 +830,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getQuery</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestQuery.html" title="class in org.apache.juneau.rest">RequestQuery</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.594">getQuery</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestQuery.html" title="class in org.apache.juneau.rest">RequestQuery</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.597">getQuery</a>()</pre>
 <div class="block">Equivalent to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequestWrapper.html?is-external=true#getParameterMap--" title="class or interface in javax.servlet"><code>ServletRequestWrapper.getParameterMap()</code></a>, but only looks for query parameters in the URL, not form posts.
 
  <p>
@@ -851,7 +851,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getQuery</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.604">getQuery</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.607">getQuery</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Shortcut for calling <code>getQuery().getString(name)</code>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -867,7 +867,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getFormData</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestFormData.html" title="class in org.apache.juneau.rest">RequestFormData</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.618">getFormData</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestFormData.html" title="class in org.apache.juneau.rest">RequestFormData</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.621">getFormData</a>()</pre>
 <div class="block">Retrieves the URL-encoded form data from the request if the body has already been cached locally.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -881,7 +881,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getFormData</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.645">getFormData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.648">getFormData</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Shortcut for calling <code>getFormData().getString(name)</code>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -897,7 +897,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getPathMatch</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestPathMatch.html" title="class in org.apache.juneau.rest">RequestPathMatch</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.659">getPathMatch</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestPathMatch.html" title="class in org.apache.juneau.rest">RequestPathMatch</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.662">getPathMatch</a>()</pre>
 <div class="block">Retrieves the URL-encoded form data from the request if the body has already been cached locally.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -911,7 +911,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.669">getPath</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.672">getPath</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Shortcut for calling <code>getPathMatch().get(name)</code>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -927,7 +927,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getBody</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestBody.html" title="class in org.apache.juneau.rest">RequestBody</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.682">getBody</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RequestBody.html" title="class in org.apache.juneau.rest">RequestBody</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.685">getBody</a>()</pre>
 <div class="block">Returns the body of this HTTP request.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -941,7 +941,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getReader</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io">BufferedReader</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.697">getReader</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io">BufferedReader</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.700">getReader</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns the HTTP body content as a <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a>.
 
@@ -967,7 +967,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getInputStream</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletInputStream.html?is-external=true" title="class or interface in javax.servlet">ServletInputStream</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.711">getInputStream</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletInputStream.html?is-external=true" title="class or interface in javax.servlet">ServletInputStream</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.714">getInputStream</a>()
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns the HTTP body content as an <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>.
 
@@ -991,7 +991,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getUriContext</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/UriContext.html" title="class in org.apache.juneau">UriContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.733">getUriContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/UriContext.html" title="class in org.apache.juneau">UriContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.736">getUriContext</a>()</pre>
 <div class="block">Returns the URI context of the request.
 
  <p>
@@ -1009,7 +1009,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getUriResolver</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/UriResolver.html" title="class in org.apache.juneau">UriResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.752">getUriResolver</a>(<a href="../../../../org/apache/juneau/UriResolution.html" title="enum in org.apache.juneau">UriResolution</a>&nbsp;resolution,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/UriResolver.html" title="class in org.apache.juneau">UriResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.755">getUriResolver</a>(<a href="../../../../org/apache/juneau/UriResolution.html" title="enum in org.apache.juneau">UriResolution</a>&nbsp;resolution,
                                   <a href="../../../../org/apache/juneau/UriRelativity.html" title="enum in org.apache.juneau">UriRelativity</a>&nbsp;relativity)</pre>
 <div class="block">Returns a URI resolver that can be used to convert URIs to absolute or root-relative form.</div>
 <dl>
@@ -1027,7 +1027,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getUriResolver</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/UriResolver.html" title="class in org.apache.juneau">UriResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.762">getUriResolver</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/UriResolver.html" title="class in org.apache.juneau">UriResolver</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.765">getUriResolver</a>()</pre>
 <div class="block">Shortcut for calling <a href="../../../../org/apache/juneau/rest/RestRequest.html#getUriResolver--"><code>getUriResolver()</code></a> using <a href="../../../../org/apache/juneau/UriResolution.html#ROOT_RELATIVE"><code>UriResolution.ROOT_RELATIVE</code></a> and
  <a href="../../../../org/apache/juneau/UriRelativity.html#RESOURCE"><code>UriRelativity.RESOURCE</code></a></div>
 <dl>
@@ -1042,7 +1042,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getUri</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.778">getUri</a>(boolean&nbsp;includeQuery,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.781">getUri</a>(boolean&nbsp;includeQuery,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,?&gt;&nbsp;addQueryParams)</pre>
 <div class="block">Returns the URI for this request.
 
@@ -1065,7 +1065,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getSiteName</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.825">getSiteName</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.828">getSiteName</a>()</pre>
 <div class="block">Returns the localized site name.
 
  <p>
@@ -1097,7 +1097,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getServletTitle</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.837">getServletTitle</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.840">getServletTitle</a>()</pre>
 <div class="block">Returns the localized servlet title.
 
  <p>
@@ -1114,7 +1114,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getServletDescription</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.849">getServletDescription</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.852">getServletDescription</a>()</pre>
 <div class="block">Returns the localized servlet description.
 
  <p>
@@ -1131,7 +1131,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMethodSummary</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.861">getMethodSummary</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.864">getMethodSummary</a>()</pre>
 <div class="block">Returns the localized method summary.
 
  <p>
@@ -1148,7 +1148,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMethodDescription</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.873">getMethodDescription</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.876">getMethodDescription</a>()</pre>
 <div class="block">Returns the localized method description.
 
  <p>
@@ -1165,7 +1165,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getStylesheet</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.886">getStylesheet</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.889">getStylesheet</a>()</pre>
 <div class="block">Returns the value of the <jk>"stylesheet"</js> parameter.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1179,7 +1179,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getSerializerGroup</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/serializer/SerializerGroup.html" title="class in org.apache.juneau.serializer">SerializerGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.895">getSerializerGroup</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/serializer/SerializerGroup.html" title="class in org.apache.juneau.serializer">SerializerGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.898">getSerializerGroup</a>()</pre>
 <div class="block">Returns the serializers associated with this request.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1193,7 +1193,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getParserGroup</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/parser/ParserGroup.html" title="class in org.apache.juneau.parser">ParserGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.904">getParserGroup</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/parser/ParserGroup.html" title="class in org.apache.juneau.parser">ParserGroup</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.907">getParserGroup</a>()</pre>
 <div class="block">Returns the parsers associated with this request.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1207,7 +1207,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMethod</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.917">getMethod</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.920">getMethod</a>()</pre>
 <div class="block">Returns the method of this request.
 
  <p>
@@ -1227,7 +1227,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getHttpMethod</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/http/HttpMethod.html" title="enum in org.apache.juneau.http">HttpMethod</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.929">getHttpMethod</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/http/HttpMethod.html" title="enum in org.apache.juneau.http">HttpMethod</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.932">getHttpMethod</a>()</pre>
 <div class="block">Returns the HTTP 1.1 method name of the request as an enum.
 
  <p>
@@ -1244,7 +1244,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getContentLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.934">getContentLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.937">getContentLength</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true#getContentLength--" title="class or interface in javax.servlet">getContentLength</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html?is-external=true" title="class or interface in javax.servlet">ServletRequest</a></code></dd>
@@ -1259,7 +1259,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>isPlainText</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.954">isPlainText</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.957">isPlainText</a>()</pre>
 <div class="block">Returns <jk>true</jk> if <code>&amp;plainText=true</code> was specified as a URL parameter.
 
  <p>
@@ -1280,7 +1280,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMessage</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.965">getMessage</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.968">getMessage</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>...&nbsp;args)</pre>
 <div class="block">Shortcut method for calling <a href="../../../../org/apache/juneau/utils/MessageBundle.html#getString-java.util.Locale-java.lang.String-java.lang.Object...-"><code>MessageBundle.getString(Locale, String, Object...)</code></a> based on the request locale.</div>
 <dl>
@@ -1298,7 +1298,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getResourceBundle</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.974">getResourceBundle</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/utils/MessageBundle.html" title="class in org.apache.juneau.utils">MessageBundle</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.977">getResourceBundle</a>()</pre>
 <div class="block">Returns the resource bundle for the request locale.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1312,7 +1312,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getContext</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.987">getContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/RestContext.html" title="class in org.apache.juneau.rest">RestContext</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.990">getContext</a>()</pre>
 <div class="block">Returns the servlet handling the request.
 
  <p>
@@ -1330,7 +1330,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getJavaMethod</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1006">getJavaMethod</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1009">getJavaMethod</a>()</pre>
 <div class="block">Returns the java method handling the request.
 
  <p>
@@ -1354,7 +1354,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getBeanSession</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/BeanSession.html" title="class in org.apache.juneau">BeanSession</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1015">getBeanSession</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/BeanSession.html" title="class in org.apache.juneau">BeanSession</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1018">getBeanSession</a>()</pre>
 <div class="block">Returns the <a href="../../../../org/apache/juneau/BeanSession.html" title="class in org.apache.juneau"><code>BeanSession</code></a> associated with this request.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1368,7 +1368,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getVarResolverSession</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1028">getVarResolverSession</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/svl/VarResolverSession.html" title="class in org.apache.juneau.svl">VarResolverSession</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1031">getVarResolverSession</a>()</pre>
 <div class="block">Returns the variable resolver session for this request using session objects created by
  <a href="../../../../org/apache/juneau/rest/RestCallHandler.html#getSessionObjects-org.apache.juneau.rest.RestRequest-"><code>RestCallHandler.getSessionObjects(RestRequest)</code></a>.
 
@@ -1386,7 +1386,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>resolveVars</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1040">resolveVars</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;input)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1043">resolveVars</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;input)</pre>
 <div class="block">Shortcut for calling <code>getVarResolverSession().resolve(input)</code>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1402,7 +1402,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getReaderResource</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/ReaderResource.html" title="class in org.apache.juneau.rest">ReaderResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1057">getReaderResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/ReaderResource.html" title="class in org.apache.juneau.rest">ReaderResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1060">getReaderResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                         boolean&nbsp;resolveVars,
                                         <a href="../../../../org/apache/juneau/http/MediaType.html" title="class in org.apache.juneau.http">MediaType</a>&nbsp;mediaType)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1428,7 +1428,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getReaderResource</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/ReaderResource.html" title="class in org.apache.juneau.rest">ReaderResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1079">getReaderResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/ReaderResource.html" title="class in org.apache.juneau.rest">ReaderResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1082">getReaderResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                         boolean&nbsp;resolveVars)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as <a href="../../../../org/apache/juneau/rest/RestRequest.html#getReaderResource-java.lang.String-boolean-org.apache.juneau.http.MediaType-"><code>getReaderResource(String, boolean, MediaType)</code></a> except uses the resource mime-type map
@@ -1452,7 +1452,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getReaderResource</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/ReaderResource.html" title="class in org.apache.juneau.rest">ReaderResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1090">getReaderResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/rest/ReaderResource.html" title="class in org.apache.juneau.rest">ReaderResource</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1093">getReaderResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Same as <a href="../../../../org/apache/juneau/rest/RestRequest.html#getReaderResource-java.lang.String-boolean-"><code>getReaderResource(String, boolean)</code></a> with <code>resolveVars == <jk>false</jk></code></div>
 <dl>
@@ -1471,7 +1471,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfigFile</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1101">getConfigFile</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1104">getConfigFile</a>()</pre>
 <div class="block">Returns the config file associated with the servlet.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1486,7 +1486,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getSwagger</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/dto/swagger/Swagger.html" title="class in org.apache.juneau.dto.swagger">Swagger</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1114">getSwagger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/dto/swagger/Swagger.html" title="class in org.apache.juneau.dto.swagger">Swagger</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/rest/RestRequest.html#line.1117">getSwagger</a>()</pre>
 <div class="block">Returns the localized swagger associated with the servlet.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1501,7 +1501,7 @@ extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServ
 <ul class=

<TRUNCATED>


[05/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestContext.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestContext.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestContext.html
index 3e65265..5565a6b 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestContext.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestContext.html
@@ -37,1772 +37,2004 @@
 <span class="sourceLineNo">029</span><a name="line.29"></a>
 <span class="sourceLineNo">030</span>import javax.activation.*;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import javax.servlet.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.juneau.encoders.*;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.juneau.html.*;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.juneau.http.*;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.juneau.ini.*;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.juneau.internal.*;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.juneau.json.*;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.juneau.parser.*;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.juneau.rest.annotation.*;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.juneau.rest.annotation.Properties;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.juneau.rest.vars.*;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.juneau.rest.widget.*;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.juneau.serializer.*;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.juneau.svl.*;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.juneau.svl.vars.*;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.juneau.urlencoding.*;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.juneau.utils.*;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Contains all the configuration on a REST resource and the entry points for handling REST calls.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * See {@link PropertyStore} for more information about context properties.<a name="line.55"></a>
-<span class="sourceLineNo">056</span> */<a name="line.56"></a>
-<span class="sourceLineNo">057</span>public final class RestContext extends Context {<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>   /**<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Enable header URL parameters.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    *<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    * &lt;ul&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.allowHeaderParams"&lt;/js&gt;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;true&lt;/jk&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    * &lt;/ul&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    *<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    * &lt;p&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    * When enabled, headers such as &lt;js&gt;"Accept"&lt;/js&gt; and &lt;js&gt;"Content-Type"&lt;/js&gt; to be passed in as URL query<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    * parameters.<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    * For example:  &lt;js&gt;"?Accept=text/json&amp;amp;Content-Type=text/json"&lt;/js&gt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    *<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    * Parameter names are case-insensitive.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    *<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    * &lt;p&gt;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    * Useful for debugging REST interface using only a browser.<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    *<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    * &lt;p&gt;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    * Applicable to servlet class only.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   public static final String REST_allowHeaderParams = "RestServlet.allowHeaderParams";<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>   /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Enable &lt;js&gt;"method"&lt;/js&gt; URL parameter for specific HTTP methods.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    *<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * &lt;ul&gt;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.allowMethodParam"&lt;/js&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;String&lt;/code&gt;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;js&gt;""&lt;/js&gt;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    * &lt;/ul&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    *<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    * &lt;p&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    * When specified, the HTTP method can be overridden by passing in a &lt;js&gt;"method"&lt;/js&gt; URL parameter on a regular<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    * GET request.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    * For example:  &lt;js&gt;"?method=OPTIONS"&lt;/js&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    *<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    * &lt;p&gt;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    * Format is a comma-delimited list of HTTP method names that can be passed in as a method parameter.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    * Parameter name is case-insensitive.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    * Use "*" to represent all methods.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    * For backwards compatibility, "true" also means "*".<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    *<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    * &lt;p&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    * Note that per the &lt;a class="doclink"<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html"&gt;HTTP specification&lt;/a&gt;, special care should<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    * be taken when allowing non-safe (POST, PUT, DELETE) methods to be invoked through GET requests.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * &lt;p&gt;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    * Applicable to servlet class only.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    *<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    * &lt;p&gt;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    * Example: &lt;js&gt;"HEAD,OPTIONS"&lt;/js&gt;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   public static final String REST_allowMethodParam = "RestServlet.allowMethodParam";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>   /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Enable &lt;js&gt;"body"&lt;/js&gt; URL parameter.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    *<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    * &lt;ul&gt;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.allowBodyParam"&lt;/js&gt;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;true&lt;/jk&gt;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    * &lt;/ul&gt;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    *<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    * &lt;p&gt;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    * When enabled, the HTTP body content on PUT and POST requests can be passed in as text using the &lt;js&gt;"body"&lt;/js&gt;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    * URL parameter.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    * For example:  &lt;js&gt;"?body={name:'John%20Smith',age:45}"&lt;/js&gt;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    *<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    * &lt;p&gt;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    * Parameter name is case-insensitive.<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    * &lt;p&gt;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    * Useful for debugging PUT and POST methods using only a browser.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    * &lt;p&gt;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    * Applicable to servlet class only.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   public static final String REST_allowBodyParam = "RestServlet.allowBodyParam";<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>   /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Render stack traces.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    *<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    * &lt;ul&gt;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.renderResponseStackTraces"&lt;/js&gt;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;false&lt;/jk&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    * &lt;/ul&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    *<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    * &lt;p&gt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    * Render stack traces in HTTP response bodies when errors occur.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    *<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    * &lt;p&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    * When enabled, Java stack traces will be rendered in the output response.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    * Useful for debugging, although allowing stack traces to be rendered may cause security concerns.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    * &lt;p&gt;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    * Applicable to servlet class only.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   public static final String REST_renderResponseStackTraces = "RestServlet.renderResponseStackTraces";<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>   /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Use stack trace hashes.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    *<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    * &lt;ul&gt;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.useStackTraceHashes"&lt;/js&gt;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;true&lt;/jk&gt;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    * &lt;/ul&gt;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    *<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    * &lt;p&gt;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    * When enabled, the number of times an exception has occurred will be determined based on stack trace hashsums,<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    * made available through the {@link RestException#getOccurrence()} method.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    *<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    * &lt;p&gt;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    * Applicable to servlet class only.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   public static final String REST_useStackTraceHashes = "RestServlet.useStackTraceHashes";<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>   /**<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Default character encoding.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    *<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    * &lt;ul&gt;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.defaultCharset"&lt;/js&gt;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;String&lt;/code&gt;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;js&gt;"utf-8"&lt;/js&gt;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    * &lt;/ul&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    *<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    * &lt;p&gt;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    * The default character encoding for the request and response if not specified on the request.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    *<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    * &lt;p&gt;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * Applicable to servlet class and methods.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    */<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   public static final String REST_defaultCharset = "RestServlet.defaultCharset";<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>   /**<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Expected format of request parameters.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    *<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * &lt;ul&gt;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.paramFormat"&lt;/js&gt;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;String&lt;/code&gt;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;js&gt;"UON"&lt;/js&gt;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * &lt;/ul&gt;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    * &lt;p&gt;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * Possible values:<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    * &lt;ul class='spaced-list'&gt;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    *    &lt;li&gt;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    *       &lt;js&gt;"UON"&lt;/js&gt; - URL-Encoded Object Notation.<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    *       &lt;br&gt;This notation allows for request parameters to contain arbitrarily complex POJOs.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    *    &lt;li&gt;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    *       &lt;js&gt;"PLAIN"&lt;/js&gt; - Plain text.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    *       &lt;br&gt;This treats request parameters as plain text.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    *       &lt;br&gt;Only POJOs directly convertible from &lt;l&gt;Strings&lt;/l&gt; can be represented in parameters when using this<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    *       mode.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    * &lt;/ul&gt;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    *<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    * &lt;p&gt;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    * Note that the parameter value &lt;js&gt;"(foo)"&lt;/js&gt; is interpreted as &lt;js&gt;"(foo)"&lt;/js&gt; when using plain mode, but<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    * &lt;js&gt;"foo"&lt;/js&gt; when using UON mode.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    * &lt;p&gt;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    * The format can also be specified per-parameter using the {@link FormData#format() @FormData.format()} and<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    * {@link Query#format() @Query.format()} annotations.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    * &lt;p&gt;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    * Applicable to servlet class and methods.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   public static final String REST_paramFormat = "RestServlet.paramFormat";<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>   /**<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  REST resource resolver.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    *<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    * &lt;ul&gt;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.resourceResolver"&lt;/js&gt;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Class&lt;/code&gt; or {@link RestResourceResolver}<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;null&lt;/jk&gt;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    * &lt;/ul&gt;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    *<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    * &lt;p&gt;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    * The resource resolver used to instantiate REST resource classes.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    *<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    * &lt;p&gt;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    * Applicable to servlet class.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    * &lt;br&gt;Can be passed in through servlet context.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   public static final String REST_resourceResolver = "RestServlet.resourceResolver";<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">032</span>import javax.servlet.http.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.encoders.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.juneau.html.*;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.juneau.http.*;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.juneau.ini.*;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.juneau.internal.*;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.juneau.json.*;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.juneau.parser.*;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.juneau.rest.annotation.*;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.juneau.rest.annotation.Properties;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.juneau.rest.vars.*;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.juneau.rest.widget.*;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.juneau.serializer.*;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.juneau.svl.*;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.juneau.svl.vars.*;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.juneau.urlencoding.*;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.juneau.utils.*;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Contains all the configuration on a REST resource and the entry points for handling REST calls.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;p&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * See {@link PropertyStore} for more information about context properties.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public final class RestContext extends Context {<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>   /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Enable header URL parameters.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    *<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    * &lt;ul&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.allowHeaderParams"&lt;/js&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;true&lt;/jk&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    * &lt;/ul&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    *<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    * &lt;p&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    * When enabled, headers such as &lt;js&gt;"Accept"&lt;/js&gt; and &lt;js&gt;"Content-Type"&lt;/js&gt; to be passed in as URL query<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    * parameters.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    * For example:  &lt;js&gt;"?Accept=text/json&amp;amp;Content-Type=text/json"&lt;/js&gt;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    *<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    * &lt;p&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    * Parameter names are case-insensitive.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    *<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    * &lt;p&gt;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    * Useful for debugging REST interface using only a browser.<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    *<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    * &lt;p&gt;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    * Applicable to servlet class only.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   public static final String REST_allowHeaderParams = "RestServlet.allowHeaderParams";<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>   /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Enable &lt;js&gt;"method"&lt;/js&gt; URL parameter for specific HTTP methods.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    *<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    * &lt;ul&gt;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.allowMethodParam"&lt;/js&gt;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;String&lt;/code&gt;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;js&gt;""&lt;/js&gt;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    * &lt;/ul&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    *<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    * &lt;p&gt;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    * When specified, the HTTP method can be overridden by passing in a &lt;js&gt;"method"&lt;/js&gt; URL parameter on a regular<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    * GET request.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    * For example:  &lt;js&gt;"?method=OPTIONS"&lt;/js&gt;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    *<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * &lt;p&gt;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    * Format is a comma-delimited list of HTTP method names that can be passed in as a method parameter.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * Parameter name is case-insensitive.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * Use "*" to represent all methods.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    * For backwards compatibility, "true" also means "*".<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    *<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    * &lt;p&gt;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    * Note that per the &lt;a class="doclink"<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html"&gt;HTTP specification&lt;/a&gt;, special care should<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    * be taken when allowing non-safe (POST, PUT, DELETE) methods to be invoked through GET requests.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    *<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    * &lt;p&gt;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    * Applicable to servlet class only.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    *<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    * &lt;p&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    * Example: &lt;js&gt;"HEAD,OPTIONS"&lt;/js&gt;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   public static final String REST_allowMethodParam = "RestServlet.allowMethodParam";<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>   /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Enable &lt;js&gt;"body"&lt;/js&gt; URL parameter.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    *<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    * &lt;ul&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.allowBodyParam"&lt;/js&gt;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;true&lt;/jk&gt;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    * &lt;/ul&gt;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    *<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    * &lt;p&gt;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * When enabled, the HTTP body content on PUT and POST requests can be passed in as text using the &lt;js&gt;"body"&lt;/js&gt;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    * URL parameter.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * For example:  &lt;js&gt;"?body={name:'John%20Smith',age:45}"&lt;/js&gt;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    *<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    * &lt;p&gt;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    * Parameter name is case-insensitive.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    * &lt;p&gt;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    * Useful for debugging PUT and POST methods using only a browser.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    *<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    * &lt;p&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    * Applicable to servlet class only.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   public static final String REST_allowBodyParam = "RestServlet.allowBodyParam";<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>   /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Render stack traces.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    *<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    * &lt;ul&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.renderResponseStackTraces"&lt;/js&gt;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;false&lt;/jk&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    * &lt;/ul&gt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    * &lt;p&gt;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    * Render stack traces in HTTP response bodies when errors occur.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    *<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    * &lt;p&gt;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    * When enabled, Java stack traces will be rendered in the output response.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    * Useful for debugging, although allowing stack traces to be rendered may cause security concerns.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    * &lt;p&gt;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * Applicable to servlet class only.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   public static final String REST_renderResponseStackTraces = "RestServlet.renderResponseStackTraces";<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>   /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Use stack trace hashes.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    * &lt;ul&gt;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.useStackTraceHashes"&lt;/js&gt;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Boolean&lt;/code&gt;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;true&lt;/jk&gt;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    * &lt;/ul&gt;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    *<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    * &lt;p&gt;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    * When enabled, the number of times an exception has occurred will be determined based on stack trace hashsums,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    * made available through the {@link RestException#getOccurrence()} method.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    *<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    * &lt;p&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    * Applicable to servlet class only.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   public static final String REST_useStackTraceHashes = "RestServlet.useStackTraceHashes";<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>   /**<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Default character encoding.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    *<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    * &lt;ul&gt;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.defaultCharset"&lt;/js&gt;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;String&lt;/code&gt;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;js&gt;"utf-8"&lt;/js&gt;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    * &lt;/ul&gt;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    *<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    * &lt;p&gt;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    * The default character encoding for the request and response if not specified on the request.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    *<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    * &lt;p&gt;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    * Applicable to servlet class and methods.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   public static final String REST_defaultCharset = "RestServlet.defaultCharset";<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>   /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  Expected format of request parameters.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    *<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    * &lt;ul&gt;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.paramFormat"&lt;/js&gt;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;String&lt;/code&gt;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;js&gt;"UON"&lt;/js&gt;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * &lt;/ul&gt;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    * &lt;p&gt;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * Possible values:<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * &lt;ul class='spaced-list'&gt;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    *    &lt;li&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    *       &lt;js&gt;"UON"&lt;/js&gt; - URL-Encoded Object Notation.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    *       &lt;br&gt;This notation allows for request parameters to contain arbitrarily complex POJOs.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    *    &lt;li&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    *       &lt;js&gt;"PLAIN"&lt;/js&gt; - Plain text.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    *       &lt;br&gt;This treats request parameters as plain text.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    *       &lt;br&gt;Only POJOs directly convertible from &lt;l&gt;Strings&lt;/l&gt; can be represented in parameters when using this<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    *       mode.<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    * &lt;/ul&gt;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    *<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    * &lt;p&gt;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    * Note that the parameter value &lt;js&gt;"(foo)"&lt;/js&gt; is interpreted as &lt;js&gt;"(foo)"&lt;/js&gt; when using plain mode, but<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    * &lt;js&gt;"foo"&lt;/js&gt; when using UON mode.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    * The format can also be specified per-parameter using the {@link FormData#format() @FormData.format()} and<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    * {@link Query#format() @Query.format()} annotations.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    * &lt;p&gt;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    * Applicable to servlet class and methods.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   public static final String REST_paramFormat = "RestServlet.paramFormat";<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>   /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    * &lt;b&gt;Configuration property:&lt;/b&gt;  REST resource resolver.<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    *<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * &lt;ul&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    *    &lt;li&gt;&lt;b&gt;Name:&lt;/b&gt; &lt;js&gt;"RestServlet.resourceResolver"&lt;/js&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    *    &lt;li&gt;&lt;b&gt;Data type:&lt;/b&gt; &lt;code&gt;Class&lt;/code&gt; or {@link RestResourceResolver}<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    *    &lt;li&gt;&lt;b&gt;Default:&lt;/b&gt; &lt;jk&gt;null&lt;/jk&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    * &lt;/ul&gt;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    *<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    * &lt;p&gt;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    * The resource resolver used to instantiate REST resource classes.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    *<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    * &lt;p&gt;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    * Applicable to servlet class.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    * &lt;br&gt;Can be passed in through servlet context.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   public static final String REST_resourceResolver = "RestServlet.resourceResolver";<a name="line.249"></a>
 <span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>   private final Object resource;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   private final RestConfig config;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   private final boolean<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      allowHeaderParams,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      allowBodyParam,<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      renderResponseStackTraces,<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      useStackTraceHashes;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   private final String<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      defaultCharset,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      paramFormat,<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      clientVersionHeader,<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      fullPath,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      htmlHeader,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      htmlNav,<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      htmlAside,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      htmlStyle,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      htmlStylesheet,<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      htmlScript,<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      htmlFooter,<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      htmlNoResultsMessage;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   private final String[]<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      htmlLinks;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   private final boolean htmlNoWrap;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   private final HtmlDocTemplate htmlTemplate;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   private final Map&lt;String,Widget&gt; htmlWidgets;<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>   private final Set&lt;String&gt; allowMethodParams;<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>   private final ObjectMap properties;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   private final Class&lt;?&gt;[]<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      beanFilters,<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      pojoSwaps;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   private final Map&lt;Class&lt;?&gt;,RestParam&gt; paramResolvers;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   private final SerializerGroup serializers;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   private final ParserGroup parsers;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   private final UrlEncodingSerializer urlEncodingSerializer;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   private final UrlEncodingParser urlEncodingParser;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   private final EncoderGroup encoders;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   private final MediaType[]<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      supportedContentTypes,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      supportedAcceptTypes;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   private final Map&lt;String,String&gt; defaultRequestHeaders;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   private final Map&lt;String,Object&gt; defaultResponseHeaders;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   private final BeanContext beanContext;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   private final RestConverter[] converters;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   private final RestGuard[] guards;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   private final ResponseHandler[] responseHandlers;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   private final MimetypesFileTypeMap mimetypesFileTypeMap;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   private final StreamResource favIcon;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   private final Map&lt;String,String&gt; staticFilesMap;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   private final String[] staticFilesPrefixes;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   private final MessageBundle msgs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   private final ConfigFile configFile;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   private final VarResolver varResolver;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   private final Map&lt;String,CallRouter&gt; callRouters;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   private final Map&lt;String,CallMethod&gt; callMethods;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   private final Map&lt;String,RestContext&gt; childResources;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   private final RestLogger logger;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   private final RestCallHandler callHandler;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   private final RestInfoProvider infoProvider;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   private final RestException initException;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   private final RestContext parentContext;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   private final RestResourceResolver resourceResolver;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>   // In-memory cache of images and stylesheets in the org.apache.juneau.rest.htdocs package.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   private final Map&lt;String,StreamResource&gt; staticFilesCache = new ConcurrentHashMap&lt;String,StreamResource&gt;();<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>   private final ResourceFinder resourceFinder;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   private final ConcurrentHashMap&lt;Integer,AtomicInteger&gt; stackTraceHashes = new ConcurrentHashMap&lt;Integer,AtomicInteger&gt;();<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>   /**<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    * Constructor.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    *<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    * @param resource The resource class (a class annotated with {@link RestResource @RestResource}).<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    * @param servletContext<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    *    The servlet context object.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    *    Can be &lt;jk&gt;null&lt;/jk&gt; if this isn't a<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    * @param config The servlet configuration object.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    * @throws Exception If any initialization problems were encountered.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   @SuppressWarnings("unchecked")<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   public RestContext(Object resource, ServletContext servletContext, RestConfig config) throws Exception {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      super(null);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      RestException _initException = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      try {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>         this.resource = resource;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>         this.config = config;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>         this.resourceFinder = new ResourceFinder(resource.getClass());<a name="line.339"></a>
-<span class="sourceLineNo">340</span>         this.parentContext = config.parentContext;<a name="line.340"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>   private final Object resource;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   final RestConfig config;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   private final boolean<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      allowHeaderParams,<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      allowBodyParam,<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      renderResponseStackTraces,<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      useStackTraceHashes;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   private final String<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      defaultCharset,<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      paramFormat,<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      clientVersionHeader,<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      fullPath,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      htmlHeader,<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      htmlNav,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      htmlAside,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      htmlStyle,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      htmlStylesheet,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      htmlScript,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      htmlFooter,<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      htmlNoResultsMessage;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   private final String[]<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      htmlLinks;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   private final boolean htmlNoWrap;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   private final HtmlDocTemplate htmlTemplate;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   private final Map&lt;String,Widget&gt; htmlWidgets;<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>   private final Set&lt;String&gt; allowMethodParams;<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>   private final ObjectMap properties;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   private final Class&lt;?&gt;[]<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      beanFilters,<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pojoSwaps;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   private final Map&lt;Class&lt;?&gt;,RestParam&gt; paramResolvers;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   private final SerializerGroup serializers;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   private final ParserGroup parsers;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   private final UrlEncodingSerializer urlEncodingSerializer;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   private final UrlEncodingParser urlEncodingParser;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   private final EncoderGroup encoders;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   private final MediaType[]<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      supportedContentTypes,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      supportedAcceptTypes;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   private final Map&lt;String,String&gt; defaultRequestHeaders;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   private final Map&lt;String,Object&gt; defaultResponseHeaders;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   private final BeanContext beanContext;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   private final RestConverter[] converters;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   private final RestGuard[] guards;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   private final ResponseHandler[] responseHandlers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   private final MimetypesFileTypeMap mimetypesFileTypeMap;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   private final StreamResource favIcon;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   private final Map&lt;String,String&gt; staticFilesMap;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   private final String[] staticFilesPrefixes;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   private final MessageBundle msgs;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   private final ConfigFile configFile;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   private final VarResolver varResolver;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   private final Map&lt;String,CallRouter&gt; callRouters;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   private final Map&lt;String,CallMethod&gt; callMethods;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   private final Map&lt;String,RestContext&gt; childResources;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   private final RestLogger logger;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   private final RestCallHandler callHandler;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   private final RestInfoProvider infoProvider;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   private final RestException initException;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   private final RestContext parentContext;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   private final RestResourceResolver resourceResolver;<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>   // Lifecycle methods<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   private final Method[] <a name="line.317"></a>
+<span class="sourceLineNo">318</span>      postInitMethods, <a name="line.318"></a>
+<span class="sourceLineNo">319</span>      postInitChildFirstMethods, <a name="line.319"></a>
+<span class="sourceLineNo">320</span>      preCallMethods, <a name="line.320"></a>
+<span class="sourceLineNo">321</span>      postCallMethods, <a name="line.321"></a>
+<span class="sourceLineNo">322</span>      startCallMethods, <a name="line.322"></a>
+<span class="sourceLineNo">323</span>      endCallMethods, <a name="line.323"></a>
+<span class="sourceLineNo">324</span>      destroyMethods;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   private final RestParam[][] <a name="line.325"></a>
+<span class="sourceLineNo">326</span>      preCallMethodParams, <a name="line.326"></a>
+<span class="sourceLineNo">327</span>      postCallMethodParams;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   private final Class&lt;?&gt;[][] <a name="line.328"></a>
+<span class="sourceLineNo">329</span>      postInitMethodParams, <a name="line.329"></a>
+<span class="sourceLineNo">330</span>      postInitChildFirstMethodParams, <a name="line.330"></a>
+<span class="sourceLineNo">331</span>      startCallMethodParams, <a name="line.331"></a>
+<span class="sourceLineNo">332</span>      endCallMethodParams, <a name="line.332"></a>
+<span class="sourceLineNo">333</span>      destroyMethodParams;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>   // In-memory cache of images and stylesheets in the org.apache.juneau.rest.htdocs package.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   private final Map&lt;String,StreamResource&gt; staticFilesCache = new ConcurrentHashMap&lt;String,StreamResource&gt;();<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>   private final ResourceFinder resourceFinder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   private final ConcurrentHashMap&lt;Integer,AtomicInteger&gt; stackTraceHashes = new ConcurrentHashMap&lt;Integer,AtomicInteger&gt;();<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
 <span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>         Builder b = new Builder(resource, servletContext, config);<a name="line.342"></a>
-<span class="sourceLineNo">343</span>         this.allowHeaderParams = b.allowHeaderParams;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>         this.allowBodyParam = b.allowBodyParam;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>         this.renderResponseStackTraces = b.renderResponseStackTraces;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>         this.useStackTraceHashes = b.useStackTraceHashes;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>         this.allowMethodParams = Collections.unmodifiableSet(b.allowMethodParams);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>         this.defaultCharset = b.defaultCharset;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>         this.paramFormat = b.paramFormat;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>         this.varResolver = b.varResolver;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>         this.configFile = b.configFile;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>         this.properties = b.properties;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>         this.beanFilters = b.beanFilters;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>         this.pojoSwaps = b.pojoSwaps;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>         this.paramResolvers = Collections.unmodifiableMap(b.paramResolvers);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>         this.serializers = b.serializers;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>         this.parsers = b.parsers;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>         this.urlEncodingSerializer = b.urlEncodingSerializer;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>         this.urlEncodingParser = b.urlEncodingParser;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>         this.encoders = b.encoders;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>         this.supportedContentTypes = toObjectArray(b.supportedContentTypes, MediaType.class);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>         this.supportedAcceptTypes = toObjectArray(b.supportedAcceptTypes, MediaType.class);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>         this.clientVersionHeader = b.clientVersionHeader;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>         this.defaultRequestHeaders = Collections.unmodifiableMap(b.defaultRequestHeaders);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>         this.defaultResponseHeaders = Collections.unmodifiableMap(b.defaultResponseHeaders);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>         this.beanContext = b.beanContext;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>         this.converters = b.converters.toArray(new RestConverter[b.converters.size()]);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>         this.guards = b.guards.toArray(new RestGuard[b.guards.size()]);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>         this.responseHandlers = toObjectArray(b.responseHandlers, ResponseHandler.class);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>         this.mimetypesFileTypeMap = b.mimetypesFileTypeMap;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>         this.favIcon = b.favIcon;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>         this.staticFilesMap = Collections.unmodifiableMap(b.staticFilesMap);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>         this.staticFilesPrefixes = b.staticFilesPrefixes;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>         this.msgs = b.messageBundle;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>         this.childResources = Collections.synchronizedMap(new LinkedHashMap&lt;String,RestContext&gt;());  // Not unmodifiable on purpose so that children can be replaced.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>         this.logger = b.logger;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>         this.fullPath = b.fullPath;<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>         this.htmlWidgets = Collections.unmodifiableMap(b.htmlWidgets);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>         this.htmlHeader = b.htmlHeader;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>         this.htmlLinks = b.htmlLinks;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>         this.htmlNav = b.htmlNav;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>         this.htmlAside = b.htmlAside;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>         this.htmlStyle = b.htmlStyle;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>         this.htmlStylesheet = b.htmlStylesheet;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>         this.htmlScript = b.htmlScript;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>         this.htmlFooter = b.htmlFooter;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>         this.htmlNoWrap = b.htmlNoWrap;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>         this.htmlNoResultsMessage = b.htmlNoResultsMessage;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>         this.htmlTemplate = b.htmlTemplate;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>         //----------------------------------------------------------------------------------------------------<a name="line.392"></a>
-<span class="sourceLineNo">393</span>         // Initialize the child resources.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>         // Done after initializing fields above since we pass this object to the child resources.<a name="line.394"></a>
-<span class="sourceLineNo">395</span>         //----------------------------------------------------------------------------------------------------<a name="line.395"></a>
-<span class="sourceLineNo">396</span>         List&lt;String&gt; methodsFound = new LinkedList&lt;String&gt;();   // Temporary to help debug transient duplicate method issue.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>         Map&lt;String,CallRouter.Builder&gt; routers = new LinkedHashMap&lt;String,CallRouter.Builder&gt;();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>         Map&lt;String,CallMethod&gt; _javaRestMethods = new LinkedHashMap&lt;String,CallMethod&gt;();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>         for (java.lang.reflect.Method method : resource.getClass().getMethods()) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            if (method.isAnnotationPresent(RestMethod.class)) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>               RestMethod a = method.getAnnotation(RestMethod.class);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>               methodsFound.add(method.getName() + "," + a.name() + "," + a.path());<a name="line.402"></a>
-<span class="sourceLineNo">403</span>               try {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                  if (! Modifier.isPublic(method.getModifiers()))<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                     throw new RestServletException("@RestMethod method {0}.{1} must be defined as public.", this.getClass().getName(), method.getName());<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>                  CallMethod sm = new CallMethod(resource, method, this);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>                  String httpMethod = sm.getHttpMethod();<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>                  // PROXY is a special case where a method returns an interface that we<a name="line.410"></a>
-<span class="sourceLineNo">411</span>                  // can perform REST calls against.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>                  // We override the CallMethod.invoke() method to insert our logic.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>                  if ("PROXY".equals(httpMethod)) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>                     final ClassMeta&lt;?&gt; interfaceClass = beanContext.getClassMeta(method.getGenericReturnType());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>                     final Map&lt;String,Method&gt; remoteableMethods = interfaceClass.getRemoteableMethods();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>                     if (remoteableMethods.isEmpty())<a name="line.417"></a>
-<span class="sourceLineNo">418</span>                        throw new RestException(SC_INTERNAL_SERVER_ERROR, "Method {0} returns an interface {1} that doesn't define any remoteable methods.", getMethodSignature(method), interfaceClass.getReadableName());<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>                     sm = new CallMethod(resource, method, this) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>                        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                        int invoke(String pathInfo, RestRequest req, RestResponse res) throws RestException {<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>                           int rc = super.invoke(pathInfo, req, res);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>                           if (rc != SC_OK)<a name="line.426"></a>
-<span class="sourceLineNo">427</span>                              return rc;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>                           final Object o = res.getOutput();<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>                           if ("GET".equals(req.getMethod())) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>                              res.setOutput(getMethodInfo(remoteableMethods.values()));<a name="line.432"></a>
-<span class="sourceLineNo">433</span>                              return SC_OK;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>                           } else if ("POST".equals(req.getMethod())) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>                              if (pathInfo.indexOf('/') != -1)<a name="line.436"></a>
-<span class="sourceLineNo">437</span>                                 pathInfo = pathInfo.substring(pathInfo.lastIndexOf('/')+1);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>                              pathInfo = urlDecode(pathInfo);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>                              java.lang.reflect.Method m = remoteableMethods.get(pathInfo);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>                              if (m != null) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>                                 try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>                                    // Parse the args and invoke the method.<a name="line.442"></a>
-<span class="sourceLineNo">443</span>                                    Parser p = req.getBody().getParser();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>                                    Object input = p.isReaderParser() ? req.getReader() : req.getInputStream();<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                                    Object output = m.invoke(o, p.parseArgs(input, m.getGenericParameterTypes()));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>                                    res.setOutput(output);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>                                    return SC_OK;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>                                 } catch (Exception e) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>                                    throw new RestException(SC_INTERNAL_SERVER_ERROR, e);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>                                 }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>                              }<a name="line.451"></a>
-<span class="sourceLineNo">452</span>                           }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>                           return SC_NOT_FOUND;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>                        }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>                     };<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>                     _javaRestMethods.put(method.getName(), sm);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                     addToRouter(routers, "GET", sm);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>                     addToRouter(routers, "POST", sm);<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>                  } else {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>                     _javaRestMethods.put(method.getName(), sm);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>                     addToRouter(routers, httpMethod, sm);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>                  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>               } catch (RestServletException e) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>                  throw new RestServletException("Problem occurred trying to serialize methods on class {0}, methods={1}", this.getClass().getName(), JsonSerializer.DEFAULT_LAX.serialize(methodsFound)).initCause(e);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>               }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>         }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>         this.callMethods = Collections.unmodifiableMap(_javaRestMethods);<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>         Map&lt;String,CallRouter&gt; _callRouters = new LinkedHashMap&lt;String,CallRouter&gt;();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>         for (CallRouter.Builder crb : routers.values())<a name="line.473"></a>
-<span class="sourceLineNo">474</span>            _callRouters.put(crb.getHttpMethodName(), crb.build());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>         this.callRouters = Collections.unmodifiableMap(_callRouters);<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>         // Initialize our child resources.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>         resourceResolver = resolve(resource, RestResourceResolver.class, b.resourceResolver);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>         for (Object o : config.childResources) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>            String path = null;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>            Object r = null;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>            if (o instanceof Pair) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>               Pair&lt;String,Object&gt; p = (Pair&lt;String,Object&gt;)o;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>               path = p.first();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>               r = p.second();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            } else if (o instanceof Class&lt;?&gt;) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>               Class&lt;?&gt; c = (Class&lt;?&gt;)o;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>               // Don't allow specifying yourself as a child.  Causes an infinite loop.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>               if (c == config.resourceClass)<a name="line.489"></a>
-<span class="sourceLineNo">490</span>                  continue;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>               r = c;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            } else {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>               r = o;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>            RestConfig childConfig = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>            if (o instanceof Class) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>               Class&lt;?&gt; oc = (Class&lt;?&gt;)o;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>               childConfig = new RestConfig(config.inner, oc, this);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>               r = resourceResolver.resolve(oc, childConfig);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>            } else {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>               r = o;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>               childConfig = new RestConfig(config.inner, o.getClass(), this);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>            }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>            if (r instanceof RestServlet) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>               RestServlet rs = (RestServlet)r;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>               rs.init(childConfig);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>               if (rs.getContext() == null)<a name="line.510"></a>
-<span class="sourceLineNo">511</span>                  throw new RestException(SC_INTERNAL_SERVER_ERROR, "Servlet {0} not initialized.  init(RestConfig) was not called.  This can occur if you've overridden this method but didn't call super.init(RestConfig).", rs.getClass().getName());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>               path = childConfig.path;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>               childResources.put(path, rs.getContext());<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            } else {<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>               // Call the init(RestConfig) method.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>               java.lang.reflect.Method m2 = findPublicMethod(r.getClass(), "init", Void.class, RestConfig.class);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>               if (m2 != null)<a name="line.518"></a>
-<span class="sourceLineNo">519</span>                  m2.invoke(r, childConfig);<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>               RestContext rc2 = new RestContext(r, servletContext, childConfig);<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>               // Call the init(RestContext) method.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>               m2 = findPublicMethod(r.getClass(), "init", Void.class, RestContext.class);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>               if (m2 != null)<a name="line.525"></a>
-<span class="sourceLineNo">526</span>                  m2.invoke(r, rc2);<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>               path = childConfig.path;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>               childResources.put(path, rc2);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>            }<a name="line.530"></a>
-<span class="sourceLineNo">531</span>         }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>         callHandler = config.callHandler == null ? new RestCallHandler(this) : resolve(resource, RestCallHandler.class, config.callHandler, this);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>         infoProvider = config.infoProvider == null ? new RestInfoProvider(this) : resolve(resource, RestInfoProvider.class, config.infoProvider, this);<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (RestException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>         _initException = e;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>         throw e;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      } catch (Exception e) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>         _initException = new RestException(SC_INTERNAL_SERVER_ERROR, e);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>         throw e;<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      } finally {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>         initException = _initException;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>   private static void addToRouter(Map&lt;String, CallRouter.Builder&gt; routers, String httpMethodName, CallMethod cm) throws RestServletException {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      if (! routers.containsKey(httpMethodName))<a name="line.548"></a>
-<span class="sourceLineNo">549</span>         routers.put(httpMethodName, new CallRouter.Builder(httpMethodName));<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      routers.get(httpMethodName).add(cm);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>   private static class Builder {<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>      boolean allowHeaderParams, allowBodyParam, renderResponseStackTraces, useStackTraceHashes;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      VarResolver varResolver;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ConfigFile configFile;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      ObjectMap properties;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      Class&lt;?&gt;[] beanFilters;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      Class&lt;?&gt;[] pojoSwaps;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      Map&lt;Class&lt;?&gt;,RestParam&gt; paramResolvers = new HashMap&lt;Class&lt;?&gt;,RestParam&gt;();<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      SerializerGroup serializers;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      ParserGroup parsers;<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      UrlEncodingSerializer urlEncodingSerializer;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      UrlEncodingParser urlEncodingParser;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      EncoderGroup encoders;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      String clientVersionHeader = "", defaultCharset, paramFormat, htmlHeader, htmlNav, htmlAside, htmlStyle,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            htmlStylesheet, htmlScript, htmlFooter, htmlNoResultsMessage;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      String[] htmlLinks;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      boolean htmlNoWrap;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      HtmlDocTemplate htmlTemplate;<a name="line.571"></a>
+<span class="sourceLineNo">342</span>   /**<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    * Constructor.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    *<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    * @param resource The resource class (a class annotated with {@link RestResource @RestResource}).<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    * @param servletContext<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    *    The servlet context object.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    *    Can be &lt;jk&gt;null&lt;/jk&gt; if this isn't a<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    * @param config The servlet configuration object.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    * @throws Exception If any

<TRUNCATED>


[02/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestServlet.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestServlet.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestServlet.html
index 7e225a0..076aad2 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestServlet.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestServlet.html
@@ -56,266 +56,200 @@
 <span class="sourceLineNo">048</span>   public final synchronized void init(ServletConfig servletConfig) throws ServletException {<a name="line.48"></a>
 <span class="sourceLineNo">049</span>      try {<a name="line.49"></a>
 <span class="sourceLineNo">050</span>         RestConfig rsc = new RestConfig(servletConfig, this.getClass(), null);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>         init(rsc);<a name="line.51"></a>
-<span class="sourceLineNo">052</span>         if (! isInitialized) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>            // Subclass may not have called super.init(RestServletConfig), so initialize here.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>            createContext(rsc);<a name="line.54"></a>
-<span class="sourceLineNo">055</span>            super.init(servletConfig);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>         }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      } catch (RestException e) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>         // Thrown RestExceptions are simply caught and re-thrown on subsequent calls to service().<a name="line.58"></a>
-<span class="sourceLineNo">059</span>         initException = e;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      } catch (ServletException e) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>         initException = e;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.63"></a>
-<span class="sourceLineNo">064</span>         throw e;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      } catch (Exception e) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>         initException = e;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.67"></a>
-<span class="sourceLineNo">068</span>         throw new ServletException(e);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      } catch (Throwable e) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>         initException = new Exception(e);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.71"></a>
-<span class="sourceLineNo">072</span>         throw new ServletException(e);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      } finally {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>         isInitialized = true;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   }<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>   /**<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    * Resource initialization method.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    *<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    * &lt;p&gt;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    * Identical to {@link Servlet#init(ServletConfig)} except the config object provides access to the external config<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    * file, configuration properties, and variable resolver defined for this resource.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    *<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    * &lt;p&gt;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * Classes can also use {@link HttpServlet#init()} and {@link RestServlet#getServletConfig()} as well to perform<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * initialization.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    *<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    * &lt;p&gt;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    * Note that if you override this method, you must first call &lt;code&gt;&lt;jk&gt;super&lt;/jk&gt;.init(servletConfig)&lt;/code&gt;!<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    *<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    * Resource classes that don't extend from {@link RestServlet} can add this method to their class to get access to<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    * the config object.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    *<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    * @param config The servlet configuration.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    * @throws Exception Any exception can be thrown to signal an initialization failure.<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   public synchronized void init(RestConfig config) throws Exception {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      if (isInitialized)<a name="line.100"></a>
-<span class="sourceLineNo">101</span>         return;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      createContext(config);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      super.init(config);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      init(context);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>   /**<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    * Convenience method if you want to perform initialization on your resource after all configuration settings<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    * have been made.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    *<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    * &lt;p&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    * This allows you to get access to the {@link RestContext} object during initialization.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    *<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    * &lt;p&gt;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    * The default implementation does nothing.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    *<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    * @param context The servlet context containing all the set-in-stone configurations for this resource.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    * @throws Exception Any exception can be thrown to signal an initialization failure.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   public synchronized void init(RestContext context) throws Exception {}<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>   private synchronized void createContext(RestConfig config) throws Exception {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      if (isInitialized)<a name="line.124"></a>
-<span class="sourceLineNo">125</span>         return;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      this.config = config;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      this.context = new RestContext(this, this.getServletContext(), config);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      this.isInitialized = true;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>   //--------------------------------------------------------------------------------<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   // Other methods<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   //--------------------------------------------------------------------------------<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>   /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    * The main service method.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    *<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    * &lt;p&gt;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    * Subclasses can optionally override this method if they want to tailor the behavior of requests.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    */<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   @Override /* Servlet */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   public void service(HttpServletRequest r1, HttpServletResponse r2) throws ServletException, IOException {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      try {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>         if (initException != null) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>            if (initException instanceof RestException)<a name="line.147"></a>
-<span class="sourceLineNo">148</span>               throw (RestException)initException;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>            throw new RestException(SC_INTERNAL_SERVER_ERROR, initException);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>         }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         if (context == null)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>            throw new RestException(SC_INTERNAL_SERVER_ERROR, "Servlet {0} not initialized.  init(RestConfig) was not called.  This can occur if you've overridden this method but didn't call super.init(RestConfig).", getClass().getName());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>         if (! isInitialized)<a name="line.153"></a>
-<span class="sourceLineNo">154</span>            throw new RestException(SC_INTERNAL_SERVER_ERROR, "Servlet {0} has not been initialized", getClass().getName());<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>         context.getCallHandler().service(r1, r2);<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>      } catch (RestException e) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>         r2.sendError(SC_INTERNAL_SERVER_ERROR, e.getLocalizedMessage());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } catch (Throwable e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>         r2.sendError(SC_INTERNAL_SERVER_ERROR, e.getLocalizedMessage());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>   /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    * Returns the read-only context object that contains all the configuration information about this resource.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    *<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    * &lt;p&gt;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    * This object is &lt;jk&gt;null&lt;/jk&gt; during the call to {@link #init(RestConfig)} but is populated by the time<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    * {@link #init()} is called.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    *<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    * &lt;p&gt;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    * Resource classes that don't extend from {@link RestServlet} can add the following method to their class to get<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    * access to this context object:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    * &lt;p class='bcode'&gt;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    *    &lt;jk&gt;public void&lt;/jk&gt; init(RestServletContext context) &lt;jk&gt;throws&lt;/jk&gt; Exception;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    * &lt;/p&gt;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    *<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    * @return The context information on this servlet.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    */<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   protected RestContext getContext() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      return context;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>   /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    * Callback method for listening for successful completion of requests.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    *<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    * &lt;p&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    * Subclasses can override this method for gathering performance statistics.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    *<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    * &lt;p&gt;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    * The default implementation does nothing.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    *<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    * &lt;p&gt;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    * Resources that don't extend from {@link RestServlet} can implement an equivalent method by overriding the<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    * {@link RestCallHandler#onSuccess(RestRequest, RestResponse, long)} method.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    *<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    * @param req The HTTP request.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * @param res The HTTP response.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    * @param time The time in milliseconds it took to process the request.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   protected void onSuccess(RestRequest req, RestResponse res, long time) {}<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>   /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * Callback method that gets invoked right before the REST Java method is invoked.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    *<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * &lt;p&gt;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    * Subclasses can override this method to override request headers or set request-duration properties before the<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    * Java method is invoked.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    *<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    * &lt;p&gt;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    * Resources that don't extend from {@link RestServlet} can implement an equivalent method by overriding the<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    * {@link RestCallHandler#onPreCall(RestRequest)} method.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    *<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    * @param req The HTTP servlet request object.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    * @throws RestException If any error occurs.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   protected void onPreCall(RestRequest req) throws RestException {}<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>   /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    * Callback method that gets invoked right after the REST Java method is invoked, but before the serializer is<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    * invoked.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    *<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    * &lt;p&gt;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    * Subclasses can override this method to override request and response headers, or set/override properties used by<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    * the serializer.<a name="line.226"></a>
+<span class="sourceLineNo">051</span>         rsc.init(this);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>         RestContext context = createContext(rsc);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>         super.init(servletConfig);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>         context.postInit();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>         context.postInitChildFirst();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      } catch (RestException e) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>         // Thrown RestExceptions are simply caught and re-thrown on subsequent calls to service().<a name="line.57"></a>
+<span class="sourceLineNo">058</span>         initException = e;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      } catch (ServletException e) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>         initException = e;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.62"></a>
+<span class="sourceLineNo">063</span>         throw e;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      } catch (Exception e) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>         initException = e;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.66"></a>
+<span class="sourceLineNo">067</span>         throw new ServletException(e);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      } catch (Throwable e) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>         initException = new Exception(e);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>         log(SEVERE, e, "Servlet init error on class ''{0}''", getClass().getName());<a name="line.70"></a>
+<span class="sourceLineNo">071</span>         throw new ServletException(e);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      } finally {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>         isInitialized = true;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>   /*<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    * Bypasses the init(ServletConfig) method and just calls the super.init(ServletConfig) method directly.<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    * Used when subclasses of RestServlet are attached as child resources.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   void innerInit(ServletConfig servletConfig) throws ServletException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      super.init(servletConfig);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>   /*<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    * Sets the context object for this servlet.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    * Used when subclasses of RestServlet are attached as child resources.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   void setContext(RestContext context) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      this.config = context.config;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      this.context = context;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>   /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    * Convenience method if you want to perform initialization on your resource after all configuration settings<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    * have been made.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    *<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    * &lt;p&gt;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    * This allows you to get access to the {@link RestContext} object during initialization.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    *<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    * &lt;p&gt;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    * The default implementation does nothing.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    *<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    * @param context The servlet context containing all the set-in-stone configurations for this resource.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    * @throws Exception Any exception can be thrown to signal an initialization failure.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   public synchronized void init(RestContext context) throws Exception {}<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>   private synchronized RestContext createContext(RestConfig config) throws Exception {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      if (! isInitialized) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>         this.config = config;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>         this.context = new RestContext(this, this.getServletContext(), config);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>         this.isInitialized = true;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return context;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>   //--------------------------------------------------------------------------------<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   // Other methods<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   //--------------------------------------------------------------------------------<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>   /**<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    * The main service method.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    *<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    * &lt;p&gt;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * Subclasses can optionally override this method if they want to tailor the behavior of requests.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   @Override /* Servlet */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   public void service(HttpServletRequest r1, HttpServletResponse r2) throws ServletException, IOException {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      try {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>         if (initException != null) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>            if (initException instanceof RestException)<a name="line.134"></a>
+<span class="sourceLineNo">135</span>               throw (RestException)initException;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            throw new RestException(SC_INTERNAL_SERVER_ERROR, initException);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>         }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>         if (context == null)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>            throw new RestException(SC_INTERNAL_SERVER_ERROR, "Servlet {0} not initialized.  init(RestConfig) was not called.  This can occur if you've overridden this method but didn't call super.init(RestConfig).", getClass().getName());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>         if (! isInitialized)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            throw new RestException(SC_INTERNAL_SERVER_ERROR, "Servlet {0} has not been initialized", getClass().getName());<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>         context.getCallHandler().service(r1, r2);<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>      } catch (RestException e) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>         r2.sendError(SC_INTERNAL_SERVER_ERROR, e.getLocalizedMessage());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      } catch (Throwable e) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>         r2.sendError(SC_INTERNAL_SERVER_ERROR, e.getLocalizedMessage());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>   /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    * Returns the read-only context object that contains all the configuration information about this resource.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    *<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    * &lt;p&gt;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    * This object is &lt;jk&gt;null&lt;/jk&gt; during the call to {@link #init(ServletConfig)} but is populated by the time<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    * {@link #init()} is called.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    *<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    * &lt;p&gt;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    * Resource classes that don't extend from {@link RestServlet} can add the following method to their class to get<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    * access to this context object:<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    * &lt;p class='bcode'&gt;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    *    &lt;jk&gt;public void&lt;/jk&gt; init(RestServletContext context) &lt;jk&gt;throws&lt;/jk&gt; Exception;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    * &lt;/p&gt;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    * @return The context information on this servlet.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   protected RestContext getContext() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      return context;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>   /**<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    * Convenience method for calling &lt;code&gt;getContext().getLogger().log(level, msg, args);&lt;/code&gt;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    *<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    * @param level The log level.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    * @param msg The message to log.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   protected void log(Level level, String msg, Object...args) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      if (context != null)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>         context.getLogger().log(level, msg, args);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>   /**<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    * Convenience method for calling &lt;code&gt;getContext().getLogger().log(level, cause, msg, args);&lt;/code&gt;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    *<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    * @param level The log level.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    * @param cause The cause.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    * @param msg The message to log.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   protected void log(Level level, Throwable cause, String msg, Object...args) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (context != null)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         context.getLogger().log(level, cause, msg, args);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      else {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         // If context failed to initialize, log to the console.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>         System.err.println(format(msg, args));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         if (cause != null)<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            cause.printStackTrace();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>   @Override /* GenericServlet */<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   public RestConfig getServletConfig() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      return config;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>   @Override /* GenericServlet */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   public void destroy() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (context != null)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>         context.destroy();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      super.destroy();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>   /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    * Convenience method for calling &lt;code&gt;getContext().getMessages();&lt;/code&gt;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    *<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    * @return The resource bundle for this resource.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    * @see RestContext#getProperties()<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   public MessageBundle getMessages() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return context.getMessages();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>   /**<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    * Convenience method for calling &lt;code&gt;getContext().getProperties();&lt;/code&gt;<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    *<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    * &lt;p&gt;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * Resources that don't extend from {@link RestServlet} can implement an equivalent method by overriding the<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    * {@link RestCallHandler#onPostCall(RestRequest,RestResponse)} method.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    *<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    * @param req The HTTP servlet request object.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * @param res The HTTP servlet response object.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * @throws RestException If any error occurs.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   protected void onPostCall(RestRequest req, RestResponse res) throws RestException {}<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>   /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    * Convenience method for calling &lt;code&gt;getContext().getLogger().log(level, msg, args);&lt;/code&gt;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    *<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    * @param level The log level.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    * @param msg The message to log.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   protected void log(Level level, String msg, Object...args) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (context != null)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>         context.getLogger().log(level, msg, args);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>   /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    * Convenience method for calling &lt;code&gt;getContext().getLogger().log(level, cause, msg, args);&lt;/code&gt;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    *<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    * @param level The log level.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    * @param cause The cause.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    * @param msg The message to log.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    * @param args Optional {@link MessageFormat}-style arguments.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    */<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   protected void log(Level level, Throwable cause, String msg, Object...args) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      if (context != null)<a name="line.259"></a>
-<span class="sourceLineNo">260</span>         context.getLogger().log(level, cause, msg, args);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      else {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>         // If context failed to initialize, log to the console.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>         System.err.println(format(msg, args));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>         if (cause != null)<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            cause.printStackTrace();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>   @Override /* GenericServlet */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   public RestConfig getServletConfig() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      return config;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>   @Override /* GenericServlet */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   public void destroy() {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if (context != null)<a name="line.276"></a>
-<span class="sourceLineNo">277</span>         context.destroy();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      super.destroy();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>   /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    * Convenience method for calling &lt;code&gt;getContext().getMessages();&lt;/code&gt;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    *<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    * @return The resource bundle for this resource.  Never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    * @see RestContext#getProperties()<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   public MessageBundle getMessages() {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      return context.getMessages();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>   /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    * Convenience method for calling &lt;code&gt;getContext().getProperties();&lt;/code&gt;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    *<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    * @return The resource properties as an {@link ObjectMap}.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    * @see RestContext#getProperties()<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    */<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   public ObjectMap getProperties() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      return getContext().getProperties();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>   /**<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    * Convenience method for calling &lt;code&gt;getContext().getBeanContext();&lt;/code&gt;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    *<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    * @return The bean context used for parsing path variables and header values.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    * @see RestContext#getBeanContext()<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    */<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   public BeanContext getBeanContext() {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return getContext().getBeanContext();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>}<a name="line.310"></a>
+<span class="sourceLineNo">228</span>    * @return The resource properties as an {@link ObjectMap}.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    * @see RestContext#getProperties()<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   public ObjectMap getProperties() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return getContext().getProperties();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>   /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    * Convenience method for calling &lt;code&gt;getContext().getBeanContext();&lt;/code&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    *<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * @return The bean context used for parsing path variables and header values.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    * @see RestContext#getBeanContext()<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    */<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   public BeanContext getBeanContext() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return getContext().getBeanContext();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>}<a name="line.244"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RestServletDefault.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RestServletDefault.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RestServletDefault.html
index aaeaf1e..17ade01 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RestServletDefault.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RestServletDefault.html
@@ -203,7 +203,7 @@
 <span class="sourceLineNo">195</span>         "&lt;h2&gt;$R{methodSummary,$R{servletDescription}}&lt;/h2&gt;",<a name="line.195"></a>
 <span class="sourceLineNo">196</span>         "&lt;a href='http://juneau.apache.org'&gt;&lt;img src='$U{servlet:/htdocs/juneau.png}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/&gt;&lt;/a&gt;"<a name="line.196"></a>
 <span class="sourceLineNo">197</span>      },<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      stylesheet="servlet:/styles/devops.css"<a name="line.198"></a>
+<span class="sourceLineNo">198</span>      stylesheet="servlet:/styles/light.css"<a name="line.198"></a>
 <span class="sourceLineNo">199</span>   ),<a name="line.199"></a>
 <span class="sourceLineNo">200</span><a name="line.200"></a>
 <span class="sourceLineNo">201</span>   // The location on the classpath or file system of the fav-icon.<a name="line.201"></a>



[08/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.html b/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.html
index ae5b08a..3b7caa2 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/microservice/resources/LogsResource.html
@@ -23,331 +23,337 @@
 <span class="sourceLineNo">015</span>import static javax.servlet.http.HttpServletResponse.*;<a name="line.15"></a>
 <span class="sourceLineNo">016</span>import static org.apache.juneau.html.HtmlDocSerializerContext.*;<a name="line.16"></a>
 <span class="sourceLineNo">017</span>import static org.apache.juneau.rest.RestContext.*;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.*;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.net.URI;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.nio.charset.*;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.*;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.juneau.*;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.juneau.annotation.*;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.juneau.dto.*;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.juneau.ini.*;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.juneau.microservice.*;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.juneau.rest.*;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.juneau.rest.annotation.*;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.juneau.rest.annotation.Properties;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.juneau.rest.converters.*;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.juneau.transforms.*;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * REST resource for viewing and accessing log files.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>@RestResource(<a name="line.39"></a>
-<span class="sourceLineNo">040</span>   path="/logs",<a name="line.40"></a>
-<span class="sourceLineNo">041</span>   title="Log files",<a name="line.41"></a>
-<span class="sourceLineNo">042</span>   description="Log files from this service",<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   properties={<a name="line.43"></a>
-<span class="sourceLineNo">044</span>      @Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   },<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   flags={REST_allowMethodParam},<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   pojoSwaps={<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      IteratorSwap.class,       // Allows Iterators and Iterables to be serialized.<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      DateSwap.ISO8601DT.class  // Serialize Date objects as ISO8601 strings.<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   }<a name="line.50"></a>
-<span class="sourceLineNo">051</span>)<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@SuppressWarnings("nls")<a name="line.52"></a>
-<span class="sourceLineNo">053</span>public class LogsResource extends Resource {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   private static final long serialVersionUID = 1L;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>   private File logDir;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   private LogEntryFormatter leFormatter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>   private final FileFilter filter = new FileFilter() {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      @Override /* FileFilter */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      public boolean accept(File f) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>         return f.isDirectory() || f.getName().endsWith(".log");<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      }<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   };<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>   @Override /* RestServlet */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   public synchronized void init(RestConfig config) throws Exception {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      super.init(config);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      ConfigFile cf = config.getConfigFile();<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>      logDir = new File(cf.getString("Logging/logDir", "."));<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      leFormatter = new LogEntryFormatter(<a name="line.72"></a>
-<span class="sourceLineNo">073</span>         cf.getString("Logging/format", "[{date} {level}] {msg}%n"),<a name="line.73"></a>
-<span class="sourceLineNo">074</span>         cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss"),<a name="line.74"></a>
-<span class="sourceLineNo">075</span>         cf.getBoolean("Logging/useStackTraceHashes")<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      );<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>   /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    * [GET /*] - Get file details or directory listing.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    *<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    * @param req The HTTP request<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    * @param res The HTTP response<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    * @param properties The writable properties for setting the descriptions.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    * @param path The log file path.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    * @return The log file.<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    * @throws Exception<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   @RestMethod(<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      name="GET",<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      path="/*",<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      swagger=@MethodSwagger(<a name="line.92"></a>
-<span class="sourceLineNo">093</span>         responses={@Response(200),@Response(404)}<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      )<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   )<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   public Object getFileOrDirectory(RestRequest req, RestResponse res, @Properties ObjectMap properties, @PathRemainder String path) throws Exception {<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>      File f = getFile(path);<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>      if (f.isDirectory()) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>         Set&lt;FileResource&gt; l = new TreeSet&lt;FileResource&gt;(new FileResourceComparator());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>         File[] files = f.listFiles(filter);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>         if (files != null) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>            for (File fc : files) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>               URI fUrl = new URI("servlet:/" + fc.getName());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>               l.add(new FileResource(fc, fUrl));<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>         }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>         return l;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>      return new FileResource(f, new URI("servlet:/"));<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>   /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    * [VIEW /*] - Retrieve the contents of a log file.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    *<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    * @param req The HTTP request.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    * @param res The HTTP response.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    * @param path The log file path.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    * @param properties The writable properties for setting the descriptions.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    * @param highlight If &lt;code&gt;true&lt;/code&gt;, add color highlighting based on severity.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    * @throws Exception<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   @RestMethod(<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      name="VIEW",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      path="/*",<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      swagger=@MethodSwagger(<a name="line.133"></a>
-<span class="sourceLineNo">134</span>         responses={@Response(200),@Response(404)}<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      )<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   )<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   @SuppressWarnings("nls")<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   public void viewFile(RestRequest req, RestResponse res, @PathRemainder String path, @Properties ObjectMap properties, @Query("highlight") boolean highlight, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>      File f = getFile(path);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (f.isDirectory())<a name="line.141"></a>
-<span class="sourceLineNo">142</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.144"></a>
+<span class="sourceLineNo">018</span>import static org.apache.juneau.rest.annotation.HookEvent.*;<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.*;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.net.URI;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.nio.charset.*;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.*;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.juneau.*;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.juneau.annotation.*;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.juneau.dto.*;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.juneau.ini.*;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.juneau.microservice.*;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.juneau.rest.*;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.juneau.rest.annotation.*;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.juneau.rest.annotation.Properties;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.juneau.rest.converters.*;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.juneau.transforms.*;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * REST resource for viewing and accessing log files.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>@RestResource(<a name="line.40"></a>
+<span class="sourceLineNo">041</span>   path="/logs",<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   title="Log files",<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   description="Log files from this service",<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   properties={<a name="line.44"></a>
+<span class="sourceLineNo">045</span>      @Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   },<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   flags={REST_allowMethodParam},<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   pojoSwaps={<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      IteratorSwap.class,       // Allows Iterators and Iterables to be serialized.<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      DateSwap.ISO8601DT.class  // Serialize Date objects as ISO8601 strings.<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   }<a name="line.51"></a>
+<span class="sourceLineNo">052</span>)<a name="line.52"></a>
+<span class="sourceLineNo">053</span>@SuppressWarnings("nls")<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class LogsResource extends Resource {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   private static final long serialVersionUID = 1L;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>   private File logDir;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   private LogEntryFormatter leFormatter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>   private final FileFilter filter = new FileFilter() {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      @Override /* FileFilter */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      public boolean accept(File f) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>         return f.isDirectory() || f.getName().endsWith(".log");<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      }<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   };<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>   /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    * Initializes the log directory and formatter.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    * <a name="line.69"></a>
+<span class="sourceLineNo">070</span>    * @param config The resource config.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    * @throws Exception<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   @RestHook(INIT) <a name="line.73"></a>
+<span class="sourceLineNo">074</span>   public void init(RestConfig config) throws Exception {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      ConfigFile cf = config.getConfigFile();<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>      logDir = new File(cf.getString("Logging/logDir", "."));<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      leFormatter = new LogEntryFormatter(<a name="line.78"></a>
+<span class="sourceLineNo">079</span>         cf.getString("Logging/format", "[{date} {level}] {msg}%n"),<a name="line.79"></a>
+<span class="sourceLineNo">080</span>         cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss"),<a name="line.80"></a>
+<span class="sourceLineNo">081</span>         cf.getBoolean("Logging/useStackTraceHashes")<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      );<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>   /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    * [GET /*] - Get file details or directory listing.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    *<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    * @param req The HTTP request<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    * @param res The HTTP response<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    * @param properties The writable properties for setting the descriptions.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    * @param path The log file path.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    * @return The log file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    * @throws Exception<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   @RestMethod(<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      name="GET",<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      path="/*",<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      swagger=@MethodSwagger(<a name="line.98"></a>
+<span class="sourceLineNo">099</span>         responses={@Response(200),@Response(404)}<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      )<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   )<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   public Object getFileOrDirectory(RestRequest req, RestResponse res, @Properties ObjectMap properties, @PathRemainder String path) throws Exception {<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>      File f = getFile(path);<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>      if (f.isDirectory()) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         Set&lt;FileResource&gt; l = new TreeSet&lt;FileResource&gt;(new FileResourceComparator());<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         File[] files = f.listFiles(filter);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         if (files != null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>            for (File fc : files) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>               URI fUrl = new URI("servlet:/" + fc.getName());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>               l.add(new FileResource(fc, fUrl));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>         }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>         return l;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>      return new FileResource(f, new URI("servlet:/"));<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>   /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    * [VIEW /*] - Retrieve the contents of a log file.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    *<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    * @param req The HTTP request.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    * @param res The HTTP response.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    * @param path The log file path.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    * @param properties The writable properties for setting the descriptions.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    * @param highlight If &lt;code&gt;true&lt;/code&gt;, add color highlighting based on severity.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    * @throws Exception<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   @RestMethod(<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      name="VIEW",<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      path="/*",<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      swagger=@MethodSwagger(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>         responses={@Response(200),@Response(404)}<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      )<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   )<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   @SuppressWarnings("nls")<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   public void viewFile(RestRequest req, RestResponse res, @PathRemainder String path, @Properties ObjectMap properties, @Query("highlight") boolean highlight, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.144"></a>
 <span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>      if (! highlight) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>         res.setContentType("text/plain");<a name="line.148"></a>
-<span class="sourceLineNo">149</span>         if (o instanceof Reader)<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            res.setOutput(o);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>         else {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>            LogParser p = (LogParser)o;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            Writer w = res.getNegotiatedWriter();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>            try {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>               p.writeTo(w);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            } finally {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>               w.flush();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>               w.close();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>         }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>         return;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>      res.setContentType("text/html");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      PrintWriter w = res.getNegotiatedWriter();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      try {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>         LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>         try {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>            if (! lp.hasNext())<a name="line.170"></a>
-<span class="sourceLineNo">171</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            else for (LogParser.Entry le : lp) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>               char s = le.severity.charAt(0);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>               String color = "black";<a name="line.174"></a>
-<span class="sourceLineNo">175</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.175"></a>
-<span class="sourceLineNo">176</span>               if (s == 'I')<a name="line.176"></a>
-<span class="sourceLineNo">177</span>                  color = "#006400";<a name="line.177"></a>
-<span class="sourceLineNo">178</span>               else if (s == 'W')<a name="line.178"></a>
-<span class="sourceLineNo">179</span>                  color = "#CC8400";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>               else if (s == 'E' || s == 'S')<a name="line.180"></a>
-<span class="sourceLineNo">181</span>                  color = "#DD0000";<a name="line.181"></a>
-<span class="sourceLineNo">182</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.182"></a>
-<span class="sourceLineNo">183</span>                  color = "#000064";<a name="line.183"></a>
-<span class="sourceLineNo">184</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>         } finally {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>            lp.close();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>         }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>         w.close();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>   /**<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    * [VIEW /*] - Retrieve the contents of a log file as parsed entries.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    *<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    * @param req The HTTP request.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    * @param path The log file path.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    * @return The parsed contents of the log file.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    * @throws Exception<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   @RestMethod(<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      name="PARSE",<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      path="/*",<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      converters=Queryable.class,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      swagger=@MethodSwagger(<a name="line.213"></a>
-<span class="sourceLineNo">214</span>         responses={@Response(200),@Response(404)}<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      )<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   )<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   public LogParser viewParsedEntries(RestRequest req, @PathRemainder String path, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>      File f = getFile(path);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>      if (f.isDirectory())<a name="line.222"></a>
-<span class="sourceLineNo">223</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.223"></a>
+<span class="sourceLineNo">146</span>      File f = getFile(path);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      if (f.isDirectory())<a name="line.147"></a>
+<span class="sourceLineNo">148</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>      if (! highlight) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>         Object o = getReader(f, startDate, endDate, thread, loggers, severity);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>         res.setContentType("text/plain");<a name="line.154"></a>
+<span class="sourceLineNo">155</span>         if (o instanceof Reader)<a name="line.155"></a>
+<span class="sourceLineNo">156</span>            res.setOutput(o);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>         else {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            LogParser p = (LogParser)o;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>            Writer w = res.getNegotiatedWriter();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>            try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>               p.writeTo(w);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>            } finally {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>               w.flush();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>               w.close();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>            }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>         }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>         return;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>      res.setContentType("text/html");<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      PrintWriter w = res.getNegotiatedWriter();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      try {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>         w.println("&lt;html&gt;&lt;body style='font-family:monospace;font-size:8pt;white-space:pre;'&gt;");<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         LogParser lp = getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         try {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>            if (! lp.hasNext())<a name="line.176"></a>
+<span class="sourceLineNo">177</span>               w.append("&lt;span style='color:gray'&gt;[EMPTY]&lt;/span&gt;");<a name="line.177"></a>
+<span class="sourceLineNo">178</span>            else for (LogParser.Entry le : lp) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>               char s = le.severity.charAt(0);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>               String color = "black";<a name="line.180"></a>
+<span class="sourceLineNo">181</span>               //SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST<a name="line.181"></a>
+<span class="sourceLineNo">182</span>               if (s == 'I')<a name="line.182"></a>
+<span class="sourceLineNo">183</span>                  color = "#006400";<a name="line.183"></a>
+<span class="sourceLineNo">184</span>               else if (s == 'W')<a name="line.184"></a>
+<span class="sourceLineNo">185</span>                  color = "#CC8400";<a name="line.185"></a>
+<span class="sourceLineNo">186</span>               else if (s == 'E' || s == 'S')<a name="line.186"></a>
+<span class="sourceLineNo">187</span>                  color = "#DD0000";<a name="line.187"></a>
+<span class="sourceLineNo">188</span>               else if (s == 'D' || s == 'F' || s == 'T')<a name="line.188"></a>
+<span class="sourceLineNo">189</span>                  color = "#000064";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>               w.append("&lt;span style='color:").append(color).append("'&gt;");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>               le.appendHtml(w).append("&lt;/span&gt;");<a name="line.191"></a>
+<span class="sourceLineNo">192</span>            }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>            w.append("&lt;/body&gt;&lt;/html&gt;");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>         } finally {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            lp.close();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>         }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } finally {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>         w.close();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>   /**<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    * [VIEW /*] - Retrieve the contents of a log file as parsed entries.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    *<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    * @param req The HTTP request.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    * @param path The log file path.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    * @param start Optional start timestamp.  Don't print lines logged before the specified timestamp.  Example:  "&amp;amp;start=2014-01-23 11:25:47".<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    * @param end Optional end timestamp.  Don't print lines logged after the specified timestamp.  Example:  "&amp;amp;end=2014-01-23 11:25:47".<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    * @param thread Optional thread name filter.  Only show log entries with the specified thread name.  Example: "&amp;amp;thread=pool-33-thread-1".<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    * @param loggers Optional logger filter.  Only show log entries if they were produced by one of the specified loggers (simple class name).  Example: "&amp;amp;loggers=(LinkIndexService,LinkIndexRestService)".<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * @param severity Optional severity filter.  Only show log entries with the specified severity.  Example: "&amp;amp;severity=(ERROR,WARN)".<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    * @return The parsed contents of the log file.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    * @throws Exception<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   @RestMethod(<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      name="PARSE",<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      path="/*",<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      converters=Queryable.class,<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      swagger=@MethodSwagger(<a name="line.219"></a>
+<span class="sourceLineNo">220</span>         responses={@Response(200),@Response(404)}<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      )<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   )<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   public LogParser viewParsedEntries(RestRequest req, @PathRemainder String path, @Query("start") String start, @Query("end") String end, @Query("thread") String thread, @Query("loggers") String[] loggers, @Query("severity") String[] severity) throws Exception {<a name="line.223"></a>
 <span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   }<a name="line.226"></a>
+<span class="sourceLineNo">225</span>      File f = getFile(path);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Date startDate = parseISO8601Date(start), endDate = parseISO8601Date(end);<a name="line.226"></a>
 <span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>   /**<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    * [DOWNLOAD /*] - Download file.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    *<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    * @param res The HTTP response.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    * @param path The log file path.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    * @return The contents of the log file.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    * @throws Exception<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   @RestMethod(<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      name="DOWNLOAD",<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      path="/*",<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      swagger=@MethodSwagger(<a name="line.239"></a>
-<span class="sourceLineNo">240</span>         responses={@Response(200),@Response(404)}<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      )<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   )<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   public Object downloadFile(RestResponse res, @PathRemainder String path) throws Exception {<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>      File f = getFile(path);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>      if (f.isDirectory())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "Download not available on directories");<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>      res.setContentType("application/octet-stream");<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      res.setContentLength((int)f.length());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return new FileInputStream(f);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>   /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    * [DELETE /*] - Delete a file.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    *<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    * @param path The log file path.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    * @return A redirect object to the root.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    * @throws Exception<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   @RestMethod(<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      name="DELETE",<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      path="/*",<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      swagger=@MethodSwagger(<a name="line.265"></a>
-<span class="sourceLineNo">266</span>         responses={@Response(200),@Response(404)}<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      )<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   )<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   public Object deleteFile(@PathRemainder String path) throws Exception {<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      File f = getFile(path);<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (f.isDirectory())<a name="line.273"></a>
-<span class="sourceLineNo">274</span>         throw new RestException(SC_BAD_REQUEST, "Delete not available on directories.");<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if (f.canWrite())<a name="line.276"></a>
-<span class="sourceLineNo">277</span>         if (! f.delete())<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            throw new RestException(SC_FORBIDDEN, "Could not delete file.");<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return new Redirect(path + "/..");<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>   private static BufferedReader getReader(File f) throws IOException {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>   private File getFile(String path) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      if (path != null &amp;&amp; path.indexOf("..") != -1)<a name="line.288"></a>
-<span class="sourceLineNo">289</span>         throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      File f = (path == null ? logDir : new File(logDir.getAbsolutePath() + '/' + path));<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (filter.accept(f))<a name="line.291"></a>
-<span class="sourceLineNo">292</span>         return f;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>   /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    * File bean.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   @SuppressWarnings("javadoc")<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   public static class FileResource {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      private File f;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      public String type;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      public Object name;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      public Long size;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      @BeanProperty(swap=DateSwap.DateTimeMedium.class) public Date lastModified;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      public URI view, highlighted, parsed, download, delete;<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>      public FileResource(File f, URI uri) throws Exception {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>         this.f = f;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>         this.type = (f.isDirectory() ? "dir" : "file");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>         this.name = f.isDirectory() ? new Link(f.getName(), uri.toString()) : f.getName();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>         this.size = f.isDirectory() ? null : f.length();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>         this.lastModified = new Date(f.lastModified());<a name="line.313"></a>
-<span class="sourceLineNo">314</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>            this.view = new URI(uri + "?method=VIEW");<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            this.highlighted = new URI(uri + "?method=VIEW&amp;highlight=true");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            this.parsed = new URI(uri + "?method=PARSE");<a name="line.317"></a>
-<span class="sourceLineNo">318</span>            this.download = new URI(uri + "?method=DOWNLOAD");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>            this.delete = new URI(uri + "?method=DELETE");<a name="line.319"></a>
-<span class="sourceLineNo">320</span>         }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>   private static class FileResourceComparator implements Comparator&lt;FileResource&gt;, Serializable {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      private static final long serialVersionUID = 1L;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      @Override /* Comparator */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      public int compare(FileResource o1, FileResource o2) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>         int c = o1.type.compareTo(o2.type);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>         return c != 0 ? c : o1.f.getName().compareTo(o2.f.getName());<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.334"></a>
-<span class="sourceLineNo">335</span>         return getReader(f);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.336"></a>
+<span class="sourceLineNo">228</span>      if (f.isDirectory())<a name="line.228"></a>
+<span class="sourceLineNo">229</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "View not available on directories");<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>      return getLogParser(f, startDate, endDate, thread, loggers, severity);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>   /**<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    * [DOWNLOAD /*] - Download file.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    * @param res The HTTP response.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    * @param path The log file path.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    * @return The contents of the log file.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    * @throws Exception<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   @RestMethod(<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      name="DOWNLOAD",<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      path="/*",<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      swagger=@MethodSwagger(<a name="line.245"></a>
+<span class="sourceLineNo">246</span>         responses={@Response(200),@Response(404)}<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      )<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   )<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   public Object downloadFile(RestResponse res, @PathRemainder String path) throws Exception {<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>      File f = getFile(path);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>      if (f.isDirectory())<a name="line.253"></a>
+<span class="sourceLineNo">254</span>         throw new RestException(SC_METHOD_NOT_ALLOWED, "Download not available on directories");<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>      res.setContentType("application/octet-stream");<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      res.setContentLength((int)f.length());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return new FileInputStream(f);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>   /**<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    * [DELETE /*] - Delete a file.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    *<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    * @param path The log file path.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    * @return A redirect object to the root.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    * @throws Exception<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   @RestMethod(<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      name="DELETE",<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      path="/*",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      swagger=@MethodSwagger(<a name="line.271"></a>
+<span class="sourceLineNo">272</span>         responses={@Response(200),@Response(404)}<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      )<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   )<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   public Object deleteFile(@PathRemainder String path) throws Exception {<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>      File f = getFile(path);<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>      if (f.isDirectory())<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         throw new RestException(SC_BAD_REQUEST, "Delete not available on directories.");<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>      if (f.canWrite())<a name="line.282"></a>
+<span class="sourceLineNo">283</span>         if (! f.delete())<a name="line.283"></a>
+<span class="sourceLineNo">284</span>            throw new RestException(SC_FORBIDDEN, "Could not delete file.");<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return new Redirect(path + "/..");<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>   private static BufferedReader getReader(File f) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.defaultCharset()));<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>   private File getFile(String path) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (path != null &amp;&amp; path.indexOf("..") != -1)<a name="line.294"></a>
+<span class="sourceLineNo">295</span>         throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      File f = (path == null ? logDir : new File(logDir.getAbsolutePath() + '/' + path));<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (filter.accept(f))<a name="line.297"></a>
+<span class="sourceLineNo">298</span>         return f;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      throw new RestException(SC_NOT_FOUND, "File not found.");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>   /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    * File bean.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   @SuppressWarnings("javadoc")<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   public static class FileResource {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      private File f;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      public String type;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      public Object name;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public Long size;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      @BeanProperty(swap=DateSwap.DateTimeMedium.class) public Date lastModified;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      public URI view, highlighted, parsed, download, delete;<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>      public FileResource(File f, URI uri) throws Exception {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>         this.f = f;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>         this.type = (f.isDirectory() ? "dir" : "file");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>         this.name = f.isDirectory() ? new Link(f.getName(), uri.toString()) : f.getName();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>         this.size = f.isDirectory() ? null : f.length();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>         this.lastModified = new Date(f.lastModified());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>         if (f.canRead() &amp;&amp; ! f.isDirectory()) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            this.view = new URI(uri + "?method=VIEW");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            this.highlighted = new URI(uri + "?method=VIEW&amp;highlight=true");<a name="line.322"></a>
+<span class="sourceLineNo">323</span>            this.parsed = new URI(uri + "?method=PARSE");<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            this.download = new URI(uri + "?method=DOWNLOAD");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>            this.delete = new URI(uri + "?method=DELETE");<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>   private static class FileResourceComparator implements Comparator&lt;FileResource&gt;, Serializable {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      private static final long serialVersionUID = 1L;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      @Override /* Comparator */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      public int compare(FileResource o1, FileResource o2) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>         int c = o1.type.compareTo(o2.type);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>         return c != 0 ? c : o1.f.getName().compareTo(o2.f.getName());<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>   }<a name="line.337"></a>
 <span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>}<a name="line.342"></a>
+<span class="sourceLineNo">339</span>   private Object getReader(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (start == null &amp;&amp; end == null &amp;&amp; thread == null &amp;&amp; loggers == null)<a name="line.340"></a>
+<span class="sourceLineNo">341</span>         return getReader(f);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return getLogParser(f, start, end, thread, loggers, severity);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>   private LogParser getLogParser(File f, final Date start, final Date end, final String thread, final String[] loggers, final String[] severity) throws IOException {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      return new LogParser(leFormatter, f, start, end, thread, loggers, severity);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>}<a name="line.348"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/rest/RequestBody.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/rest/RequestBody.html b/content/site/apidocs/src-html/org/apache/juneau/rest/RequestBody.html
index 140749f..7f6ab59 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/rest/RequestBody.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/rest/RequestBody.html
@@ -446,8 +446,23 @@
 <span class="sourceLineNo">438</span>      public final void close() throws IOException {<a name="line.438"></a>
 <span class="sourceLineNo">439</span>         is.close();<a name="line.439"></a>
 <span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>}<a name="line.442"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span>      @Override /* ServletInputStream */<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      public boolean isFinished() {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>         return false;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>      @Override /* ServletInputStream */<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      public boolean isReady() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>         return true;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      }<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>      @Override /* ServletInputStream */<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      public void setReadListener(ReadListener arg0) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>         throw new NoSuchMethodError();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>}<a name="line.457"></a>
 
 
 


[23/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/ResourceGroup.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/ResourceGroup.html b/content/site/apidocs/org/apache/juneau/microservice/ResourceGroup.html
index 4d3e47b..8f30bb6 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/ResourceGroup.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/ResourceGroup.html
@@ -143,7 +143,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#htmldoc--">htmldoc</a>=,
               <a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#config--">config</a>="$S{juneau.configFile}")
-public abstract class <a href="../../../../src-html/org/apache/juneau/microservice/ResourceGroup.html#line.55">ResourceGroup</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/microservice/ResourceGroup.html#line.58">ResourceGroup</a>
 extends <a href="../../../../org/apache/juneau/rest/RestServletGroupDefault.html" title="class in org.apache.juneau.rest">RestServletGroupDefault</a></pre>
 <div class="block">Superclass for all REST resource groups.
  
@@ -209,8 +209,8 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletGroupDefault.html
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/ResourceGroup.html#init-org.apache.juneau.rest.RestConfig-">init</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
-<div class="block">Resource initialization method.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/ResourceGroup.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
+<div class="block">Initializes the registry URL and rest clent.</div>
 </td>
 </tr>
 </table>
@@ -233,7 +233,7 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletGroupDefault.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">
@@ -276,7 +276,7 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletGroupDefault.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ResourceGroup</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceGroup.html#line.55">ResourceGroup</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceGroup.html#line.58">ResourceGroup</a>()</pre>
 </li>
 </ul>
 </li>
@@ -287,38 +287,21 @@ extends <a href="../../../../org/apache/juneau/rest/RestServletGroupDefault.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="init-org.apache.juneau.rest.RestConfig-">
+<a name="addConfigVars-org.apache.juneau.rest.RestConfig-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceGroup.html#line.58">init</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
-          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">RestServlet</a></code></span></div>
-<div class="block">Resource initialization method.
-
- <p>
- Identical to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> except the config object provides access to the external config
- file, configuration properties, and variable resolver defined for this resource.
-
- <p>
- Classes can also use <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true#init--" title="class or interface in javax.servlet"><code>GenericServlet.init()</code></a> and <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--"><code>RestServlet.getServletConfig()</code></a> as well to perform
- initialization.
-
- <p>
- Note that if you override this method, you must first call <code><jk>super</jk>.init(servletConfig)</code>!
-
- <p>
- Resource classes that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can add this method to their class to get access to
- the config object.</div>
+<h4>addConfigVars</h4>
+<pre><a href="../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation">@RestHook</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestHook.html#value--">value</a>=<a href="../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT">INIT</a>)
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceGroup.html#line.67">addConfigVars</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
+                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Initializes the registry URL and rest clent.</div>
 <dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>config</code> - The servlet configuration.</dd>
+<dd><code>config</code> - The resource config.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code> - Any exception can be thrown to signal an initialization failure.</dd>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
 </dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/ResourceJena.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/ResourceJena.html b/content/site/apidocs/org/apache/juneau/microservice/ResourceJena.html
index 34a75a5..90def9e 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/ResourceJena.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/ResourceJena.html
@@ -176,7 +176,7 @@ extends <a href="../../../../org/apache/juneau/rest/jena/RestServletJenaDefault.
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-jav
 a.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/ResourceJenaGroup.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/ResourceJenaGroup.html b/content/site/apidocs/org/apache/juneau/microservice/ResourceJenaGroup.html
index cdbd461..1a424d9 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/ResourceJenaGroup.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/ResourceJenaGroup.html
@@ -139,7 +139,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre><a href="../../../../org/apache/juneau/rest/annotation/RestResource.html" title="annotation in org.apache.juneau.rest.annotation">@RestResource</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#htmldoc--">htmldoc</a>=,
               <a href="../../../../org/apache/juneau/rest/annotation/RestResource.html#config--">config</a>="$S{juneau.configFile}")
-public abstract class <a href="../../../../src-html/org/apache/juneau/microservice/ResourceJenaGroup.html#line.56">ResourceJenaGroup</a>
+public abstract class <a href="../../../../src-html/org/apache/juneau/microservice/ResourceJenaGroup.html#line.59">ResourceJenaGroup</a>
 extends <a href="../../../../org/apache/juneau/rest/jena/RestServletJenaGroupDefault.html" title="class in org.apache.juneau.rest.jena">RestServletJenaGroupDefault</a></pre>
 <div class="block">Superclass for all REST resource groups.
  
@@ -205,8 +205,8 @@ extends <a href="../../../../org/apache/juneau/rest/jena/RestServletJenaGroupDef
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/ResourceJenaGroup.html#init-org.apache.juneau.rest.RestConfig-">init</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
-<div class="block">Resource initialization method.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/ResourceJenaGroup.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></span>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)</code>
+<div class="block">Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.</div>
 </td>
 </tr>
 </table>
@@ -229,7 +229,7 @@ extends <a href="../../../../org/apache/juneau/rest/jena/RestServletJenaGroupDef
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#log-ja
 va.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">
@@ -272,7 +272,7 @@ extends <a href="../../../../org/apache/juneau/rest/jena/RestServletJenaGroupDef
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ResourceJenaGroup</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceJenaGroup.html#line.56">ResourceJenaGroup</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceJenaGroup.html#line.59">ResourceJenaGroup</a>()</pre>
 </li>
 </ul>
 </li>
@@ -283,38 +283,21 @@ extends <a href="../../../../org/apache/juneau/rest/jena/RestServletJenaGroupDef
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="init-org.apache.juneau.rest.RestConfig-">
+<a name="addConfigVars-org.apache.juneau.rest.RestConfig-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceJenaGroup.html#line.59">init</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
-          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">RestServlet</a></code></span></div>
-<div class="block">Resource initialization method.
-
- <p>
- Identical to <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true#init-javax.servlet.ServletConfig-" title="class or interface in javax.servlet"><code>Servlet.init(ServletConfig)</code></a> except the config object provides access to the external config
- file, configuration properties, and variable resolver defined for this resource.
-
- <p>
- Classes can also use <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true#init--" title="class or interface in javax.servlet"><code>GenericServlet.init()</code></a> and <a href="../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--"><code>RestServlet.getServletConfig()</code></a> as well to perform
- initialization.
-
- <p>
- Note that if you override this method, you must first call <code><jk>super</jk>.init(servletConfig)</code>!
-
- <p>
- Resource classes that don't extend from <a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><code>RestServlet</code></a> can add this method to their class to get access to
- the config object.</div>
+<h4>addConfigVars</h4>
+<pre><a href="../../../../org/apache/juneau/rest/annotation/RestHook.html" title="annotation in org.apache.juneau.rest.annotation">@RestHook</a>(<a href="../../../../org/apache/juneau/rest/annotation/RestHook.html#value--">value</a>=<a href="../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT">INIT</a>)
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/ResourceJenaGroup.html#line.68">addConfigVars</a>(<a href="../../../../org/apache/juneau/rest/RestConfig.html" title="class in org.apache.juneau.rest">RestConfig</a>&nbsp;config)
+                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.</div>
 <dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestConfig-">init</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>config</code> - The servlet configuration.</dd>
+<dd><code>config</code> - The resource config.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code> - Any exception can be thrown to signal an initialization failure.</dd>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
 </dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/RestMicroservice.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/RestMicroservice.html b/content/site/apidocs/org/apache/juneau/microservice/RestMicroservice.html
index 1ea90db..dad42fa 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/RestMicroservice.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/RestMicroservice.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":9,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.79">RestMicroservice</a>
+<pre>public class <a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.74">RestMicroservice</a>
 extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" title="class in org.apache.juneau.microservice">Microservice</a></pre>
 <div class="block">Entry point for Juneau microservice that implements a REST interface using Jetty on a single port.
 
@@ -226,84 +226,84 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 </td>
 </tr>
 <tr id="i6" class="altColor">
-<td class="colFirst"><code>org.eclipse.jetty.servlet.ServletContextHandler</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#getServletContextHandler--">getServletContextHandler</a></span>()</code>
-<div class="block">Returns the underlying servlet context handler.</div>
-</td>
-</tr>
-<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#getURI--">getURI</a></span>()</code>
 <div class="block">Returns the URI where this microservice is listening on.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#initLogging--">initLogging</a></span>()</code>
 <div class="block">Initialize the logging for this microservice.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#join--">join</a></span>()</code>
 <div class="block">Joins the application with the current thread.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#main-java.lang.String:A-">main</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
 <div class="block">Main method.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#onConfigSave-org.apache.juneau.ini.ConfigFile-">onConfigSave</a></span>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;cf)</code>
 <div class="block">Called when <a href="../../../../org/apache/juneau/ini/ConfigFile.html#save--"><code>ConfigFile.save()</code></a> is called on the config file.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#onCreateServer--">onCreateServer</a></span>()</code>
 <div class="block">Called before <a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#createServer--"><code>createServer()</code></a> is called.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#onPostStartServer--">onPostStartServer</a></span>()</code>
 <div class="block">Called after the Jetty server is started.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#onPostStopServer--">onPostStopServer</a></span>()</code>
 <div class="block">Called after the Jetty server is stopped.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#onStartServer--">onStartServer</a></span>()</code>
 <div class="block">Called before <a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#startServer--"><code>startServer()</code></a> is called.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#onStopServer--">onStopServer</a></span>()</code>
 <div class="block">Called before the Jetty server is stopped.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#setConfig-org.apache.juneau.ini.ConfigFile-">setConfig</a></span>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;cf)</code>
 <div class="block">Specifies the config file for this microservice.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#setConfig-java.lang.String-boolean-">setConfig</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cfPath,
          boolean&nbsp;create)</code>
 <div class="block">Specifies the path of the config file for this microservice.</div>
 </td>
 </tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#setJettyXml-java.lang.Object-">setJettyXml</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;jettyXml)</code>
+<div class="block">Sets the <code>jetty.xml</code> used to configure the Jetty server.</div>
+</td>
+</tr>
 <tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#setManifest-java.lang.Class-">setManifest</a></span>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)</code>
@@ -382,7 +382,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RestMicroservice</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.106">RestMicroservice</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.102">RestMicroservice</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Constructor.</div>
 <dl>
@@ -407,7 +407,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.96">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.92">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Main method.
  
@@ -427,7 +427,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.116">start</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.112">start</a>()
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#start--">Microservice</a></code></span></div>
 <div class="block">Start this application.
@@ -453,7 +453,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.125">join</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.126">join</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#join--">Microservice</a></code></span></div>
 <div class="block">Joins the application with the current thread.
@@ -476,7 +476,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.131">stop</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.132">stop</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#stop--">Microservice</a></code></span></div>
 <div class="block">Stop this application.
  
@@ -499,7 +499,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getPort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.167">getPort</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.168">getPort</a>()</pre>
 <div class="block">Returns the port that this microservice started up on.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -513,7 +513,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getURI</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.175">getURI</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.176">getURI</a>()</pre>
 <div class="block">Returns the URI where this microservice is listening on.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -527,7 +527,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>initLogging</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.262">initLogging</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.263">initLogging</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Initialize the logging for this microservice.
  
@@ -610,7 +610,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>createServer</h4>
-<pre>protected&nbsp;org.eclipse.jetty.server.Server&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.351">createServer</a>()
+<pre>protected&nbsp;org.eclipse.jetty.server.Server&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.324">createServer</a>()
                                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Method used to create (but not start) an instance of a Jetty server.
  
@@ -618,7 +618,8 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
  Subclasses can override this method to customize the Jetty server before it is started.
  
  <p>
- The default implementation is configured by the following values in the config file:
+ The default implementation is configured by the following values in the config file 
+ if a jetty.xml is not specified via a <code>REST/jettyXml</code> setting:
  <p class='bcode'>
    <cc>#================================================================================
    # REST settings
@@ -635,37 +636,8 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
    # Default is Rest-ContextPath in manifest file, or "/".</cc>
    <ck>contextPath</ck> =
 
-   <cc># Authentication:  NONE, BASIC.
-   # Default is Rest-AuthType in manifest file, or NONE.</cc>
-   <ck>authType</ck> = NONE
-
-   <cc># The BASIC auth username.
-   # Default is Rest-LoginUser in manifest file.</cc>
-   <ck>loginUser</ck> =
-
-   <cc># The BASIC auth password.
-   # Default is Rest-LoginPassword in manifest file.</cc>
-   <ck>loginPassword</ck> =
-
-   <cc># The BASIC auth realm.
-   # Default is Rest-AuthRealm in manifest file.</cc>
-   <ck>authRealm</ck> =
-
    <cc># Enable SSL support.</cc>
-   <ck>useSsl</ck> = false
-
-   <cc>#================================================================================
-   # Bean properties on the org.eclipse.jetty.util.ssl.SslSocketFactory class
-   #--------------------------------------------------------------------------------
-   # Ignored if REST/useSsl is false.
-   #================================================================================</cc>
-   <cs>[REST-SslContextFactory]</cs>
-   <ck>keyStorePath</ck> = client_keystore.jks
-   <ck>keyStorePassword*</ck> = {HRAaRQoT}
-   <ck>excludeCipherSuites</ck> = TLS_DHE.*, TLS_EDH.*
-   <ck>excludeProtocols</ck> = SSLv3
-   <ck>allowRenegotiate</ck> = false
- </p></div>
+   <ck>useSsl</ck> = false</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>The newly-created server.</dd>
@@ -680,7 +652,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>addServlet</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.420">addServlet</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>&nbsp;servlet,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.381">addServlet</a>(<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>&nbsp;servlet,
                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathSpec)</pre>
 <div class="block">Adds an arbitrary servlet to this microservice.</div>
 <dl>
@@ -700,7 +672,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>addServletAttribute</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.436">addServletAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.397">addServletAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Adds a servlet attribute to the Jetty server.</div>
 <dl>
@@ -720,7 +692,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getServer</h4>
-<pre>public&nbsp;org.eclipse.jetty.server.Server&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.448">getServer</a>()</pre>
+<pre>public&nbsp;org.eclipse.jetty.server.Server&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.409">getServer</a>()</pre>
 <div class="block">Returns the underlying Jetty server.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -728,27 +700,13 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 </dl>
 </li>
 </ul>
-<a name="getServletContextHandler--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getServletContextHandler</h4>
-<pre>public&nbsp;org.eclipse.jetty.servlet.ServletContextHandler&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.457">getServletContextHandler</a>()</pre>
-<div class="block">Returns the underlying servlet context handler.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>The underlying servlet context handler, or <jk>null</jk> if <a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#createServer--"><code>createServer()</code></a> has not yet been called.</dd>
-</dl>
-</li>
-</ul>
 <a name="startServer--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>startServer</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.484">startServer</a>()
+<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.436">startServer</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Method used to start the Jetty server created by <a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#createServer--"><code>createServer()</code></a>.
  
@@ -768,7 +726,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>getResourceMap</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>&gt;&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.537">getResourceMap</a>()
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>&gt;&gt;&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.490">getResourceMap</a>()
                                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a>,
                                                               <a href="../../../../org/apache/juneau/parser/ParseException.html" title="class in org.apache.juneau.parser">ParseException</a></pre>
 <div class="block">Returns the resource map to use for this microservice.
@@ -824,7 +782,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigSave</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.584">onConfigSave</a>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;cf)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.537">onConfigSave</a>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;cf)</pre>
 <div class="block">Called when <a href="../../../../org/apache/juneau/ini/ConfigFile.html#save--"><code>ConfigFile.save()</code></a> is called on the config file.
  
  <p>
@@ -847,13 +805,37 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 </dl>
 </li>
 </ul>
+<a name="setJettyXml-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setJettyXml</h4>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.576">setJettyXml</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;jettyXml)</pre>
+<div class="block">Sets the <code>jetty.xml</code> used to configure the Jetty server.
+ 
+ <p></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>jettyXml</code> - The <code>jetty.xml</code>.
+   <br>Can be any of the following:
+   <ul>
+      <li>A <a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> representing the location on the file system.
+      <li>An <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> containing the contents of the file.
+      <li>A <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> representing the file system path.
+   </ul></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>This object (for method chaining).</dd>
+</dl>
+</li>
+</ul>
 <a name="onCreateServer--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>onCreateServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.619">onCreateServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.595">onCreateServer</a>()</pre>
 <div class="block">Called before <a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#createServer--"><code>createServer()</code></a> is called.
  
  <p>
@@ -866,7 +848,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>onStartServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.627">onStartServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.603">onStartServer</a>()</pre>
 <div class="block">Called before <a href="../../../../org/apache/juneau/microservice/RestMicroservice.html#startServer--"><code>startServer()</code></a> is called.
  
  <p>
@@ -879,7 +861,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>onPostStartServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.635">onPostStartServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.611">onPostStartServer</a>()</pre>
 <div class="block">Called after the Jetty server is started.
  
  <p>
@@ -892,7 +874,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>onStopServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.643">onStopServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.619">onStopServer</a>()</pre>
 <div class="block">Called before the Jetty server is stopped.
  
  <p>
@@ -905,7 +887,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>onPostStopServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.651">onPostStopServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.627">onPostStopServer</a>()</pre>
 <div class="block">Called after the Jetty server is stopped.
  
  <p>
@@ -918,7 +900,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setConfig</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.659">setConfig</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cfPath,
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.635">setConfig</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cfPath,
                                   boolean&nbsp;create)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#setConfig-java.lang.String-boolean-">Microservice</a></code></span></div>
@@ -954,7 +936,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setConfig</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.665">setConfig</a>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;cf)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.641">setConfig</a>(<a href="../../../../org/apache/juneau/ini/ConfigFile.html" title="class in org.apache.juneau.ini">ConfigFile</a>&nbsp;cf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#setConfig-org.apache.juneau.ini.ConfigFile-">Microservice</a></code></span></div>
 <div class="block">Specifies the config file for this microservice.
  
@@ -977,7 +959,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setManifest</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.671">setManifest</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/jar/Manifest.html?is-external=true" title="class or interface in java.util.jar">Manifest</a>&nbsp;mf)</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.647">setManifest</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/jar/Manifest.html?is-external=true" title="class or interface in java.util.jar">Manifest</a>&nbsp;mf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#setManifest-java.util.jar.Manifest-">Microservice</a></code></span></div>
 <div class="block">Specifies the manifest file of the jar file this microservice is contained within.
  
@@ -1005,7 +987,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setManifestContents</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.677">setManifestContents</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;contents)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.653">setManifestContents</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;contents)
                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#setManifestContents-java.lang.String...-">Microservice</a></code></span></div>
 <div class="block">Convenience method for specifying the manifest contents directly.</div>
@@ -1027,7 +1009,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>setManifest</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.683">setManifest</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.659">setManifest</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#setManifest-java.io.File-">Microservice</a></code></span></div>
 <div class="block">Same as <a href="../../../../org/apache/juneau/microservice/Microservice.html#setManifest-java.util.jar.Manifest-"><code>Microservice.setManifest(Manifest)</code></a> except specified through a <a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> object.</div>
@@ -1049,7 +1031,7 @@ extends <a href="../../../../org/apache/juneau/microservice/Microservice.html" t
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setManifest</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.689">setManifest</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)
+<pre>public&nbsp;<a href="../../../../org/apache/juneau/microservice/RestMicroservice.html" title="class in org.apache.juneau.microservice">RestMicroservice</a>&nbsp;<a href="../../../../src-html/org/apache/juneau/microservice/RestMicroservice.html#line.665">setManifest</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;c)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/juneau/microservice/Microservice.html#setManifest-java.lang.Class-">Microservice</a></code></span></div>
 <div class="block">Same as <a href="../../../../org/apache/juneau/microservice/Microservice.html#setManifest-java.util.jar.Manifest-"><code>Microservice.setManifest(Manifest)</code></a> except finds and loads the manifest file of the jar file that the  

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/package-summary.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/package-summary.html b/content/site/apidocs/org/apache/juneau/microservice/package-summary.html
index 523affe..9423f53 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/package-summary.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/package-summary.html
@@ -784,8 +784,8 @@
    }     
             </p>
             <p>
-               Additional user-defined variables can be defined at this level by overriding the 
-               <a href="../../../../org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-"><code>Resource.init(RestConfig)</code></a> method
+               Additional user-defined variables can be defined at this level by adding a  
+               <a href="../../../../org/apache/juneau/rest/annotation/HookEvent.html#INIT"><code>HookEvent.INIT</code></a> hook method
                and using the <a href="../../../../org/apache/juneau/rest/RestConfig.html#addVars-java.lang.Class...-"><code>RestConfig.addVars(Class...)</code></a> method.
             </p>
          <li class='jm'>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/package-tree.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/package-tree.html b/content/site/apidocs/org/apache/juneau/microservice/package-tree.html
index c756229..57ae672 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/package-tree.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/package-tree.html
@@ -82,7 +82,7 @@
 <ul>
 <li type="circle">javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html?is-external=true" title="class or interface in javax.servlet"><span class="typeNameLink">GenericServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/Servlet.html?is-external=true" title="class or interface in javax.servlet">Servlet</a>, javax.servlet.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html?is-external=true" title="class or interface in javax.servlet">ServletConfig</a>)
 <ul>
-<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a> (implements java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
+<li type="circle">javax.servlet.http.<a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServlet.html?is-external=true" title="class or interface in javax.servlet.http"><span class="typeNameLink">HttpServlet</span></a>
 <ul>
 <li type="circle">org.apache.juneau.rest.<a href="../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest"><span class="typeNameLink">RestServlet</span></a>
 <ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/ConfigResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/ConfigResource.html b/content/site/apidocs/org/apache/juneau/microservice/resources/ConfigResource.html
index 78678b4..452745c 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/ConfigResource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/ConfigResource.html
@@ -241,7 +241,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.microservice.<a href="../../../../../org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></h3>
-<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-">init</a></code></li>
+<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.RestServletDefault">
@@ -255,7 +255,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/DirectoryResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/DirectoryResource.html b/content/site/apidocs/org/apache/juneau/microservice/resources/DirectoryResource.html
index cc9dd22..44117e8 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/DirectoryResource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/DirectoryResource.html
@@ -278,7 +278,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.microservice.<a href="../../../../../org/apache/juneau/microservice/Resource.html" title="class in org.apache.juneau.microservice">Resource</a></h3>
-<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#init-org.apache.juneau.rest.RestConfig-">init</a></code></li>
+<code><a href="../../../../../org/apache/juneau/microservice/Resource.html#addConfigVars-org.apache.juneau.rest.RestConfig-">addConfigVars</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.juneau.rest.RestServletDefault">
@@ -292,7 +292,7 @@ extends <a href="../../../../../org/apache/juneau/microservice/Resource.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.juneau.rest.<a href="../../../../../org/apache/juneau/rest/RestServlet.html" title="class in org.apache.juneau.rest">RestServlet</a></h3>
-<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPostCall-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-">onPostCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onPreCall-org.apache.juneau.rest.RestRequest-">onPreCall</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#onSuccess-org.apache.juneau.rest.RestRequest-org.apache.juneau.rest.RestResponse-long-">onSuccess</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
+<code><a href="../../../../../org/apache/juneau/rest/RestServlet.html#destroy--">destroy</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getBeanContext--">getBeanContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getContext--">getContext</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getMessages--">getMessages</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getProperties--">getProperties</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#getServletConfig--">getServletConfig</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-org.apache.juneau.rest.RestContext-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#init-javax.servlet.ServletConfig-">init</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#log-java.util.logging.Level-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/junea
 u/rest/RestServlet.html#log-java.util.logging.Level-java.lang.Throwable-java.lang.String-java.lang.Object...-">log</a>, <a href="../../../../../org/apache/juneau/rest/RestServlet.html#service-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">service</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.javax.servlet.http.HttpServlet">

http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.FileResource.html b/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
index a4756b7..04f7e46 100644
--- a/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
+++ b/content/site/apidocs/org/apache/juneau/microservice/resources/LogsResource.FileResource.html
@@ -106,7 +106,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.300">LogsResource.FileResource</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.html#line.306">LogsResource.FileResource</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">File bean.</div>
 </li>
@@ -217,7 +217,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>type</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.302">type</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.308">type</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -226,7 +226,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.303">name</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.309">name</a></pre>
 </li>
 </ul>
 <a name="size">
@@ -235,7 +235,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.304">size</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.310">size</a></pre>
 </li>
 </ul>
 <a name="lastModified">
@@ -245,7 +245,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <li class="blockList">
 <h4>lastModified</h4>
 <pre><a href="../../../../../org/apache/juneau/annotation/BeanProperty.html" title="annotation in org.apache.juneau.annotation">@BeanProperty</a>(<a href="../../../../../org/apache/juneau/annotation/BeanProperty.html#swap--">swap</a>=<a href="../../../../../org/apache/juneau/transforms/DateSwap.DateTimeMedium.html" title="class in org.apache.juneau.transforms">DateSwap.DateTimeMedium.class</a>)
-public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.305">lastModified</a></pre>
+public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.html?is-external=true" title="class or interface in java.util">Date</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.311">lastModified</a></pre>
 </li>
 </ul>
 <a name="view">
@@ -254,7 +254,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>view</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.306">view</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.312">view</a></pre>
 </li>
 </ul>
 <a name="highlighted">
@@ -263,7 +263,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>highlighted</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.306">highlighted</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.312">highlighted</a></pre>
 </li>
 </ul>
 <a name="parsed">
@@ -272,7 +272,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>parsed</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.306">parsed</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.312">parsed</a></pre>
 </li>
 </ul>
 <a name="download">
@@ -281,7 +281,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>download</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.306">download</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.312">download</a></pre>
 </li>
 </ul>
 <a name="delete">
@@ -290,7 +290,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.306">delete</a></pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a> <a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.312">delete</a></pre>
 </li>
 </ul>
 </li>
@@ -307,7 +307,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Date.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FileResource</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.308">FileResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/juneau/microservice/resources/LogsResource.FileResource.html#line.314">FileResource</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;f,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/net/URI.html?is-external=true" title="class or interface in java.net">URI</a>&nbsp;uri)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>



[12/25] incubator-juneau-website git commit: Add @RestHook support.

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/84931d4d/content/site/apidocs/src-html/org/apache/juneau/internal/StringUtils.html
----------------------------------------------------------------------
diff --git a/content/site/apidocs/src-html/org/apache/juneau/internal/StringUtils.html b/content/site/apidocs/src-html/org/apache/juneau/internal/StringUtils.html
index e37c845..a7608b4 100644
--- a/content/site/apidocs/src-html/org/apache/juneau/internal/StringUtils.html
+++ b/content/site/apidocs/src-html/org/apache/juneau/internal/StringUtils.html
@@ -1018,628 +1018,631 @@
 <span class="sourceLineNo">1010</span>    */<a name="line.1010"></a>
 <span class="sourceLineNo">1011</span>   public static String replaceVars(String s, Map&lt;String,Object&gt; m) {<a name="line.1011"></a>
 <span class="sourceLineNo">1012</span><a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      if (s.indexOf('{') == -1)<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>         return s;<a name="line.1014"></a>
+<span class="sourceLineNo">1013</span>      if (s == null)<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>         return null;<a name="line.1014"></a>
 <span class="sourceLineNo">1015</span><a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      int S1 = 1;    // Not in variable, looking for {<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      int S2 = 2;    // Found {, Looking for }<a name="line.1017"></a>
+<span class="sourceLineNo">1016</span>      if (s.indexOf('{') == -1)<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>         return s;<a name="line.1017"></a>
 <span class="sourceLineNo">1018</span><a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      int state = S1;<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>      boolean hasInternalVar = false;<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      int x = 0;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      int depth = 0;<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      int length = s.length();<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      StringBuilder out = new StringBuilder();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>      for (int i = 0; i &lt; length; i++) {<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>         char c = s.charAt(i);<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>         if (state == S1) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            if (c == '{') {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>               state = S2;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>               x = i;<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>            } else {<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>               out.append(c);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>            }<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>         } else /* state == S2 */ {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>            if (c == '{') {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>               depth++;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>               hasInternalVar = true;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>            } else if (c == '}') {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>               if (depth &gt; 0) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>                  depth--;<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>               } else {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>                  String key = s.substring(x+1, i);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>                  key = (hasInternalVar ? replaceVars(key, m) : key);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>                  hasInternalVar = false;<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>                  if (! m.containsKey(key))<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>                     out.append('{').append(key).append('}');<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>                  else {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>                     Object val = m.get(key);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>                     if (val == null)<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>                        val = "";<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>                     String v = val.toString();<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>                     // If the replacement also contains variables, replace them now.<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>                     if (v.indexOf('{') != -1)<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>                        v = replaceVars(v, m);<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>                     out.append(v);<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>                  }<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>                  state = 1;<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>               }<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>            }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>         }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>      }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      return out.toString();<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span><a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   /**<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if the specified path string is prefixed with the specified prefix.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    *<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    * &lt;p class='bcode'&gt;<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    *    pathStartsWith(&lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"foo"&lt;/js&gt;);  &lt;jc&gt;// true&lt;/jc&gt;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    *    pathStartsWith(&lt;js&gt;"foo/bar"&lt;/js&gt;, &lt;js&gt;"foo"&lt;/js&gt;);  &lt;jc&gt;// true&lt;/jc&gt;<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    *    pathStartsWith(&lt;js&gt;"foo2"&lt;/js&gt;, &lt;js&gt;"foo"&lt;/js&gt;);  &lt;jc&gt;// false&lt;/jc&gt;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    *    pathStartsWith(&lt;js&gt;"foo2"&lt;/js&gt;, &lt;js&gt;""&lt;/js&gt;);  &lt;jc&gt;// false&lt;/jc&gt;<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    * &lt;/p&gt;<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    *<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    * @param path The path to check.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    * @param pathPrefix The prefix.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the specified path string is prefixed with the specified prefix.<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    */<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>   public static boolean pathStartsWith(String path, String pathPrefix) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      if (path == null || pathPrefix == null)<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>         return false;<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>      if (path.startsWith(pathPrefix))<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>         return path.length() == pathPrefix.length() || path.charAt(pathPrefix.length()) == '/';<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      return false;<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span><a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   /**<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    * Same as {@link #pathStartsWith(String, String)} but returns &lt;jk&gt;true&lt;/jk&gt; if at least one prefix matches.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    *<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    * @param path The path to check.<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    * @param pathPrefixes The prefixes.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the specified path string is prefixed with any of the specified prefixes.<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    */<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>   public static boolean pathStartsWith(String path, String[] pathPrefixes) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      for (String p : pathPrefixes)<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>         if (pathStartsWith(path, p))<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>            return true;<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      return false;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span><a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>   /**<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    * Replaces &lt;js&gt;"\\uXXXX"&lt;/js&gt; character sequences with their unicode characters.<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    *<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    * @param s The string to replace unicode sequences in.<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    * @return A string with unicode sequences replaced.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    */<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>   public static String replaceUnicodeSequences(String s) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      if (s.indexOf('\\') == -1)<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>         return s;<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      Pattern p = Pattern.compile("\\\\u(\\p{XDigit}{4})");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      Matcher m = p.matcher(s);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      StringBuffer sb = new StringBuffer(s.length());<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      while (m.find()) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>         String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16));<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>         m.appendReplacement(sb, Matcher.quoteReplacement(ch));<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      m.appendTail(sb);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      return sb.toString();<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   /**<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    * Returns the specified field in a delimited string without splitting the string.<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    *<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    * &lt;p&gt;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    * Equivalent to the following:<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    * &lt;p class='bcode'&gt;<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    *    String in = &lt;js&gt;"0,1,2"&lt;/js&gt;;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    *    String[] parts = in.split(&lt;js&gt;","&lt;/js&gt;);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    *    String p1 = (parts.&lt;jk&gt;length&lt;/jk&gt; &gt; 1 ? parts[1] : &lt;js&gt;""&lt;/js&gt;);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    * &lt;/p&gt;<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    *<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    * @param fieldNum The field number.  Zero-indexed.<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    * @param s The input string.<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    * @param delim The delimiter character.<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    * @return The field entry in the string, or a blank string if it doesn't exist or the string is null.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    */<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   public static String getField(int fieldNum, String s, char delim) {<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>      return getField(fieldNum, s, delim, "");<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>   /**<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    * Same as {@link #getField(int, String, char)} except allows you to specify the default value.<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    *<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    * @param fieldNum The field number.  Zero-indexed.<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    * @param s The input string.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    * @param delim The delimiter character.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    * @param def The default value if the field does not exist.<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    * @return The field entry in the string, or the default value if it doesn't exist or the string is null.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    */<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>   public static String getField(int fieldNum, String s, char delim, String def) {<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>      if (s == null || fieldNum &lt; 0)<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>         return def;<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      int start = 0;<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      for (int i = 0; i &lt; s.length(); i++) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>         char c = s.charAt(i);<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>         if (c == delim) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>            fieldNum--;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>            if (fieldNum == 0)<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>               start = i+1;<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>         }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>         if (fieldNum &lt; 0)<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>            return s.substring(start, i);<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      }<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      if (start == 0)<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>         return def;<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      return s.substring(start);<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>   }<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span><a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>   /**<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    * Calls {@link #toString()} on the specified object if it's not null.<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    *<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    * @param o The object to convert to a string.<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    * @return The object converted to a string, or &lt;jk&gt;null&lt;/jk&gt; if the object was null.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    */<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>   public static String toString(Object o) {<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>      return (o == null ? null : o.toString());<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>   }<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>   /**<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    * Converts a hexadecimal byte stream (e.g. "34A5BC") into a UTF-8 encoded string.<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    *<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    * @param hex The hexadecimal string.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    * @return The UTF-8 string.<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    */<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>   public static String fromHexToUTF8(String hex) {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      ByteBuffer buff = ByteBuffer.allocate(hex.length()/2);<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      for (int i = 0; i &lt; hex.length(); i+=2)<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>         buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      buff.rewind();<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      Charset cs = Charset.forName("UTF-8");<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      return cs.decode(buff).toString();<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>   }<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span><a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   private final static char[] HEX = "0123456789ABCDEF".toCharArray();<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span><a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   /**<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    * Converts a byte array into a simple hexadecimal character string.<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>    *<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>    * @param bytes The bytes to convert to hexadecimal.<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    * @return A new string consisting of hexadecimal characters.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    */<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>   public static String toHex(byte[] bytes) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      StringBuilder sb = new StringBuilder(bytes.length * 2);<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>      for ( int j = 0; j &lt; bytes.length; j++ ) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>         int v = bytes[j] &amp; 0xFF;<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>         sb.append(HEX[v &gt;&gt;&gt; 4]).append(HEX[v &amp; 0x0F]);<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      }<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      return sb.toString();<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>   }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span><a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>   /**<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    * Converts a hexadecimal character string to a byte array.<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    *<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>    * @param hex The string to convert to a byte array.<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    * @return A new byte array.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>    */<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   public static byte[] fromHex(String hex) {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      ByteBuffer buff = ByteBuffer.allocate(hex.length()/2);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      for (int i = 0; i &lt; hex.length(); i+=2)<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>         buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      buff.rewind();<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      return buff.array();<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>   }<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span><a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>   /**<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    * Creates a repeated pattern.<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    *<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    * @param count The number of times to repeat the pattern.<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    * @param pattern The pattern to repeat.<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>    * @return A new string consisting of the repeated pattern.<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>    */<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>   public static String repeat(int count, String pattern) {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      StringBuilder sb = new StringBuilder(pattern.length() * count);<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      for (int i = 0; i &lt; count; i++)<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>         sb.append(pattern);<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      return sb.toString();<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>   }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span><a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>   /**<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    * Trims whitespace characters from the beginning of the specified string.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    *<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    * @param s The string to trim.<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    * @return The trimmed string, or &lt;jk&gt;null&lt;/jk&gt; if the string was &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   public static String trimStart(String s) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>      if (s != null)<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>         while (s.length() &gt; 0 &amp;&amp; Character.isWhitespace(s.charAt(0)))<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>            s = s.substring(1);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      return s;<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>   }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span><a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>   /**<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    * Trims whitespace characters from the end of the specified string.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>    *<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    * @param s The string to trim.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    * @return The trimmed string, or &lt;jk&gt;null&lt;/jk&gt; if the string was &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    */<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   public static String trimEnd(String s) {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      if (s != null)<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>         while (s.length() &gt; 0 &amp;&amp; Character.isWhitespace(s.charAt(s.length()-1)))<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>            s = s.substring(0, s.length()-1);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return s;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>   }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span><a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>   /**<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if the specified string is one of the specified values.<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    *<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    * @param s<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    *    The string to test.<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    *    Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    * @param values<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    *    The values to test.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    *    Can contain &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the specified string is one of the specified values.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>    */<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   public static boolean isOneOf(String s, String...values) {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      for (int i = 0; i &lt; values.length; i++)<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>         if (StringUtils.isEquals(s, values[i]))<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>            return true;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      return false;<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   }<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    * Trims &lt;js&gt;'/'&lt;/js&gt; characters from both the start and end of the specified string.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    *<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>    * @param s The string to trim.<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    * @return A new trimmed string, or the same string if no trimming was necessary.<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    */<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   public static String trimSlashes(String s) {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>      if (s == null)<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>         return null;<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      while (endsWith(s, '/'))<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>         s = s.substring(0, s.length()-1);<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      while (s.length() &gt; 0 &amp;&amp; s.charAt(0) == '/')<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>         s = s.substring(1);<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      return s;<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>   }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>   /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    * Trims &lt;js&gt;'/'&lt;/js&gt; characters from the end of the specified string.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    *<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    * @param s The string to trim.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    * @return A new trimmed string, or the same string if no trimming was necessary.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    */<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   public static String trimTrailingSlashes(String s) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>      if (s == null)<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>         return null;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      while (endsWith(s, '/'))<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>         s = s.substring(0, s.length()-1);<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return s;<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    * Trims &lt;js&gt;'/'&lt;/js&gt; characters from the end of the specified string.<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    *<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    * @param s The string to trim.<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>    * @return The same string buffer.<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    */<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   public static StringBuffer trimTrailingSlashes(StringBuffer s) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>      if (s == null)<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>         return null;<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>      while (s.length() &gt; 0 &amp;&amp; s.charAt(s.length()-1) == '/')<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>         s.setLength(s.length()-1);<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>      return s;<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   }<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span><a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>   /**<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    * Decodes a &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt; string using &lt;code&gt;UTF-8&lt;/code&gt; encoding scheme.<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    *<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    * @param s The string to decode.<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    * @return The decoded string, or &lt;jk&gt;null&lt;/jk&gt; if input is &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    */<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>   public static String urlDecode(String s) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      if (s == null)<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>         return s;<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>      boolean needsDecode = false;<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      for (int i = 0; i &lt; s.length() &amp;&amp; ! needsDecode; i++) {<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>         char c = s.charAt(i);<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>         if (c == '+' || c == '%')<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>            needsDecode = true;<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      }<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      if (needsDecode)<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      try {<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>            return URLDecoder.decode(s, "UTF-8");<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>         } catch (UnsupportedEncodingException e) {/* Won't happen */}<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>      return s;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>   }<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span><a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>   /**<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    * Encodes a &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt; string using &lt;code&gt;UTF-8&lt;/code&gt; encoding scheme.<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    *<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    * @param s The string to encode.<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    * @return The encoded string, or &lt;jk&gt;null&lt;/jk&gt; if input is &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    */<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>   public static String urlEncode(String s) {<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      if (s == null)<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>         return null;<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      boolean needsEncode = false;<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>      for (int i = 0; i &lt; s.length() &amp;&amp; ! needsEncode; i++)<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>         needsEncode |= (! unencodedChars.contains(s.charAt(i)));<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      if (needsEncode) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>         try {<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            return URLEncoder.encode(s, "UTF-8");<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>         } catch (UnsupportedEncodingException e) {/* Won't happen */}<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      return s;<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   /**<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    * Returns the first non-whitespace character in the string.<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    *<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>    * @param s The string to check.<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    * @return<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    *    The first non-whitespace character, or &lt;code&gt;0&lt;/code&gt; if the string is &lt;jk&gt;null&lt;/jk&gt;, empty, or composed<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>    *    of only whitespace.<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    */<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   public static char firstNonWhitespaceChar(String s) {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      if (s != null)<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>         for (int i = 0; i &lt; s.length(); i++)<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>            if (! Character.isWhitespace(s.charAt(i)))<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>               return s.charAt(i);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      return 0;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>   }<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span><a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   /**<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    * Returns the character at the specified index in the string without throwing exceptions.<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    *<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    * @param s The string.<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    * @param i The index position.<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    * @return<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    *    The character at the specified index, or &lt;code&gt;0&lt;/code&gt; if the index is out-of-range or the string<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    *    is &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    */<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>   public static char charAt(String s, int i) {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (s == null)<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>         return 0;<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      if (i &lt; 0 || i &gt;= s.length())<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>         return 0;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      return s.charAt(i);<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>   }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>   /**<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>    * Efficiently determines whether a URL is of the pattern "xxx://xxx"<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    *<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    * @param s The string to test.<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if it's an absolute path.<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    */<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>   public static boolean isAbsoluteUri(String s) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      if (isEmpty(s))<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>         return false;<a name="line.1412"></a>
+<span class="sourceLineNo">1019</span>      int S1 = 1;    // Not in variable, looking for {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      int S2 = 2;    // Found {, Looking for }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span><a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>      int state = S1;<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      boolean hasInternalVar = false;<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>      int x = 0;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>      int depth = 0;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>      int length = s.length();<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      StringBuilder out = new StringBuilder();<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>      for (int i = 0; i &lt; length; i++) {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>         char c = s.charAt(i);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>         if (state == S1) {<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>            if (c == '{') {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>               state = S2;<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>               x = i;<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>            } else {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>               out.append(c);<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>            }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>         } else /* state == S2 */ {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>            if (c == '{') {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>               depth++;<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>               hasInternalVar = true;<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>            } else if (c == '}') {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>               if (depth &gt; 0) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>                  depth--;<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>               } else {<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>                  String key = s.substring(x+1, i);<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  key = (hasInternalVar ? replaceVars(key, m) : key);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>                  hasInternalVar = false;<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>                  if (! m.containsKey(key))<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>                     out.append('{').append(key).append('}');<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>                  else {<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>                     Object val = m.get(key);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>                     if (val == null)<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>                        val = "";<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>                     String v = val.toString();<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>                     // If the replacement also contains variables, replace them now.<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>                     if (v.indexOf('{') != -1)<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>                        v = replaceVars(v, m);<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>                     out.append(v);<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>                  }<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>                  state = 1;<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>               }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>            }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>         }<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      }<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>      return out.toString();<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>   }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span><a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   /**<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if the specified path string is prefixed with the specified prefix.<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>    *<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    * &lt;p class='bcode'&gt;<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    *    pathStartsWith(&lt;js&gt;"foo"&lt;/js&gt;, &lt;js&gt;"foo"&lt;/js&gt;);  &lt;jc&gt;// true&lt;/jc&gt;<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    *    pathStartsWith(&lt;js&gt;"foo/bar"&lt;/js&gt;, &lt;js&gt;"foo"&lt;/js&gt;);  &lt;jc&gt;// true&lt;/jc&gt;<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    *    pathStartsWith(&lt;js&gt;"foo2"&lt;/js&gt;, &lt;js&gt;"foo"&lt;/js&gt;);  &lt;jc&gt;// false&lt;/jc&gt;<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    *    pathStartsWith(&lt;js&gt;"foo2"&lt;/js&gt;, &lt;js&gt;""&lt;/js&gt;);  &lt;jc&gt;// false&lt;/jc&gt;<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    * &lt;/p&gt;<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    *<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    * @param path The path to check.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    * @param pathPrefix The prefix.<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the specified path string is prefixed with the specified prefix.<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    */<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>   public static boolean pathStartsWith(String path, String pathPrefix) {<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      if (path == null || pathPrefix == null)<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>         return false;<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      if (path.startsWith(pathPrefix))<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>         return path.length() == pathPrefix.length() || path.charAt(pathPrefix.length()) == '/';<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      return false;<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   }<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   /**<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    * Same as {@link #pathStartsWith(String, String)} but returns &lt;jk&gt;true&lt;/jk&gt; if at least one prefix matches.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    * @param path The path to check.<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    * @param pathPrefixes The prefixes.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the specified path string is prefixed with any of the specified prefixes.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>    */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   public static boolean pathStartsWith(String path, String[] pathPrefixes) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      for (String p : pathPrefixes)<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>         if (pathStartsWith(path, p))<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>            return true;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      return false;<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>   }<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span><a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>   /**<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    * Replaces &lt;js&gt;"\\uXXXX"&lt;/js&gt; character sequences with their unicode characters.<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    *<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    * @param s The string to replace unicode sequences in.<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    * @return A string with unicode sequences replaced.<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    */<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   public static String replaceUnicodeSequences(String s) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      if (s.indexOf('\\') == -1)<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>         return s;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      Pattern p = Pattern.compile("\\\\u(\\p{XDigit}{4})");<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      Matcher m = p.matcher(s);<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      StringBuffer sb = new StringBuffer(s.length());<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      while (m.find()) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>         String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16));<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>         m.appendReplacement(sb, Matcher.quoteReplacement(ch));<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>      m.appendTail(sb);<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      return sb.toString();<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>   }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>   /**<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    * Returns the specified field in a delimited string without splitting the string.<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    *<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    * &lt;p&gt;<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    * Equivalent to the following:<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    * &lt;p class='bcode'&gt;<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    *    String in = &lt;js&gt;"0,1,2"&lt;/js&gt;;<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    *    String[] parts = in.split(&lt;js&gt;","&lt;/js&gt;);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    *    String p1 = (parts.&lt;jk&gt;length&lt;/jk&gt; &gt; 1 ? parts[1] : &lt;js&gt;""&lt;/js&gt;);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    * &lt;/p&gt;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    *<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    * @param fieldNum The field number.  Zero-indexed.<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    * @param s The input string.<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    * @param delim The delimiter character.<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>    * @return The field entry in the string, or a blank string if it doesn't exist or the string is null.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   public static String getField(int fieldNum, String s, char delim) {<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>      return getField(fieldNum, s, delim, "");<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>   }<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span><a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>   /**<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    * Same as {@link #getField(int, String, char)} except allows you to specify the default value.<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    *<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    * @param fieldNum The field number.  Zero-indexed.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    * @param s The input string.<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    * @param delim The delimiter character.<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    * @param def The default value if the field does not exist.<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    * @return The field entry in the string, or the default value if it doesn't exist or the string is null.<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    */<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   public static String getField(int fieldNum, String s, char delim, String def) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      if (s == null || fieldNum &lt; 0)<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>         return def;<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      int start = 0;<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      for (int i = 0; i &lt; s.length(); i++) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>         char c = s.charAt(i);<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>         if (c == delim) {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>            fieldNum--;<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>            if (fieldNum == 0)<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>               start = i+1;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>         }<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>         if (fieldNum &lt; 0)<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>            return s.substring(start, i);<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>      }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      if (start == 0)<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>         return def;<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>      return s.substring(start);<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   }<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span><a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>   /**<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    * Calls {@link #toString()} on the specified object if it's not null.<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>    *<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    * @param o The object to convert to a string.<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    * @return The object converted to a string, or &lt;jk&gt;null&lt;/jk&gt; if the object was null.<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    */<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   public static String toString(Object o) {<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>      return (o == null ? null : o.toString());<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>   }<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span><a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>   /**<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    * Converts a hexadecimal byte stream (e.g. "34A5BC") into a UTF-8 encoded string.<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    *<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    * @param hex The hexadecimal string.<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    * @return The UTF-8 string.<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    */<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>   public static String fromHexToUTF8(String hex) {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      ByteBuffer buff = ByteBuffer.allocate(hex.length()/2);<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>      for (int i = 0; i &lt; hex.length(); i+=2)<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>         buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>      buff.rewind();<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>      Charset cs = Charset.forName("UTF-8");<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      return cs.decode(buff).toString();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span><a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   private final static char[] HEX = "0123456789ABCDEF".toCharArray();<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>   /**<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    * Converts a byte array into a simple hexadecimal character string.<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    *<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    * @param bytes The bytes to convert to hexadecimal.<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>    * @return A new string consisting of hexadecimal characters.<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    */<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>   public static String toHex(byte[] bytes) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      StringBuilder sb = new StringBuilder(bytes.length * 2);<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      for ( int j = 0; j &lt; bytes.length; j++ ) {<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>         int v = bytes[j] &amp; 0xFF;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>         sb.append(HEX[v &gt;&gt;&gt; 4]).append(HEX[v &amp; 0x0F]);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      return sb.toString();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>   }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span><a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>   /**<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    * Converts a hexadecimal character string to a byte array.<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    *<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    * @param hex The string to convert to a byte array.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    * @return A new byte array.<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    */<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>   public static byte[] fromHex(String hex) {<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      ByteBuffer buff = ByteBuffer.allocate(hex.length()/2);<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      for (int i = 0; i &lt; hex.length(); i+=2)<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>         buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      buff.rewind();<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      return buff.array();<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>   }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>   /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>    * Creates a repeated pattern.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    *<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>    * @param count The number of times to repeat the pattern.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    * @param pattern The pattern to repeat.<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>    * @return A new string consisting of the repeated pattern.<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    */<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>   public static String repeat(int count, String pattern) {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      StringBuilder sb = new StringBuilder(pattern.length() * count);<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      for (int i = 0; i &lt; count; i++)<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>         sb.append(pattern);<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      return sb.toString();<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>   }<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span><a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>   /**<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    * Trims whitespace characters from the beginning of the specified string.<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    *<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    * @param s The string to trim.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    * @return The trimmed string, or &lt;jk&gt;null&lt;/jk&gt; if the string was &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    */<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   public static String trimStart(String s) {<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      if (s != null)<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>         while (s.length() &gt; 0 &amp;&amp; Character.isWhitespace(s.charAt(0)))<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>            s = s.substring(1);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>      return s;<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>   }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span><a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   /**<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>    * Trims whitespace characters from the end of the specified string.<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    *<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    * @param s The string to trim.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>    * @return The trimmed string, or &lt;jk&gt;null&lt;/jk&gt; if the string was &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    */<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>   public static String trimEnd(String s) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      if (s != null)<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>         while (s.length() &gt; 0 &amp;&amp; Character.isWhitespace(s.charAt(s.length()-1)))<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>            s = s.substring(0, s.length()-1);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>      return s;<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   }<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span><a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>   /**<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if the specified string is one of the specified values.<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    *<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    * @param s<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>    *    The string to test.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    *    Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>    * @param values<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    *    The values to test.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    *    Can contain &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if the specified string is one of the specified values.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    */<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>   public static boolean isOneOf(String s, String...values) {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      for (int i = 0; i &lt; values.length; i++)<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>         if (StringUtils.isEquals(s, values[i]))<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>            return true;<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>      return false;<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>   }<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span><a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   /**<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    * Trims &lt;js&gt;'/'&lt;/js&gt; characters from both the start and end of the specified string.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    *<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    * @param s The string to trim.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    * @return A new trimmed string, or the same string if no trimming was necessary.<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    */<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   public static String trimSlashes(String s) {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      if (s == null)<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>         return null;<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      while (endsWith(s, '/'))<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>         s = s.substring(0, s.length()-1);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>      while (s.length() &gt; 0 &amp;&amp; s.charAt(0) == '/')<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>         s = s.substring(1);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>      return s;<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>   /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    * Trims &lt;js&gt;'/'&lt;/js&gt; characters from the end of the specified string.<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    *<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    * @param s The string to trim.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    * @return A new trimmed string, or the same string if no trimming was necessary.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    */<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   public static String trimTrailingSlashes(String s) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      if (s == null)<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>         return null;<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      while (endsWith(s, '/'))<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>         s = s.substring(0, s.length()-1);<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      return s;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>   }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>   /**<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    * Trims &lt;js&gt;'/'&lt;/js&gt; characters from the end of the specified string.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>    *<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>    * @param s The string to trim.<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    * @return The same string buffer.<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    */<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   public static StringBuffer trimTrailingSlashes(StringBuffer s) {<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>      if (s == null)<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>         return null;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>      while (s.length() &gt; 0 &amp;&amp; s.charAt(s.length()-1) == '/')<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>         s.setLength(s.length()-1);<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      return s;<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>   }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span><a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>   /**<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    * Decodes a &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt; string using &lt;code&gt;UTF-8&lt;/code&gt; encoding scheme.<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>    *<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>    * @param s The string to decode.<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>    * @return The decoded string, or &lt;jk&gt;null&lt;/jk&gt; if input is &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>   public static String urlDecode(String s) {<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      if (s == null)<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>         return s;<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      boolean needsDecode = false;<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      for (int i = 0; i &lt; s.length() &amp;&amp; ! needsDecode; i++) {<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>         char c = s.charAt(i);<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>         if (c == '+' || c == '%')<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>            needsDecode = true;<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>      }<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>      if (needsDecode)<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>      try {<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>            return URLDecoder.decode(s, "UTF-8");<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>         } catch (UnsupportedEncodingException e) {/* Won't happen */}<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>      return s;<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>   }<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span><a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>   /**<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>    * Encodes a &lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt; string using &lt;code&gt;UTF-8&lt;/code&gt; encoding scheme.<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    *<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    * @param s The string to encode.<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    * @return The encoded string, or &lt;jk&gt;null&lt;/jk&gt; if input is &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    */<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   public static String urlEncode(String s) {<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      if (s == null)<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>         return null;<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      boolean needsEncode = false;<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      for (int i = 0; i &lt; s.length() &amp;&amp; ! needsEncode; i++)<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>         needsEncode |= (! unencodedChars.contains(s.charAt(i)));<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>      if (needsEncode) {<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>         try {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>            return URLEncoder.encode(s, "UTF-8");<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>         } catch (UnsupportedEncodingException e) {/* Won't happen */}<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      }<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      return s;<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span><a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   /**<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>    * Returns the first non-whitespace character in the string.<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>    *<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>    * @param s The string to check.<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>    * @return<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    *    The first non-whitespace character, or &lt;code&gt;0&lt;/code&gt; if the string is &lt;jk&gt;null&lt;/jk&gt;, empty, or composed<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>    *    of only whitespace.<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>   public static char firstNonWhitespaceChar(String s) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      if (s != null)<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>         for (int i = 0; i &lt; s.length(); i++)<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>            if (! Character.isWhitespace(s.charAt(i)))<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>               return s.charAt(i);<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      return 0;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   }<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span><a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   /**<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    * Returns the character at the specified index in the string without throwing exceptions.<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>    *<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>    * @param s The string.<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    * @param i The index position.<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>    * @return<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    *    The character at the specified index, or &lt;code&gt;0&lt;/code&gt; if the index is out-of-range or the string<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    *    is &lt;jk&gt;null&lt;/jk&gt;.<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    */<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>   public static char charAt(String s, int i) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      if (s == null)<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>         return 0;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>      if (i &lt; 0 || i &gt;= s.length())<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>         return 0;<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>      return s.charAt(i);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>   }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>   /**<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    * Efficiently determines whether a URL is of the pattern "xxx://xxx"<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>    *<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    * @param s The string to test.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if it's an absolute path.<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    */<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>   public static boolean isAbsoluteUri(String s) {<a name="line.1412"></a>
 <span class="sourceLineNo">1413</span><a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      // Use a state machine for maximum performance.<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      int S1 = 1;  // Looking for http<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      int S2 = 2;  // Found http, looking for :<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      int S3 = 3;  // Found :, looking for /<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      int S4 = 4;  // Found /, looking for /<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      int S5 = 5;  // Found /, looking for x<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span><a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>      int state = S1;<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      for (int i = 0; i &lt; s.length(); i++) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>         char c = s.charAt(i);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>         if (state == S1) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>            if (c &gt;= 'a' &amp;&amp; c &lt;= 'z')<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>               state = S2;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>            else<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>               return false;<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>         } else if (state == S2) {<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>            if (c == ':')<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>               state = S3;<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>            else if (c &lt; 'a' || c &gt; 'z')<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>               return false;<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         } else if (state == S3) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>            if (c == '/')<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>               state = S4;<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>            else<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>               return false;<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>         } else if (state == S4) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>            if (c == '/')<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>               state = S5;<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>            else<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>               return false;<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>         } else if (state == S5) {<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>            return true;<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>         }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>      return false;<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>   }<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span><a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>   /**<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    * Efficiently determines whether a URL is of the pattern "xxx:/xxx".<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    *<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    * &lt;p&gt;<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    * The pattern matched is: &lt;code&gt;[a-z]{2,}\:\/.*&lt;/code&gt;<a name="line.1456"></a>
+<span class="sourceLineNo">1414</span>      if (isEmpty(s))<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>         return false;<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>      // Use a state machine for maximum performance.<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span><a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      int S1 = 1;  // Looking for http<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      int S2 = 2;  // Found http, looking for :<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      int S3 = 3;  // Found :, looking for /<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      int S4 = 4;  // Found /, looking for /<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      int S5 = 5;  // Found /, looking for x<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      int state = S1;<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>      for (int i = 0; i &lt; s.length(); i++) {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>         char c = s.charAt(i);<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>         if (state == S1) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>            if (c &gt;= 'a' &amp;&amp; c &lt;= 'z')<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>               state = S2;<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>            else<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>               return false;<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>         } else if (state == S2) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>            if (c == ':')<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>               state = S3;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>            else if (c &lt; 'a' || c &gt; 'z')<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>               return false;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>         } else if (state == S3) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>            if (c == '/')<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>               state = S4;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>            else<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>               return false;<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>         } else if (state == S4) {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>            if (c == '/')<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>               state = S5;<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>            else<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>               return false;<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>         } else if (state == S5) {<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>            return true;<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>         }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      return false;<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>   }<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>   /**<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    * Efficiently determines whether a URL is of the pattern "xxx:/xxx".<a name="line.1456"></a>
 <span class="sourceLineNo">1457</span>    *<a name="line.1457"></a>
 <span class="sourceLineNo">1458</span>    * &lt;p&gt;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    * Note that this excludes filesystem paths such as &lt;js&gt;"C:/temp"&lt;/js&gt;.<a name="line.1459"></a>
+<span class="sourceLineNo">1459</span>    * The pattern matched is: &lt;code&gt;[a-z]{2,}\:\/.*&lt;/code&gt;<a name="line.1459"></a>
 <span class="sourceLineNo">1460</span>    *<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    * @param s The string to test.<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if it's an absolute path.<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    */<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>   public static boolean isUri(String s) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      if (isEmpty(s))<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>         return false;<a name="line.1467"></a>
+<span class="sourceLineNo">1461</span>    * &lt;p&gt;<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    * Note that this excludes filesystem paths such as &lt;js&gt;"C:/temp"&lt;/js&gt;.<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>    *<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    * @param s The string to test.<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if it's an absolute path.<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    */<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   public static boolean isUri(String s) {<a name="line.1467"></a>
 <span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>      // Use a state machine for maximum performance.<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      int S1 = 1;  // Looking for protocol char 1<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>      int S2 = 2;  // Found protocol char 1, looking for protocol char 2<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      int S3 = 3;  // Found protocol char 2, looking for :<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      int S4 = 4;  // Found :, looking for /<a name="line.1474"></a>
-<sp

<TRUNCATED>