This is an automated email from the ASF dual-hosted git repository. jamesbognar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/juneau.git
commit c4bf28b36a2cc68b1847768adae230203231df22 Author: JamesBognar <[email protected]> AuthorDate: Sat Jun 18 10:28:01 2022 -0400 Javadocs --- ....jp.Installing.html => 19.juneau-petstore.html} | 12 +- .../01.jp.Installing.html | 0 .../02.jp.Running.html | 0 .../03.jp.Building.html | 0 .../04.jp.App.html | 0 .../01.jp.Installing.html => 20.Glossaries.html} | 11 +- .../01.g.LanguageSupport.html | 0 .../02.g.Annotations.html | 0 .../01.jp.Installing.html => 21.Security.html} | 16 +- .../01.s.Marshall.html | 0 .../{22.Security => 21.Security}/02.s.Svl.html | 0 .../{22.Security => 21.Security}/03.s.Rest.html | 0 .../main/javadoc/doc-files/jec.Installing.1.png | Bin 84524 -> 0 bytes .../main/javadoc/doc-files/jec.Installing.2.png | Bin 91900 -> 0 bytes .../main/javadoc/doc-files/jec.Installing.3.png | Bin 79555 -> 0 bytes .../javadoc/doc-files/jer.AtomFeedResource.1.png | Bin 176439 -> 0 bytes .../javadoc/doc-files/jer.AtomFeedResource.2.png | Bin 266611 -> 0 bytes .../javadoc/doc-files/jer.AtomFeedResource.3.png | Bin 147615 -> 0 bytes .../javadoc/doc-files/jer.ConfigResource.1.png | Bin 153114 -> 0 bytes .../javadoc/doc-files/jer.ConfigResource.2.png | Bin 269953 -> 0 bytes .../javadoc/doc-files/jer.HelloWorldResource.1.png | Bin 71562 -> 0 bytes .../javadoc/doc-files/jer.HelloWorldResource.2.png | Bin 15098 -> 0 bytes .../javadoc/doc-files/jer.JsonSchemaResource.1.png | Bin 172354 -> 0 bytes .../javadoc/doc-files/jer.JsonSchemaResource.2.png | Bin 110715 -> 0 bytes .../main/javadoc/doc-files/jer.LogsResource.1.png | Bin 206285 -> 0 bytes .../main/javadoc/doc-files/jer.RootResources.1.png | Bin 224036 -> 0 bytes .../main/javadoc/doc-files/jerj.Installing.1.png | Bin 84524 -> 0 bytes .../main/javadoc/doc-files/jerj.Installing.2.png | Bin 160013 -> 0 bytes .../main/javadoc/doc-files/jerj.Installing.3.png | Bin 158863 -> 0 bytes .../src/main/javadoc/doc-files/jerj.Running.1.png | Bin 98777 -> 0 bytes .../src/main/javadoc/doc-files/jers.Heroku.1.png | Bin 100781 -> 0 bytes .../src/main/javadoc/doc-files/jers.Heroku.2.png | Bin 136990 -> 0 bytes .../src/main/javadoc/doc-files/jers.Heroku.3.png | Bin 293130 -> 0 bytes .../src/main/javadoc/doc-files/jers.Heroku.4.png | Bin 105931 -> 0 bytes .../src/main/javadoc/doc-files/jers.Heroku.5.png | Bin 13946 -> 0 bytes .../src/main/javadoc/doc-files/jers.Heroku.6.png | Bin 243630 -> 0 bytes .../main/javadoc/doc-files/jers.Installing.1.png | Bin 84524 -> 0 bytes .../main/javadoc/doc-files/jers.Installing.2.png | Bin 162296 -> 0 bytes .../main/javadoc/doc-files/jers.Installing.3.png | Bin 173827 -> 0 bytes .../src/main/javadoc/doc-files/jers.Running.1.png | Bin 98777 -> 0 bytes .../doc-files/jrs.Overview.HelloWorldResource.png | Bin 0 -> 71127 bytes .../doc-files/jrs.Overview.RootResources.json.png | Bin 0 -> 122559 bytes .../doc-files/jrs.Overview.RootResources.png | Bin 0 -> 193666 bytes juneau-doc/src/main/javadoc/overview.html | 1713 ++------------------ juneau-doc/src/main/javadoc/resources/docs.txt | 17 +- .../src/main/javadoc/resources/fragments/toc.html | 25 +- 46 files changed, 164 insertions(+), 1630 deletions(-) diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html b/juneau-doc/docs/Topics/19.juneau-petstore.html similarity index 78% copy from juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html copy to juneau-doc/docs/Topics/19.juneau-petstore.html index c7daec4f4..57002a5db 100644 --- a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html +++ b/juneau-doc/docs/Topics/19.juneau-petstore.html @@ -13,16 +13,10 @@ ***************************************************************************************************************************/ --> -{title:'Installing in Eclipse', created:'8.2.0', flags:'todo'} +{title:'juneau-pestore', created:'8.2.0', flags:'todo'} <div class='topic'> <p> - How to import Petstore to Eclipse or Spring Tool Suite: <br><br> - <ol> - <li>File --> </li> - <li>Import --> </li> - <li>Existing Maven Projects--></li> - <li>Browse existing projects--> juneau-petstore</li> - </ol> - </p> + TODO + </p> </div> \ No newline at end of file diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html b/juneau-doc/docs/Topics/19.juneau-petstore/01.jp.Installing.html similarity index 100% copy from juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html copy to juneau-doc/docs/Topics/19.juneau-petstore/01.jp.Installing.html diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/02.jp.Running.html b/juneau-doc/docs/Topics/19.juneau-petstore/02.jp.Running.html similarity index 100% rename from juneau-doc/docs/Topics/20.juneau-petstore/02.jp.Running.html rename to juneau-doc/docs/Topics/19.juneau-petstore/02.jp.Running.html diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/03.jp.Building.html b/juneau-doc/docs/Topics/19.juneau-petstore/03.jp.Building.html similarity index 100% rename from juneau-doc/docs/Topics/20.juneau-petstore/03.jp.Building.html rename to juneau-doc/docs/Topics/19.juneau-petstore/03.jp.Building.html diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/04.jp.App.html b/juneau-doc/docs/Topics/19.juneau-petstore/04.jp.App.html similarity index 100% rename from juneau-doc/docs/Topics/20.juneau-petstore/04.jp.App.html rename to juneau-doc/docs/Topics/19.juneau-petstore/04.jp.App.html diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html b/juneau-doc/docs/Topics/20.Glossaries.html similarity index 78% copy from juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html copy to juneau-doc/docs/Topics/20.Glossaries.html index c7daec4f4..d173bc493 100644 --- a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html +++ b/juneau-doc/docs/Topics/20.Glossaries.html @@ -13,16 +13,9 @@ ***************************************************************************************************************************/ --> -{title:'Installing in Eclipse', created:'8.2.0', flags:'todo'} +{title:'Glossaries', created:'8.1.3'} <div class='topic'> <p> - How to import Petstore to Eclipse or Spring Tool Suite: <br><br> - <ol> - <li>File --> </li> - <li>Import --> </li> - <li>Existing Maven Projects--></li> - <li>Browse existing projects--> juneau-petstore</li> - </ol> - </p> + </p> </div> \ No newline at end of file diff --git a/juneau-doc/docs/Topics/21.Glossaries/01.g.LanguageSupport.html b/juneau-doc/docs/Topics/20.Glossaries/01.g.LanguageSupport.html similarity index 100% rename from juneau-doc/docs/Topics/21.Glossaries/01.g.LanguageSupport.html rename to juneau-doc/docs/Topics/20.Glossaries/01.g.LanguageSupport.html diff --git a/juneau-doc/docs/Topics/21.Glossaries/02.g.Annotations.html b/juneau-doc/docs/Topics/20.Glossaries/02.g.Annotations.html similarity index 100% rename from juneau-doc/docs/Topics/21.Glossaries/02.g.Annotations.html rename to juneau-doc/docs/Topics/20.Glossaries/02.g.Annotations.html diff --git a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html b/juneau-doc/docs/Topics/21.Security.html similarity index 77% rename from juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html rename to juneau-doc/docs/Topics/21.Security.html index c7daec4f4..05f0d6352 100644 --- a/juneau-doc/docs/Topics/20.juneau-petstore/01.jp.Installing.html +++ b/juneau-doc/docs/Topics/21.Security.html @@ -13,16 +13,14 @@ ***************************************************************************************************************************/ --> -{title:'Installing in Eclipse', created:'8.2.0', flags:'todo'} +{title:'Security Best-Practices'} <div class='topic'> <p> - How to import Petstore to Eclipse or Spring Tool Suite: <br><br> - <ol> - <li>File --> </li> - <li>Import --> </li> - <li>Existing Maven Projects--></li> - <li>Browse existing projects--> juneau-petstore</li> - </ol> - </p> + Security is always an ongoing concern in any library. + If you discover any security vulnerabilities in this code, please refer to the instructions found here: + </p> + <ul class='spaced-list'> + <li class='extlink'>{@doc http://www.apache.org/security SECURITY} + </ul> </div> \ No newline at end of file diff --git a/juneau-doc/docs/Topics/22.Security/01.s.Marshall.html b/juneau-doc/docs/Topics/21.Security/01.s.Marshall.html similarity index 100% rename from juneau-doc/docs/Topics/22.Security/01.s.Marshall.html rename to juneau-doc/docs/Topics/21.Security/01.s.Marshall.html diff --git a/juneau-doc/docs/Topics/22.Security/02.s.Svl.html b/juneau-doc/docs/Topics/21.Security/02.s.Svl.html similarity index 100% rename from juneau-doc/docs/Topics/22.Security/02.s.Svl.html rename to juneau-doc/docs/Topics/21.Security/02.s.Svl.html diff --git a/juneau-doc/docs/Topics/22.Security/03.s.Rest.html b/juneau-doc/docs/Topics/21.Security/03.s.Rest.html similarity index 100% rename from juneau-doc/docs/Topics/22.Security/03.s.Rest.html rename to juneau-doc/docs/Topics/21.Security/03.s.Rest.html diff --git a/juneau-doc/src/main/javadoc/doc-files/jec.Installing.1.png b/juneau-doc/src/main/javadoc/doc-files/jec.Installing.1.png deleted file mode 100644 index 3b9b4e177..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jec.Installing.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jec.Installing.2.png b/juneau-doc/src/main/javadoc/doc-files/jec.Installing.2.png deleted file mode 100644 index dc73f291a..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jec.Installing.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jec.Installing.3.png b/juneau-doc/src/main/javadoc/doc-files/jec.Installing.3.png deleted file mode 100644 index 0e572bb97..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jec.Installing.3.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.1.png b/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.1.png deleted file mode 100644 index 89ad0cb41..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.2.png b/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.2.png deleted file mode 100644 index 3f7ff40e4..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.3.png b/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.3.png deleted file mode 100644 index 1c6aebd17..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.AtomFeedResource.3.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.ConfigResource.1.png b/juneau-doc/src/main/javadoc/doc-files/jer.ConfigResource.1.png deleted file mode 100644 index 38fb7346e..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.ConfigResource.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.ConfigResource.2.png b/juneau-doc/src/main/javadoc/doc-files/jer.ConfigResource.2.png deleted file mode 100644 index 0a33d35a5..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.ConfigResource.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.HelloWorldResource.1.png b/juneau-doc/src/main/javadoc/doc-files/jer.HelloWorldResource.1.png deleted file mode 100644 index a826c988e..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.HelloWorldResource.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.HelloWorldResource.2.png b/juneau-doc/src/main/javadoc/doc-files/jer.HelloWorldResource.2.png deleted file mode 100644 index 97726358a..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.HelloWorldResource.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.JsonSchemaResource.1.png b/juneau-doc/src/main/javadoc/doc-files/jer.JsonSchemaResource.1.png deleted file mode 100644 index e2755341b..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.JsonSchemaResource.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.JsonSchemaResource.2.png b/juneau-doc/src/main/javadoc/doc-files/jer.JsonSchemaResource.2.png deleted file mode 100644 index 68c65d37d..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.JsonSchemaResource.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.LogsResource.1.png b/juneau-doc/src/main/javadoc/doc-files/jer.LogsResource.1.png deleted file mode 100644 index f6cea03ad..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.LogsResource.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jer.RootResources.1.png b/juneau-doc/src/main/javadoc/doc-files/jer.RootResources.1.png deleted file mode 100644 index f5cdf9b89..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jer.RootResources.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.1.png b/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.1.png deleted file mode 100644 index 3b9b4e177..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.2.png b/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.2.png deleted file mode 100644 index 38ffe393c..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.3.png b/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.3.png deleted file mode 100644 index d01d24ff3..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jerj.Installing.3.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jerj.Running.1.png b/juneau-doc/src/main/javadoc/doc-files/jerj.Running.1.png deleted file mode 100644 index 3eff3a5b7..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jerj.Running.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.1.png b/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.1.png deleted file mode 100644 index d44ee0610..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.2.png b/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.2.png deleted file mode 100644 index 24d3c2605..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.3.png b/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.3.png deleted file mode 100644 index 47abc87ff..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.3.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.4.png b/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.4.png deleted file mode 100644 index 7aa189ee2..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.4.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.5.png b/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.5.png deleted file mode 100644 index d32ce52eb..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.5.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.6.png b/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.6.png deleted file mode 100644 index 7bbce5d54..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Heroku.6.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Installing.1.png b/juneau-doc/src/main/javadoc/doc-files/jers.Installing.1.png deleted file mode 100644 index 3b9b4e177..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Installing.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Installing.2.png b/juneau-doc/src/main/javadoc/doc-files/jers.Installing.2.png deleted file mode 100644 index 045030b21..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Installing.2.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Installing.3.png b/juneau-doc/src/main/javadoc/doc-files/jers.Installing.3.png deleted file mode 100644 index 0563e0b4d..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Installing.3.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jers.Running.1.png b/juneau-doc/src/main/javadoc/doc-files/jers.Running.1.png deleted file mode 100644 index 3eff3a5b7..000000000 Binary files a/juneau-doc/src/main/javadoc/doc-files/jers.Running.1.png and /dev/null differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.HelloWorldResource.png b/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.HelloWorldResource.png new file mode 100644 index 000000000..5a42a7409 Binary files /dev/null and b/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.HelloWorldResource.png differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.RootResources.json.png b/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.RootResources.json.png new file mode 100644 index 000000000..c350b6dc5 Binary files /dev/null and b/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.RootResources.json.png differ diff --git a/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.RootResources.png b/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.RootResources.png new file mode 100644 index 000000000..00f43312f Binary files /dev/null and b/juneau-doc/src/main/javadoc/doc-files/jrs.Overview.RootResources.png differ diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html index 9132bfc7e..c0d5df43a 100644 --- a/juneau-doc/src/main/javadoc/overview.html +++ b/juneau-doc/src/main/javadoc/overview.html @@ -352,7 +352,7 @@ </ol> <li><p class='toc2'><a class='doclink' href='#juneau-rest-server'>juneau-rest-server</a><span class='update'>updated: <b>9.0.0</b></span></p> <ol> - <li><p><a class='doclink' href='#juneau-rest-server.jrs.HelloWorldExample'>Hello World Example</a><span class='update'>updated: <b>9.0.0</b></span></p> + <li><p><a class='doclink' href='#juneau-rest-server.jrs.Overview'>Overview</a><span class='update'>created: <b>9.0.0</b></span></p> <li><p><a class='doclink' href='#juneau-rest-server.jrs.AnnotatedClasses'>@Rest-Annotated Classes</a><span class='update'>updated: 8.1.2,<b>9.0.0</b></span></p> <ol> <li><p><a class='doclink' href='#juneau-rest-server.jrs.AnnotatedClasses.jrs.PredefinedClasses'>Predefined Classes</a><span class='update'>updated: <b>9.0.0</b></span></p> @@ -508,31 +508,8 @@ <li><p><a class='doclink' href='#my-springboot-microservice.msm.Building'>Building and Running from Command-Line</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> </ol> <li><p class='toc2'><a class='doclink' href='#juneau-examples-core'>juneau-examples-core</a><span class='update'>updated: 8.0.0</span></p> - <ol> - <li><p><a class='doclink' href='#juneau-examples-core.jec.Installing'>Installing in Eclipse</a><span class='update'>created: 8.0.0</span></p> - <li><p><a class='doclink' href='#juneau-examples-core.jec.Examples'>Examples</a><span class='update'>created: 8.0.0</span></p> - </ol> <li><p class='toc2'><a class='doclink' href='#juneau-examples-rest'>juneau-examples-rest</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p> - <ol> - <li><p><a class='doclink' href='#juneau-examples-rest.jer.RootResources'>RootResources</a><span class='update'>updated: 8.0.0,8.1.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest.jer.HelloWorldResource'>HelloWorldResource</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest.jer.DtoExamples'>DtoExamples</a><span class='update'>created: 8.0.0, updated: 8.1.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest.jer.ConfigResource'>ConfigResource</a><span class='update'><b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest.jer.LogsResource'>LogsResource</a><span class='update'><b><red>todo</red></b></span></p> - </ol> <li><p class='toc2'><a class='doclink' href='#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a><span class='update'>created: 8.0.0, deprecated: 8.1.2</span></p> - <ol> - <li><p><a class='doclink' href='#juneau-examples-rest-jetty.jerj.Installing'>Installing in Eclipse</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest-jetty.jerj.Running'>Running in Eclipse</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest-jetty.jerj.Building'>Building and Running from Command-Line</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></p> - </ol> - <li><p class='toc2'><a class='doclink' href='#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <ol> - <li><p><a class='doclink' href='#juneau-examples-rest-springboot.jers.Installing'>Installing in Eclipse</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest-springboot.jers.Running'>Running in Eclipse</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest-springboot.jers.Building'>Building and Running from Command-Line</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='#juneau-examples-rest-springboot.jers.DeployingToHeroku'>Deploying to Heroku</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - </ol> <li><p class='toc2'><a class='doclink' href='#juneau-petstore'>juneau-pestore</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p> <ol> <li><p><a class='doclink' href='#juneau-petstore.jp.Installing'>Installing in Eclipse</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p> @@ -16037,8 +16014,8 @@ <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.jrs.HelloWorldExample' id='juneau-rest-server.jrs.HelloWorldExample'>6.1 - Hello World Example</a><span class='update'>updated: <b>9.0.0</b></span></h3> -<div class='topic'><!-- START: 6.1 - juneau-rest-server.jrs.HelloWorldExample --> +<h3 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.jrs.Overview' id='juneau-rest-server.jrs.Overview'>6.1 - Overview</a><span class='update'>created: <b>9.0.0</b></span></h3> +<div class='topic'><!-- START: 6.1 - juneau-rest-server.jrs.Overview --> <div class='topic'> <p> A REST resource is simply a Java class annotated with {@link org.apache.juneau.rest.annotation.Rest @Rest}. @@ -16046,41 +16023,107 @@ extension of {@link javax.servlet.http.HttpServlet} which allows it to be deployed as a servlet. </p> <p> - In this example, we define a resource called <l>HelloWorldResource</l>. - This example is located in the <l>juneau-examples-rest</l> project. - It's assumed the reader is familiar with defining servlets in web applications. + Juneau has two sample applications for demonstrating how to use the REST API, one using Jetty and one using + Spring Boot: </p> + <ul class='javatree'> + <li class='jp'>{@link org.apache.juneau.examples.rest.jetty} + <li class='jp'>{@link org.apache.juneau.examples.rest.springboot} + </ul> <p> - Like any servlet, we could define our resource in the <l>web.xml</l> file of the web application like so... + The {@link org.apache.juneau.examples.rest.springboot} application is described in the section {@doc jrss.Overview}. </p> - <p class='bxml'> - <xt><?xml</xt> <xa>version</xa>=<xs>"1.0"</xs> <xa>encoding</xa>=<xs>"UTF-8"</xs><xt>?></xt> - <xt><web-app</xt> <xa>version</xa>=<xs>"2.3"</xs><xt>></xt> - <xt><servlet></xt> - <xt><servlet-name></xt>HelloWorldResource<xt></servlet-name></xt> - <xt><servlet-class></xt>com.foo.sample.HelloWorldResource<xt></servlet-class></xt> - <xt></servlet></xt> - <xt><servlet-mapping></xt> - <xt><servlet-name></xt>HelloWorldResource<xt></servlet-name></xt> - <xt><url-pattern></xt>/*<xt></url-pattern></xt> - <xt></servlet-mapping></xt> - <xt></web-app></xt> + <p> + The Jetty application consists of the following application class that registers our top-level servlet: + </p> + <p class='bjava'> + <jk>public class</jk> App { + + <jk>public static void</jk> main(String[] <jv>args</jv>) <jk>throws</jk> Exception { + JettyMicroservice + .<jsm>create</jsm>() + .args(<jv>args</jv>) + .servlet(RootResources.<jk>class</jk>) + .build() + .start() + .startConsole() + .join(); + } + } </p> <p> - Our servlet code is shown below: + The root resources class is an example of a router page that is used to attach children to: </p> <p class='bjava'> - <jc>// Sample REST resource that prints out a simple "Hello world!" message.</jc> <ja>@Rest</ja>( - path=<js>"/helloWorld"</js>, - title=<js>"Hello World"</js>, - description=<js>"An example of the simplest-possible resource"</js> + title=<js>"Root resources"</js>, + description=<js>"Example of a router resource page."</js>, + children={ + HelloWorldResource.<jk>class</jk>, + DtoExamples.<jk>class</jk>, + UtilityBeansResource.<jk>class</jk>, + HtmlBeansResource.<jk>class</jk>, + ConfigResource.<jk>class</jk>, + ShutdownResource.<jk>class</jk> + } ) - <ja>@HtmlDoc</ja>( + <ja>@HtmlDocConfig</ja>( + widgets={ + ContentTypeMenuItem.<jk>class</jk> + }, navlinks={ - <js>"up: request:/.."</js>, - <js>"options: servlet:/?method=OPTIONS"</js> + <js>"api: servlet:/api"</js>, + <js>"stats: servlet:/stats"</js>, + <js>"$W{ContentTypeMenuItem}"</js>, + <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java"</js> + }, + aside={ + <js>"<div class='text'>"</js>, + <js>" <p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>"</js>, + <js>" <p>Resources can be nested arbitrarily deep through router pages.</p>"</js>, + <js>" <p>Note the <span class='link'>API</span> link provided that lets you see the generated swagger doc for this page.</p>"</js>, + <js>" <p>Also note the <span class='link'>STATS</span> link to view runtime statistics on this page.</p>"</js>, + <js>" <p>Also note the <span class='link'>SOURCE</span> link to view the source code for the page.</p>"</js>, + <js>" <p>All content on pages in the UI are serialized POJOs. In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.</p>"</js>, + <js>" <p>Other features (such as this aside) are added through annotations.</p>"</js>, + <js>"</div>"</js> }, + asideFloat=<js>"RIGHT"</js> + ) + <ja>@SerializerConfig</ja>( + <jc>// For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple + // String comparisons. + // You can apply any of the Serializer/Parser/BeanContext settings this way.</jc> + quoteChar=<js>"'"</js> + ) + <jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletGroup <jk>implements</jk> BasicUniversalJenaConfig { + <jc>// IMPORTANT! If you don't need RDF support, change the parent interface to BasicUniversalConfig. + // It allows you to remove the Jena prerequisite.</jc> + + <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; + } + </p> + <p> + This is what it looks like in a browser: + </p> + + <h5 class='figure'>HTML representation</h5> + <img class='bordered w800' src='doc-files/jrs.Overview.RootResources.png'> + + <h5 class='figure'>JSON representation</h5> + <img class='bordered w800' src='doc-files/jrs.Overview.RootResources.json.png'> + + <p> + The {@link org.apache.juneau.examples.rest.HelloWorldResource} class is our basic example of a child REST resource: + </p> + + <p class='bjava'> + <ja>@Rest</ja>( + title=<js>"Hello World"</js>, + description=<js>"An example of the simplest-possible resource"</js>, + path=<js>"/helloWorld"</js> + ) + <ja>@HtmlDocConfig</ja>( aside={ <js>"<div style='max-width:400px' class='text'>"</js>, <js>" <p>This page shows a resource that simply response with a 'Hello world!' message</p>"</js>, @@ -16088,7 +16131,7 @@ <js>"</div>"</js> } ) - <jk>public class</jk> HelloWorldResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig { + <jk>public class</jk> HelloWorldResource extends BasicRestObject implements BasicUniversalConfig { <ja>@RestGet</ja>(path=<js>"/*"</js>, summary=<js>"Responds with \"Hello world!\""</js>) <jk>public</jk> String sayHello() { @@ -16096,13 +16139,14 @@ } } </p> + <p> This is what it looks like in a browser: </p> - <p class='bcode'> - http://localhost:10000/helloWorld - </p> - <img class='bordered w800' src='doc-files/jrs.HelloWorldExample.1.png'> + + <h5 class='figure'>HTML representation</h5> + <img class='bordered w800' src='doc-files/jrs.Overview.HelloWorldResource.png'> + <p> It doesn't much simpler than that. In this case, we're simply returning a string that will be converted to any of the supported languages (e.g. @@ -16110,7 +16154,7 @@ However, we could have returned any POJO consisting of beans, maps, collections, etc... </p> </div> -</div><!-- END: 6.1 - juneau-rest-server.jrs.HelloWorldExample --> +</div><!-- END: 6.1 - juneau-rest-server.jrs.Overview --> <!-- ==================================================================================================== --> @@ -27817,87 +27861,6 @@ The <c>juneau-examples-core</c> project contains various code examples for using the core APIs. </p> </div> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-core.jec.Installing' id='juneau-examples-core.jec.Installing'>16.1 - Installing in Eclipse</a><span class='update'>created: 8.0.0</span></h3> -<div class='topic'><!-- START: 16.1 - juneau-examples-core.jec.Installing --> -<div class='topic'> - <p> - Follow these instructions to import the Juneau project into Eclipse. - </p> - <ol class='spaced-list'> - <li> - Download the <c>juneau-examples-core-{@property juneauVersion}.zip</c> file from the downloads page - (located in the binaries) and import it into your workspace as an existing project: - <br><br> - <img class='bordered' src='doc-files/jec.Installing.1.png' style='width:524px'> - <li> - Select the archive file and import the project: - <br><br> - <img class='bordered' src='doc-files/jec.Installing.2.png' style='width:549px'> - <li> - In your workspace, you should now see the following project: - <br><br> - <img class='bordered' src='doc-files/jec.Installing.3.png' style='width:400px'> - </ol> -</div> -</div><!-- END: 16.1 - juneau-examples-core.jec.Installing --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-core.jec.Examples' id='juneau-examples-core.jec.Examples'>16.2 - Examples</a><span class='update'>created: 8.0.0</span></h3> -<div class='topic'><!-- START: 16.2 - juneau-examples-core.jec.Examples --> -<div class='topic'> - <p> - The following shows the core examples provided: - </p> - <ul class='javatree'> - <li class='jp'>{@link org.apache.juneau.examples.core.json} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.json.JsonSimpleExample} - JsonSerializer and JsonParser usage on serialize and deserialize simple Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.json.JsonComplexExample} - JsonSerializer and JsonParser usage on serialize and deserialize complex Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.json.JsonConfigurationExample} - Json Serializers configured using properties defined in JsonSerializer class. - </ul> - </li> - <li class='jp'>{@link org.apache.juneau.examples.core.xml} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.xml.XmlSimpleExample} - XmlSerializer and XmlParser usage on serialize and deserialize simple Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.xml.XmlComplexExample} - XmlSerializer and XmlParser usage on serialize and deserialize complex Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.xml.XmlConfigurationExample} - XmlSerializers configured using properties defined in XmlSerializer class. - </ul> - </li> - <li class='jp'>{@link org.apache.juneau.examples.core.dto} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.dto.DtoExample} - Usage of core dto module. - </ul> - </li> - <li class='jp'>{@link org.apache.juneau.examples.core.rdf} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.rdf.RdfExample} - RdfXmlSerializer usage on serialize simple Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.rdf.RdfComplexExample} - RdfXmlSerializer usage on serialize complex Pojo bean. - </ul> - </li> - <li class='jp'>{@link org.apache.juneau.examples.core.html} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.html.HtmlSimpleExample} - HtmlSerializer usage on serialize and deserialize simple Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.html.HtmlComplexExample} - HtmlSerializer usage on serialize and deserialize complex Pojo bean. - </ul> - </li> - <li class='jp'>{@link org.apache.juneau.examples.core.uon} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.uon.UonExample} - UonSerializer usage on serialize and deserialize simple Pojo bean. - <li class='jc'>{@link org.apache.juneau.examples.core.uon.UonComplexExample} - UonSerializer usage on serialize and deserialize complex Pojo bean. - </ul> - </li> - <li class='jp'>{@link org.apache.juneau.examples.core.svl} - <ul> - <li class='jc'>{@link org.apache.juneau.examples.core.svl.SvlExample} - Usage of Svl module in juneau. - </ul> - </li> - </ul> -</div> -</div><!-- END: 16.2 - juneau-examples-core.jec.Examples --> </div><!-- END: 16 - juneau-examples-core --> <!-- ==================================================================================================== --> @@ -27938,1410 +27901,34 @@ <li>{@doc juneau-examples-rest-springboot} </ul> </div> +</div><!-- END: 17 - juneau-examples-rest --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest.jer.RootResources' id='juneau-examples-rest.jer.RootResources'>17.1 - RootResources</a><span class='update'>updated: 8.0.0,8.1.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 17.1 - juneau-examples-rest.jer.RootResources --> +<h2 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty' id='juneau-examples-rest-jetty'>18 - juneau-examples-rest-jetty</a><span class='update'>created: 8.0.0, deprecated: 8.1.2</span></h2> +<div class='topic'><!-- START: 18 - juneau-examples-rest-jetty --> <div class='topic'> - <p> - The <l>RootResources</l> class is the main page for the REST microservice. - It serves as the jumping-off point for the other resources. - </p> - <p> - The class hierarchy for this class is: - </p> - <ul class='javatree'> - <li class='jac'> - {@link org.apache.juneau.rest.servlet.RestServlet} - Contains all the REST servlet logic. - <ul> - <li class='jac'> - {@link org.apache.juneau.rest.servlet.BasicRestServlet} - Defines default serializers and parsers, and OPTIONs page logic. - <ul> - <li class='jac'> - {@link org.apache.juneau.rest.servlet.BasicRestServletGroup} - Specialized subclass for grouping other resources. - <ul> - <li class='jc'> - <c>RootResources</c> - </ul> - </li> - </ul> - </li> - </ul> - </li> - </ul> - <p> - Pointing a browser to the resource shows the following: - </p> - <p class='bcode'> - http://localhost:10000 - </p> - <img class='bordered w800' src='doc-files/jer.RootResources.1.png'> - <p> - The <l>RootResources</l> class can also be defined as a servlet in a <l>web.xml</l> file: - </p> - <p class='bxml'> - <xt><web-app</xt> <xa>version</xa>=<xs>'3.0'</xs><xt>></xt> - <xt><servlet></xt> - <xt><servlet-name></xt>RootResources<xt></servlet-name></xt> - <xt><servlet-class></xt>org.apache.juneau.examples.rest.RootResources<xt></servlet-class></xt> - <xt></servlet></xt> - <xt><servlet-mapping></xt> - <xt><servlet-name></xt>RootResources<xt></servlet-name></xt> - <xt><url-pattern></xt>/*<xt></url-pattern></xt> - <xt></servlet-mapping></xt> - <xt></web-app></xt> - </p> - <p> - The <l>RootResources</l> class consists entirely of annotations: - </p> + <div class='warn'> + The Juneau Microservice libraries are likely to be removed in Juneau 9.0 due to the popularity of the Spring Boot + framework for creating microservices and the ability for Juneau to be used within Spring Boot. + </div> - <h5 class='figure'>RootResources.java</h5> - <p class='bjava'> - <jd>/** - * Sample REST resource showing how to implement a "router" resource page. - */</jd> - <ja>@Rest</ja>( - path=<js>"/"</js>, - title=<js>"Root resources"</js>, - description=<js>"Example of a router resource page."</js>, - htmldoc=<ja>@HtmlDoc</ja>( - widgets={ - ContentTypeMenuItem.<jk>class</jk>, - StyleMenuItem.<jk>class</jk> - }, - navlinks={ - <js>"options: ?method=OPTIONS"</js>, - <js>"$W{ContentTypeMenuItem}"</js>, - <js>"$W{StyleMenuItem}"</js>, - <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js> - }, - aside={ - <js>"<div style='max-width:400px' class='text'>"</js>, - <js>" <p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>"</js>, - <js>" <p>Resources can be nested arbitrarily deep through router pages.</p>"</js>, - <js>" <p>Note the <span class='link'>options</span> link provided that lets you see the generated swagger doc for this page.</p>"</js>, - <js><js>" <p>Also note the <span class='link'>sources</span> link on these pages to view the source code for the page.</p>"</js>, - " <p>All content on pages in the UI are serialized POJOs. In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.</p>"</js>, - <js>" <p>Other features (such as this aside) are added through annotations.</p>"</js>, - <js>"</div>"</js> - } - ), - children={ - HelloWorldResource.<jk>class</jk>, - PetStoreResource.<jk>class</jk>, - DtoExamples.<jk>class</jk>, - ConfigResource.<jk>class</jk>, - LogsResource.<jk>class</jk>, - DebugResource.<jk>class</jk>, - ShutdownResource.<jk>class</jk> - } - ) - <ja>@SerializerConfig</ja>( - <jc>// For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple - // String comparisons.</jc> - quoteChar=<js>"'"</js> - ) - <jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletGroup <jk>implements</jk> BasicUniversalConfig { - <jc>// No code!</jc> - } - </p> - <p> - The <l>children</l> annotation defines the child resources of this router resource. - These are resources whose paths are direct descendants to the parent resource. - </p> - <p> - Child resources must be annotated with the {@link org.apache.juneau.rest.annotation.Rest#path() @Rest(path)} annotation to - identify the subpath of the child. - Children CAN extend from {@link org.apache.juneau.rest.servlet.BasicRestServlet} but it is not a requirement. - </p> - <p> - Note that these router pages can be arbitrarily nested deep. - You can define many levels of router pages for arbitrarily hierarchical REST interfaces. - </p> - <p> - Let's step back and describe what's going on here: - </p> - <p> - During servlet initialization of the <l>RootResources</l> object, the toolkit looks for the - <l>@Rest(children)</l> annotation. - If it finds it, it instantiates instances of each class and recursively performs servlet initialization - on them. - It then associates the child resource with the parent by the name specified by the - <l>@Rest(path)</l> annotation on the child class. - </p> - <p> - When a request for the child URL (<l>/helloWorld</l>) is received, the <l>RootResources</l> servlet - gets the request and sees that the URL remainder matches one of its child resources. - It then forwards the request to the child resource for processing. - The request passed to the child resource is the same as if the child resource had been deployed - independently (e.g. path-info, resource-URI, and so forth). - </p> -</div> -</div><!-- END: 17.1 - juneau-examples-rest.jer.RootResources --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest.jer.HelloWorldResource' id='juneau-examples-rest.jer.HelloWorldResource'>17.2 - HelloWorldResource</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 17.2 - juneau-examples-rest.jer.HelloWorldResource --> -<div class='topic'> - <p> - The <l>HelloWorldResource</l> class is a simple resource that prints a "Hello world!" message. - </p> + <h5 class='figure'>Starter Project Zip</h5> + <p class='bcode w500'> + juneau-examples-rest-jetty-{@property juneauVersion}.zip + </p> - <h5 class='figure'>HelloWorldResource.java</h5> - <p class='bjava'> - <jd>/** - * Sample REST resource that prints out a simple "Hello world!" message. - */</jd> - <ja>@Rest</ja>( - title=<js>"Hello World"</js>, - description=<js>"An example of the simplest-possible resource"</js>, - path=<js>"/helloWorld"</js>, - htmldoc=<ja>@HtmlDoc</ja>( - aside={ - <js>"<div style='max-width:400px' class='text'>"</js>, - <js>" <p>This page shows a resource that simply response with a 'Hello world!' message</p>"</js>, - <js>" <p>The POJO serialized is a simple String.</p>"</js>, - <js>"</div>"</js> - } - ) - ) - <jk>public class</jk> HelloWorldResource <jk>implements</jk> BasicRestConfig { - - <jd>/** GET request handler */</jd> - <ja>@RestGet</ja>(path=<js>"/*"</js>, summary=<js>"Responds with \"Hello world!\""</js>) - <jk>public</jk> String sayHello() { - <jk>return</jk> <js>"Hello world!"</js>; - } - } - </p> - <p> - Notice that in this case we're not extending from {@link org.apache.juneau.rest.servlet.RestServlet}. - We are however implementing {@del org.apache.juneau.rest.BasicRestConfig} which is a no-op - interface that defines a default <ja>@Rest</ja> annotation with all the serializers, parsers, - and configuration defined on the {@link org.apache.juneau.rest.servlet.BasicRestServlet} class. - </p> - <p> - The only difference between implementing <l>BasicRestConfig</l> and extending from <l>BasicRestServlet</l> - is that the latter provides the following additional features: - </p> - <ul class='spaced-list'> - <li>A default OPTIONS method. - <li>It can be deployed like any servlet. - </ul> <p> - All other examples in this project extend from <l>BasicRestServlet</l> so that they provide automatic OPTIONS page support. + The <c>juneau-examples-rest-jetty</c> project includes everything you need create a Samples REST + microservice in an Eclipse workspace and build it as an executable jar. </p> - <p> - Pointing a browser to the resource shows the following: - </p> - <p class='bcode'> - http://localhost:10000/helloWorld - </p> - <img class='bordered w800' src='doc-files/jer.HelloWorldResource.1.png'> - <p> - Using the special <l>&Accept=text/json</l> and <l>&plainText=true</l> parameters - allows us to see this page rendered as JSON: - </p> - <p class='bcode'> - http://localhost:10000/helloWorld?Accept=text/json&plainText=true - </p> - <img class='bordered w800' src='doc-files/jer.HelloWorldResource.2.png'> -</div> -</div><!-- END: 17.2 - juneau-examples-rest.jer.HelloWorldResource --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest.jer.DtoExamples' id='juneau-examples-rest.jer.DtoExamples'>17.3 - DtoExamples</a><span class='update'>created: 8.0.0, updated: 8.1.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 17.3 - juneau-examples-rest.jer.DtoExamples --> -<div class='topic'> - <p> - The <l>DtoExamples</l> resource is a resource group for demonstrating various DTO examples. - </p> - <p> - The <l>AtomFeedResource</l> class shows examples of the following: - </p> - <ul class='spaced-list'> - <li> - Using the {@doc org.apache.juneau.dto.atom#TOC ATOM Feed DTO} API. - </ul> - <p> - Pointing a browser to the resource shows the following: - </p> - <p class='bcode'> - http://localhost:10000/atom - </p> - <img class='bordered w800' src='doc-files/jer.AtomFeedResource.1.png'> - <p> - True ATOM feeds require using an <l>Accept:text/xml</l> header: - </p> - <p class='bcode'> - http://localhost:10000/atom?Accept=text/xml&plainText=true - </p> - <img class='bordered w800' src='doc-files/jer.AtomFeedResource.2.png'> - <p> - Other languages, such as JSON are also supported: - </p> - <p class='bcode'> - http://localhost:10000/atom?Accept=text/json&plainText=true - </p> - <img class='bordered w800' src='doc-files/jer.AtomFeedResource.3.png'> - - <h5 class='figure'>AtomFeedResource.java</h5> - <p class='bjava'> - <jd>/** - * Sample resource that shows how to generate ATOM feeds. - */</jd> - <ja>@Rest</ja>( - path=<js>"/atom"</js>, - title=<js>"Sample ATOM feed resource"</js>, - description=<js>"Sample resource that shows how to render ATOM feeds"</js>, - htmldoc=<ja>@HtmlDoc</ja>( - widgets={ - ContentTypeMenuItem.<jk>class</jk>, - StyleMenuItem.<jk>class</jk> - }, - navlinks={ - <js>"up: request:/.."</js>, - <js>"options: servlet:/?method=OPTIONS"</js>, - <js>"$W{ContentTypeMenuItem}"</js>, - <js>"$W{StyleMenuItem}"</js>, - <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js> - } - ), - encoders=GzipEncoder.<jk>class</jk> - ) - <ja>@SerializerConfig</ja>(quoteChar=<js>"'"</js>) - <ja>@RdfConfig</ja>(rdfxml_tab=<js>"5"</js>, addRootProperty=<js>"true"</js>) - <jk>public class</jk> AtomFeedResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig { - - <jk>private</jk> Feed <jf>feed</jf>; <jc>// The root resource object</jc> - - <ja>@Override</ja> <jc>/* Servlet */</jc> - <jk>public void</jk> init() { - <jk>try</jk> { - <jf>feed</jf> = - <jsm>feed</jsm>(<js>"tag:juneau.sample.com,2013:1"</js>, <js>"Juneau ATOM specification"</js>, <js>"2013-05-08T12:29:29Z"</js>) - .subtitle(<jsm>text</jsm>(<js>"html"</js>).text(<js>"A <em>lot</em> of effort went into making this effortless"</js>)) - .links( - <jsm>link</jsm>(<js>"alternate"</js>, <js>"text/html"</js>, <js>"http://www.sample.com/"</js>).hreflang(<js>"en"</js>), - <jsm>link</jsm>(<js>"self"</js>, <js>"application/atom+xml"</js>, <js>"http://www.sample.com/feed.atom"</js>) - ) - .generator( - <jsm>generator</jsm>(<js>"Juneau"</js>).uri(<js>"http://juneau.apache.org/"</js>).version(<js>"1.0"</js>) - ) - .entries( - <jsm>entry</jsm>(<js>"tag:juneau.sample.com,2013:1.2345"</js>, <js>"Juneau ATOM specification snapshot"</js>, <js>"2013-05-08T12:29:29Z"</js>) - .links( - <jsm>link</jsm>(<js>"alternate"</js>, <js>"text/html"</js>, <js>"http://www.sample.com/2012/05/08/juneau.atom"</js>), - <jsm>link</jsm>(<js>"enclosure"</js>, <js>"audio/mpeg"</js>, <js>"http://www.sample.com/audio/juneau_podcast.mp3"</js>).length(1337) - ) - .published(<js>"2013-05-08T12:29:29Z"</js>) - .authors( - <jsm>person</jsm>(<js>"James Bognar"</js>).uri(<jk>new</jk> URI(<js>"http://www.sample.com/"</js>)).email(<js>"[email protected]"</js>) - ) - .contributors( - <jsm>person</jsm>(<js>"Barry M. Caceres"</js>) - ) - .content( - <jsm>content</jsm>(<js>"xhtml"</js>) - .lang(<js>"en"</js>) - .base(<js>"http://www.apache.org/"</js>) - .text(<js>"<div><p>[Update: Juneau supports ATOM.]</p></div>"</js>) - ) - ); - } <jk>catch</jk> (Exception e) { - <jk>throw new</jk> RuntimeException(e); - } - } - - <jd>/** - * GET request handler - */</jd> - <ja>@RestGet</ja>(<js>"/"</js>) - <jk>public</jk> Feed getFeed() <jk>throws</jk> Exception { - <jk>return</jk> <jf>feed</jf>; - } - - <jd>/** - * PUT request handler. - * Replaces the feed with the specified content, and then mirrors it as the response. - */</jd> - <ja>@RestPut</ja>(<js>"/"</js>) - <jk>public</jk> Feed setFeed(<ja>@Body</ja> Feed <jv>feed</jv>) <jk>throws</jk> Exception { - <jk>this</jk>.<jf>feed</jf> = <jv>feed</jv>; - <jk>return</jk> <jv>feed</jv>; - } - } - </p> - <p> - The <l>JsonSchemaResource</l> class shows examples of the following: - </p> - <ul class='spaced-list'> - <li> - Using the {@link org.apache.juneau.dto.jsonschema JSON Schema DTO} API. - </ul> - <p> - The resource consists of a pre-initialized {@link org.apache.juneau.dto.jsonschema.JsonSchema} object. - Pointing a browser to the resource shows the following: - </p> - <p class='bcode'> - http://localhost:10000/jsonSchema - </p> - <img class='bordered w800' src='doc-files/jer.JsonSchemaResource.1.png'> - <p> - For true JSON-Schema, you need to specify the header <l>Accept: text/json</l>: - </p> - <p class='bcode'> - http://localhost:10000/jsonSchema?Accept=text/json&plainText=true - </p> - <img class='bordered w800' src='doc-files/jer.JsonSchemaResource.2.png'> - - <h5 class='figure'>JsonSchemaResource.java</h5> - <p class='bjava'> - <jd>/** - * Sample resource that shows how to serialize JSON-Schema documents. - */</jd> - <ja>@Rest</ja>( - path=<js>"/jsonSchema"</js>, - messages=<js>"nls/JsonSchemaResource"</js>, - title=<js>"Sample JSON-Schema document"</js>, - description=<js>"Sample resource that shows how to generate JSON-Schema documents"</js>, - htmldoc=<ja>@HtmlDoc</ja>( - widgets={ - ContentTypeMenuItem.<jk>class</jk>, - StyleMenuItem.<jk>class</jk> - }, - navlinks={ - <js>"up: request:/.."</js>, - <js>"options: servlet:/?method=OPTIONS"</js>, - <js>"$W{ContentTypeMenuItem}"</js>, - <js>"$W{StyleMenuItem}"</js>, - <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js> - }, - aside={ - <js>"<div style='min-width:200px' class='text'>"</js>, - <js>" <p>Shows how to produce JSON-Schema documents in a variety of languages using the JSON-Schema DTOs.</p>"</js>, - <js>"</div>"</js> - } - ) - ) - <jk>public class</jk> JsonSchemaResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig { - <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; - - <jk>private</jk> JsonSchema schema; <jc>// The schema document</jc> - - <ja>@Override</ja> /* Servlet */ - <jk>public void</jk> init() { - - <jk>try</jk> { - <jf>schema</jf> = <jk>new</jk> JsonSchema() - .setId(<js>"http://example.com/sample-schema#"</js>) - .setSchemaVersionUri(<js>"http://json-schema.org/draft-04/schema#"</js>) - .setTitle(<js>"Example Schema"</js>) - .setType(JsonType.<jsf>OBJECT</jsf>) - .addProperties( - <jk>new</jk> JsonSchemaProperty(<js>"firstName"</js>, JsonType.<jsf>STRING</jsf>), - <jk>new</jk> JsonSchemaProperty(<js>"lastName"</js>, JsonType.<jsf>STRING</jsf>), - <jk>new</jk> JsonSchemaProperty(<js>"age"</js>, JsonType.<jsf>INTEGER</jsf>) - .setDescription(<js>"Age in years"</js>) - .setMinimum(0) - ) - .addRequired(<js>"firstName"</js>, <js>"lastName"</js>); - } <jk>catch</jk> (Exception e) { - <jk>throw new</jk> RuntimeException(e); - } - } - - <jd>/** GET request handler */</jd> - <ja>@RestGet</ja>(<js>"/"</js>) - <jk>public</jk> JsonSchema getSchema() <jk>throws</jk> Exception { - <jk>return</jk> <jf>schema</jf>; - } - - <jd>/** - * PUT request handler. - * Replaces the schema document with the specified content, and then mirrors it as the response. - */</jd> - <ja>@RestPut</ja>(<js>"/"</js>) - <jk>public</jk> JsonSchema setSchema(<ja>@Body</ja> JsonSchema schema) <jk>throws</jk> Exception { - <jk>this</jk>.<jf>schema</jf> = schema; - <jk>return</jk> schema; - } - } - </p> -</div> -</div><!-- END: 17.3 - juneau-examples-rest.jer.DtoExamples --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest.jer.ConfigResource' id='juneau-examples-rest.jer.ConfigResource'>17.4 - ConfigResource</a><span class='update'><b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 17.4 - juneau-examples-rest.jer.ConfigResource --> -<div class='topic'> - <p> - The {@link org.apache.juneau.microservice.resources.ConfigResource} class is a predefined reusable resource. - It provides a REST interface for reading and altering the microservice config file. - </p> - <p> - Pointing a browser to the resource shows the following: - </p> - <p class='bcode'> - http://localhost:10000/config - </p> - <img class='bordered w800' src='doc-files/jer.ConfigResource.1.png'> - <p> - An edit page is provided for altering the raw config file: - </p> - <p class='bcode'> - http://localhost:10000/config/edit - </p> - <img class='bordered w800' src='doc-files/jer.ConfigResource.2.png'> - <p> - The {@link org.apache.juneau.config.Config} class is a serializable POJO, which makes the resource - relatively straightforward to implement. - </p> - - <h5 class='figure'>ConfigResource.java</h5> - <p class='bjava'> - <jd>/** - * Shows contents of the microservice configuration file. - */</jd> - <ja>@Rest</ja>( - path=<js>"/config"</js>, - title=<js>"Configuration"</js>, - description=<js>"Contents of configuration file."</js>, - htmldoc=<ja>@HtmlDoc</ja>( - navlinks={ - <js>"up: request:/.."</js>, - <js>"options: servlet:/?method=OPTIONS"</js>, - <js>"edit: servlet:/edit"</js> - } - ) - ) - <jk>public class</jk> ConfigResource <jk>extends</jk> BasicRestServlet <jk>implements</jk> BasicUniversalConfig { - - <ja>@RestGet</ja>(path=<js>"/"</js>, description=<js>"Show contents of config file."</js>) - <jk>public</jk> JsonMap getConfig() <jk>throws</jk> Exception { - <jk>return</jk> getServletConfig().getConfig().asMap(); - } - - <ja>@RestGet</ja>(path=<js>"/edit"</js>, description=<js>"Edit config file."</js>) - <jk>public</jk> Form getConfigEditForm(RestRequest <jv>req</jv>) <jk>throws</jk> Exception { - <jk>return</jk> <jsm>form</jsm>().id(<js>"form"</js>).action(<js>"servlet:/"</js>).method(<js>"POST"</js>).enctype(<js>"application/x-www-form-urlencoded"</js>).children( - <jsm>div</jsm>()._class(<js>"data"</js>).children( - <jsm>table</jsm>( - <jsm>tr</jsm>(<jsm>td</jsm>().style(<js>"text-align:right"</js>).children(<jsm>button</jsm>(<js>"submit"</js>,<js>"Submit"</js>),<jsm>button</jsm>(<js>"reset"</js>,<js>"Reset"</js>))), - <jsm>tr</jsm>(<jsm>th</jsm>().child(<js>"Contents"</js>)), - <jsm>tr</jsm>(<jsm>th</jsm>().child( - <jsm>textarea</jsm>().name(<js>"contents"</js>).rows(40).cols(120).style(<js>"white-space:pre;word-wrap:normal;overflow-x:scroll;font-family:monospace;"</js>) - .text(getServletConfig().getConfig().toString())) - ) - ) - ) - ); - } - - <ja>@RestGet</ja>(<js>"/{section}"</js>, - description=<js>"Show config file section."</js>, - swagger={ - <js>"parameters:["</js>, - <js>"{name:'section',in:'path',description:'Section name.'}"</js>, - <js>"]"</js> - } - ) - <jk>public</jk> JsonMap getConfigSection(<ja>@Path</ja>(<js>"section"</js>) String <jv>section</jv>) <jk>throws</jk> Exception { - <jk>return</jk> getSection(<jv>section</jv>); - } - - <ja>@RestGet</ja>(<js>"/{section}/{key}"</js>, - description=<js>"Show config file entry."</js>, - swagger={ - <js>"parameters:["</js>, - <js>"{name:'section',in:'path',description:'Section name.'},"</js>, - <js>"{name:'key',in:'path',description:'Entry name.'}"</js>, - <js>"]"</js> - } - ) - <jk>public</jk> String getConfigEntry(<ja>@Path</ja>(<js>"section"</js>) String <jv>section</jv>, <ja>@Path</ja>(<js>"key"</js>) String <jv>key</jv>) <jk>throws</jk> Exception { - <jk>return</jk> getSection(<jv>section</jv>).getString(<jv>key</jv>); - } - - <ja>@RestPost</ja>(<js>"/"</js>, - description=<js>"Sets contents of config file from a FORM post."</js>, - swagger={ - <js>"parameters:["</js>, - <js>"{name:'contents',in:'formData',description:'New contents in INI file format.'}"</js>, - <js>"]"</js> - } - ) - <jk>public</jk> Config setConfigContentsFormPost(<ja>@FormData</ja>(<js>"contents"</js>) String <jv>contents</jv>) <jk>throws</jk> Exception { - <jk>return</jk> setConfigContents(<jk>new</jk> StringReader(<jv>contents</jv>)); - } - - <ja>@RestPut</ja>(path=<js>"/"</js>, - description=<js>"Sets contents of config file."</js>, - swagger={ - <js>"parameters:["</js>, - <js>"{in:'body',description:'New contents in INI file format.'}"</js>, - <js>"]"</js> - } - ) - <jk>public</jk> Config setConfigContents(<ja>@Body</ja> Reader <jv>contents</jv>) <jk>throws</jk> Exception { - <jk>return</jk> getServletConfig().getConfig().load(<jv>contents</jv>, <jk>true</jk>).asMap(); - } - - <ja>@RestPut</ja>(path=<js>"/{section}"</js>, - description=<js>"Add or overwrite a config file section."</js>, - swagger={ - <js>"parameters:["</js>, - <js>"{name:'section',in:'path',description:'Section name.'}"</js>, - <js>"{in:'body',description:'New contents for section as a simple map with string keys and values.'}"</js>, - <js>"]"</js> - } - ) - <jk>public</jk> JsonMap setConfigSection(<ja>@Path</ja>(<js>"section"</js>) String <jv>section</jv>, <ja>@Body</ja> Map<String,String> <jv>contents</jv>) <jk>throws</jk> Exception { - getServletConfig().getConfig().setSection(<jv>section</jv>, <jv>contents</jv>); - <jk>return</jk> getSection(section); - } - - <ja>@RestPut</ja>(path=<js>"/{section}/{key}"</js>, - description=<js>"Add or overwrite a config file entry."</js>, - swagger={ - <js>"parameters:["</js>, - <js>"{name:'section',in:'path',description:'Section name.'}"</js>, - <js>"{name:'key',in:'path',description:'Entry name.'}"</js>, - <js>"{in:'body',description:'New value as a string.'}"</js>, - <js>"]"</js> - } - ) - <jk>public</jk> String setConfigSection(<ja>@Path</ja>(<js>"section"</js>) String <jv>section</jv>, <ja>@Path</ja>(<js>"key"</js>) String <jv>key</jv>, <ja>@Body</ja> String <jv>value</jv>) <jk>throws</jk> Exception { - getServletConfig().getConfig().put(<jv>section</jv>, <jv>key</jv>, <jv>value</jv>, <jk>false</jk>); - <jk>return</jk> getSection(<jv>section</jv>).getString(<jv>key</jv>); - } - - <jk>private</jk> JsonMap getSection(String <jv>name</jv>) { - JsonMap <jv>map</jv> = getServletConfig().getConfig().getSectionMap(<jv>name</jv>); - <jk>if</jk> (<jv>map</jv> == <jk>null</jk>) - <jk>throw new</jk> RestException(<jsf>SC_NOT_FOUND</jsf>, <js>"Section not found."</js>); - <jk>return</jk> <jv>map</jv>; - } - } - </p> -</div> -</div><!-- END: 17.4 - juneau-examples-rest.jer.ConfigResource --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest.jer.LogsResource' id='juneau-examples-rest.jer.LogsResource'>17.5 - LogsResource</a><span class='update'><b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 17.5 - juneau-examples-rest.jer.LogsResource --> -<div class='topic'> - <p> - The {@link org.apache.juneau.microservice.resources.LogsResource} class is a reusable predefined resource. - It provides a REST interface for the log files generated by the microservice. - </p> - <p> - Pointing a browser to the resource shows the following: - </p> - <p class='bcode'> - http://localhost:10000/logs - </p> - <img class='bordered w800' src='doc-files/jer.LogsResource.1.png'> -</div> -</div><!-- END: 17.5 - juneau-examples-rest.jer.LogsResource --> -</div><!-- END: 17 - juneau-examples-rest --> - -<!-- ==================================================================================================== --> - -<h2 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty' id='juneau-examples-rest-jetty'>18 - juneau-examples-rest-jetty</a><span class='update'>created: 8.0.0, deprecated: 8.1.2</span></h2> -<div class='topic'><!-- START: 18 - juneau-examples-rest-jetty --> -<div class='topic'> - <div class='warn'> - The Juneau Microservice libraries are likely to be removed in Juneau 9.0 due to the popularity of the Spring Boot - framework for creating microservices and the ability for Juneau to be used within Spring Boot. - </div> - - <h5 class='figure'>Starter Project Zip</h5> - <p class='bcode w500'> - juneau-examples-rest-jetty-{@property juneauVersion}.zip - </p> - - <p> - The <c>juneau-examples-rest-jetty</c> project includes everything you need create a Samples REST - microservice in an Eclipse workspace and build it as an executable jar. - </p> -</div> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty.jerj.Installing' id='juneau-examples-rest-jetty.jerj.Installing'>18.1 - Installing in Eclipse</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 18.1 - juneau-examples-rest-jetty.jerj.Installing --> -<div class='topic'> - <p> - Follow these instructions to import the REST examples project using Jetty into Eclipse. - </p> - <ol class='spaced-list'> - <li> - Download the <c>juneau-examples-rest-jetty-{@property juneauVersion}.zip</c> file from the downloads page - (located in the binaries) and import it into your workspace as an existing project: - <br><br> - <img class='bordered' src='doc-files/jerj.Installing.1.png' style='width:524px'> - <li> - Select the archive file and import the project: - <br><br> - <img class='bordered' src='doc-files/jerj.Installing.2.png' style='width:549px'> - <li> - In your workspace, you should now see the following project: - <br><br> - <img class='bordered' src='doc-files/jerj.Installing.3.png' style='width:400px'> - </ol> - <p> - The important elements in this project are: - </p> - <ul class='spaced-list'> - <li> - <l>App.java</l> - The entry point. - <br>This class creates and starts our microservice: - <br><br> - <p class='bjava'> - <jk>public class</jk> App { - - <jk>public static void</jk> main(String[] args) <jk>throws</jk> Exception { - JettyMicroservice - .<jsm>create</jsm>() - .args(args) - .servlet(RootResources.<jk>class</jk>) - .build() - .start() - .startConsole() - .join(); - } - } - </p> - <li> - <l>RootResources.java</l> - The top-level REST resource. - <br>This class routes HTTP requests to child resources: - <br><br> - <p class='bjava'> - <ja>@Rest</ja>( - path=<js>"/*"</js>, - title=<js>"Root resources"</js>, - description=<js>"Example of a router resource page."</js>, - htmldoc=<ja>@HtmlDoc</ja>( - widgets={ - ContentTypeMenuItem.<jk>class</jk>, - ThemeMenuItem.<jk>class</jk> - }, - navlinks={ - <js>"options: ?method=OPTIONS"</js>, - <js>"$W{ContentTypeMenuItem}"</js>, - <js>"$W{ThemeMenuItem}"</js>, - <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js> - }, - aside={ - <js>"<div style='max-width:400px' class='text'>"</js>, - <js>" <p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>"</js>, - <js>" <p>Resources can be nested arbitrarily deep through router pages.</p>"</js>, - <js>" <p>Note the <span class='link'>options</span> link provided that lets you see the generated swagger doc for this page.</p>"</js>, - <js>" <p>Also note the <span class='link'>sources</span> link on these pages to view the source code for the page.</p>"</js>, - <js>" <p>All content on pages in the UI are serialized POJOs. In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.</p>"</js>, - <js>" <p>Other features (such as this aside) are added through annotations.</p>"</js>, - <js>"</div>"</js> - } - ), - children={ - HelloWorldResource.<jk>class</jk>, - PetStoreResource.<jk>class</jk>, - DtoExamples.<jk>class</jk>, - ConfigResource.<jk>class</jk>, - LogsResource.<jk>class</jk>, - ShutdownResource.<jk>class</jk> - } - ) - <ja>@SerializerConfig</ja>( - <jc>// For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple - // String comparisons.</jc> - quoteChar=<js>"'"</js> - ) - <jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletGroup <jk>implements</jk> BasicUniversalConfig { - <jc>// No code</jc> - } - </p> - <li> - <l>jerj.cfg</l> - The external configuration file. - <br>Contains various useful settings. - <br>Can be used for your own resource configurations. - <br><br> - <p class='bini'> - <cc>#======================================================================================================================= - # Basic configuration file for REST microservices - # Subprojects can use this as a starting point. - #=======================================================================================================================</cc> - - <cc>#======================================================================================================================= - # Jetty settings - #=======================================================================================================================</cc> - <cs>[Jetty]</cs> - - <cc># Path of the jetty.xml file used to configure the Jetty server.</cc> - <ck>config</ck> = <cv>jetty.xml</cv> - - <cc># Resolve Juneau variables in the jetty.xml file.</cc> - <ck>resolveVars</ck> = <cv>true</cv> - - <cc># Port to use for the jetty server. - # You can specify multiple ports. The first available will be used. '0' indicates to try a random port. - # The resulting available port gets set as the system property "availablePort" which can be referenced in the - # jetty.xml file as "$S{availablePort}" (assuming resolveVars is enabled).</cc> - <ck>port</ck> = <cv>10000,0,0,0</cv> - - <cc># Optionally specify your servlets here: - #servlets = org.apache.juneau.microservice.sample.RootResources</cc> - - <cc>#======================================================================================================================= - # REST settings - #=======================================================================================================================</cc> - <cs>[REST]</cs> - - <cc># Comma-delimited list of key-value pairs that represent locations of static files that can be served up by your @Rest-annotated - # classes. These are static files that are served up by the servlet under the specified sub-paths. - # For example, given the following setting... - # staticFiles = htdocs:my-docs,styles/my-styles - # ...the URI "/servletPath/htdocs/javadoc.css" resolves to the path "/my-docs/javadoc.css". - # This path can be relative to the working directory, classpath root, or package of your resource class. - # Used by the BasicRestConfig interface that defines the following value: - # staticFiles="$C{REST/staticFiles}"</cc> - <ck>staticFiles</ck> = htdocs:htdocs - - <cc># Stylesheet to use for HTML views. - # Used by the BasicRestConfig interface that defines the following value: - # stylesheet="$C{REST/theme,servlet:/htdocs/themes/devops.css}"</cc> - <ck>theme</ck> = <cv>servlet:/htdocs/themes/devops.css</cv> - - <cc># Various look-and-feel settings used in the BasicRestConfig interface.</cc> - <ck>headerIcon</ck> = <cv>servlet:/htdocs/images/juneau.png</cv> - <ck>headerLink</ck> = <cv>http://juneau.apache.org</cv> - <ck>footerIcon</ck> = <cv>servlet:/htdocs/images/asf.png</cv> - <ck>footerLink</ck> = <cv>http://www.apache.org</cv> - <ck>favicon</ck> = <cv>$C{REST/headerIcon}</cv> - <ck>header</ck> = - <cv><a href='$U{$C{REST/headerLink}}'> - <img src='$U{$C{REST/headerIcon}}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/> - </a></cv> - <ck>footer</ck> = - <cv><a href='$U{$C{REST/footerLink}}'> - <img src='$U{$C{REST/footerIcon}}' style='float:right;padding-right:20px;height:32px'/> - </a></cv> - - <cc>#======================================================================================================================= - # Console settings - #=======================================================================================================================</cc> - <cs>[Console]</cs> - - <ck>enabled</ck> = <cv>true</cv> - - <cc># List of available console commands. - # These are classes that implements ConsoleCommand that allow you to submit commands to the microservice via - # the console. - # When listed here, the implementations must provide a no-arg constructor. - # They can also be provided dynamically by overriding the Microservice.createConsoleCommands() method.</cc> - <ck>commands</ck> = - <cv>org.apache.juneau.microservice.console.ExitCommand, - org.apache.juneau.microservice.console.RestartCommand, - org.apache.juneau.microservice.console.HelpCommand, - org.apache.juneau.microservice.console.ConfigCommand</cv> - - <cc>#======================================================================================================================= - # Logger settings - #----------------------------------------------------------------------------------------------------------------------- - # See FileHandler Java class for details. - #=======================================================================================================================</cc> - <cs>[Logging]</cs> - - ... - - <cc>#======================================================================================================================= - # System properties - #----------------------------------------------------------------------------------------------------------------------- - # These are arbitrary system properties that are set during startup. - #=======================================================================================================================</cc> - <cs>[SystemProperties]</cs> - - <cc># Configure Jetty for StdErrLog Logging - # org.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StrErrLog</cc> - - <cc># Configure Jetty to log using java-util logging</cc> - <ck>org.eclipse.jetty.util.log.class</ck> = <cv>org.apache.juneau.microservice.jetty.JettyLogger</cv> - - <cc># Jetty logging level - # Possible values: ALL, DEBUG, INFO, WARN, OFF</cc> - <ck>org.eclipse.jetty.LEVEL</ck> = <cv>WARN - - <ck>derby.stream.error.file</ck> = <cv>$C{Logging/logDir}/derby-errors.log</cv> - </p> - <li> - <l>jetty.xml</l> - The Jetty configuration file. - <br>A bare-bones config file that can be extended to use any Jetty features. - <br><br> - <p class='bxml'> - <xt><Configure</xt> <xa>id</xa>=<xs>"ExampleServer"</xs> <xa>class</xa>=<xs>"org.eclipse.jetty.server.Server"</xs>></xt> - - <xt><Set</xt> <xa>name</xa>=<xs>"connectors"</xs><xt>></xt> - <xt><Array</xt> <xa>type</xa>=<xs>"org.eclipse.jetty.server.Connector"</xs><xt>></xt> - <xt><Item></xt> - <xt><New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.ServerConnector"</xs><xt>></xt> - <xt><Arg></xt> - <xt><Ref</xt> <xa>refid</xa>=<xs>"ExampleServer"</xs><xt>/></xt> - <xt></Arg></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"port"</xs><xt>></xt>$S{availablePort,8080}<xt></Set></xt> - <xt></New></xt> - <xt></Item></xt> - <xt></Array></xt> - <xt></Set></xt> - - <xt><New</xt> <xa>id</xa>=<xs>"context"</xs> <xa>class</xa>=<xs>"org.eclipse.jetty.servlet.ServletContextHandler"</xs><xt>></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"contextPath"</xs><xt>>/</Set></xt> - <xc><!-- Optionally specify your servlets here --> - <!--Call name="addServlet"> - <Arg>org.apache.juneau.microservice.sample.RootResources</Arg> - <Arg>/*</Arg> - </Call--></xc> - <xt><Set</xt> <xa>name</xa>=<xs>"sessionHandler"</xs><xt>></xt> - <xt><New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.session.SessionHandler"</xs><xt>/></xt> - <xt></Set></xt> - <xt></New></xt> - - <xt><Set</xt> <xa>name</xa>=<xs>"handler"</xs><xt>></xt> - <xt><New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.handler.HandlerCollection"</xs><xt>></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"handlers"</xs><xt>></xt> - <xt><Array</xt> <xa>type</xa>=<xs>"org.eclipse.jetty.server.Handler"</xs><xt>></xt> - <xt><Item></xt> - <xt><Ref</xt> <xa>refid</xa>=<xs>"context"</xs><xt>/></xt> - <xt></Item></xt> - <xt><Item></xt> - <xt><New</xt> <xa>class</xa>=<xs>"org.eclipse.jetty.server.handler.DefaultHandler"</xs><xt>/></xt> - <xt></Item></xt> - <xt></Array></xt> - <xt></Set></xt> - <xt></New></xt> - <xt></Set></xt> - - <xt><Set</xt> <xa>name</xa>=<xs>"requestLog"</xs><xt>></xt> - <xt><New</xt> <xa>id</xa>=<xs>"RequestLogImpl"</xs> <xa>class</xa>=<xs>"org.eclipse.jetty.server.NCSARequestLog"</xs><xt>></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"filename"</xs><xt>><Property</xt> <xa>name</xa>=<xs>"jetty.logs"</xs> <xa>default</xa>=<xs>"$C{Logging/logDir,logs}"</xs><xt>/></xt>/jetty-requests.log<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"filenameDateFormat</xs><xt>"></xt>yyyy_MM_dd<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"LogTimeZone"</xs><xt>></xt>GMT<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"retainDays"</xs><xt>></xt>90<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"append"</xs><xt>></xt>false<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"LogLatency"</xs><xt>></xt>true<xt></Set></xt> - <xt></New></xt> - <xt></Set></xt> - - <xt><Get</xt> <xa>name</xa>=<xs>"ThreadPool"</xs><xt>></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"minThreads"</xs> <xa>type</xa>=<xs>"int"</xs><xt>></xt>10<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"maxThreads"</xs> <xa>type</xa>=<xs>"int"</xs><xt>></xt>100<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"idleTimeout"</xs> <xa>type</xa>=<xs>"int"</xs><xt>></xt>60000<xt></Set></xt> - <xt><Set</xt> <xa>name</xa>=<xs>"detailedDump"</xs><xt>></xt>true<xt></Set></xt> - <xt></Get></xt> - <xt></Configure></xt> - </p> - </ul> - <p> - At this point, you're ready to start the microservice from your workspace. - </p> -</div> -</div><!-- END: 18.1 - juneau-examples-rest-jetty.jerj.Installing --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty.jerj.Running' id='juneau-examples-rest-jetty.jerj.Running'>18.2 - Running in Eclipse</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 18.2 - juneau-examples-rest-jetty.jerj.Running --> -<div class='topic'> - <p> - The <l>jerj.launch</l> file is already provided to allow you to quickly start - your new microservice. - </p> - <p> - Go to <b>Run -> Run Configurations -> Java Application -> juneau-examples-rest-jetty</b> and click <b>Run</b>. - In your console view, you should see the following output: - </p> - <p class='bconsole'> - Running class 'JettyMicroservice' using config file 'jerj.cfg'. - Server started on port 10000 - - List of available commands: - exit -- Shut down service - restart -- Restarts service - help -- Commands help - - > - </p> - <p> - Now open your browser and point to <l>http://localhost:10000</l>. - You should see the following: - </p> - <p class='bcode w400'> - http://localhost:10000 - </p> - <img class='bordered w400' src='doc-files/jerj.Running.1.png'> - <p> - You can enter the command <c>exit</c> to shut it down. - </p> -</div> -</div><!-- END: 18.2 - juneau-examples-rest-jetty.jerj.Running --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-jetty.jerj.Building' id='juneau-examples-rest-jetty.jerj.Building'>18.3 - Building and Running from Command-Line</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 18.3 - juneau-examples-rest-jetty.jerj.Building --> -<div class='topic'> - <p> - The <l>pom.xml</l> file is a basic Maven build script for creating the examples microservice - as an executable uber-jar. - </p> - <p> - The easiest way to build the microservice is to run the following from the project root. - </p> - <p class='bconsole'> - mvn clean install - </p> - <p> - Your <c>target</c> directory should now contain the following files: - </p> - <ul> - <li><c>juneau-examples-rest-jetty-1.0.jar</c> - <li><c>jerj.cfg</c> - </ul> - <p> - To start from a command line, run the following command from inside your <c>target</c> directory: - </p> - <p class='bconsole'> - java -jar juneau-examples-rest-jetty-1.0.jar - </p> - <p> - You should see the following console output: - </p> - <p class='bconsole'> - Running class 'JettyMicroservice' using config file 'jerj.cfg'. - Server started on port 10000 - - List of available commands: - exit -- Shut down service - restart -- Restarts service - help -- Commands help - - > - </p> - <p> - If you get this error message: <code class='snippet'>java.net.BindException: Address already in use</code>, - then this microservice is already running elsewhere and so it cannot bind to port 10000. - </p> -</div> -</div><!-- END: 18.3 - juneau-examples-rest-jetty.jerj.Building --> -</div><!-- END: 18 - juneau-examples-rest-jetty --> - -<!-- ==================================================================================================== --> - -<h2 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot' id='juneau-examples-rest-springboot'>19 - juneau-examples-rest-springboot</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></h2> -<div class='topic'><!-- START: 19 - juneau-examples-rest-springboot --> -<div class='topic'> - <h5 class='figure'>Starter Project Zip</h5> - <p class='bcode w500'> - juneau-examples-rest-springboot-{@property juneauVersion}.zip - </p> - - <p> - The <c>juneau-examples-rest-springboot</c> library contains the same examples as <c>juneau-examples-rest</c> - but also includes the following: - </p> - <ul class='spaced-list'> - <li> - A starter class for invoking the examples using Spring Boot. - <li> - A resource resolver for resolving REST resources as injectable beans. - <li> - A POM that extends from <c>spring-boot-starter-parent</c> that allows you to build a fully-shaded executable jar. - <li> - Configuration files for deploying the microservice to Heroku. - </ul> -</div> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.jers.Installing' id='juneau-examples-rest-springboot.jers.Installing'>19.1 - Installing in Eclipse</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 19.1 - juneau-examples-rest-springboot.jers.Installing --> -<div class='topic'> - <p> - Follow these instructions to import the REST examples project using Spring Boot into Eclipse. - </p> - <ol class='spaced-list'> - <li> - Download the <c>juneau-examples-rest-springboot-{@property juneauVersion}.zip</c> file from the downloads page - (located in the binaries) and import it into your workspace as an existing project: - <br><br> - <img class='bordered' src='doc-files/jers.Installing.1.png' style='width:524px'> - <li> - Select the archive file and import the project: - <br><br> - <img class='bordered' src='doc-files/jers.Installing.2.png' style='width:549px'> - <li> - In your workspace, you should now see the following project: - <br><br> - <img class='bordered' src='doc-files/jers.Installing.3.png' style='width:400px'> - </ol> - <p> - The important elements in this project are: - </p> - <ul class='spaced-list'> - <li> - <l>App.java</l> - The entry point. - <br>This class creates and starts our microservice. - <br>Note that we're using the existing Spring Boot application logic for the microservice and we're retrieving - our root resource as a spring bean. - <br>Only the top-level resource needs to be annotated with {@del org.apache.juneau.rest.springboot.annotation.JuneauRestRoot @JuneauRestRoot} - <br><br> - <p class='bjava'> - <ja>@SpringBootApplication</ja> - <ja>@Controller</ja> - <jk>public class</jk> App { - - <jk>public static void</jk> main(String[] args) { - <jk>new</jk> SpringApplicationBuilder(App.<jk>class</jk>) - .initializers(<jk>new</jk> JuneauRestInitializer(App.<jk>class</jk>)) - .run(args); - } - - <ja>@Bean @JuneauRestRoot</ja> - <jk>public</jk> RootResources getRootResources() { - <jk>return new</jk> RootResources(); - } - } - </p> - <li> - <l>RootResources.java</l> - The top-level REST resource. - <br>This class routes HTTP requests to child resources: - <br><br> - <p class='bjava'> - <ja>@Rest</ja>( - path=<js>"/*"</js>, - title=<js>"Root resources"</js>, - description=<js>"Example of a router resource page."</js>, - htmldoc=<ja>@HtmlDoc</ja>( - widgets={ - ContentTypeMenuItem.<jk>class</jk>, - ThemeMenuItem.<jk>class</jk> - }, - navlinks={ - <js>"options: ?method=OPTIONS"</js>, - <js>"$W{ContentTypeMenuItem}"</js>, - <js>"$W{ThemeMenuItem}"</js>, - <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js> - }, - aside={ - <js>"<div style='max-width:400px' class='text'>"</js>, - <js>" <p>This is an example of a 'router' page that serves as a jumping-off point to child resources.</p>"</js>, - <js>" <p>Resources can be nested arbitrarily deep through router pages.</p>"</js>, - <js>" <p>Note the <span class='link'>options</span> link provided that lets you see the generated swagger doc for this page.</p>"</js>, - <js>" <p>Also note the <span class='link'>sources</span> link on these pages to view the source code for the page.</p>"</js>, - <js>" <p>All content on pages in the UI are serialized POJOs. In this case, it's a serialized array of beans with 2 properties, 'name' and 'description'.</p>"</js>, - <js>" <p>Other features (such as this aside) are added through annotations.</p>"</js>, - <js>"</div>"</js> - } - ), - children={ - HelloWorldResource.<jk>class</jk>, - PetStoreResource.<jk>class</jk>, - DtoExamples.<jk>class</jk>, - ConfigResource.<jk>class</jk>, - LogsResource.<jk>class</jk>, - ShutdownResource.<jk>class</jk> - } - ) - <ja>@SerializerConfig</ja>( - <jc>// For testing purposes, we want to use single quotes in all the serializers so it's easier to do simple - // String comparisons.</jc> - quoteChar=<js>"'"</js> - ) - <jk>public class</jk> RootResources <jk>extends</jk> BasicRestServletGroup <jk>implements</jk> BasicUniversalConfig { - <jc>// No code</jc> - } - </p> - <li> - <l>juneau.cfg</l> - The configuration file. - <br>Contains various useful settings. - <br>Can be used for your own resource configurations. - <br>Note that the Jetty configuration is not present. - <br>Also it's located in the classpath so that our microservice can be built as a single executable jar. - <br><br> - <p class='bini'> - <cc>#======================================================================================================================= - # Basic configuration file for REST microservices - # Subprojects can use this as a starting point. - #=======================================================================================================================</cc> - - <cc>#======================================================================================================================= - # REST settings - #=======================================================================================================================</cc> - <cs>[REST]</cs> - - <cc># URL mappings to static files in the working directory or classpath.</cc> - <ck>staticFiles</ck> = htdocs:files/htdocs - - <cc># Stylesheet to use for HTML views.</cc> - <ck>theme</ck> = <cv>servlet:/htdocs/themes/devops.css</cv> - - <ck>headerIcon</ck> = <cv>servlet:/htdocs/images/juneau.png</cv> - <ck>headerLink</ck> = <cv>http://juneau.apache.org</cv> - <ck>footerIcon</ck> = <cv>servlet:/htdocs/images/asf.png</cv> - <ck>footerLink</ck> = <cv>http://www.apache.org</cv> - - <ck>favicon</ck> = <cv>$C{REST/headerIcon}</cv> - <ck>header</ck> = - <cv><a href='$U{$C{REST/headerLink}}'> - <img src='$U{$C{REST/headerIcon}}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/> - </a></cv> - <ck>footer</ck> = - <cv><a href='$U{$C{REST/footerLink}}'> - <img src='$U{$C{REST/footerIcon}}' style='float:right;padding-right:20px;height:32px'/> - </a></cv> - </p> - </ul> - <p> - At this point, you're ready to start the microservice from your workspace. - </p> -</div> -</div><!-- END: 19.1 - juneau-examples-rest-springboot.jers.Installing --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.jers.Running' id='juneau-examples-rest-springboot.jers.Running'>19.2 - Running in Eclipse</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 19.2 - juneau-examples-rest-springboot.jers.Running --> -<div class='topic'> - <p> - The <l>jers.launch</l> file is already provided to allow you to quickly start - your new microservice. - </p> - <p> - Go to <b>Run -> Run Configurations -> Java Application -> juneau-examples-rest-springboot</b> and click <b>Run</b>. - In your console view, you should see the following output: - </p> - <p class='bconsole'> - . ____ _ __ _ _ - /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ - ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ - \\/ ___)| |_)| | | | | || (_| | ) ) ) ) - ' |____| .__|_| |_|_| |_\__, | / / / / - =========|_|==============|___/=/_/_/_/ - :: Spring Boot :: (v2.0.1.RELEASE) - ... - INFO: Tomcat started on port(s): 8080 (http) with context path '' - Dec 21, 2012 12:30:00 AM org.springframework.boot.StartupInfoLogger logStarted - INFO: Started App in 1.999 seconds (JVM running for 2.999) - </p> - <p> - Now open your browser and point to <l>http://localhost:5000</l>. - You should see the following: - </p> - <p class='bcode w400'> - http://localhost:5000 - </p> - <img class='bordered w400' src='doc-files/jers.Running.1.png'> -</div> -</div><!-- END: 19.2 - juneau-examples-rest-springboot.jers.Running --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.jers.Building' id='juneau-examples-rest-springboot.jers.Building'>19.3 - Building and Running from Command-Line</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 19.3 - juneau-examples-rest-springboot.jers.Building --> -<div class='topic'> - <p> - The <l>pom.xml</l> file is a basic Maven build script for creating your microservice - as an executable uber-jar. - </p> - <p> - The easiest way to build your microservice is to run the following from the project root. - </p> - <p class='bconsole'> - mvn clean install - </p> - <p> - Your <c>target</c> directory should now contain the following files: - </p> - <ul> - <li><c>juneau-examples-rest-springboot-1.0.jar</c> - </ul> - <p> - To start from a command line, run the following command from inside your <c>target</c> directory: - </p> - <p class='bconsole'> - java -jar juneau-examples-rest-springboot-1.0.jar - </p> - <p> - You should see the following console output: - </p> - <p class='bconsole'> - . ____ _ __ _ _ - /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ - ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ - \\/ ___)| |_)| | | | | || (_| | ) ) ) ) - ' |____| .__|_| |_|_| |_\__, | / / / / - =========|_|==============|___/=/_/_/_/ - :: Spring Boot :: (v2.0.1.RELEASE) - ... - INFO: Tomcat started on port(s): 8080 (http) with context path '' - Dec 21, 2012 12:30:00 AM org.springframework.boot.StartupInfoLogger logStarted - INFO: Started App in 1.999 seconds (JVM running for 2.999) - </p> -</div> -</div><!-- END: 19.3 - juneau-examples-rest-springboot.jers.Building --> - -<!-- ==================================================================================================== --> - -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-examples-rest-springboot.jers.DeployingToHeroku' id='juneau-examples-rest-springboot.jers.DeployingToHeroku'>19.4 - Deploying to Heroku</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 19.4 - juneau-examples-rest-springboot.jers.DeployingToHeroku --> -<div class='topic'> - <p> - <a href='https://www.heroku.com'>Heroku</a> is a platform-as-a-service that allows applications to be quickly hosted - in the cloud. - The <l>juneau-examples-rest-springboot</l> project contains additional metadata files for quickly - deploying and running the examples in Heroku using free services. - </p> - <ul class='spaced-list'> - <li> - <l>app.json</l> - <br><br> - This class provides basic metadata information to Heroku about our application. - <br><br> - <p class='bjson'> - { - <jok>"name"</jok>: <jov>"Start on Heroku: Juneau REST Examples"</jov>, - <jok>"description"</jok>: <jov>"Deployable REST examples to Heroku."</jov> - } - </p> - <li> - <l>Procfile</l> - <br><br> - This class tells Heroku how to deploy our application using the Web dyno. - <br><br> - <p class='bcode'> - web: java -jar target/juneau-examples-rest-springboot-8.0.0-SNAPSHOT.jar - </p> - <li> - <l>settings.xml</l> - <br><br>This is an optional Maven settings file that points to both the main Maven repo in - addition to the Apache snapshots repo if you happen to be using a snapshot version of Juneau. - </ul> - <p> - You'll need to sign up for an account on Heroku. - Afterwards, you can go to the apps page to create a new application: - </p> - <p class='bcode w1000'> - https://dashboard.heroku.com/apps - </p> - <img class='bordered w1000' src='doc-files/jers.Heroku.1.png'> - - <p> - Click the <l>New</l> button to create a new app, give it a unique name: - </p> - <p class='bcode w1000'> - https://dashboard.heroku.com/new-app - </p> - <img class='bordered w1000' src='doc-files/jers.Heroku.2.png'> - - <p> - After clicking the <l>Create app</l> button, you should see this page: - </p> - <p class='bcode w1000'> - https://dashboard.heroku.com/apps/juneau-examples-rest/deploy/heroku-git - </p> - <img class='bordered w1000' src='doc-files/jers.Heroku.3.png'> - - <p> - For this example, we'll use the <l>Heroku Git</l> option for deploying our application. - Follow the instructions for installing the Heroku CLI and logging into Heroku: - </p> - <p class='bcode w1000'> - https://dashboard.heroku.com/apps/juneau-examples-rest/deploy/heroku-git - </p> - <img class='bordered w1000' src='doc-files/jers.Heroku.4.png'> - - <p> - Next, run the following commands to cd into our Eclipse project and initialize it as a local git repo: - </p> - <p class='bconsole'> - $ cd juneau-examples-rest-springboot/ - $ git init - </p> - <h5 class='figure'>Output</h5> - <p class='bconsole'> - $ cd juneau-examples-rest-springboot/ - $ git init - Initialized empty Git repository in /.../juneau-examples-rest-springboot/.git/ - </p> - - <p> - Next, run the following command to link our project to the Heroku app: - </p> - <p class='bconsole'> - $ heroku git:remote -a juneau-examples-rest - </p> - <h5 class='figure'>Output</h5> - <p class='bconsole'> - $ heroku git:remote -a juneau-examples-rest - set git remote heroku to https://git.heroku.com/juneau-examples-rest.git - </p> - - <p> - Next, run the following commands to add our files to the git repo and push to the Heroku master branch: - </p> - <p class='bconsole'> - $ git add . - $ git commit -am "Initial deploy" - $ git push heroku master - </p> - <h5 class='figure'>Output</h5> - <p class='bconsole'> - $ git add . - master (root-commit) 7c94cb9] Initial deploy - 123 files changed, 11986 insertions(+) - Counting objects: 127, done. - $ git commit -am "Initial deploy" - $ git push heroku master - Delta compression using up to 8 threads. - Compressing objects: 100% (113/113), done. - Writing objects: 100% (127/127), 363.91 KiB | 21.41 MiB/s, done. - ... - remote: -----> Compressing... - remote: Done: 85.9M - remote: -----> Launching... - remote: Released v3 - remote: https://juneau-examples-rest.herokuapp.com/ deployed to Heroku - remote: - remote: Verifying deploy... done. - To https://git.heroku.com/juneau-examples-rest.git - * [new branch] master -> master - </p> - <p> - If no errors were shown, then our application should now be live. - You can click on the <l>Open app</l> button to open the examples application in a browser: - </p> - <img class='bordered w400' src='doc-files/jers.Heroku.5.png'> - - <p> - If everything worked, your browser should now be loaded with our example REST app: - </p> - <p class='bcode w1000'> - https://juneau-examples-rest.herokuapp.com - </p> - <img class='bordered w1000' src='doc-files/jers.Heroku.6.png'> </div> -</div><!-- END: 19.4 - juneau-examples-rest-springboot.jers.DeployingToHeroku --> -</div><!-- END: 19 - juneau-examples-rest-springboot --> +</div><!-- END: 18 - juneau-examples-rest-jetty --> <!-- ==================================================================================================== --> -<h2 class='topic' onclick='toggle(this)'><a href='#juneau-petstore' id='juneau-petstore'>20 - juneau-pestore</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h2> -<div class='topic'><!-- START: 20 - juneau-petstore --> +<h2 class='topic' onclick='toggle(this)'><a href='#juneau-petstore' id='juneau-petstore'>19 - juneau-pestore</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h2> +<div class='topic'><!-- START: 19 - juneau-petstore --> <div class='topic'> <p> TODO @@ -29350,8 +27937,8 @@ <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.Installing' id='juneau-petstore.jp.Installing'>20.1 - Installing in Eclipse</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 20.1 - juneau-petstore.jp.Installing --> +<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.Installing' id='juneau-petstore.jp.Installing'>19.1 - Installing in Eclipse</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> +<div class='topic'><!-- START: 19.1 - juneau-petstore.jp.Installing --> <div class='topic'> <p> How to import Petstore to Eclipse or Spring Tool Suite: <br><br> @@ -29363,12 +27950,12 @@ </ol> </p> </div> -</div><!-- END: 20.1 - juneau-petstore.jp.Installing --> +</div><!-- END: 19.1 - juneau-petstore.jp.Installing --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.Running' id='juneau-petstore.jp.Running'>20.2 - Running Petstore manually</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 20.2 - juneau-petstore.jp.Running --> +<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.Running' id='juneau-petstore.jp.Running'>19.2 - Running Petstore manually</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> +<div class='topic'><!-- START: 19.2 - juneau-petstore.jp.Running --> <div class='topic'> <p> How to run Petstore --Java Backend-- in Eclipse or Spring Tool Suite: <br><br> @@ -29386,12 +27973,12 @@ </ol> </p> </div> -</div><!-- END: 20.2 - juneau-petstore.jp.Running --> +</div><!-- END: 19.2 - juneau-petstore.jp.Running --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.Building' id='juneau-petstore.jp.Building'>20.3 - Building and Running from Command-Line (Using Dockerfiles)</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 20.3 - juneau-petstore.jp.Building --> +<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.Building' id='juneau-petstore.jp.Building'>19.3 - Building and Running from Command-Line (Using Dockerfiles)</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> +<div class='topic'><!-- START: 19.3 - juneau-petstore.jp.Building --> <div class='topic'> <p> How to build and run Petstore using Docker: <br> @@ -29406,12 +27993,12 @@ </ol> </p> </div> -</div><!-- END: 20.3 - juneau-petstore.jp.Building --> +</div><!-- END: 19.3 - juneau-petstore.jp.Building --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.App' id='juneau-petstore.jp.App'>20.4 - About Petstore App</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> -<div class='topic'><!-- START: 20.4 - juneau-petstore.jp.App --> +<h3 class='topic' onclick='toggle(this)'><a href='#juneau-petstore.jp.App' id='juneau-petstore.jp.App'>19.4 - About Petstore App</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3> +<div class='topic'><!-- START: 19.4 - juneau-petstore.jp.App --> <div class='topic'> <div style="width: 70%;"> <h3 style="color: blue;"> @@ -29474,13 +28061,13 @@ </div> </div> -</div><!-- END: 20.4 - juneau-petstore.jp.App --> -</div><!-- END: 20 - juneau-petstore --> +</div><!-- END: 19.4 - juneau-petstore.jp.App --> +</div><!-- END: 19 - juneau-petstore --> <!-- ==================================================================================================== --> -<h2 class='topic' onclick='toggle(this)'><a href='#Glossaries' id='Glossaries'>21 - Glossaries</a><span class='update'>created: 8.1.3</span></h2> -<div class='topic'><!-- START: 21 - Glossaries --> +<h2 class='topic' onclick='toggle(this)'><a href='#Glossaries' id='Glossaries'>20 - Glossaries</a><span class='update'>created: 8.1.3</span></h2> +<div class='topic'><!-- START: 20 - Glossaries --> <div class='topic'> <p> </p> @@ -29488,8 +28075,8 @@ <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#Glossaries.g.LanguageSupport' id='Glossaries.g.LanguageSupport'>21.1 - Language Support</a><span class='update'>created: 8.1.3</span></h3> -<div class='topic'><!-- START: 21.1 - Glossaries.g.LanguageSupport --> +<h3 class='topic' onclick='toggle(this)'><a href='#Glossaries.g.LanguageSupport' id='Glossaries.g.LanguageSupport'>20.1 - Language Support</a><span class='update'>created: 8.1.3</span></h3> +<div class='topic'><!-- START: 20.1 - Glossaries.g.LanguageSupport --> <div class='topic'> <table class='styled w1000'> <tr> @@ -29623,12 +28210,12 @@ </tr> </table> </div> -</div><!-- END: 21.1 - Glossaries.g.LanguageSupport --> +</div><!-- END: 20.1 - Glossaries.g.LanguageSupport --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#Glossaries.g.Annotations' id='Glossaries.g.Annotations'>21.2 - Annotations</a><span class='update'>created: 8.1.3</span></h3> -<div class='topic'><!-- START: 21.2 - Glossaries.g.Annotations --> +<h3 class='topic' onclick='toggle(this)'><a href='#Glossaries.g.Annotations' id='Glossaries.g.Annotations'>20.2 - Annotations</a><span class='update'>created: 8.1.3</span></h3> +<div class='topic'><!-- START: 20.2 - Glossaries.g.Annotations --> <h5 class='topic'>Serialization Annotations (used to modify how artifacts are marshalled)</h5> <div class='topic'> <table class='styled w1000'> @@ -29948,13 +28535,13 @@ </tr> </table> </div> -</div><!-- END: 21.2 - Glossaries.g.Annotations --> -</div><!-- END: 21 - Glossaries --> +</div><!-- END: 20.2 - Glossaries.g.Annotations --> +</div><!-- END: 20 - Glossaries --> <!-- ==================================================================================================== --> -<h2 class='topic' onclick='toggle(this)'><a href='#Security' id='Security'>22 - Security Best-Practices</a></h2> -<div class='topic'><!-- START: 22 - Security --> +<h2 class='topic' onclick='toggle(this)'><a href='#Security' id='Security'>21 - Security Best-Practices</a></h2> +<div class='topic'><!-- START: 21 - Security --> <div class='topic'> <p> Security is always an ongoing concern in any library. @@ -29967,8 +28554,8 @@ <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#Security.s.Marshall' id='Security.s.Marshall'>22.1 - juneau-marshall</a><span class='update'>created: 8.2.0</span></h3> -<div class='topic'><!-- START: 22.1 - Security.s.Marshall --> +<h3 class='topic' onclick='toggle(this)'><a href='#Security.s.Marshall' id='Security.s.Marshall'>21.1 - juneau-marshall</a><span class='update'>created: 8.2.0</span></h3> +<div class='topic'><!-- START: 21.1 - Security.s.Marshall --> <h5 class='topic'>Demarshalling vulnerabilities</h5> <div class='topic'> <p> @@ -30038,12 +28625,12 @@ As of <c>7.0.1</c>, no known security vulnerabilities exist that affect Juneau at this time. </ul> </div> -</div><!-- END: 22.1 - Security.s.Marshall --> +</div><!-- END: 21.1 - Security.s.Marshall --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#Security.s.Svl' id='Security.s.Svl'>22.2 - juneau-svl</a><span class='update'>created: 8.2.0</span></h3> -<div class='topic'><!-- START: 22.2 - Security.s.Svl --> +<h3 class='topic' onclick='toggle(this)'><a href='#Security.s.Svl' id='Security.s.Svl'>21.2 - juneau-svl</a><span class='update'>created: 8.2.0</span></h3> +<div class='topic'><!-- START: 21.2 - Security.s.Svl --> <div class='topic'> <p> Care must be used when defining new {@link org.apache.juneau.svl.Var Vars} using the SVL API since mistakes @@ -30090,12 +28677,12 @@ methods to prevent recursive handling of variables. </p> </div> -</div><!-- END: 22.2 - Security.s.Svl --> +</div><!-- END: 21.2 - Security.s.Svl --> <!-- ==================================================================================================== --> -<h3 class='topic' onclick='toggle(this)'><a href='#Security.s.Rest' id='Security.s.Rest'>22.3 - juneau-rest-server</a><span class='update'>created: 8.2.0</span></h3> -<div class='topic'><!-- START: 22.3 - Security.s.Rest --> +<h3 class='topic' onclick='toggle(this)'><a href='#Security.s.Rest' id='Security.s.Rest'>21.3 - juneau-rest-server</a><span class='update'>created: 8.2.0</span></h3> +<div class='topic'><!-- START: 21.3 - Security.s.Rest --> <div class='topic'> <p> Denial of service attacks can be alleviated through the {@link org.apache.juneau.rest.annotation.Rest#maxInput() maxInput()} @@ -30109,8 +28696,8 @@ RDF, you may want to consider lowering the max-input value above. </p> </div> -</div><!-- END: 22.3 - Security.s.Rest --> -</div><!-- END: 22 - Security --> +</div><!-- END: 21.3 - Security.s.Rest --> +</div><!-- END: 21 - Security --> <h2 class='topic' onclick='toggle(this)'><a href='#ReleaseNotes' id='ReleaseNotes'>Release Notes</a></h2> diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt index 0de9e442e..a4e213207 100644 --- a/juneau-doc/src/main/javadoc/resources/docs.txt +++ b/juneau-doc/src/main/javadoc/resources/docs.txt @@ -84,20 +84,6 @@ jd.Atom = #juneau-dto.jd.Atom, Overview > juneau-dto > Atom jd.Html5 = #juneau-dto.jd.Html5, Overview > juneau-dto > HTML5 jd.Swagger = #juneau-dto.jd.Swagger, Overview > juneau-dto > Swagger jd.SwaggerUi = #juneau-dto.jd.SwaggerUi, Overview > juneau-dto > Swagger UI -jec.Examples = #juneau-examples-core.jec.Examples, Overview > juneau-examples-core > Examples -jec.Installing = #juneau-examples-core.jec.Installing, Overview > juneau-examples-core > Installing in Eclipse -jer.ConfigResource = #juneau-examples-rest.jer.ConfigResource, Overview > juneau-examples-rest > ConfigResource -jer.DtoExamples = #juneau-examples-rest.jer.DtoExamples, Overview > juneau-examples-rest > DtoExamples -jer.HelloWorldResource = #juneau-examples-rest.jer.HelloWorldResource, Overview > juneau-examples-rest > HelloWorldResource -jer.LogsResource = #juneau-examples-rest.jer.LogsResource, Overview > juneau-examples-rest > LogsResource -jer.RootResources = #juneau-examples-rest.jer.RootResources, Overview > juneau-examples-rest > RootResources -jerj.Building = #juneau-examples-rest-jetty.jerj.Building, Overview > juneau-examples-rest-jetty > Building and Running from Command-Line -jerj.Installing = #juneau-examples-rest-jetty.jerj.Installing, Overview > juneau-examples-rest-jetty > Installing in Eclipse -jerj.Running = #juneau-examples-rest-jetty.jerj.Running, Overview > juneau-examples-rest-jetty > Running in Eclipse -jers.Building = #juneau-examples-rest-springboot.jers.Building, Overview > juneau-examples-rest-springboot > Building and Running from Command-Line -jers.DeployingToHeroku = #juneau-examples-rest-springboot.jers.DeployingToHeroku, Overview > juneau-examples-rest-springboot > Deploying to Heroku -jers.Installing = #juneau-examples-rest-springboot.jers.Installing, Overview > juneau-examples-rest-springboot > Installing in Eclipse -jers.Running = #juneau-examples-rest-springboot.jers.Running, Overview > juneau-examples-rest-springboot > Running in Eclipse jm.AutoSwaps = #juneau-marshall.jm.Swaps.jm.AutoSwaps, Overview > juneau-marshall > Swaps > Auto-detected swaps jm.BasicHtmlDocTemplate = #juneau-marshall.jm.HtmlDetails.jm.BasicHtmlDocTemplate, Overview > juneau-marshall > HTML Details > BasicHtmlDocTemplate jm.BeanAnnotation = #juneau-marshall.jm.JavaBeansSupport.jm.BeanAnnotation, Overview > juneau-marshall > Java Beans Support > @Bean Annotation @@ -266,7 +252,6 @@ jrs.Encoders = #juneau-rest-server.jrs.Encoders, Overview > juneau-rest-server > jrs.ExecutionStatistics = #juneau-rest-server.jrs.ExecutionStatistics, Overview > juneau-rest-server > REST method execution statistics jrs.Guards = #juneau-rest-server.jrs.Guards, Overview > juneau-rest-server > Guards jrs.HandlingFormPosts = #juneau-rest-server.jrs.HandlingFormPosts, Overview > juneau-rest-server > Form Posts -jrs.HelloWorldExample = #juneau-rest-server.jrs.HelloWorldExample, Overview > juneau-rest-server > Hello World Example jrs.HtmlBeans = #juneau-rest-server.jrs.HtmlBeans, Overview > juneau-rest-server > Using with HTML Beans jrs.HtmlDocAnnotation = #juneau-rest-server.jrs.HtmlDocAnnotation, Overview > juneau-rest-server > @HtmlDocConfig jrs.HtmlPredefinedWidgets = #juneau-rest-server.jrs.HtmlDocAnnotation.jrs.HtmlPredefinedWidgets, Overview > juneau-rest-server > @HtmlDocConfig > Predefined Widgets @@ -289,6 +274,7 @@ jrs.Marshalling = #juneau-rest-server.jrs.Marshalling, Overview > juneau-rest-se jrs.Matchers = #juneau-rest-server.jrs.RestOpAnnotatedMethods.jrs.Matchers, Overview > juneau-rest-server > @RestOp-Annotated Methods > Matchers jrs.OtherNotes = #juneau-rest-server.jrs.OtherNotes, Overview > juneau-rest-server > Other Notes jrs.OverloadingHttpMethods = #juneau-rest-server.jrs.RestOpAnnotatedMethods.jrs.OverloadingHttpMethods, Overview > juneau-rest-server > @RestOp-Annotated Methods > Overloading HTTP Methods +jrs.Overview = #juneau-rest-server.jrs.Overview, Overview > juneau-rest-server > Overview jrs.PartMarshallers = #juneau-rest-server.jrs.HttpParts.jrs.PartMarshallers, Overview > juneau-rest-server > HTTP Parts > Part Marshallers jrs.PathPatterns = #juneau-rest-server.jrs.RestOpAnnotatedMethods.jrs.PathPatterns, Overview > juneau-rest-server > @RestOp-Annotated Methods > Path Patterns jrs.PathVariables = #juneau-rest-server.jrs.AnnotatedClasses.jrs.PathVariables, Overview > juneau-rest-server > @Rest-Annotated Classes > Path Variables @@ -319,7 +305,6 @@ juneau-dto = #juneau-dto, Overview > juneau-dto juneau-examples-core = #juneau-examples-core, Overview > juneau-examples-core juneau-examples-rest = #juneau-examples-rest, Overview > juneau-examples-rest juneau-examples-rest-jetty = #juneau-examples-rest-jetty, Overview > juneau-examples-rest-jetty -juneau-examples-rest-springboot = #juneau-examples-rest-springboot, Overview > juneau-examples-rest-springboot juneau-marshall = #juneau-marshall, Overview > juneau-marshall juneau-marshall-rdf = #juneau-marshall-rdf, Overview > juneau-marshall-rdf juneau-microservice-core = #juneau-microservice-core, Overview > juneau-microservice-core diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html index 0bae7aa61..0d162dbb1 100644 --- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html +++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html @@ -206,7 +206,7 @@ </ol> <li><p class='toc2'><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server'>juneau-rest-server</a><span class='update'>updated: <b>9.0.0</b></span></p> <ol> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.jrs.HelloWorldExample'>Hello World Example</a><span class='update'>updated: <b>9.0.0</b></span></p> + <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.jrs.Overview'>Overview</a><span class='update'>created: <b>9.0.0</b></span></p> <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.jrs.AnnotatedClasses'>@Rest-Annotated Classes</a><span class='update'>updated: 8.1.2,<b>9.0.0</b></span></p> <ol> <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.jrs.AnnotatedClasses.jrs.PredefinedClasses'>Predefined Classes</a><span class='update'>updated: <b>9.0.0</b></span></p> @@ -362,31 +362,8 @@ <li><p><a class='doclink' href='{OVERVIEW_URL}#my-springboot-microservice.msm.Building'>Building and Running from Command-Line</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> </ol> <li><p class='toc2'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-core'>juneau-examples-core</a><span class='update'>updated: 8.0.0</span></p> - <ol> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-core.jec.Installing'>Installing in Eclipse</a><span class='update'>created: 8.0.0</span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-core.jec.Examples'>Examples</a><span class='update'>created: 8.0.0</span></p> - </ol> <li><p class='toc2'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest'>juneau-examples-rest</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p> - <ol> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.jer.RootResources'>RootResources</a><span class='update'>updated: 8.0.0,8.1.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.jer.HelloWorldResource'>HelloWorldResource</a><span class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.jer.DtoExamples'>DtoExamples</a><span class='update'>created: 8.0.0, updated: 8.1.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.jer.ConfigResource'>ConfigResource</a><span class='update'><b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest.jer.LogsResource'>LogsResource</a><span class='update'><b><red>todo</red></b></span></p> - </ol> <li><p class='toc2'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a><span class='update'>created: 8.0.0, deprecated: 8.1.2</span></p> - <ol> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-jetty.jerj.Installing'>Installing in Eclipse</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-jetty.jerj.Running'>Running in Eclipse</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-jetty.jerj.Building'>Building and Running from Command-Line</a><span class='update'>created: 8.0.0, deprecated: 8.1.2, <b><red>todo</red></b></span></p> - </ol> - <li><p class='toc2'><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <ol> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot.jers.Installing'>Installing in Eclipse</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot.jers.Running'>Running in Eclipse</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot.jers.Building'>Building and Running from Command-Line</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-examples-rest-springboot.jers.DeployingToHeroku'>Deploying to Heroku</a><span class='update'>created: 8.0.0, <b><red>todo</red></b></span></p> - </ol> <li><p class='toc2'><a class='doclink' href='{OVERVIEW_URL}#juneau-petstore'>juneau-pestore</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p> <ol> <li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-petstore.jp.Installing'>Installing in Eclipse</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
