http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/javadoc.css
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/javadoc.css 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/javadoc.css
new file mode 100644
index 0000000..c6e0839
--- /dev/null
+++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/htdocs/javadoc.css
@@ -0,0 +1,794 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+ * with the License.  You may obtain a copy of the License at                  
                                            *
+ *                                                                             
                                            *
+ *  http://www.apache.org/licenses/LICENSE-2.0                                 
                                            *
+ *                                                                             
                                            *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the        *
+ * specific language governing permissions and limitations under the License.  
                                            *
+ 
***************************************************************************************************************************/
+/* Javadoc style sheet */
+/*
+Overall document style
+*/
+body {
+       background-image: linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 
70px);
+       background-image: -o-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -moz-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -webkit-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -ms-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -webkit-gradient(
+               linear,
+               left top,
+               left bottom,
+               color-stop(0, #CDDDDF),
+               color-stop(20px, #EAEDED),
+               color-stop(70px, #FFFFFF)
+       );
+       background-repeat: no-repeat;
+       background-attachment: fixed;
+    color:#353833;
+    font-family:Arial, Helvetica, sans-serif;
+    font-size:76%;
+    margin:0;
+}
+a:link, a:visited {
+    text-decoration:none;
+    color:#4c6b87;
+}
+a:hover, a:focus {
+    text-decoration:none;
+    color:#bb7a2a;
+}
+a:active {
+    text-decoration:none;
+    color:#4c6b87;
+}
+a[name] {
+    color:#353833;
+}
+a[name]:hover {
+    text-decoration:none;
+    color:#353833;
+}
+pre {
+    font-size:1.3em;
+}
+h1 {
+    font-size:1.8em;
+}
+h2 {
+    font-size:1.5em;
+}
+h3 {
+    font-size:1.4em;
+}
+h4 {
+    font-size:1.3em;
+}
+h5 {
+    font-size:1.2em;
+}
+h6 {
+    font-size:1.1em;
+}
+ul {
+    list-style-type:disc;
+}
+code, tt {
+    font-size:9pt;
+}
+dt code {
+    font-size:9pt;
+}
+table tr td dt code {
+    font-size:9pt;
+    vertical-align:top;
+}
+sup {
+    font-size:.6em;
+}
+/*
+Document title and Copyright styles
+*/
+.clear {
+    clear:both;
+    height:0px;
+    overflow:hidden;
+}
+.aboutLanguage {
+    float:right;
+    padding:0px 21px;
+    font-size:.8em;
+    z-index:200;
+    margin-top:-7px;
+}
+.legalCopy {
+    margin-left:.5em;
+}
+.bar a, .bar a:link, .bar a:visited, .bar a:active {
+    color:#FFFFFF;
+    text-decoration:none;
+}
+.bar a:hover, .bar a:focus {
+    color:#bb7a2a;
+}
+.tab {
+    background-color:#0066FF;
+       background-image: 
url('data:image/gif;base64,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');
+    background-position:left top;
+    background-repeat:no-repeat;
+    color:#ffffff;
+    padding:8px;
+    width:5em;
+    font-weight:bold;
+}
+/*
+Navigation bar styles
+*/
+.bar {
+       background-image: 
url('data:image/gif;base64,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');
+    background-repeat:repeat-x;
+    color:#FFFFFF;
+    padding:.8em .5em .4em .8em;
+    height:auto;/*height:1.8em;*/
+    font-size:1em;
+    margin:0;
+}
+.topNav {
+       background-image: 
url('data:image/gif;base64,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');
+    background-repeat:repeat-x;
+    color:#FFFFFF;
+    float:left;
+    padding:0;
+    width:100%;
+    clear:right;
+    height:2.8em;
+    padding-top:10px;
+    overflow:hidden;
+}
+.bottomNav {
+    margin-top:10px;
+       background-image: 
url('data:image/gif;base64,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');
+    background-repeat:repeat-x;
+    color:#FFFFFF;
+    float:left;
+    padding:0;
+    width:100%;
+    clear:right;
+    height:2.8em;
+    padding-top:10px;
+    overflow:hidden;
+}
+.subNav {
+    background-color:#dee3e9;
+    border-bottom:1px solid #9eadc0;
+    float:left;
+    width:100%;
+    overflow:hidden;
+}
+.subNav div {
+    clear:left;
+    float:left;
+    padding:0 0 5px 6px;
+}
+ul.navList, ul.subNavList {
+    float:left;
+    margin:0 25px 0 0;
+    padding:0;
+}
+ul.navList li{
+    list-style:none;
+    float:left;
+    padding:3px 6px;
+}
+ul.subNavList li{
+    list-style:none;
+    float:left;
+    font-size:90%;
+}
+.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, 
.bottomNav a:active, .bottomNav a:visited {
+    color:#FFFFFF;
+    text-decoration:none;
+}
+.topNav a:hover, .bottomNav a:hover {
+    text-decoration:none;
+    color:#bb7a2a;
+}
+.navBarCell1Rev {
+       background-image: 
url('data:image/gif;base64,R0lGODlhAwAeANUAAAAAAP///9+VNfChOu+gOeKXNr58Kr18Krp6KbZ3KMyGLr9+K7t6Krh4KbZ3KdKKMM+IL8yGL8mELsiDLsWBLcWCLcKALLl4KtKLMd+UNdyRNNmPM9WNMvCgOuqcOOaZN+WYN+KWNtqQNPGhO+yeOuucOeeaOPOiPP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAAAAADAB4AAAZAwJNwMBoQOgSS0lPymJ4f0CdUCGUEGY12I9pwvpgHBkJWRBQTyaRCqVjei/jBcGAgGI1LI+FI5Pd9f3x+eoJ9QQA7');
+    background-color:#a88834;
+    color:#FFFFFF;
+    margin: auto 5px;
+    border:1px solid #c9aa44;
+}
+/*
+Page header and footer styles
+*/
+.header, .footer {
+    clear:both;
+    margin:0 20px;
+    padding:5px 0 0 0;
+}
+.indexHeader {
+    margin:10px;
+    position:relative;
+}
+.indexHeader h1 {
+    font-size:1.3em;
+}
+.title {
+    color:#2c4557;
+    margin:10px 0;
+}
+.subTitle {
+    margin:5px 0 0 0;
+}
+.header ul {
+    margin:0 0 25px 0;
+    padding:0;
+}
+.footer ul {
+    margin:20px 0 5px 0;
+}
+.header ul li, .footer ul li {
+    list-style:none;
+    font-size:1.2em;
+}
+/*
+Heading styles
+*/
+div.details ul.blockList ul.blockList ul.blockList li.blockList h4, 
div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
+    background-color:#dee3e9;
+    border-top:1px solid #9eadc0;
+    border-bottom:1px solid #9eadc0;
+    margin:0 0 6px -8px;
+    padding:2px 5px;
+}
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+    background-color:#dee3e9;
+    border-top:1px solid #9eadc0;
+    border-bottom:1px solid #9eadc0;
+    margin:0 0 6px -8px;
+    padding:2px 5px;
+}
+ul.blockList ul.blockList li.blockList h3 {
+    padding:0;
+    margin:15px 0;
+}
+ul.blockList li.blockList h2 {
+    padding:0px 0 20px 0;
+}
+/*
+Page layout container styles
+*/
+.contentContainer, .sourceContainer, .classUseContainer, 
.serializedFormContainer, .constantValuesContainer {
+    clear:both;
+    padding:10px 20px;
+    position:relative;
+}
+.indexContainer {
+    margin:10px;
+    position:relative;
+    font-size:1.0em;
+}
+.indexContainer h2 {
+    font-size:1.1em;
+    padding:0 0 3px 0;
+}
+.indexContainer ul {
+    margin:0;
+    padding:0;
+}
+.indexContainer ul li {
+    list-style:none;
+}
+.contentContainer .description dl dt, .contentContainer .details dl dt, 
.serializedFormContainer dl dt {
+    font-size:1.1em;
+    font-weight:bold;
+    margin:10px 0 0 0;
+    color:#4E4E4E;
+}
+.contentContainer .description dl dd, .contentContainer .details dl dd, 
.serializedFormContainer dl dd {
+    margin:10px 0 10px 20px;
+}
+.serializedFormContainer dl.nameValue dt {
+    margin-left:1px;
+    font-size:1.1em;
+    display:inline;
+    font-weight:bold;
+}
+.serializedFormContainer dl.nameValue dd {
+    margin:0 0 0 1px;
+    font-size:1.1em;
+    display:inline;
+}
+/*
+List styles
+*/
+ul.horizontal li {
+    display:inline;
+    font-size:0.9em;
+}
+ul.inheritance {
+    margin:0;
+    padding:0;
+}
+ul.inheritance li {
+    display:inline;
+    list-style:none;
+}
+ul.inheritance li ul.inheritance {
+    margin-left:15px;
+    padding-left:15px;
+    padding-top:1px;
+}
+ul.blockList, ul.blockListLast {
+    margin:10px 0 10px 0;
+    padding:0;
+}
+ul.blockList li.blockList, ul.blockListLast li.blockList {
+    list-style:none;
+    margin-bottom:25px;
+}
+ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast 
li.blockList {
+    padding:0px 20px 5px 10px;
+    border:1px solid #9eadc0;
+    background-color:#f9f9f9;
+}
+ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList 
ul.blockListLast li.blockList {
+    padding:0 0 5px 8px;
+    background-color:#ffffff;
+    border:1px solid #9eadc0;
+    border-top:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
+    margin-left:0;
+    padding-left:0;
+    padding-bottom:15px;
+    border:none;
+    border-bottom:1px solid #9eadc0;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
+    list-style:none;
+    border-bottom:none;
+    padding-bottom:0;
+}
+table tr td dl, table tr td dl dt, table tr td dl dd {
+    margin-top:0;
+    margin-bottom:1px;
+}
+/*
+Table styles
+*/
+.contentContainer table, .classUseContainer table, .constantValuesContainer 
table {
+    border-bottom:1px solid #9eadc0;
+    width:100%;
+}
+.contentContainer ul li table, .classUseContainer ul li table, 
.constantValuesContainer ul li table {
+    width:100%;
+}
+.contentContainer .description table, .contentContainer .details table {
+    border-bottom:none;
+}
+.contentContainer ul li table th.colOne, .contentContainer ul li table 
th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li 
table th, .constantValuesContainer ul li table th, .contentContainer ul li 
table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer 
ul li table td.colLast, .classUseContainer ul li table td, 
.constantValuesContainer ul li table td{
+    vertical-align:top;
+    padding-right:20px;
+}
+.contentContainer ul li table th.colLast, .classUseContainer ul li table 
th.colLast,.constantValuesContainer ul li table th.colLast,
+.contentContainer ul li table td.colLast, .classUseContainer ul li table 
td.colLast,.constantValuesContainer ul li table td.colLast,
+.contentContainer ul li table th.colOne, .classUseContainer ul li table 
th.colOne,
+.contentContainer ul li table td.colOne, .classUseContainer ul li table 
td.colOne {
+    padding-right:3px;
+}
+.overviewSummary caption, .packageSummary caption, .contentContainer 
ul.blockList li.blockList caption, .summary caption, .classUseContainer 
caption, .constantValuesContainer caption {
+    position:relative;
+    text-align:left;
+    background-repeat:no-repeat;
+    color:#FFFFFF;
+    font-weight:bold;
+    clear:none;
+    overflow:hidden;
+    padding:0px;
+    margin:0px;
+}
+caption a:link, caption a:hover, caption a:active, caption a:visited {
+    color:#FFFFFF;
+}
+.overviewSummary caption span, .packageSummary caption span, .contentContainer 
ul.blockList li.blockList caption span, .summary caption span, 
.classUseContainer caption span, .constantValuesContainer caption span {
+    white-space:nowrap;
+    padding-top:8px;
+    padding-left:8px;
+    display:block;
+    float:left;
+    background-image:url(resources/titlebar.gif);
+    height:18px;
+}
+.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer 
ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer 
.tabEnd, .constantValuesContainer .tabEnd {
+    width:10px;
+       background-image: 
url('data:image/gif;base64,R0lGODlhEwAoAOYAAAAAAP////CgOe6fON+VNfChOu+gOeKXNvGiO+2fOtqOML58Kr17Kr18Krt6Kbp6KbZ2KLZ3KNuPMdqOMdqPMcyFLsyGLsiDLcOALMB+K799K79+K758K7t6Krh3Kbh4KbZ3KdKKMNKLMM+IL8yGL8mELsiDLsiELsaCLcWBLcWCLcJ/LMKALLl4Krh4KtKLMc+JMOWYNuOXNt+UNdyRNNmPM9WNMvCgOuqcOOibOOaYN+aZN+WYN+KWNt2SNdqQNNmQNNWOM/GhO/CgO+2eOuyeOuucOeudOeqcOeeaOPOiPN2VP92XQd+bSOezd+i1evnt4Pvy6v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFIALAAAAAATACgAAAf/gBQTCoQUChSGgoVNT1EBSpCRkpNDOkxQBQUICEIFnZ6ZnJkFO04GBpk3BqqrpwWqAgUDS0UJtkW4ubUJuLZECjhIR0dGOMXGwcTGSEgUSTlJ0dLS0NE50BM7PNs82jve3NoxPBQ9Mj09B+no6ufq5j0SM/MzBPXz9vj3BBI0PjQAAwb8N5CGghoIa/xQiHBhwxpAgNSgYCOIRRsYM1YMojHIhBcvQogMCTJESZMiTE4YAaPliJcwWcJ4OXMEBQsVSOi0QMICT5w7dZJQYKLEiRMlippQajRpiQsnJKhAQTWFCqtXp6KwuhXFBBYYWIgdOzasWAwrMEzYoCFDhg1wruOyfbvhbQYKDRowYLCgQV+/efnmbcBBQocHDhw8ONyBMeLFDyJT+OD
 
iw4cWly1jroz5socJESJAgAAiQmnToUmHBgFicuXMnTdn9gxatOrTp1Wbbk1Z82zZsT+nvr06NW7erzHH7h18Qm/YvjlrFm67NG7jq5H7Xi6d9nDrxUUfd709+m/qo8GjFp+dPPTM3VugJ75eN2v3ys03/74+93hEiEwgSIAACijBIBQEAgA7');
+    background-repeat:no-repeat;
+    background-position:top right;
+    position:relative;
+    float:left;
+}
+ul.blockList ul.blockList li.blockList table {
+    margin:0 0 12px 0px;
+    width:100%;
+}
+.tableSubHeadingColor {
+    background-color: #EEEEFF;
+}
+.altColor {
+    background-color:#eeeeef;
+}
+.rowColor {
+    background-color:#ffffff;
+}
+.overviewSummary td, .packageSummary td, .contentContainer ul.blockList 
li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer 
td {
+    text-align:left;
+    padding:3px 3px 3px 7px;
+}
+th.colFirst, th.colLast, th.colOne, .constantValuesContainer th {
+    background:#dee3e9;
+    border-top:1px solid #9eadc0;
+    border-bottom:1px solid #9eadc0;
+    text-align:left;
+    padding:3px 3px 3px 7px;
+}
+td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, 
td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst 
a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, 
td.colLast a:hover, .constantValuesContainer td a:link, 
.constantValuesContainer td a:active, .constantValuesContainer td a:visited, 
.constantValuesContainer td a:hover {
+    font-weight:bold;
+}
+td.colFirst, th.colFirst {
+    border-left:1px solid #9eadc0;
+    white-space:nowrap;
+}
+td.colLast, th.colLast {
+    border-right:1px solid #9eadc0;
+}
+td.colOne, th.colOne {
+    border-right:1px solid #9eadc0;
+    border-left:1px solid #9eadc0;
+}
+table.overviewSummary  {
+    padding:0px;
+    margin-left:0px;
+}
+table.overviewSummary td.colFirst, table.overviewSummary th.colFirst,
+table.overviewSummary td.colOne, table.overviewSummary th.colOne {
+    width:25%;
+    vertical-align:middle;
+}
+table.packageSummary td.colFirst, table.overviewSummary th.colFirst {
+    width:25%;
+    vertical-align:middle;
+}
+/*
+Content styles
+*/
+.description pre {
+    margin-top:0;
+}
+.deprecatedContent {
+    margin:0;
+    padding:10px 0;
+}
+.docSummary {
+    padding:0;
+}
+
+/*
+Formatting effect styles
+*/
+.sourceLineNo {
+    color:green;
+    padding:0 30px 0 0;
+}
+h1.hidden {
+    visibility:hidden;
+    overflow:hidden;
+    font-size:.9em;
+}
+.block {
+    display:block;
+    margin:3px 0 0 0;
+}
+.strong {
+    font-weight:bold;
+}
+
+/*--- Juneau-specific styles 
--------------------------------------------------*/
+
+property {
+       font-size: 9pt;
+       font-family: monospace;
+       font-weight: bold;
+}
+
+/*--- Bordered code ---*/
+p.bcode {
+    font-size:9pt;
+    white-space:pre;
+       border: 1px solid black;
+       margin: 0px 20px;
+       border-radius: 10px;
+       overflow: hidden;
+    font-family: monospace;
+    background-color:rgb(248,248,248);
+    border-color:rgb(204,204,204);
+    -moz-tab-size: 3;
+    tab-size: 3;
+    -o-tab-size: 3;
+}
+
+.fixedWidth {
+    max-width: 800px;
+}
+
+/* Override padding bottom in javadoc comments. */
+.blockList p.bcode {
+       padding-bottom: 0px !important;
+}
+
+/*--- Unbordered code ---*/
+p.code {
+    font-size:9pt;
+    white-space:pre;
+    font-family: monospace;
+    padding-bottom: 15px;
+    margin: -15px;
+}
+
+td.code {
+    font-size:9pt;
+    white-space:pre;
+    font-family: monospace;
+}
+
+table.code {
+    font-size:9pt;
+    white-space:pre;
+    font-family: monospace;
+}
+
+/*--- Java code effects ---*/
+jc,jd,jt,jk,js,jf,jsf,jsm,ja {
+    font-size:9pt;
+    white-space:pre;
+    font-family: monospace;
+}
+/* Comment */
+jc {
+       color:green;
+}
+/* Javadoc comment */
+jd {
+       color:rgb(63,95,191);
+}
+/* Javadoc tag */
+jt {
+       color:rgb(127,159,191);
+       font-weight: bold;
+}
+/* Primitive */
+jk {
+       color:rgb(127,0,85);
+       font-weight:bold;
+}
+/* String */
+js {
+       color:blue;
+}
+/* Field */
+jf {
+       color:blue;
+}
+/* Static field */
+jsf {
+       color:blue;
+       font-style: italic;
+}
+/* Static method */
+jsm {
+       font-style: italic;
+}
+/* Annotation */
+ja {
+       color:grey;
+}
+
+/*--- XML code effects ---*/
+xt,xa,xc,xs {
+    font-size:9pt;
+    white-space:pre;
+    font-family: monospace;
+}
+xt {
+       color:DarkCyan;
+}
+xa {
+       color:purple;
+}
+xc {
+       color:mediumblue;
+}
+xs {
+       color:blue;
+       font-style: italic;
+}
+
+/*--- Override formatting on <table class='styled'> ---*/
+table.styled,
+.contentContainer .description table.styled,
+.contentContainer ul li table.styled,
+ul.blockList ul.blockList li.blockList table.styled {
+    padding:0px;
+    position:relative;
+    font-size:1.1em;
+    width:auto;
+    border:1px solid #9EADC0;
+    margin-left: 20px; 
+    margin-right: 20px;
+    border-collapse: collapse;
+}
+
+table.styled th {
+       background-color: rgb(222,227,233));
+       border:1px solid rgb(158,173,192);
+       padding: 3px 10px 3px 10px;
+}
+
+table.styled td {
+       padding: 3px;
+}
+
+table.styled ul {
+       padding: 0px 10px;
+}
+
+table.styled tr:nth-child(1) {
+       background-color: rgb(222,227,233);
+}
+
+table.styled tr:nth-child(2n+2) {
+       background-color: rgb(238,238,239);
+}
+
+table.styled tr:nth-child(2n+3) {
+       background-color: rgb(255,255,255);
+}
+
+/* Same as r1 except with a border on the bottom */
+table.styled tr.bb {
+       border-bottom: 1px solid rgb(158,173,192)
+}
+
+table.styled tr.light {
+       background-color: rgb(255,255,255) !important;
+}
+
+table.styled tr.dark {
+       background-color: rgb(238,238,239) !important;
+}
+
+/*--- Juneau topic headers ---*/
+h2.topic,h3.topic,h4.topic {
+       margin-bottom:20px;
+       margin-top:25px;
+       padding-top:3px;
+       padding-left: 25px;
+       color: rgb(44,69,87);
+       border-top: 2px groove rgb(158,173,192);
+       background-image: 
url('data:image/gif;base64,R0lGODlhEAAQAIQfACZJcSdKcjFTejVWfT5fhUFih0ZnjEhojUxskFFwk1Z0l1d1mFp4ml98nmaComiEpGuHpnKNq3SOrHiRroGZtYeeuJGmv5erwp+yx6O1yqm6zrDA0sTQ3s3X4+Dn7v///yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAB8ALAAAAAAQABAAAAVk4CeOZGmWgmEQG/k0MHw4UY0gY1PvfG3kvaBhUqk4IMgkcuGrdJ7QaCfDiBgunKx2m1VYP5KNeEze0H4VjHrNVh9+HodlTq9bEr9PhMLv+ykOAyIaNEE8ACMFiouMigEnkJGQIQA7');
+       background-repeat: no-repeat;
+       background-position: left center;
+}
+h2.closed,h3.closed,h4.closed {
+       background-image: 
url('data:image/gif;base64,R0lGODlhEAAQAIQYADNVfDhagUNkiUZnjEhojUxskE9vklFwlFd1mF17nWJ/oGaCo2+KqXKNq3aQrX2WsoGZtYObtoeeuJKowJ2wxqm6zrbF1sTQ3v///////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAB8ALAAAAAAQABAAAAVi4CeOZGmST6EGpLK8cNHMi6GI8qzvcyEikqBwGByIIJekcpmEiByWqHQadYgYlax2m2WIFpSweBxeiBKTtHqdTvwi8LgcjhAdHPi8Hn8QERiAgYKABCIAAoiJiogAJ46PjiEAOw==')
 !important;
+}
+div.topic {
+       margin-left:10px;
+}
+h5.topic,h6.topic {
+       margin-bottom:10px;
+       margin-top:20px;
+       color: rgb(44,69,87);
+       text-decoration: underline;
+}
+h6 {
+       margin:10px 0px;
+}
+h6.figure {
+       color: rgb(44,69,87);
+       margin-left: 30px;
+       margin-right: 30px;
+       margin-top: 10px;
+       margin-bottom: 0px;
+       font-style: italic;
+}
+
+/*--- Override how Javadoc handles unordered lists inside .footer ---*/
+ul.normal {
+       margin-top:0px;
+}
+
+ul.normal li {
+       font-size: 100%;
+       list-style: disc;
+}
+
+/*--- Bordered images ---*/
+
+.bordered {
+       border: 1px solid rgb(204,204,204);
+       margin: 0px 20px;
+       border-radius: 10px;
+}
+
+.padded {
+       padding-left:20px;
+       padding-right:20px;
+}
+
+/*--- Rows with bottom borders ---*/
+tr.borderbottom td {
+       border-bottom: 1px solid rgb(158,173,192)
+}
+
+/* Article links */
+a.doclink {
+       font-weight:bold;
+}
+
+.nomargin {
+       margin:0px;
+}
+
+ol.toc, .toc ol {
+  background: rgb(222, 227, 233);
+  font: italic 1em Georgia, Times, serif;
+  color: rgb(76,107,135);
+  margin: 0px;
+  padding: 0px;
+}
+
+ol.toc p, .toc ol p, ol.toc div, .toc ol div {
+    color:#353833;
+       font: normal 1em Arial, Helvetica, sans-serif;
+       padding-bottom: 5px;
+       margin: 0px;
+}
+
+.toc li {
+  background: #FFFFFF;
+  margin-left: 30px;
+  padding-left: 5px;
+}
+
+h5.toc, h6.toc {
+       color: rgb(44,69,87);
+       margin-bottom: 0px;
+       padding: 5px 30px;
+       border-radius: 15px 15px 15px 0px;
+       text-decoration: none;
+       background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 
0% 0% transparent;
+       background: -moz-linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat 
scroll 0% 0% transparent;
+       background: -webkit-gradient(linear, left top, left bottom, 
from(#F5F5F5), to(#DEE3E9));
+}
+
+body > p:first-child, 
+div.subTitle > div.block > p:first-child, 
+div.contentContainer > div.block > p:first-child {
+    font-size:1.5em;
+       color: rgb(44,69,87);
+       margin-bottom: 0px;
+       padding: 5px 30px;
+       border-radius: 15px;
+       text-decoration: none;
+       background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 
0% 0% transparent;
+       background: -moz-linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat 
scroll 0% 0% transparent;
+       background: -webkit-gradient(linear, left top, left bottom, 
from(#F5F5F5), to(#DEE3E9));
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/resources/org/apache/juneau/rest/labels/nls/DefaultLabels.properties
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/labels/nls/DefaultLabels.properties
 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/labels/nls/DefaultLabels.properties
new file mode 100644
index 0000000..82c4da4
--- /dev/null
+++ 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/labels/nls/DefaultLabels.properties
@@ -0,0 +1,41 @@
+# 
***************************************************************************************************************************
+# * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+# * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+# * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            * 
+# * with the License.  You may obtain a copy of the License at                 
                                             *
+# *                                                                            
                                             *
+# *  http://www.apache.org/licenses/LICENSE-2.0                                
                                             *
+# *                                                                            
                                             *
+# * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+# * specific language governing permissions and limitations under the License. 
                                             *
+# *                                                                            
                                             *
+# 
***************************************************************************************************************************
+# NLS_ENCODING=UTF-8
+# NLS_MESSAGEFORMAT_VAR
+
+QueryableParam.q.type = Map<String,String>
+QueryableParam.q.desc = Query parameter.\nUse to return rows that match a 
specified search string.\nExample:&q={name:'Bill*',birthDate:'>2000'}.\nSee 
DateMatcher for syntax of search parameters on objects of type Date and 
Calendar.\nSee NumberMatcher for syntax of search parameters on objects of type 
Number.\nSee StringMatcher for syntax of search parameters on objects of all 
other types.
+QueryableParam.v.type = List<String> or String (comma-delimited list)
+QueryableParam.v.desc = View parameter.\nUse to return a specified set of 
columns.\nExample:  &v=['name','birthDate']
+QueryableParam.s.type = Map<String,Character>
+QueryableParam.s.desc = Sort parameter.\nUse to sort results by the specified 
columns.\nThe JSON object keys are the column names, and the values are either 
'A' for ascending or 'D' for descending.\nExample:  &s={name:'A',birthDate:'D'}
+QueryableParam.g.type = List<String> or String (comma-delimited-list)
+QueryableParam.g.desc = Group-by parameter.\nUse to perform a group-by rollup 
on the specified columns.\nEssentially, this returns the specified list of 
columns, plus an additional 'count' column showing the grouped results.\nThis 
is very similar to the group-by functionality in SQL.
+QueryableParam.i.type = boolean
+QueryableParam.i.desc = Case-insensitive parameter.\nUse for case-insensitive 
matching on the &q parameter.
+QueryableParam.p.type = int
+QueryableParam.p.desc = Position parameter.\nUse to only return rows at the 
specified index position (zero-indexed).
+QueryableParam.l.type = int
+QueryableParam.l.desc = Limit parameter.\nUse to only return the specified 
number of rows.\n0 returns all rows.
+
+HeaderParam.accept.type = String
+HeaderParam.accept.desc = Specify the HTTP Accept header (e.g. 
&accept=text/xml).
+HeaderParam.accept-encoding.type = String
+HeaderParam.accept-encoding.desc = Specify the HTTP Accept-Encoding header 
(e.g. &accept-encoding=SJIS).
+HeaderParam.method.type = String
+HeaderParam.method.desc = Override the HTTP method (e.g. &method=HEAD).\nThis 
can also be used to invoke non-HTTP-standard methods.
+HeaderParam.content.type = *
+HeaderParam.content.desc = Can be used to pass in content for PUT/POST 
methods.\nTypically the content will be a JSON object or array.
+HeaderParam.plainText.type = Boolean
+HeaderParam.plainText.desc = Forces the response Content-Type to be 
'text/plain' regardless of what's specified on the Accept header.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/devops.css
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/devops.css 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/devops.css
new file mode 100644
index 0000000..c0c45b7
--- /dev/null
+++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/devops.css
@@ -0,0 +1,202 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+ * with the License.  You may obtain a copy of the License at                  
                                            *
+ *                                                                             
                                            *
+ *  http://www.apache.org/licenses/LICENSE-2.0                                 
                                            *
+ *                                                                             
                                            *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the        *
+ * specific language governing permissions and limitations under the License.  
                                            *
+ 
***************************************************************************************************************************/
+ 
+html {
+       height: 100%;
+}
+
+body {
+       background-color: rgb(59,75,84);
+       margin: 0px;
+       font-family: sans-serif;
+       font-size: 12px;
+       color: #26343F;
+       height: 100%;
+}
+
+/************************************************************************************/
+/**  Title/description section                                                 
    **/
+/************************************************************************************/
+h3.title {
+    font-size:12pt;
+       color: white;
+       margin: 0px;
+       padding: 10px 20px;
+       text-decoration: none;
+       font-weight: normal;
+       background-color: rgb(38,52,63);
+       border-bottom: 2px solid #34534B;
+       font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica 
Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
+}
+
+h5.description {
+    font-size:11pt;
+       color: #B3B3B3;
+       margin: 0;
+       padding: 10px 20px;
+       text-decoration: none;
+       font-weight: normal;
+       background-color: rgb(38,52,63);
+       border-bottom: 2px solid #34534B;
+       font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica 
Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
+}
+
+
+
+/************************************************************************************/
+/**  Links section                                                             
    **/
+/************************************************************************************/
+p.links {
+       margin-left: 20px;
+       margin-bottom: 0;
+       text-align: left;
+       color: #94A3AB;
+       text-transform: uppercase;
+}
+
+p.links a {
+       font-size:12px;
+       color: #94A3AB;
+       text-decoration: none;
+       margin-left: 15px;
+       margin-right: 15px;
+}
+
+p.links a:active, p.links a:hover {
+       font-size:12px;
+       color: white;
+       text-decoration: underline;
+}
+
+/* Use this to place links in description section aligned on the left.
+p.links {
+       margin-right: 20px;
+       margin-top: -30px;
+       text-align: right;
+       color: #94A3AB;
+       text-transform: uppercase;
+}
+*/
+
+
+/************************************************************************************/
+/**  Data section                                                              
    **/
+/************************************************************************************/
+div.outerdata {
+       width: 100%;
+       height: 100%;
+}
+
+div.data {
+       padding:10px;
+       background-color: white;
+       border-radius: 4px;
+       margin: 20px;
+       display: inline-block;
+       overflow-x: auto;
+       box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
+}
+
+div.data td {
+       vertical-align: top;
+       border-bottom:1px solid #d9dcde;
+       border-right:1px solid #d9dcde;
+       padding:0.2em 0.5em;
+       color:#26343F;
+       font-size:12px;
+}
+
+
+/************************************************************************************/
+/**  Other                                                                     
    **/
+/************************************************************************************/
+
+table {
+       border: none;
+}
+
+p {
+       font-family: sans-serif;
+       font-size: 12px;
+}
+
+a {
+       color: #116998;
+       text-decoration: none;
+}
+
+a:hover {
+       color: #26343F;
+       text-decoration: underline;
+}
+
+th, .header {
+       border-top:1px solid #d9dcde;
+       padding: 4px 8px;
+       font-weight: bold;
+       text-align:center;
+       background-color: rgb(244,246,249);
+       font-family: sans-serif;
+       font-size: 12px;
+       color: #26343f;
+}
+
+button {
+       border-left:1px solid #A1AFAC;
+       border-top:1px solid #A1AFAC;
+       color: white;
+       font-size: 12px;
+       background: #00b299;
+    font-weight: bold;
+    padding: 5px 20px; 
+       border-radius: 5px;
+       text-transform: uppercase;
+       margin-left: 10px;
+}
+
+button:hover {
+       background-image: none;
+       background-color: #66D1C2;
+}
+
+ul {
+       margin:0px;
+       padding-left:20px;
+}
+
+textarea, pre { 
+       -moz-tab-size:3; 
+       -o-tab-size:3; 
+       -webkit-tab-size:3; 
+       tab-size:3; 
+}
+
+.table {
+       display:table;
+}
+.row {display:table-row;}
+.cell {display:table-cell;}
+.monospace {font-family:monospace;}
+
+iframe.output {
+       background-color: #F6F7F9;
+    border: 1px solid gray;
+    padding: 0px;
+    overflow: hidden;
+    width:100%;
+       min-height:400px;
+}
+
+input {
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/juneau.css
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/juneau.css 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/juneau.css
new file mode 100644
index 0000000..cae9c5b
--- /dev/null
+++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/juneau.css
@@ -0,0 +1,141 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+ * with the License.  You may obtain a copy of the License at                  
                                            *
+ *                                                                             
                                            *
+ *  http://www.apache.org/licenses/LICENSE-2.0                                 
                                            *
+ *                                                                             
                                            *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the        *
+ * specific language governing permissions and limitations under the License.  
                                            *
+ 
***************************************************************************************************************************/
+
+table {
+       border:1px solid #CCCC99;
+       background-color: white;
+       border-collapse: collapse;
+       margin-bottom: 10px;
+       margin-top: 10px;
+       display: inline-table;
+}
+
+body {
+       background-image: linear-gradient(top, #CDDDDF 0, #EAEDED 20px, #FFFFFF 
70px);
+       background-image: -o-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -moz-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -webkit-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -ms-linear-gradient(top, #CDDDDF 0, #EAEDED 20px, 
#FFFFFF 70px);
+       background-image: -webkit-gradient(
+               linear,
+               left top,
+               left bottom,
+               color-stop(0, #CDDDDF),
+               color-stop(20px, #EAEDED),
+               color-stop(70px, #FFFFFF)
+       );
+       background-repeat: no-repeat;
+       background-attachment: fixed;
+       margin: 20px;
+       font-family: sans-serif;
+       font-size: 12px;
+       color: rgb(44, 69, 87);
+       height: 100%;
+}
+
+p {
+       font-family: sans-serif;
+       font-size: 12px;
+}
+
+p.links {
+       margin-left: 10px;
+}
+
+th, .header {
+       border-top:1px solid #CCCC99;
+       padding:0.3em 0.5em;
+       font-weight: bold;
+       font-size: 12px;
+       color:#666666;
+       text-align:center;
+       background-image: linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);
+       background-image: -o-linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);
+       background-image: -moz-linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);
+       background-image: -webkit-linear-gradient(top, #FBF9E4 0%, #F3F2C2 
100%);
+       background-image: -ms-linear-gradient(top, #FBF9E4 0%, #F3F2C2 100%);
+       background-image: -webkit-gradient(
+               linear,
+               left top,
+               left bottom,
+               color-stop(0, #FBF9E4),
+               color-stop(1, #F3F2C2)
+       );
+}
+
+button {
+       border-left:1px solid #CCCC99;
+       border-top:1px solid #CCCC99;
+       border-radius: 5px;
+       color: rgb(44,69,87);
+       font-size: 12px;
+       background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 
0% 0% transparent;
+       background: -moz-linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat 
scroll 0% 0% transparent;
+       background: -webkit-gradient(linear, left top, left bottom, 
from(#F5F5F5), to(#DEE3E9));
+       
+}
+
+button:hover {
+       background-image: none;
+       background-color: #FBF9E4;
+}
+
+
+td, .entry {
+       border:1px solid #E9EACB;
+       padding:0.2em 0.5em;
+       color:#005C87;
+       font-size:12px;
+       vertical-align:top;
+}
+
+ul {
+       margin:0px;
+       padding-left:20px;
+}
+
+a {
+       font-size:12px;
+}
+
+textarea, pre { 
+       -moz-tab-size:3; 
+       -o-tab-size:3; 
+       -webkit-tab-size:3; 
+       tab-size:3; 
+}
+
+h3.title {
+    font-size:1.5em;
+       color: rgb(44,69,87);
+       margin-bottom: 10px;
+       padding: 5px 30px;
+       border-radius: 15px;
+       text-decoration: none;
+       font-weight: normal;
+       background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 
0% 0% transparent;
+       background: -moz-linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat 
scroll 0% 0% transparent;
+       background: -webkit-gradient(linear, left top, left bottom, 
from(#F5F5F5), to(#DEE3E9));
+}
+
+h5.description {
+       font-size:12px;
+       font-weight: normal;
+       color: rgb(44,69,87);
+       margin-left: 20px;
+}
+
+.table {display:table;}
+.row {display:table-row;}
+.cell {display:table-cell;}
+.monospace {font-family:monospace;}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/.project
----------------------------------------------------------------------
diff --git a/juneau-samples/.project b/juneau-samples/.project
index 8d61ac2..46ad2c7 100644
--- a/juneau-samples/.project
+++ b/juneau-samples/.project
@@ -18,9 +18,9 @@
   <comment>Sample code packaged as a microservice. NO_M2ECLIPSE_SUPPORT: 
Project files created with the maven-eclipse-plugin are not supported in 
M2Eclipse.</comment>
   <projects>
     <project>juneau-microservice</project>
-    <project>juneau-server</project>
+    <project>juneau-rest</project>
     <project>juneau-core</project>
-    <project>juneau-client</project>
+    <project>juneau-rest-client</project>
   </projects>
   <buildSpec>
     <buildCommand>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/pom.xml
----------------------------------------------------------------------
diff --git a/juneau-samples/pom.xml b/juneau-samples/pom.xml
index b6ef3c7..01a4402 100644
--- a/juneau-samples/pom.xml
+++ b/juneau-samples/pom.xml
@@ -107,7 +107,7 @@
                                                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                                        <manifestEntries>
                                                                
<Main-Class>org.apache.juneau.microservice.RestMicroservice</Main-Class>
-                                                               
<Rest-Resources>org.apache.juneau.server.samples.RootResources</Rest-Resources>
+                                                               
<Rest-Resources>org.apache.juneau.rest.samples.RootResources</Rest-Resources>
                                                                
<Main-ConfigFile>samples.cfg</Main-ConfigFile>
                                                        </manifestEntries>
                                                </transformer>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/samples.cfg
----------------------------------------------------------------------
diff --git a/juneau-samples/samples.cfg b/juneau-samples/samples.cfg
index fff2f48..54b6c32 100755
--- a/juneau-samples/samples.cfg
+++ b/juneau-samples/samples.cfg
@@ -21,7 +21,7 @@
 
#================================================================================
 [REST]
 
-resources = org.apache.juneau.server.samples.RootResources
+resources = org.apache.juneau.rest.samples.RootResources
 
 port = 10000
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AdminGuard.java
----------------------------------------------------------------------
diff --git 
a/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AdminGuard.java 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AdminGuard.java
new file mode 100644
index 0000000..85da7b1
--- /dev/null
+++ 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AdminGuard.java
@@ -0,0 +1,26 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.samples;
+
+import org.apache.juneau.rest.*;
+
+/**
+ * Sample guard that only lets administrators through.
+ */
+public class AdminGuard extends RestGuard {
+
+       @Override /* RestGuard */
+       public boolean isRequestAllowed(RestRequest req) {
+               return true;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AtomFeedResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AtomFeedResource.java
 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AtomFeedResource.java
new file mode 100644
index 0000000..e423a63
--- /dev/null
+++ 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/AtomFeedResource.java
@@ -0,0 +1,103 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.samples;
+
+import static org.apache.juneau.dto.atom.AtomBuilder.*;
+import static org.apache.juneau.html.HtmlDocSerializerContext.*;
+import static org.apache.juneau.jena.RdfCommonContext.*;
+import static org.apache.juneau.jena.RdfSerializerContext.*;
+
+import java.net.*;
+
+import org.apache.juneau.dto.atom.*;
+import org.apache.juneau.encoders.*;
+import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * Sample resource that shows how to generate ATOM feeds.
+ */
+@RestResource(
+       path="/atom",
+       messages="nls/AtomFeedResource",
+       properties={
+               @Property(name=SERIALIZER_quoteChar, value="'"),
+               @Property(name=RDF_rdfxml_tab, value="5"),
+               @Property(name=RDF_addRootProperty, value="true"),
+               @Property(name=HTMLDOC_links, 
value="{up:'$R{requestParentURI}',options:'?method=OPTIONS',source:'$R{servletParentURI}/source?classes=(org.apache.juneau.rest.samples.AtomFeedResource)'}")
+       },
+       encoders=GzipEncoder.class
+)
+public class AtomFeedResource extends ResourceJena {
+       private static final long serialVersionUID = 1L;
+
+       private Feed feed;     // The root resource object
+
+       @Override /* Servlet */
+       public void init() {
+
+               try {
+                       feed = 
+                               feed("tag:juneau.sample.com,2013:1", "Juneau 
ATOM specification", "2013-05-08T12:29:29Z")
+                               .subtitle(text("html").text("A <em>lot</em> of 
effort went into making this effortless"))
+                               .links(
+                                       link("alternate", "text/html", 
"http://www.sample.com/";).hreflang("en"),
+                                       link("self", "application/atom+xml", 
"http://www.sample.com/feed.atom";)
+                               )
+                               .rights("Copyright (c) 2016, Apache Foundation")
+                               .generator(
+                                       
generator("Juneau").uri("http://juneau.apache.org/";).version("1.0")
+                               )
+                               .entries(
+                                       
entry("tag:juneau.sample.com,2013:1.2345", "Juneau ATOM specification 
snapshot", "2013-05-08T12:29:29Z")
+                                       .links(
+                                               link("alternate", "text/html", 
"http://www.sample.com/2012/05/08/juneau.atom";),
+                                               link("enclosure", "audio/mpeg", 
"http://www.sample.com/audio/juneau_podcast.mp3";).length(1337)
+                                       )
+                                       .published("2013-05-08T12:29:29Z")
+                                       .authors(
+                                               person("James Bognar").uri(new 
URI("http://www.sample.com/";)).email("[email protected]")
+                                       )
+                                       .contributors(
+                                               person("Barry M. Caceres")
+                                       )
+                                       .content(
+                                               content("xhtml")
+                                               .lang("en")
+                                               .base("http://www.apache.org/";)
+                                               .text("<div><p>[Update: Juneau 
supports ATOM.]</p></div>")
+                                       )
+                               );
+               } catch (Exception e) {
+                       throw new RuntimeException(e);
+               }
+       }
+
+       /**
+        * GET request handler
+        */
+       @RestMethod(name="GET", path="/")
+       public Feed getFeed() throws Exception {
+               return feed;
+       }
+
+       /**
+        * PUT request handler.
+        * Replaces the feed with the specified content, and then mirrors it as 
the response.
+        */
+       @RestMethod(name="PUT", path="/")
+       public Feed setFeed(@Body Feed feed) throws Exception {
+               this.feed = feed;
+               return feed;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/src/main/java/org/apache/juneau/rest/samples/CodeFormatterResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-samples/src/main/java/org/apache/juneau/rest/samples/CodeFormatterResource.java
 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/CodeFormatterResource.java
new file mode 100644
index 0000000..1ab9daa
--- /dev/null
+++ 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/CodeFormatterResource.java
@@ -0,0 +1,50 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.samples;
+
+import static org.apache.juneau.html.HtmlDocSerializerContext.*;
+
+import java.io.*;
+
+import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * Service at <code>/codeFormatter</code>.
+ * Used for executing SQL queries against the repository database.
+ */
+@RestResource(
+       path="/codeFormatter",
+       messages="nls/CodeFormatterResource",
+       properties={
+               @Property(name=HTMLDOC_title, value="Code Formatter"),
+               @Property(name=HTMLDOC_description, value="Add syntax 
highlighting tags to source code"),
+               @Property(name=HTMLDOC_links, 
value="{options:'?method=OPTIONS',source:'$R{servletParentURI}/source?classes=(org.apache.juneau.rest.samples.CodeFormatterResource)'}"),
+       }
+)
+@SuppressWarnings("serial")
+public class CodeFormatterResource extends Resource {
+
+       /** [GET /] - Display query entry page. */
+       @RestMethod(name="GET", path="/")
+       public ReaderResource getQueryEntryPage(RestRequest req) throws 
IOException {
+               return req.getReaderResource("CodeFormatterResource.html", 
true);
+       }
+
+       /** [POST /] - Execute SQL query. */
+       @RestMethod(name="POST", path="/")
+       public String executeQuery(@FormData("code") String code, 
@FormData("lang") String lang) throws Exception {
+               return SourceResource.highlight(code, lang);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/src/main/java/org/apache/juneau/rest/samples/Constants.java
----------------------------------------------------------------------
diff --git 
a/juneau-samples/src/main/java/org/apache/juneau/rest/samples/Constants.java 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/Constants.java
new file mode 100644
index 0000000..d355efb
--- /dev/null
+++ b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/Constants.java
@@ -0,0 +1,28 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.samples;
+
+public class Constants {
+
+       private static String juneauSampleUrl = 
System.getProperty("JUNO_SAMPLE_URL");
+
+       /**
+        * Returns the value of the "JUNO_SAMPLE_URL" system property, or 
throws a {@link RuntimeException}
+        * if it's not set.
+        */
+       public static String getSampleUrl() {
+               if (juneauSampleUrl == null)
+                       return "http://localhost:10000";;
+               return juneauSampleUrl;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-samples/src/main/java/org/apache/juneau/rest/samples/DirectoryResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-samples/src/main/java/org/apache/juneau/rest/samples/DirectoryResource.java
 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/DirectoryResource.java
new file mode 100644
index 0000000..5741a00
--- /dev/null
+++ 
b/juneau-samples/src/main/java/org/apache/juneau/rest/samples/DirectoryResource.java
@@ -0,0 +1,234 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.samples;
+
+import static java.util.logging.Level.*;
+import static javax.servlet.http.HttpServletResponse.*;
+import static org.apache.juneau.html.HtmlDocSerializerContext.*;
+import static org.apache.juneau.rest.RestServletContext.*;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import java.util.logging.*;
+
+import javax.servlet.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.annotation.Properties;
+import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.utils.*;
+
+/**
+ * Sample REST resource for exploring local file systems.
+ */
+@RestResource(
+       messages="nls/DirectoryResource",
+       properties={
+               @Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),
+               @Property(name=HTMLDOC_links, 
value="{up:'$R{requestParentURI}',options:'?method=OPTIONS',source:'$R{servletParentURI}/source?classes=(org.apache.juneau.rest.samples.DirectoryResource)'}"),
+               @Property(name=REST_allowMethodParam, value="*"),
+               @Property(name="rootDir", value="$S{java.io.tmpdir}"),
+               @Property(name="allowViews", value="false"),
+               @Property(name="allowDeletes", value="false"),
+               @Property(name="allowPuts", value="false")
+       }
+)
+public class DirectoryResource extends Resource {
+       private static final long serialVersionUID = 1L;
+
+       protected File rootDir;     // The root directory
+
+       // Settings enabled through servlet init parameters
+       protected boolean allowDeletes, allowPuts, allowViews;
+
+       private static Logger logger = 
Logger.getLogger(DirectoryResource.class.getName());
+
+       @Override /* Servlet */
+       public void init() throws ServletException {
+               ObjectMap p = getProperties();
+               rootDir = new File(p.getString("rootDir"));
+               allowViews = p.getBoolean("allowViews", false);
+               allowDeletes = p.getBoolean("allowDeletes", false);
+               allowPuts = p.getBoolean("allowPuts", false);
+       }
+
+       /** Returns the root directory defined by the 'rootDir' init parameter 
*/
+       protected File getRootDir() {
+               if (rootDir == null) {
+                       rootDir = new 
File(getProperties().getString("rootDir"));
+                       if (! rootDir.exists())
+                               if (! rootDir.mkdirs())
+                                       throw new RuntimeException("Could not 
create root dir");
+               }
+               return rootDir;
+       }
+
+       /** GET request handler */
+       @RestMethod(name="GET", path="/*", converters={Queryable.class})
+       public Object doGet(RestRequest req, @Properties ObjectMap properties) 
throws Exception {
+
+               String pathInfo = req.getPathInfo();
+               File f = pathInfo == null ? rootDir : new 
File(rootDir.getAbsolutePath() + pathInfo);
+
+               if (!f.exists())
+                       throw new RestException(SC_NOT_FOUND, "File not found");
+
+               properties.put("path", f.getAbsolutePath());
+
+               if (f.isDirectory()) {
+                       List<FileResource> l = new LinkedList<FileResource>();
+                       for (File fc : f.listFiles()) {
+                               URL fUrl = new 
URL(req.getRequestURL().append("/").append(fc.getName()).toString());
+                               l.add(new FileResource(fc, fUrl));
+                       }
+                       return l;
+               }
+
+               return new FileResource(f, new 
URL(req.getRequestURL().toString()));
+       }
+
+       /** DELETE request handler */
+       @RestMethod(name="DELETE", path="/*", guards=AdminGuard.class)
+       public Object doDelete(RestRequest req) throws Exception {
+
+               if (! allowDeletes)
+                       throw new RestException(SC_METHOD_NOT_ALLOWED, "DELETE 
not enabled");
+
+               File f = new File(rootDir.getAbsolutePath() + 
req.getPathInfo());
+               deleteFile(f);
+
+               if (req.getHeader("Accept").contains("text/html"))
+                       return new Redirect();
+               return "File deleted";
+       }
+
+       /** PUT request handler */
+       @RestMethod(name="PUT", path="/*", guards=AdminGuard.class)
+       public Object doPut(RestRequest req) throws Exception {
+
+               if (! allowPuts)
+                       throw new RestException(SC_METHOD_NOT_ALLOWED, "PUT not 
enabled");
+
+               File f = new File(rootDir.getAbsolutePath() + 
req.getPathInfo());
+               String parentSubPath = 
f.getParentFile().getAbsolutePath().substring(rootDir.getAbsolutePath().length());
+               BufferedOutputStream bos = new BufferedOutputStream(new 
FileOutputStream(f));
+               IOPipe.create(req.getInputStream(), bos).closeOut().run();
+               if (req.getContentType().contains("html"))
+                       return new Redirect(parentSubPath);
+               return "File added";
+       }
+
+       /** VIEW request handler (overloaded GET for viewing file contents) */
+       @RestMethod(name="VIEW", path="/*")
+       public void doView(RestRequest req, RestResponse res) throws Exception {
+
+               if (! allowViews)
+                       throw new RestException(SC_METHOD_NOT_ALLOWED, "VIEW 
not enabled");
+
+               File f = new File(rootDir.getAbsolutePath() + 
req.getPathInfo());
+
+               if (!f.exists())
+                       throw new RestException(SC_NOT_FOUND, "File not found");
+
+               if (f.isDirectory())
+                       throw new RestException(SC_METHOD_NOT_ALLOWED, "VIEW 
not available on directories");
+
+               res.setOutput(new FileReader(f)).setContentType("text/plain");
+       }
+
+       /** DOWNLOAD request handler (overloaded GET for downloading file 
contents) */
+       @RestMethod(name="DOWNLOAD")
+       public void doDownload(RestRequest req, RestResponse res) throws 
Exception {
+
+               if (! allowViews)
+                       throw new RestException(SC_METHOD_NOT_ALLOWED, 
"DOWNLOAD not enabled");
+
+               File f = new File(rootDir.getAbsolutePath() + 
req.getPathInfo());
+
+               if (!f.exists())
+                       throw new RestException(SC_NOT_FOUND, "File not found");
+
+               if (f.isDirectory())
+                       throw new RestException(SC_METHOD_NOT_ALLOWED, 
"DOWNLOAD not available on directories");
+
+               res.setOutput(new FileReader(f)).setContentType("application");
+       }
+
+       /** File POJO */
+       public class FileResource {
+               private File f;
+               private URL url;
+
+               /** Constructor */
+               public FileResource(File f, URL url) {
+                       this.f = f;
+                       this.url = url;
+               }
+
+               // Bean property getters
+
+               public URL getUrl() {
+                       return url;
+               }
+
+               public String getType() {
+                       return (f.isDirectory() ? "dir" : "file");
+               }
+
+               public String getName() {
+                       return f.getName();
+               }
+
+               public long getSize() {
+                       return f.length();
+               }
+
+               public Date getLastModified() {
+                       return new Date(f.lastModified());
+               }
+
+               public URL getView() throws Exception {
+                       if (allowViews && f.canRead() && ! f.isDirectory())
+                               return new URL(url + "?method=VIEW");
+                       return null;
+               }
+
+               public URL getDownload() throws Exception {
+                       if (allowViews && f.canRead() && ! f.isDirectory())
+                               return new URL(url + "?method=DOWNLOAD");
+                       return null;
+               }
+
+               public URL getDelete() throws Exception {
+                       if (allowDeletes && f.canWrite())
+                               return new URL(url + "?method=DELETE");
+                       return null;
+               }
+       }
+
+       /** Utility method */
+       private void deleteFile(File f) {
+               try {
+                       if (f.isDirectory())
+                               for (File fc : f.listFiles())
+                                       deleteFile(fc);
+                       f.delete();
+               } catch (Exception e) {
+                       logger.log(WARNING, "Cannot delete file '" + 
f.getAbsolutePath() + "'", e);
+               }
+       }
+}

Reply via email to