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 1b384bd48574ec8176ff929440d6e9889996fda9 Author: JamesBognar <[email protected]> AuthorDate: Thu Mar 1 19:02:02 2018 -0500 Move ArgsVar and ManifestFileVar to juneau-svl. --- .../java/org/apache/juneau/svl/VarResolver.java | 20 +- .../org/apache/juneau/svl/VarResolverBuilder.java | 15 +- .../java/org/apache/juneau/svl}/vars/ArgsVar.java | 54 +- .../apache/juneau/svl}/vars/ManifestFileVar.java | 34 +- juneau-doc/src/main/javadoc/overview.html | 547 ++++++++++++--------- .../src/main/javadoc/resources/juneau-doc.css | 5 + .../juneau/examples/rest/AtomFeedResource.java | 5 +- .../examples/rest/CodeFormatterResource.java | 3 +- .../juneau/examples/rest/DirectoryResource.java | 7 +- .../examples/rest/DockerRegistryResource.java | 5 +- .../juneau/examples/rest/HelloWorldResource.java | 4 +- .../juneau/examples/rest/JsonSchemaResource.java | 2 +- .../examples/rest/MethodExampleResource.java | 4 +- .../juneau/examples/rest/PetStoreResource.java | 4 +- .../juneau/examples/rest/PhotosResource.java | 4 +- .../examples/rest/PredefinedLabelsResource.java | 4 +- .../juneau/examples/rest/RequestEchoResource.java | 5 +- .../apache/juneau/examples/rest/RootResources.java | 2 +- .../juneau/examples/rest/SqlQueryResource.java | 5 +- .../examples/rest/SystemPropertiesResource.java | 5 +- .../juneau/examples/rest/TumblrParserResource.java | 6 +- .../examples/rest/UrlEncodedFormResource.java | 3 +- .../rest/addressbook/AddressBookResource.java | 2 +- .../apache/juneau/microservice/Microservice.java | 81 ++- .../org/apache/juneau/microservice/Resource.java | 65 --- .../apache/juneau/microservice/ResourceGroup.java | 66 --- .../juneau/microservice/ResourceJenaGroup.java | 90 ---- ...sourceJena.java => RestServletJenaDefault.java} | 12 +- ...ResourceJena.java => RestServletJenaGroup.java} | 12 +- .../microservice/resources/ConfigResource.java | 3 +- .../microservice/resources/DebugResource.java | 2 +- .../microservice/resources/DirectoryResource.java | 3 +- .../microservice/resources/LogsResource.java | 3 +- .../microservice/resources/SampleRootResource.java | 4 +- .../microservice/resources/ShutdownResource.java | 4 +- .../juneau/microservice/vars/package-info.java | 18 - .../microservice/sample/HelloWorldResource.java | 4 +- .../juneau/microservice/sample/RootResources.java | 4 +- .../org/apache/juneau/rest/test/BpiResource.java | 2 +- .../juneau/rest/test/ClientVersionResource.java | 8 +- .../apache/juneau/rest/test/ConfigResource.java | 3 +- .../juneau/rest/test/InterfaceProxyResource.java | 2 +- .../juneau/rest/test/LargePojosResource.java | 2 +- .../org/apache/juneau/rest/test/NlsResource.java | 2 +- .../juneau/rest/test/RequestBeanProxyResource.java | 2 +- .../juneau/rest/test/ThirdPartyProxyResource.java | 2 +- .../org/apache/juneau/rest/test/ConfigTest.java | 2 +- .../org/apache/juneau/rest/RestContextBuilder.java | 10 +- ...vletGroupDefault.java => RestServletGroup.java} | 2 +- 49 files changed, 508 insertions(+), 645 deletions(-) diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java index c007a4c..a0b1af5 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java @@ -63,15 +63,17 @@ public class VarResolver { * Default string variable resolver with support for system properties and environment variables: * * <ul> - * <li><code>$S{key}</code>,<code>$S{key,default}</code> - {@link SystemPropertiesVar} - * <li><code>$E{key}</code>,<code>$E{key,default}</code> - {@link EnvVariablesVar} - * <li><code>$IF{booleanValue, thenValue[, elseValue]}</code> - {@link IfVar} - * <li><code>$SW{stringValue, matchPattern:thenValue[, matchPattern:thenValue}</code> - {@link SwitchVar} - * <li><code>$CO{arg1[,arg2...]}</code> - {@link CoalesceVar} - * <li><code>$PM{stringValue,matchPattern}</code> - {@link PatternMatchVar} - * <li><code>$UC{stringValue}</code> - {@link UpperCaseVar} - * <li><code>$LC{stringValue}</code> - {@link LowerCaseVar} - * <li><code>$NE{stringValue}</code> - {@link NotEmptyVar} + * <li><code>$S{key[,default]}</code> - {@link SystemPropertiesVar} + * <li><code>$E{key[,default]}</code> - {@link EnvVariablesVar} + * <li><code>$A{key[,default]}</code> - {@link ArgsVar} + * <li><code>$MF{key[,default]}</code> - {@link ManifestFileVar} + * <li><code>$IF{arg,then[,else]}</code> - {@link IfVar} + * <li><code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code> - {@link SwitchVar} + * <li><code>$CO{arg[,arg2...]}</code> - {@link CoalesceVar} + * <li><code>$PM{arg,pattern}</code> - {@link PatternMatchVar} + * <li><code>$UC{arg}</code> - {@link UpperCaseVar} + * <li><code>$LC{arg}</code> - {@link LowerCaseVar} + * <li><code>$NE{arg}</code> - {@link NotEmptyVar} * </ul> * * @see SystemPropertiesVar diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java index edea10e..18fde77 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java @@ -65,6 +65,8 @@ public class VarResolverBuilder { * <ul> * <li>{@link SystemPropertiesVar} * <li>{@link EnvVariablesVar} + * <li>{@link ArgsVar} + * <li>{@link ManifestFileVar} * <li>{@link SwitchVar} * <li>{@link IfVar} * <li>{@link CoalesceVar} @@ -77,7 +79,18 @@ public class VarResolverBuilder { * @return This object (for method chaining). */ public VarResolverBuilder defaultVars() { - return vars(SystemPropertiesVar.class, EnvVariablesVar.class, SwitchVar.class, IfVar.class, CoalesceVar.class, PatternMatchVar.class, UpperCaseVar.class, LowerCaseVar.class, NotEmptyVar.class); + return vars( + SystemPropertiesVar.class, + EnvVariablesVar.class, + ManifestFileVar.class, + ArgsVar.class, + SwitchVar.class, + IfVar.class, + CoalesceVar.class, + PatternMatchVar.class, + UpperCaseVar.class, + LowerCaseVar.class, + NotEmptyVar.class); } /** diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java similarity index 69% rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java rename to juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java index d3cb8cb..b0b45f5 100644 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java @@ -10,7 +10,9 @@ // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * // * specific language governing permissions and limitations under the License. * // *************************************************************************************************************************** -package org.apache.juneau.microservice.vars; +package org.apache.juneau.svl.vars; + +import static org.apache.juneau.internal.StringUtils.*; import org.apache.juneau.svl.*; import org.apache.juneau.utils.*; @@ -19,23 +21,28 @@ import org.apache.juneau.utils.*; * JVM args variable resolver. * * <p> - * The format for this var is <js>"$ARG{argNameOrNum}"</js> or <js>"$ARG{argNameOrNum,defaultValue}"</js> + * The format for this var is <js>"$A{arg[,default]}"</js>. * * <p> - * This variable resolver requires that an {@link Args} object be set as a context object on the resolver or a - * session object on the resolver session. + * This variable resolver requires that the command-line arguments be made available through any of the following: + * <ul class='spaced-list'> + * <li><js>"sun.java.command"</js> system property. + * <li><js>"juneau.args"</js> system property. + * <li>{@link #init(Args)} has been called. + * </ul> * * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create an args object from the main(String[]) method.</jc> * Args args = new Args(argv); * - * <jc>// Create a variable resolver that resolves JVM arguments (e.g. "$ARG{1}")</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(ArgsVar.<js>class</js>) - * .addContextObject(<jsf>SESSION_args</jsf>, args); + * ArgsVar.<jsm>init</jsm>(args); + * + * <jc>// Create a variable resolver that resolves JVM arguments (e.g. "$A{1}")</jc> + * VarResolver r = <jk>new</jk> VarResolver().addVars(ArgsVar.<js>class</js>); * * <jc>// Use it!</jc> - * System.<jsf>out</jsf>.println(r.resolve(<js>"Arg #1 is set to $ARG{1}"</js>)); + * System.<jsf>out</jsf>.println(r.resolve(<js>"Arg #1 is set to $A{1}"</js>)); * </p> * * <p> @@ -47,23 +54,42 @@ import org.apache.juneau.utils.*; */ public class ArgsVar extends DefaultingVar { + /** The name of this variable. */ + public static final String NAME = "A"; + + private static volatile Args ARGS; + /** - * The name of the session or context object that identifies the {@link Args} object. + * Initialize the args for this variable. + * + * @param args The parsed command-line arguments. */ - public static final String SESSION_args = "args"; - - /** The name of this variable. */ - public static final String NAME = "ARG"; + public static void init(Args args) { + ARGS = args; + } + + private final Args args; /** * Constructor. */ public ArgsVar() { super(NAME); + if (ARGS != null) + this.args = ARGS; + else { + String s = System.getProperty("sun.java.command"); + if (! isEmpty(s)) { + int i = s.indexOf(' '); + args = new Args(i == -1 ? "" : s.substring(i+1)); + } else { + args = new Args(System.getProperty("juneau.args")); + } + } } @Override /* Var */ public String resolve(VarResolverSession session, String key) { - return session.getSessionObject(Args.class, SESSION_args).getArg(key); + return args.getArg(key); } } diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java similarity index 81% rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java rename to juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java index ae7d3a6..1740626 100644 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java @@ -10,7 +10,7 @@ // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * // * specific language governing permissions and limitations under the License. * // *************************************************************************************************************************** -package org.apache.juneau.microservice.vars; +package org.apache.juneau.svl.vars; import org.apache.juneau.svl.*; import org.apache.juneau.utils.*; @@ -19,20 +19,21 @@ import org.apache.juneau.utils.*; * Manifest file entries variable resolver. * * <p> - * The format for this var is <js>"$MF{key}"</js> or <js>"$MF{key,defaultValue}"</js> + * The format for this var is <js>"$MF{key[,default]}"</js>. * * <p> - * This variable resolver requires that a {@link ManifestFile} object be set as a context object on the resolver or a - * session object on the resolver session. + * This variable resolver requires that a {@link ManifestFile} object be made available by calling + * the {@link #init(ManifestFile)} method. * * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create a ManifestFile object that contains the manifest of the jar file containing this class.</jc> * ManifestFile mf = <jk>new</jk> ManifestFile(<jk>this</jk>.getClass()); * + * ManifestFileVar.<jsm>init</jsm>(mf); + * * <jc>// Create a variable resolver that resolves manifest file entries (e.g. "$MF{Main-Class}")</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(ManifestFile.<js>class</js>) - * .addContextObject(<jsf>SESSION_manifest</jsf>, mf); + * VarResolver r = <jk>new</jk> VarResolver().addVars(ManifestFile.<js>class</js>); * * <jc>// Use it!</jc> * System.<jsf>out</jsf>.println(r.resolve(<js>"The main class is $MF{Main-Class}"</js>)); @@ -47,23 +48,32 @@ import org.apache.juneau.utils.*; */ public class ManifestFileVar extends DefaultingVar { - /** - * The name of the session or context object that identifies the {@link ManifestFile} object. - */ - public static final String SESSION_manifest = "manifest"; - /** The name of this variable. */ public static final String NAME = "MF"; + private static volatile ManifestFile MANIFEST_FILE; + + /** + * Initialize the manifest file for this variable. + * + * @param manifestFile The parsed manifest file. + */ + public static void init(ManifestFile manifestFile) { + MANIFEST_FILE = manifestFile; + } + + private final ManifestFile manifestFile; + /** * Constructor. */ public ManifestFileVar() { super(NAME); + this.manifestFile = MANIFEST_FILE; } @Override /* Var */ public String resolve(VarResolverSession session, String key) { - return session.getSessionObject(ManifestFile.class, SESSION_manifest).getString(key); + return manifestFile == null ? "" : manifestFile.getString(key); } } diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html index 75106d4..1d42dc3 100644 --- a/juneau-doc/src/main/javadoc/overview.html +++ b/juneau-doc/src/main/javadoc/overview.html @@ -75,12 +75,12 @@ <a id='TOC'></a><h5 class='toc'>Table of Contents</h5> <ol class='toc'> - <li><p><a class='doclink' href='#Intro'>Introduction</a></p> + <li><p class='toc2'><a class='doclink' href='#Intro'>Introduction</a></p> <ol> <li><p><a class='doclink' href='#Intro.Features'>Features</a></p> <li><p><a class='doclink' href='#Intro.Components'>Components</a></p> </ol> - <li><p><a class='doclink' href='#juneau-marshall'><i>juneau-marshall</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-marshall'><i>juneau-marshall</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-marshall.Serializers'>Serializers</a></p> <li><p><a class='doclink' href='#juneau-marshall.Parsers'>Parsers</a></p> @@ -128,21 +128,21 @@ <li><p><a class='doclink' href='#juneau-marshall.AdditionalInfo.URLEncoding'>URL-Encoding</a></p> </ol> </ol> - <li><p><a class='doclink' href='#juneau-marshall-rdf'><i>juneau-marshall-rdf</i></a></p> - <li><p><a class='doclink' href='#juneau-dto'><i>juneau-dto</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-marshall-rdf'><i>juneau-marshall-rdf</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-dto'><i>juneau-dto</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-dto.HTML5'>HTML5</a></p> <li><p><a class='doclink' href='#juneau-dto.Atom'>Atom</a></p> <li><p><a class='doclink' href='#juneau-dto.Swagger'>Swagger</a></p> </ol> - <li><p><a class='doclink' href='#juneau-svl'><i>juneau-svl</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-svl'><i>juneau-svl</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-svl.SimpleVarLanguage'>Simple Variable Language</a></p> <li><p><a class='doclink' href='#juneau-svl.SvlVariables'>SVL Variables</a></p> <li><p><a class='doclink' href='#juneau-svl.VarResolvers'>VarResolvers and VarResolverSessions</a></p> <li><p><a class='doclink' href='#juneau-svl.OtherNotes'>Other Notes</a></p> </ol> - <li><p><a class='doclink' href='#juneau-config'><i>juneau-config</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-config'><i>juneau-config</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-config.Overview'>Overview</a></p> <ol> @@ -177,11 +177,12 @@ <li><p><a class='doclink' href='#juneau-config.ConfigMemoryStore'>ConfigMemoryStore</a></p> <li><p><a class='doclink' href='#juneau-config.ConfigFileStore'>ConfigFileStore</a></p> <li><p><a class='doclink' href='#juneau-config.CustomConfigStores"'>Custom ConfigStores</a></p> + <li><p><a class='doclink' href='#juneau-config.ConfigStoreListeners"'>ConfigStore Listeners</a></p> </ol> <li><p><a class='doclink' href='#juneau-config.ReadOnlyConfigs'>Read-only Configs</a></p> <li><p><a class='doclink' href='#juneau-config.ClosingConfigs'>Closing Configs</a></p> </ol> - <li><p><a class='doclink' href='#juneau-rest-server'><i>juneau-rest-server</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-rest-server'><i>juneau-rest-server</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-rest-server.HelloWorldExample'>Hello World Example</a></p> <li><p><a class='doclink' href='#juneau-rest-server.ClassHierarchy'>Class Hierarchy</a></p> @@ -266,11 +267,11 @@ <li><p><a class='doclink' href='#juneau-rest-server.PredefinedLabelBeans'>Predefined Label Beans</a></p> <li><p><a class='doclink' href='#juneau-rest-server.OtherNotes'>Other Notes</a></p> </ol> - <li><p><a class='doclink' href='#juneau-rest-server-jaxrs'><i>juneau-rest-server-jaxrs</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-rest-server-jaxrs'><i>juneau-rest-server-jaxrs</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-rest-server-jaxrs.BaseProvider'>Juneau JAX-RS Provider</a></p> </ol> - <li><p><a class='doclink' href='#juneau-rest-client'><i>juneau-rest-client</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-rest-client'><i>juneau-rest-client</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-rest-client.3rdPartyProxies'>Interface Proxies Against 3rd-party REST Interfaces</a></p> <li><p><a class='doclink' href='#juneau-rest-client.SSL'>SSL Support</a></p> @@ -291,7 +292,7 @@ <li><p><a class='doclink' href='#juneau-rest-client.Remoteable'>Remoteable Proxies</a></p> <li><p><a class='doclink' href='#juneau-rest-client.Other'>Other Useful Methods</a></p> </ol> - <li><p><a class='doclink' href='#juneau-microservice-server'><i>juneau-microservice-server</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-microservice-server'><i>juneau-microservice-server</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-microservice-server.Introduction'>Microservice Introduction</a></p> <li><p><a class='doclink' href='#juneau-microservice-server.GettingStarted'>Getting Started</a></p> @@ -315,8 +316,8 @@ <li><p><a class='doclink' href='#juneau-microservice-server.ExtendingRestMicroservice'>Extending RestMicroservice</a></p> </ol> </ol> - <li><p><a class='doclink' href='#juneau-examples-core'><i>juneau-examples-core</i></a></p> - <li><p><a class='doclink' href='#juneau-examples-rest'><i>juneau-examples-rest</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-examples-core'><i>juneau-examples-core</i></a></p> + <li><p class='toc2'><a class='doclink' href='#juneau-examples-rest'><i>juneau-examples-rest</i></a></p> <ol> <li><p><a class='doclink' href='#juneau-examples-rest.RootResources'>RootResources</a></p> <li><p><a class='doclink' href='#juneau-examples-rest.HelloWorldResource'>HelloWorldResource</a></p> @@ -344,8 +345,8 @@ <li><p><a class='doclink' href='#juneau-examples-rest.ConfigResource'>ConfigResource</a></p> <li><p><a class='doclink' href='#juneau-examples-rest.LogsResource'>LogsResource</a></p> </ol> - <li><p><a class='doclink' href='#Security'>Security Best-Practices</a></p> - <li><p><a class='doclink' href='#ReleaseNotes'>Release Notes</a></p> + <li><p class='toc2'><a class='doclink' href='#Security'>Security Best-Practices</a></p> + <li><p class='toc2'><a class='doclink' href='#ReleaseNotes'>Release Notes</a></p> </ol> <!-- =============================================================================================================== --> @@ -393,18 +394,21 @@ <h3 class='topic' onclick='toggle(this)'>1.1 - Features</h3> <div class='topic'> <ul class='spaced-list'> - <li> - KISS is our mantra! No auto-wiring. No code generation. No dependency injection (but still compatible with). - Just add it to your classpath and use it. Extremely simple unit testing! - <li> - Extensive and extensible support for a large variety of POJOs, including structured data (beans) and - unstructured data (<code>Maps</code> and <code>Collections</code>). - <li> - Sophisticated configurable serializers and parsers. - <br>For example, the JSON serializers and parsers can handle strict or lax syntax, comments, - concatenated strings, etc... + <li>KISS is our mantra! No auto-wiring. No code generation. No dependency injection. Just add it to your classpath and use it. Extremely simple unit testing! + <li>Enjoyable to use <li>Tiny - ~1MB <li>Exhaustively tested + <li>Lots of up-to-date documentation and examples + <li>Minimal library dependencies: + <ul> + <li><b>juneau-marshall</b>, <b>juneau-dto</b>, <b>juneau-svl</b>, <b>juneau-config</b> - No external dependencies. Entirely self-contained. + <li><b>juneau-marshall-rdf</b> - Optional RDF support. Requires Apache Jena 2.7.1+. + <li><b>juneau-rest-server</b> - Any Servlet 3.1.0+ container. + <li><b>juneau-rest-client</b> - Apache HttpClient 4.5+. + <li><b>juneau-microservice</b> - Eclipse Jetty. + </ul> + <li>Built on top of Servlet and Apache HttpClient APIs that allow you to use the newest HTTP/2 features + such as request/response multiplexing and server push. </ul> </div> @@ -1261,9 +1265,12 @@ <p> Transforms are added to serializers and parsers (and REST clients) using the following configuration properties: </p> - <ul> - <li class='jm'>{@link org.apache.juneau.BeanContext#BEAN_beanFilters} - <li class='jm'>{@link org.apache.juneau.BeanContext#BEAN_pojoSwaps} + <ul class='doctree'> + <li class='jc'>{@link org.apache.juneau.BeanContext} + <ul> + <li class='jf'>{@link org.apache.juneau.BeanContext#BEAN_beanFilters BEAN_beanFilters} + <li class='jf'>{@link org.apache.juneau.BeanContext#BEAN_pojoSwaps BEAN_pojoSwaps} + </ul> </ul> <p> Annotations are also provided for specifying transforms directly on classes and methods (all described in later sections): @@ -4383,17 +4390,21 @@ <br>The {@link org.apache.juneau.svl.VarResolver#DEFAULT} resolver is a reusable instance of this class configured with the following basic variables: </p> - <ul> - <li><code>$S{key}</code>,<code>$S{key,default}</code> - System properties. - <li><code>$E{key}</code>,<code>$E{key,default}</code> - Environment variables. + <ul class='doctree'> + <li class='jc'>{@link org.apache.juneau.svl.vars.SystemPropertiesVar} - <code>$S{key[,default]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.EnvVariablesVar} - <code>$E{key[,default]}</code> </ul> <p> The following logic variables are also provided: </p> - <ul> - <li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - If-else patterns. - <li><code>$SW{test,matchPattern:thenValue[,matchPattern:thenValue...][,elseValue]}</code> - Switch patterns. - <li><code>$CO{arg1[,arg2...]}</code> - Coalesce variable. + <ul class='doctree'> + <li class='jc'>{@link org.apache.juneau.svl.vars.IfVar} - <code>$IF{arg,then[,else]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.SwitchVar} - <code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.CoalesceVar} - <code>$CO{arg1[,arg2...]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.PatternMatchVar} - <code>$PM{arg,pattern}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.NotEmptyVar} - <code>$NE{arg}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.UpperCaseVar} - <code>$UC{arg}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.LowerCaseVar} - <code>$LC{arg}</code> </ul> <h5 class='figure'>Example:</h5> <p class='bcode'> @@ -4474,39 +4485,63 @@ <th>Module</th><th>Class</th><th>Pattern</th> </tr> <tr class='dark'> - <td rowspan="6" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td> + <td rowspan="9" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td> <td>{@link org.apache.juneau.svl.vars.EnvVariablesVar}</td> - <td class='code'>$E{envVar[,defaultValue]}</td> + <td class='code'>$E{key[,default]}</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.svl.vars.SystemPropertiesVar}</td> - <td class='code'>$S{systemProperty[,defaultValue]}</td> + <td class='code'>$S{key[,default]}</td> </tr> <tr class='dark'> - <td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td> - <td class='code'>$CO{arg1[,arg2...]}</td> + <td>{@link org.apache.juneau.svl.vars.ArgsVar}</td> + <td class='code'>$A{key[,default]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.ManifestFileVar}</td> + <td class='code'>$MF{key[,default]}</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.svl.vars.IfVar}</td> - <td class='code'>$IF{booleanArg ? thenValue}<br>$IF{booleanArg ? thenValue : elseValue}</td> + <td class='code'>$IF{arg,then[,else]}</td> </tr> <tr class='dark dd'> <td>{@link org.apache.juneau.svl.vars.SwitchVar}</td> - <td class='code'>$SW{stringArg ? pattern: value, pattern: value, ...}</td> + <td class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td> + <td class='code'>$CO{arg1[,arg2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.PatternMatchVar}</td> + <td class='code'>$PM{arg,pattern}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.NotEmptyVar}</td> + <td class='code'>$NE{arg}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.UpperCaseVar}</td> + <td class='code'>$UC{arg}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.LowerCaseVar}</td> + <td class='code'>$LC{arg}</td> </tr> <tr class='light dd'> <td rowspan="1" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-config</td> <td>{@link org.apache.juneau.config.vars.ConfigVar}</td> - <td class='code'>$C{key[,defaultValue]}</td> + <td class='code'>$C{key[,default]}</td> </tr> <tr class='dark'> <td rowspan="14" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td> <td>{@link org.apache.juneau.rest.vars.FileVar}</td> - <td class='code'>$F{path[,defaultValue]}}</td> + <td class='code'>$F{path[,default]}}</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.rest.vars.ServletInitParamVar}</td> - <td class='code'>$I{name[,defaultValue]}</td> + <td class='code'>$I{name[,default]}</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.rest.vars.LocalizationVar}</td> @@ -4542,7 +4577,7 @@ </tr> <tr class='dark'> <td>{@link org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td> - <td class='code'>$SA{contentType,key[,defaultValue]}</td> + <td class='code'>$SA{contentType,key[,default]}</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.rest.vars.UrlVar}</td> @@ -4554,16 +4589,7 @@ </tr> <tr class='dark dd'> <td>{@link org.apache.juneau.rest.vars.WidgetVar}</td> - <td class='code'>$W{widgetName}</td> - </tr> - <tr class='light'> - <td rowspan="2" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-microservice-server</td> - <td>{@link org.apache.juneau.microservice.vars.ArgsVar}</td> - <td class='code'>$ARG{key[,defaultValue]}</td> - </tr> - <tr class='light dd'> - <td>{@link org.apache.juneau.microservice.vars.ManifestFileVar}</td> - <td class='code'>$MF{key[,defaultValue]}</td> + <td class='code'>$W{name}</td> </tr> </table> </div> @@ -4622,7 +4648,7 @@ <h5 class='figure'>Example:</h5> <p class='bcode'> - <jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc> + <jc>// Create a resolver that copies the default resolver and adds $C and $A vars.</jc> VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf> .builder() .vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>) @@ -5124,9 +5150,7 @@ <li><code>getObject(<js>"..."</js>, HashMap.<jk>class</jk>, Integer.<jk>class</jk>, ArrayList.<jk>class</jk>, MyBean[].<jk>class</jk>)</code> <br>Produces: <code>LinkedHashMap<Integer,ArrayList<MyBean[]>></code> </ul> - <p> - For example: - </p> + <h5 class='figure'>Example:</h5> <p class='bcode'> <ck>addresses</ck> = <cv>[ @@ -5256,10 +5280,10 @@ By default, <code>Configs</code> use the {@link org.apache.juneau.svl.VarResolver#DEFAULT} variable resolver which provides support for the following variables and constructs: </p> - <ul class='spaced-list'> - <li><code>$C{key}</code>, <code>$C{key,default}</code> - {@link org.apache.juneau.config.vars.ConfigVar} - <li><code>$S{key}</code>, <code>$S{key,default}</code> - {@link org.apache.juneau.svl.vars.SystemPropertiesVar} - <li><code>$E{key}</code>, <code>$E{key,default}</code> - {@link org.apache.juneau.svl.vars.EnvVariablesVar} + <ul class='doctree'> + <li class='jc'>{@link org.apache.juneau.svl.vars.SystemPropertiesVar} - <code>$S{key[,default]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.EnvVariablesVar} - <code>$E{key[,default]}</code> + <li class='jc'>{@link org.apache.juneau.config.vars.ConfigVar} - <code>$C{key[,default]}</code> </ul> <p> The variable resolver is controlled via the following setting: @@ -5281,14 +5305,14 @@ <p> The default variable resolver also provides the following logic variables for performing simple logical operations: </p> - <ul class='spaced-list'> - <li><code>$IF{booleanValue, thenValue[, elseValue]}</code> - {@link org.apache.juneau.svl.vars.IfVar} - <li><code>$SW{stringValue, matchPattern:thenValue[ ,matchPattern:thenValue...]}</code> - {@link org.apache.juneau.svl.vars.SwitchVar} - <li><code>$CO{arg1[, arg2...]}</code> - {@link org.apache.juneau.svl.vars.CoalesceVar} - <li><code>$PM{stringValue, matchPattern}</code> - {@link org.apache.juneau.svl.vars.PatternMatchVar} - <li><code>$UC{stringValue}</code> - {@link org.apache.juneau.svl.vars.UpperCaseVar} - <li><code>$LC{stringValue}</code> - {@link org.apache.juneau.svl.vars.LowerCaseVar} - <li><code>$NE{stringValue}</code> - {@link org.apache.juneau.svl.vars.NotEmptyVar} + <ul class='doctree'> + <li class='jc'>{@link org.apache.juneau.svl.vars.IfVar} - <code>$IF{arg,then[,else]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.SwitchVar} - <code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.CoalesceVar} - <code>$CO{arg1[,arg2...]}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.PatternMatchVar} - <code>$PM{arg,pattern}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.NotEmptyVar} - <code>$NE{arg}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.UpperCaseVar} - <code>$UC{arg}</code> + <li class='jc'>{@link org.apache.juneau.svl.vars.LowerCaseVar} - <code>$LC{arg}</code> </ul> <p> The <code>$IF</code> variable can be used for simple if/else logic: @@ -5458,9 +5482,9 @@ <p class='bcode'> <jc>// Example bean</jc> <jk>public class</jk> Address { - public String street, city; - public StateEnum state; - public int zip; + <jk>public</jk> String <jf>street</jf>, <jf>city</jf>; + <jk>public</jk> StateEnum <jf>state</jf>; + <jk>public int</jk> <jf>zip</jf>; } <jc>// Example usage</jc> @@ -5785,13 +5809,17 @@ <ul class='doctree'> <li class='jc'>{@link org.apache.juneau.config.Config} <ul> - <li class='jm'>{@link org.apache.juneau.config.Config#writeTo(Writer)} - <li class='jm'>{@link org.apache.juneau.config.Config#toString()} + <li class='jm'>{@link org.apache.juneau.config.Config#writeTo(Writer) writeTo(Writer)} + <li class='jm'>{@link org.apache.juneau.config.Config#toString() toString()} </ul> </ul> <p> Both methods are thread safe. </p> + <p> + The <code>Config</code> class implements the {@link org.apache.juneau.Writable} which means it can be + returned as-is by REST methods to be serialized as INI text. + </p> </div> <!-- ======================================================================================================== --> @@ -5825,10 +5853,14 @@ </p> <p class='bcode'> <jk>public</jk> String write(String name, String oldContents, String newContents) { + <jc>// If the old contents match the current stored contents, the new contents will get stored, - // and the method returns null. + // and the method returns null indicating success. + // If the old contents DO NOT match the current stored contents (i.e. it was modified in some way), - // the new contents are NOT stored, and the method returns the current stored contents.</jc> + // the new contents are NOT stored, and the method returns the current stored contents. + + // If the old contents are null, then just always write the new contents.</jc> } </p> <p> @@ -5840,30 +5872,6 @@ } </p> <p> - The <code>ConfigStore</code> class also has the following listener methods: - </p> - <ul class='doctree'> - <li class='jac'>{@link org.apache.juneau.config.store.ConfigStore} - <ul> - <li class='jm'>{@link org.apache.juneau.config.store.ConfigStore#register(String,ConfigStoreListener) register(String,ConfigStoreListener)} - Register a listener on the specified config name. - <li class='jm'>{@link org.apache.juneau.config.store.ConfigStore#unregister(String,ConfigStoreListener) unregister(String,ConfigStoreListener)} - Unregister a listener on the specified config name. - </ul> - </ul> - <p> - Note that this is a different listener than {@link org.apache.juneau.config.event.ConfigEventListener}. - <br>In this case, we're just listening for changed files: - </p> - <ul class='doctree'> - <li class='jic'>{@link org.apache.juneau.config.store.ConfigStoreListener} - <ul> - <li class='jm'>{@link org.apache.juneau.config.store.ConfigStoreListener#onChange(String)} - Called when file changes. New contents are passed in. - </ul> - </ul> - <p> - This listener is used by the <code>Config</code> class to listen for changes on the file system so that it can be - updated in real-time. - </p> - <p> Two configuration stores are provided by default: </p> <ul> @@ -5979,7 +5987,7 @@ The <code>ConfigStore</code> API has been written to allow easy development of custom configuration storage classes. </p> <p> - The example belows shows a starting point for an implementation based on a relational database. + The example below shows a starting point for an implementation based on polling a relational database. <br>Completing it is left as an exercise: </p> <h5 class='figure'>Example Store Class:</h5> @@ -5990,13 +5998,14 @@ <jk>static final</jk> String <jsf>CONFIGSQLSTORE_jdbcUrl</jsf> = <js>"ConfigSqlStore.jdbcUrl.s"</js>, <jsf>CONFIGSQLSTORE_tableName</jsf> = <js>"ConfigSqlStore.tableName.s"</js>, - <jsf>CONFIGSQLSTORE_nameColumn</jsf> = <js>"ConfigSqlStore.nameColumn.s"</js>; - <jsf>CONFIGSQLSTORE_valueColumn</jsf> = <js>"ConfigSqlStore.valueColumn.s"</js>; + <jsf>CONFIGSQLSTORE_nameColumn</jsf> = <js>"ConfigSqlStore.nameColumn.s"</js>, + <jsf>CONFIGSQLSTORE_valueColumn</jsf> = <js>"ConfigSqlStore.valueColumn.s"</js>, + <jsf>CONFIGSQLSTORE_pollInterval</jsf> = <js>"ConfigSqlStore.pollInterval.i"</js>; <jc>// Instance fields</jc> <jk>private final</jk> String <jf>jdbcUrl</jf>; <jk>private final</jk> String <jf>tableName</jf>, <jf>nameColumn</jf>, <jf>valueColumn</jf>; - <jk>private final</jk> Thread <jf>watcherThread</jf>; + <jk>private final</jk> Timer <jf>watcher</jf>; <jk>private final</jk> ConcurrentHashMap<String,String> <jf>cache</jf> = <jk>new</jk> ConcurrentHashMap<>(); @@ -6008,17 +6017,21 @@ <jk>this</jk>.<jf>tableName</jf> = getStringProperty(<jsf>CONFIGSQLSTORE_tableName</jsf>); <jk>this</jk>.<jf>nameColumn</jf> = getStringProperty(<jsf>CONFIGSQLSTORE_nameColumn</jsf>); <jk>this</jk>.<jf>valueColumn</jf> = getStringProperty(<jsf>CONFIGSQLSTORE_valueColumn</jsf>); + + <jk>int</jk> pollInterval = getStringProperty(<jsf>CONFIGSQLSTORE_pollInterval</jsf>, 600); - <jk>this</jk>.watcherThread = <jk>new</jk> Thread() { - <ja>@Override</ja> <jc>/* Thread */</jc> + TimerTask timerTask = <jk>new</jk> TimerTask() { + <ja>@Override</ja> <jk>public void</jk> run() { - ConfigSqlStore.<jk>this</jk>.checkForUpdates(); + ConfigSqlStore.<jk>this</jk>.poll(); } - }; - watcherThread.start(); + }; + + <jk>this</jk>.<jf>watcher</jf> = <jk>new</jk> Timer(<js>"MyTimer"</js>); + <jf>watcher</jf>.scheduleAtFixedRate(timerTask, 0, pollInterval * 10000); } - <jk>private synchronized void</jk> checkForUpdates() { + <jk>private synchronized void</jk> poll() { <jc>// Loop through all our entries and find the latest values.</jc> <jk>for</jk> (Map.Entry<String,String> e : cache.entrySet()) { @@ -6042,7 +6055,7 @@ <jk>public synchronized</jk> String read(String name) { String contents = <jf>cache</jf>.get(name); <jk>if</jk> (contents == <jk>null</jk>) { - contents = readDatabaseValue(name); + contents = getDatabaseValue(name); update(name, contents); } <jk>return</jk> contents; @@ -6077,7 +6090,7 @@ <ja>@Override</ja> <jc>/* Closeable */</jc> <jk>public synchronized void</jk> close() { <jk>if</jk> (watcher != <jk>null</jk>) - watcher.interrupt(); + watcher.cancel(); } } </p> @@ -6117,13 +6130,47 @@ <jk>return this</jk>; } + <jk>public</jk> ConfigSqlStoreBuilder pollInterval(<jk>int</jk> value) { + <jk>super</jk>.set(<jsf>CONFIGSQLSTORE_pollInterval</jsf>, value); + <jk>return this</jk>; + } + <ja>@Override</ja> <jc>/* ContextBuilder */</jc> <jk>public</jk> ConfigFileStore build() { <jk>return new</jk> ConfigFileStore(getPropertyStore()); } } </div> - + + <!-- ======================================================================================================== --> + <a id="juneau-config.ConfigStoreListeners"></a> + <h4 class='topic' onclick='toggle(this)'>6.11.4 - ConfigStore Listeners</h4> + <div class='topic'> + <p> + The <code>ConfigStore</code> class has the following listener methods: + </p> + <ul class='doctree'> + <li class='jac'>{@link org.apache.juneau.config.store.ConfigStore} + <ul> + <li class='jm'>{@link org.apache.juneau.config.store.ConfigStore#register(String,ConfigStoreListener) register(String,ConfigStoreListener)} - Register a listener on the specified config name. + <li class='jm'>{@link org.apache.juneau.config.store.ConfigStore#unregister(String,ConfigStoreListener) unregister(String,ConfigStoreListener)} - Unregister a listener on the specified config name. + </ul> + </ul> + <p> + Note that this is a different listener than {@link org.apache.juneau.config.event.ConfigEventListener}. + <br>In this case, we're just listening for changed files: + </p> + <ul class='doctree'> + <li class='jic'>{@link org.apache.juneau.config.store.ConfigStoreListener} + <ul> + <li class='jm'>{@link org.apache.juneau.config.store.ConfigStoreListener#onChange(String)} - Called when file changes. New contents are passed in. + </ul> + </ul> + <p> + This listener is used by the <code>Config</code> class to listen for changes on the file system so that it can be + updated in real-time. + </p> + </div> </div> <!-- ======================================================================================================== --> @@ -6154,6 +6201,7 @@ In general, it's good practice to close Config if you're only creating them temporarily so that their listeners get unregistered from the underlying storage APIs. </p> + <h5 class='figure'>Example:</h5> <p class='bcode'> <jc>// Create a transient config.</jc> Config c = Config.<jsm>create</jsm>(<js>"MyConfig.cfg"</js>).build(); @@ -6314,9 +6362,7 @@ Our servlet code is shown below: </p> <p class='bcode'> - <jd>/** - * Sample REST resource that prints out a simple "Hello world!" message. - */</jd> + <jc>// Sample REST resource that prints out a simple "Hello world!" message.</jc> <ja>@RestResource</ja>( path=<js>"/helloWorld"</js>, title=<js>"Hello World"</js>, @@ -6377,18 +6423,9 @@ <ul> <li class='jac'>{@link org.apache.juneau.rest.RestServletDefault org.apache.juneau.rest.RestServletDefault} <br>Provides a default set of serializers, parsers, options page, stylesheet, and other common settings. - <br><b>Developers will typically subclass this when creating REST resources in JEE environments.</b> <ul> - <li class='jac'>{@link org.apache.juneau.microservice.Resource org.apache.juneau.microservice.Resource} - <br>Identical to <l>RestServletDefault</l> but provides support for <code>$ARGS</code> and <code>$MF</code> variables. - <br><b>Developers will typically subclass this when creating microservices.</b> - <li class='jac'>{@link org.apache.juneau.rest.RestServletGroupDefault org.apache.juneau.rest.RestServletGroupDefault} + <li class='jac'>{@link org.apache.juneau.rest.RestServletGroup org.apache.juneau.rest.RestServletGroup} <br>A default implementation for "router" pages. - <ul> - <li class='jac'>{@link org.apache.juneau.microservice.ResourceGroup org.apache.juneau.microservice.ResourceGroup} - <br>Identical to <l>RestServletGroupDefault</l> but provides support for <code>$ARGS</code> and <code>$MF</code> variables. - <br><b>Developers will typically subclass this when creating microservice groups.</b> - </ul> </li> </ul> </li> @@ -6419,14 +6456,24 @@ <p> REST resources are deployed in one of two ways: </p> - <ul> + <ul class='spaced-list'> <li>Deployed in a J2EE container as a servlet. <li>Deployed as a child of another REST resource. </ul> <p> When deployed in a J2EE container, you MUST extend from one of the servlet classes. - <br>When deployed as a child of another resource, you MAY extend from one of the servlet classes but it's - not necessary. + </p> + <p> + <b>When deployed as a child of another resource, you MAY extend from one of the servlet classes but it's + not necessary.</b> + <br>The only requirement is that the class be annotated with <ja>@RestResource</ja> and have one of the following constructors: + </p> + <ul> + <li class='jm'><code><jk>public</jk> T()</code> + <li class='jm'><code><jk>public</jk> T(RestContextBuilder)</code> + </ul> + <p> + And even that restriction is relaxed if you implement your own REST resource resolver (described later). </p> <!-- ======================================================================================================== --> @@ -6538,12 +6585,7 @@ ) <jk>public abstract class</jk> RestServletDefault <jk>extends</jk> RestServlet { - <jd>/** - * [OPTIONS /*] - Show resource options. - * - * @param req The HTTP request. - * @return A bean containing the contents for the OPTIONS page. - */</jd> + <jc>// Show resource options.</jc> <ja>@RestMethod</ja>(name=<jsf>OPTIONS</jsf>, path=<js>"/*"</js>, htmldoc=<ja>@HtmlDoc</ja>( navlinks={ @@ -6615,7 +6657,7 @@ <h4 class='topic' onclick='toggle(this)'>7.3.4 - Router Pages</h4> <div class='topic'> <p> - The {@link org.apache.juneau.rest.RestServletGroupDefault} class provides a default "router" page for + The {@link org.apache.juneau.rest.RestServletGroup} class provides a default "router" page for child resources when a parent resource is nothing more than a grouping of child resources. </p> <p> @@ -6650,7 +6692,7 @@ ShutdownResource.<jk>class</jk> } ) - <jk>public class</jk> RootResources <jk>extends</jk> RestServletGroupDefault { + <jk>public class</jk> RootResources <jk>extends</jk> RestServletGroup { <jc>// NO CODE!!!</jc> } </p> @@ -6660,13 +6702,15 @@ </p> <img class='bordered' src="doc-files/juneau-rest-server.RouterPages.1.png" style='width:800px;'/> <p> - The {@link org.apache.juneau.rest.RestServletGroupDefault} class is nothing more than a subclass of + The {@link org.apache.juneau.rest.RestServletGroup} class is nothing more than a subclass of {@link org.apache.juneau.rest.RestServletDefault} with a <l>getChildren()</l> method mapped to the servlet root path. <br>The method returns a POJO with is just a linked-list of beans with name/description properties. </p> <p class='bcode'> - <jk>public class</jk> RestServletGroupDefault <jk>extends</jk> RestServletDefault { + <jc>// The entire contents of the RestServletGroup class.</jc> + + <jk>public class</jk> RestServletGroup <jk>extends</jk> RestServletDefault { <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>, description=<js>"Child resources"</js>) <jk>public</jk> ChildResourceDescriptions getChildren(RestRequest req) { @@ -6684,11 +6728,11 @@ to any class as long as it has one of the following constructors: </p> <ul> - <li><code><jk>public</jk> T(RestContextBuilder)</code> - <li><code><jk>public</jk> T()</code> + <li class='jm'><code><jk>public</jk> T()</code> + <li class='jm'><code><jk>public</jk> T(RestContextBuilder)</code> </ul> <p> - The former constructor can be used to get access to the {@link org.apache.juneau.rest.RestContextBuilder} object to make + The latter constructor can be used to get access to the {@link org.apache.juneau.rest.RestContextBuilder} object to make any configurations to the resource before it's initialized. </p> <p> @@ -7871,7 +7915,7 @@ <ja>@RestResource</ja>( path=<js>"/urlEncodedForm"</js> ) - <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> Resource { + <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> RestServletDefault { <jd>/** POST request handler */</jd> <ja>@RestMethod</ja>(name=<jsf>POST</jsf>, path=<js>"/"</js>) @@ -8064,7 +8108,7 @@ <h3 class='topic' onclick='toggle(this)'>7.10 - @Header</h3> <div class='topic'> <p> - The {@link org.apache.juneau.rest.annotation.Header @Header} is used to retrieve request headers. + The {@link org.apache.juneau.rest.annotation.Header @Header} annotation is used to retrieve request headers. </p> <h5 class='figure'>Example:</h5> <p class='bcode'> @@ -8743,11 +8787,11 @@ <p> There are two distinct groups of variables: </p> - <ul> - <li>Initialization-time variables. + <ul class='spaced-list'> + <li><l>Initialization-time variables</l> <br>These are variables that can be used in many of the annotations in {@link org.apache.juneau.rest.annotation.RestResource @RestResource}. <br>The {@link org.apache.juneau.rest.RestContext#getVarResolver()} method returns initialization-time variables only. - <li>Request-time variables. + <li><l>Request-time variables</l> <br>These are variables that are available during HTTP-requests and can be used on annotation such as {@link org.apache.juneau.rest.annotation.HtmlDoc @HtmlDoc}. <br>{@link org.apache.juneau.rest.RestRequest#getVarResolverSession()} method returns initialization and request-time variables. </ul> @@ -8761,53 +8805,89 @@ <th>Module</th><th>Class</th><th>Pattern</th><th>Initialization<br>time</th><th>Request<br>time</th> </tr> <tr class='dark'> - <td rowspan="6" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td> + <td rowspan="11" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td> <td>{@link org.apache.juneau.svl.vars.EnvVariablesVar}</td> - <td class='code'>$E{envVar[,defaultValue]}</td> + <td class='code'>$E{key[,default]}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.svl.vars.SystemPropertiesVar}</td> - <td class='code'>$S{systemProperty[,defaultValue]}</td> + <td class='code'>$S{key[,default]}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='dark'> - <td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td> - <td class='code'>$CO{arg1[,arg2...]}</td> + <td>{@link org.apache.juneau.svl.vars.ArgsVar}</td> + <td class='code'>$A{key[,default]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.ManifestFileVar}</td> + <td class='code'>$MF{key[,default]}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.svl.vars.IfVar}</td> - <td class='code'>$IF{booleanArg,thenValue[,elseValue]}</td> + <td class='code'>$IF{arg,then[,else]}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='dark dd'> <td>{@link org.apache.juneau.svl.vars.SwitchVar}</td> - <td class='code'>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</td> + <td class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td> + <td class='code'>$CO{arg1[,arg2...]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.PatternMatchVar}</td> + <td class='code'>$PM{arg,pattern}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.NotEmptyVar}</td> + <td class='code'>$NE{arg}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.UpperCaseVar}</td> + <td class='code'>$UC{arg}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.LowerCaseVar}</td> + <td class='code'>$LC{arg}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='light dd'> <td rowspan="1" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-config</td> <td>{@link org.apache.juneau.config.vars.ConfigVar}</td> - <td class='code'>$C{key[,defaultValue]}</td> + <td class='code'>$C{key[,default]}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='dark'> <td rowspan="14" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td> <td>{@link org.apache.juneau.rest.vars.FileVar}</td> - <td class='code'>$F{path[,defaultValue]}}</td> + <td class='code'>$F{path[,default]}}</td> <td style='text-align:center;font-weight:bold'>no</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> <tr class='dark'> <td>{@link org.apache.juneau.rest.vars.ServletInitParamVar}</td> - <td class='code'>$I{name[,defaultValue]}</td> + <td class='code'>$I{name[,default]}</td> <td style='text-align:center;font-weight:bold'>yes</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> @@ -8861,7 +8941,7 @@ </tr> <tr class='dark'> <td>{@link org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td> - <td class='code'>$SA{contentType,key[,defaultValue]}</td> + <td class='code'>$SA{contentType,key[,default]}</td> <td style='text-align:center;font-weight:bold'>no</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> @@ -8879,27 +8959,11 @@ </tr> <tr class='dark dd'> <td>{@link org.apache.juneau.rest.vars.WidgetVar}</td> - <td class='code'>$W{widgetName}</td> + <td class='code'>$W{name}</td> <td style='text-align:center;font-weight:bold'>no</td> <td style='text-align:center;font-weight:bold'>yes</td> </tr> - <tr class='light'> - <td rowspan="2" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-microservice-server</td> - <td>{@link org.apache.juneau.microservice.vars.ArgsVar}</td> - <td class='code'>$ARG{key[,defaultValue]}</td> - <td style='text-align:center;font-weight:bold'>yes*</td> - <td style='text-align:center;font-weight:bold'>yes*</td> - </tr> - <tr class='light dd'> - <td>{@link org.apache.juneau.microservice.vars.ManifestFileVar}</td> - <td class='code'>$MF{key[,defaultValue]}</td> - <td style='text-align:center;font-weight:bold'>yes*</td> - <td style='text-align:center;font-weight:bold'>yes*</td> - </tr> </table> - <p> - * = Only if extending from {@link org.apache.juneau.microservice.Resource} - <p> </div> <!-- ======================================================================================================== --> @@ -8951,7 +9015,7 @@ </p> <p> The annotation itself can contain string variables. - <br>For example, the Microservice API {@link org.apache.juneau.microservice.Resource} class defines the + <br>For example, the Microservice API {@link org.apache.juneau.rest.RestServletDefault} class defines the location of the config file as a system property <l>"juneau.configFile"</l>: </p> <p class='bcode'> @@ -9698,7 +9762,7 @@ ), ... ) - <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup {...} + <jk>public class</jk> RootResources <jk>extends</jk> RestServletJenaGroup {...} </p> <p> The widget definition is shown below: @@ -9808,7 +9872,7 @@ <js>"source: $C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js> }, ) - <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup {...} + <jk>public class</jk> RootResources <jk>extends</jk> RestServletJenaGroup {...} </p> <p> The <l>StyleMenuItem</l> is a widget that extends from {@link org.apache.juneau.rest.widget.MenuItemWidget}, a @@ -10822,7 +10886,7 @@ ... } ) - <jk>public class</jk> Root <jk>extends</jk> RestServletGroupDefault { + <jk>public class</jk> Root <jk>extends</jk> RestServletGroup { <jk>private final</jk> RestResourceResolver <jf>resolver</jf>; @@ -10888,7 +10952,7 @@ <br>The following examples is pulled from the REST examples: </p> <p class='bcode'> - <jk>public class</jk> PredefinedLabelsResource <jk>extends</jk> Resource { + <jk>public class</jk> PredefinedLabelsResource <jk>extends</jk> RestServletDefault { <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>) <jk>public</jk> ResourceDescription[] getChildMethods() { @@ -12220,14 +12284,6 @@ <br>Starts up an externally-configured Jetty server, registers servlets, and sets up other features such as logging. </ul> - <li class='jc'> - {@link org.apache.juneau.microservice.Resource} - - A subclass of <code>RestServletDefault</code> with support for manfest-file and args variables - and configured to use the external INI file. - <li class='jc'> - {@link org.apache.juneau.microservice.ResourceGroup} - - A subclass of <code>RestServletGroupDefault</code> with support for manfest-file and args variables - and configured to use the external INI file. </ul> </div> @@ -12288,7 +12344,7 @@ LogsResource.<jk>class</jk> } ) - <jk>public class</jk> RootResources <jk>extends</jk> ResourceGroup { + <jk>public class</jk> RootResources <jk>extends</jk> RestServletJenaGroup { <jc>// No code</jc> } </p> @@ -12654,16 +12710,16 @@ <ck>sameAsAnInt</ck> = <cv>$C{MySection/anInt}</cv> <cc># A command-line argument in the form "myarg=foo"</cc> - <ck>myArg</ck> = <cv>$ARG{myarg}</cv> + <ck>myArg</ck> = <cv>$A{myarg}</cv> <cc># The first command-line argument</cc> - <ck>firstArg</ck> = <cv>$ARG{0}</cv> + <ck>firstArg</ck> = <cv>$A{0}</cv> <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc> - <ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}}</cv> + <ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}</cv> <cc># A POJO with embedded variables</cc> - <ck>aBean2</ck> = <cv>{foo:'$ARG{0}',baz:$C{MySection/anInt}}</cv> + <ck>aBean2</ck> = <cv>{foo:'$A{0}',baz:$C{MySection/anInt}}</cv> </p> <p class='bcode'> @@ -12693,9 +12749,9 @@ </p> <ul class='doctree'> <li class='jm'>{@link org.apache.juneau.microservice.Microservice#getConfig()} - <br>Any <a class='doclink' href='#DefaultRestSvlVariables'>initialization-time variables</a> and <l>$ARG</l> and <l>$MF</l> variables can be used. + <br>Any <a class='doclink' href='#DefaultRestSvlVariables'>initialization-time variables</a> and <l>$A</l> and <l>$MF</l> variables can be used. <li class='jm'>{@link org.apache.juneau.rest.RestContext#getConfig()} - <br>Any <a class='doclink' href='#DefaultRestSvlVariables'>initialization-time variables</a> and <l>$ARG</l> and <l>$MF</l> variables can be used. + <br>Any <a class='doclink' href='#DefaultRestSvlVariables'>initialization-time variables</a> and <l>$A</l> and <l>$MF</l> variables can be used. <h5 class='figure'>Example usage:</h5> <p class='bcode'> <cc>#-------------------------------</cc> @@ -12706,7 +12762,7 @@ </p> <p class='bcode'> <ja>@RestResource</ja>(...) - <jk>public class</jk> MyHelloResource <jk>extends</jk> Resource { + <jk>public class</jk> MyHelloResource <jk>extends</jk> RestServletDefault { <jc>// Access config file when initializing fields.</jc> <jk>private</jk> String greeting = getConfig().getString(<js>"MyHelloResource/greeting"</js>); @@ -12725,7 +12781,7 @@ <li class='jm'> {@link org.apache.juneau.rest.RestRequest#getConfig()} - An instance method to access it from inside a REST method. - <br>Any <a class='doclink' href='#DefaultRestSvlVariables'>initialization-time or request-time variables</a> and <l>$ARG</l> and <l>$MF</l> variables can be used. + <br>Any <a class='doclink' href='#DefaultRestSvlVariables'>initialization-time or request-time variables</a> and <l>$A</l> and <l>$MF</l> variables can be used. <h5 class='figure'>Example usage:</h5> <p class='bcode'> @@ -12745,7 +12801,7 @@ messages=<js>"nls/Messages"</js>, ... ) - <jk>public class</jk> MyHelloResource <jk>extends</jk> Resource { + <jk>public class</jk> MyHelloResource <jk>extends</jk> RestServletDefault { <jd>/** Standard hello message. */</jd> <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/{person}"</js>) @@ -12835,7 +12891,7 @@ LogsResource.<jk>class</jk> } ) - <jk>public class</jk> RootResources <jk>extends</jk> ResourceGroup { + <jk>public class</jk> RootResources <jk>extends</jk> RestServletJenaGroup { <jc>// No code! </jc> } </p> @@ -12851,7 +12907,7 @@ <li> The <l>children</l> annotation make up the list of child resources. <br>These child resources can be anything that extends from <l>Servlet</l>, although usually - they will be subclasses of {@link org.apache.juneau.microservice.Resource} or other resource groups. + they will be subclasses of {@link org.apache.juneau.rest.RestServletDefault} or other resource groups. </ul> <p> If you click the <l>helloWorld</l> link in your application, you'll get a simple hello world message: @@ -12866,7 +12922,7 @@ title=<js>"Hello World example"</js>, description=<js>"Simplest possible REST resource"</js> ) - <jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource { + <jk>public class</jk> HelloWorldResource <jk>extends</jk> RestServletDefault { <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>) <jk>public</jk> String sayHello() { @@ -12874,11 +12930,6 @@ } } </p> - <p> - The {@link org.apache.juneau.microservice.Resource} and {@link org.apache.juneau.microservice.ResourceGroup} - classes are powerful servlets designed specifically for creating REST APIs using nothing more than serialized - and parsed POJOs. - </p> </div> <!-- =========================================================================================================== --> @@ -13084,18 +13135,8 @@ <br>Defines default serializers and parsers, and OPTIONs page logic. <ul> <li class='jac'> - {@link org.apache.juneau.rest.RestServletGroupDefault org.apache.juneau.rest.RestServletGroupDefault} + {@link org.apache.juneau.rest.RestServletGroup org.apache.juneau.rest.RestServletGroup} <br>Specialized subclass for grouping other resources - <ul> - <li class='jac'> - {@link org.apache.juneau.microservice.ResourceGroup org.apache.juneau.microservice.ResourceGroup} - <br>Specialized subclass when using the Microservice API. - <ul> - <li class='jc'> - <code>org.apache.juneau.rest.samples.RootResources</code> - </ul> - </li> - </ul> </li> </ul> </li> @@ -13159,7 +13200,7 @@ ShutdownResource.<jk>class</jk> } ) - <jk>public class</jk> RootResources <jk>extends</jk> ResourceGroup { + <jk>public class</jk> RootResources <jk>extends</jk> RestServletJenaGroup { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; } </p> @@ -13194,7 +13235,7 @@ <h5 class='figure'>HelloWorldResource.java</h5> <p class='bcode'> <ja>@RestResource</ja>(messages=<js>"nls/HelloWorldResource"</js>, path=<js>"/helloWorld"</js>) - <jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource { + <jk>public class</jk> HelloWorldResource <jk>extends</jk> RestServletDefault { </p> <p> It should be noted that child resources do not need to be defined this way. @@ -13248,7 +13289,7 @@ } ) ) - <jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource { + <jk>public class</jk> HelloWorldResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jd>/** GET request handler */</jd> @@ -13279,15 +13320,6 @@ <li class='jac'> {@link org.apache.juneau.rest.RestServletDefault org.apache.juneau.rest.RestServletDefault} <br>Defines default serializers and parsers, and OPTIONs page logic. - <ul> - <li class='jac'> - {@link org.apache.juneau.microservice.Resource org.apache.juneau.microservice.Resource} - <br>Specialized subclass when using the Microservice API. - <ul> - <li class='jc'><code>org.apache.juneau.rest.samples.HelloWorldResource</code> - </ul> - </li> - </ul> </li> </ul> </li> @@ -13341,7 +13373,7 @@ } ) ) - <jk>public class</jk> MethodExampleResource <jk>extends</jk> Resource { + <jk>public class</jk> MethodExampleResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jd>/** Example GET request that redirects to our example method */</jd> @@ -13646,7 +13678,7 @@ path=<js>"/urlEncodedForm"</js>, messages=<js>"nls/UrlEncodedFormResource"</js> ) - <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> Resource { + <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jd>/** GET request handler */</jd> @@ -13870,7 +13902,7 @@ EnumerationSwap.<jk>class</jk> } ) - <jk>public class</jk> RequestEchoResource <jk>extends</jk> Resource { + <jk>public class</jk> RequestEchoResource <jk>extends</jk> RestServletDefault { <jd>/** GET request handler */</jd> <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, converters={Queryable.<jk>class</jk>,Traversable.<jk>class</jk>}) @@ -14420,7 +14452,7 @@ url:'http://juneau.apache.org'}}]"</js>, externalDocs=<js>"{description:'Home page',url:'http://juneau.apache.org'}"</js> ) - <jk>public class</jk> AddressBookResource <jk>extends</jk> ResourceJena { + <jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jc>// The in-memory address book</jc> @@ -15343,7 +15375,7 @@ }, encoders=GzipEncoder.<jk>class</jk> ) - <jk>public class</jk> AtomFeedResource <jk>extends</jk> ResourceJena { + <jk>public class</jk> AtomFeedResource <jk>extends</jk> RestServletJenaDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jk>private</jk> Feed <jf>feed</jf>; <jc>// The root resource object</jc> @@ -15452,7 +15484,7 @@ } ) ) - <jk>public class</jk> DockerRegistryResource <jk>extends</jk> Resource { + <jk>public class</jk> DockerRegistryResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jc>// Get registry URL from examples.cfg file.</jc> @@ -15537,7 +15569,7 @@ } ) ) - <jk>public class</jk> TumblrParserResource <jk>extends</jk> Resource { + <jk>public class</jk> TumblrParserResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>) @@ -15774,7 +15806,7 @@ } ) ) - <jk>public class</jk> JsonSchemaResource <jk>extends</jk> ResourceJena { + <jk>public class</jk> JsonSchemaResource <jk>extends</jk> RestServletJenaDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jk>private</jk> Schema schema; <jc>// The schema document</jc> @@ -15865,7 +15897,7 @@ } ) ) - <jk>public class</jk> SqlQueryResource <jk>extends</jk> Resource { + <jk>public class</jk> SqlQueryResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jk>private</jk> Config <jf>cf</jf> = getConfig(); @@ -16060,7 +16092,7 @@ } ) ) - <jk>public class</jk> ConfigResource <jk>extends</jk> Resource { + <jk>public class</jk> ConfigResource <jk>extends</jk> RestServletDefault { <jk>private static final long</jk> <jsf>serialVersionUID</jsf> = 1L; <jd>/** @@ -16521,6 +16553,12 @@ <li>{@link org.apache.juneau.svl.vars.UpperCaseVar} <li>{@link org.apache.juneau.svl.vars.LowerCaseVar} </ul> + <li> + Variables moved from <l>juneau-microservice</l>: + <ul> + <li>{@link org.apache.juneau.svl.vars.ArgsVar} + <li>{@link org.apache.juneau.svl.vars.ManifestFileVar} + </ul> </ul> <h5 class='topic'>juneau-config</h5> @@ -16530,6 +16568,23 @@ <li> <code>Config.write(Reader,boolean)</code> method renamed to {@link org.apache.juneau.config.Config#load(Reader,boolean)}. </ul> + + <h5 class='topic'>juneau-rest-server</h5> + <ul class='spaced-list'> + <li> + <code>RestServletGroupDefault</code> renamed to {@link org.apache.juneau.rest.RestServletGroup}. + </ul> + + <h5 class='topic'>juneau-microservice</h5> + <ul class='spaced-list'> + <li> + <code>Resource</code> and <code>ResourceGroup</code> classes removed. + <br>{@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.RestServletGroup} can be used instead. + <li> + <code>ResourceJena</code> and <code>ResourceJenaGroup</code> classes rename to + {@link org.apache.juneau.microservice.RestServletJenaDefault} and {@link org.apache.juneau.microservice.RestServletJenaGroup} can be used instead. + + </ul> </div> <!-- =========================================================================================================== --> @@ -16912,7 +16967,7 @@ instead of <code>close()</code> on the stream. <li> Added the following annotations to the {@link org.apache.juneau.rest.RestServletDefault} class - (which were previously defined on the {@link org.apache.juneau.microservice.Resource} class): + (which were previously defined on the <code><del>Resource</del></code> class): <p class='bcode'> <ja>@RestResource</ja>( htmldoc=<ja>@HtmlDoc</ja>( @@ -19448,14 +19503,14 @@ </ul> <li>Eliminated <code>org.apache.juneau.microservice.Main</code> class. This is replaced by the microservice classes defined above. - <li>{@link org.apache.juneau.microservice.Resource} and {@link org.apache.juneau.microservice.ResourceGroup} + <li><code><del>Resource</del></code> and <code><del>ResourceGroup</del></code> classes now support the following new string variables: <ul> - <li><js>"$ARG{key,default}""</js> - Command line arguments. + <li><js>"$A{key,default}""</js> - Command line arguments. <li><js>"$MF{key,default}""</js> - Manifest file entries. </ul> <li>CSS stylesheet now configurable through config file entry <js>"REST/stylesheet"</js>. - <li>New {@link org.apache.juneau.microservice.ResourceJena} class if you want your REST interface to support RDF. + <li>New {@link org.apache.juneau.microservice.RestServletJenaDefault} class if you want your REST interface to support RDF. <li>Eliminated the following classes: <ul> <li><code>org.apache.juneau.microservice.RootResource</code> @@ -19741,7 +19796,7 @@ <ja>@Property</ja>(name=<jsf>HTMLDOC_navlinks</jsf>, value=<js>"{back:'$R{servletURI}"</js>), <ja>@Property</ja>(name=<jsf>HTMLDOC_description</jsf>, value=<js>"Resource options"</js>) </p> - <li>New {@link org.apache.juneau.rest.RestServletGroupDefault} class. + <li>New {@link org.apache.juneau.rest.RestServletGroup} class. <li>Removed <code>RestServletProperties.REST_trimTrailingUriSlashes</code> and <code>RestServletProperties.REST_pathInfoBlankForNull</code>. <li>New annotations for providing labels and descriptions. Useful if you don't plan on having to support other languages, so you don't want to provide labels in resource bundles. diff --git a/juneau-doc/src/main/javadoc/resources/juneau-doc.css b/juneau-doc/src/main/javadoc/resources/juneau-doc.css index 30572bd..260eec2 100755 --- a/juneau-doc/src/main/javadoc/resources/juneau-doc.css +++ b/juneau-doc/src/main/javadoc/resources/juneau-doc.css @@ -202,6 +202,11 @@ ul.toc div, padding-left: 5px; } +p.toc2 { + background-color: #dee3e950; + border-radius: 0px 15px 15px 0px; +} + /* Linear gradients */ /* Light-colored background headers */ diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java index a2f73f5..ce46f11 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java @@ -13,10 +13,9 @@ package org.apache.juneau.examples.rest; import static org.apache.juneau.dto.atom.AtomBuilder.*; -import static org.apache.juneau.html.HtmlDocSerializer.*; +import static org.apache.juneau.http.HttpMethodName.*; import static org.apache.juneau.jena.RdfCommon.*; import static org.apache.juneau.jena.RdfSerializer.*; -import static org.apache.juneau.http.HttpMethodName.*; import java.net.*; @@ -53,7 +52,7 @@ import org.apache.juneau.rest.widget.*; }, encoders=GzipEncoder.class ) -public class AtomFeedResource extends ResourceJena { +public class AtomFeedResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; private Feed feed; // The root resource object diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java index 72b77e9..e784d22 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java @@ -16,7 +16,6 @@ import static org.apache.juneau.dto.html5.HtmlBuilder.*; import static org.apache.juneau.http.HttpMethodName.*; import org.apache.juneau.dto.html5.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; @@ -45,7 +44,7 @@ import org.apache.juneau.rest.annotation.*; ) ) @SuppressWarnings({"serial"}) -public class CodeFormatterResource extends Resource { +public class CodeFormatterResource extends RestServletDefault { /** [GET /] - Display query entry page. */ @RestMethod(name=GET, path="/") diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java index 1a83c90..0f438c2 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java @@ -12,18 +12,17 @@ // *************************************************************************************************************************** package org.apache.juneau.examples.rest; -import static org.apache.juneau.rest.annotation.HookEvent.*; import static java.util.logging.Level.*; import static javax.servlet.http.HttpServletResponse.*; -import static org.apache.juneau.html.HtmlDocSerializer.*; +import static org.apache.juneau.html.HtmlSerializer.*; import static org.apache.juneau.http.HttpMethodName.*; +import static org.apache.juneau.rest.annotation.HookEvent.*; import java.io.*; import java.net.*; import java.util.*; import java.util.logging.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.converters.*; @@ -57,7 +56,7 @@ import org.apache.juneau.utils.*; @Property(name="allowPuts", value="false") } ) -public class DirectoryResource extends Resource { +public class DirectoryResource extends RestServletDefault { private static final long serialVersionUID = 1L; private File rootDir; // The root directory diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java index 8ba0892..41cf2ac 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java @@ -12,13 +12,12 @@ // *************************************************************************************************************************** package org.apache.juneau.examples.rest; -import static org.apache.juneau.rest.annotation.HookEvent.*; import static org.apache.juneau.http.HttpMethodName.*; +import static org.apache.juneau.rest.annotation.HookEvent.*; import java.util.*; import org.apache.juneau.config.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.client.*; @@ -41,7 +40,7 @@ import org.apache.juneau.rest.labels.*; aside="$F{resources/DockerRegistryResourceAside.html}" ) ) -public class DockerRegistryResource extends Resource { +public class DockerRegistryResource extends RestServletDefault { private static final long serialVersionUID = 1L; // Get registry URL from examples.cfg file. diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java index b34e505..fc2706d 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java @@ -14,7 +14,7 @@ package org.apache.juneau.examples.rest; import static org.apache.juneau.http.HttpMethodName.*; -import org.apache.juneau.microservice.*; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; /** @@ -38,7 +38,7 @@ import org.apache.juneau.rest.annotation.*; } ) ) -public class HelloWorldResource extends Resource { +public class HelloWorldResource extends RestServletDefault { /** GET request handler */ @RestMethod(name=GET, path="/*", summary="Responds with \"Hello world!\"") diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java index c6be826..808d674 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java @@ -46,7 +46,7 @@ import org.apache.juneau.rest.widget.*; } ) ) -public class JsonSchemaResource extends ResourceJena { +public class JsonSchemaResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; private Schema schema; // The schema document diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java index 28b5532..23d5bae 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java @@ -17,10 +17,8 @@ import static org.apache.juneau.http.HttpMethodName.*; import java.util.*; import org.apache.juneau.http.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; -import org.apache.juneau.rest.annotation.Method; import org.apache.juneau.rest.labels.*; import org.apache.juneau.utils.*; @@ -44,7 +42,7 @@ import org.apache.juneau.utils.*; } ) ) -public class MethodExampleResource extends Resource { +public class MethodExampleResource extends RestServletDefault { private static final long serialVersionUID = 1L; private static final UUID SAMPLE_UUID = UUID.fromString("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"); diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java index 7c355e7..8ff2d7d 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java @@ -13,8 +13,8 @@ package org.apache.juneau.examples.rest; import static org.apache.juneau.dto.html5.HtmlBuilder.*; -import static org.apache.juneau.rest.annotation.HookEvent.*; import static org.apache.juneau.http.HttpMethodName.*; +import static org.apache.juneau.rest.annotation.HookEvent.*; import java.util.*; import java.util.Map; @@ -68,7 +68,7 @@ import org.apache.juneau.transforms.*; ), staticFiles={"htdocs:htdocs"} ) -public class PetStoreResource extends ResourceJena { +public class PetStoreResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; // Our database. diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java index 989ee65..817410f 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java @@ -19,13 +19,11 @@ import static org.apache.juneau.http.HttpMethodName.*; import java.awt.image.*; import java.io.*; import java.net.*; -import java.net.URI; import java.util.*; import javax.imageio.*; import org.apache.juneau.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.parser.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; @@ -57,7 +55,7 @@ import org.apache.juneau.serializer.*; @Property(name=HTML_uriAnchorText, value="SERVLET_RELATIVE") } ) -public class PhotosResource extends Resource { +public class PhotosResource extends RestServletDefault { private static final long serialVersionUID = 1L; // Our cache of photos diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java index e2c9548..752ecbc 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java @@ -16,7 +16,7 @@ import static org.apache.juneau.http.HttpMethodName.*; import org.apache.juneau.examples.addressbook.*; import org.apache.juneau.html.annotation.*; -import org.apache.juneau.microservice.*; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.labels.*; import org.apache.juneau.rest.widget.*; @@ -42,7 +42,7 @@ import org.apache.juneau.rest.widget.*; } ) ) -public class PredefinedLabelsResource extends Resource { +public class PredefinedLabelsResource extends RestServletDefault { private static final long serialVersionUID = 1L; @RestMethod(name=GET, path="/") diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java index 7a528a1..f163091 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java @@ -12,12 +12,11 @@ // *************************************************************************************************************************** package org.apache.juneau.examples.rest; -import static org.apache.juneau.html.HtmlDocSerializer.*; +import static org.apache.juneau.serializer.Serializer.*; import javax.servlet.*; import javax.servlet.http.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.converters.*; @@ -64,7 +63,7 @@ import org.apache.juneau.transforms.*; EnumerationSwap.class } ) -public class RequestEchoResource extends Resource { +public class RequestEchoResource extends RestServletDefault { private static final long serialVersionUID = 1L; /** GET request handler */ diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java index fcef063..1816511 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java @@ -81,7 +81,7 @@ import org.apache.juneau.rest.widget.*; ShutdownResource.class } ) -public class RootResources extends ResourceJenaGroup { +public class RootResources extends RestServletJenaGroup { // IMPORTANT! If you don't need RDF support, change the parent class to ResourceGroup. // It allows you to remove the Jena prerequisite. diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java index bde41df..dfc97a0 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java @@ -14,9 +14,9 @@ package org.apache.juneau.examples.rest; import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.dto.html5.HtmlBuilder.*; +import static org.apache.juneau.http.HttpMethodName.*; import static org.apache.juneau.internal.StringUtils.*; import static org.apache.juneau.rest.annotation.HookEvent.*; -import static org.apache.juneau.http.HttpMethodName.*; import java.sql.*; import java.util.*; @@ -24,7 +24,6 @@ import java.util.*; import org.apache.juneau.config.*; import org.apache.juneau.dto.*; import org.apache.juneau.dto.html5.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.annotation.Body; @@ -56,7 +55,7 @@ import org.apache.juneau.rest.widget.*; } ) ) -public class SqlQueryResource extends Resource { +public class SqlQueryResource extends RestServletDefault { private static final long serialVersionUID = 1L; private String driver, connectionUrl; diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java index 2b8e8eb..a62f997 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java @@ -13,15 +13,14 @@ package org.apache.juneau.examples.rest; import static org.apache.juneau.dto.html5.HtmlBuilder.*; -import static org.apache.juneau.html.HtmlDocSerializer.*; import static org.apache.juneau.http.HttpMethodName.*; +import static org.apache.juneau.serializer.Serializer.*; import java.util.*; import java.util.Map; import org.apache.juneau.dto.html5.*; import org.apache.juneau.encoders.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.annotation.Body; @@ -88,7 +87,7 @@ import org.apache.juneau.rest.widget.*; externalDocs="{description:'Home page',url:'http://juneau.apache.org'}" ) ) -public class SystemPropertiesResource extends Resource { +public class SystemPropertiesResource extends RestServletDefault { private static final long serialVersionUID = 1L; @RestMethod( diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java index bbbb80b..b05cba5 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java @@ -15,9 +15,9 @@ package org.apache.juneau.examples.rest; import static org.apache.juneau.http.HttpMethodName.*; import org.apache.juneau.*; -import org.apache.juneau.dto.LinkString; +import org.apache.juneau.dto.*; import org.apache.juneau.dto.html5.*; -import org.apache.juneau.microservice.*; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.client.*; @@ -40,7 +40,7 @@ import org.apache.juneau.rest.client.*; } ) ) -public class TumblrParserResource extends Resource { +public class TumblrParserResource extends RestServletDefault { private static final long serialVersionUID = 1L; private static final int MAX_POSTS = 100; diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java index 0544a24..3f6a5af 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java @@ -19,7 +19,6 @@ import java.util.*; import org.apache.juneau.annotation.*; import org.apache.juneau.dto.html5.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.annotation.Body; @@ -50,7 +49,7 @@ import org.apache.juneau.transforms.*; } ) ) -public class UrlEncodedFormResource extends Resource { +public class UrlEncodedFormResource extends RestServletDefault { private static final long serialVersionUID = 1L; /** GET request handler */ diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java index 8dd6cf2..bf67847 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java @@ -117,7 +117,7 @@ import org.apache.juneau.utils.*; externalDocs="{description:'Home page',url:'http://juneau.apache.org'}" ) ) -public class AddressBookResource extends ResourceJena { +public class AddressBookResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; // The in-memory address book diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java index 993eb17..9d609bd 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java @@ -31,9 +31,9 @@ import org.apache.juneau.config.vars.*; import org.apache.juneau.internal.*; import org.apache.juneau.microservice.console.*; import org.apache.juneau.microservice.resources.*; -import org.apache.juneau.microservice.vars.*; import org.apache.juneau.svl.*; import org.apache.juneau.svl.vars.*; +import org.apache.juneau.svl.vars.ManifestFileVar; import org.apache.juneau.utils.*; /** @@ -150,7 +150,8 @@ public abstract class Microservice implements ConfigEventListener { Console c = System.console(); consoleReader = new Scanner(c == null ? new InputStreamReader(System.in) : c.reader()); consoleWriter = c == null ? new PrintWriter(System.out, true) : c.writer(); - this.args = new Args(args); + setArgs(new Args(args)); + setManifest(this.getClass()); } private static void setInstance(Microservice m) { @@ -218,9 +219,22 @@ public abstract class Microservice implements ConfigEventListener { * </ol> * * @param mf The manifest file of this microservice. + * @return This object (for method chaining). + */ + public Microservice setManifest(ManifestFile mf) { + this.mf = mf; + ManifestFileVar.init(this.mf); + return this; + } + + /** + * Shortcut for calling <code>setManifest(<jk>new</jk> ManifestFile(mf))</code>. + * + * @param mf The manifest file of this microservice. + * @return This object (for method chaining). */ - public void setManifest(Manifest mf) { - this.mf = new ManifestFile(mf); + public Microservice setManifest(Manifest mf) { + return setManifest(new ManifestFile(mf)); } /** @@ -232,18 +246,18 @@ public abstract class Microservice implements ConfigEventListener { */ public Microservice setManifestContents(String...contents) throws IOException { String s = StringUtils.join(contents, "\n") + "\n"; - this.mf = new ManifestFile(new Manifest(new ByteArrayInputStream(s.getBytes("UTF-8")))); - return this; + return setManifest(new ManifestFile(new Manifest(new ByteArrayInputStream(s.getBytes("UTF-8"))))); } /** * Same as {@link #setManifest(Manifest)} except specified through a {@link File} object. * * @param f The manifest file of this microservice. + * @return This object (for method chaining). * @throws IOException If a problem occurred while trying to read the manifest file. */ - public void setManifest(File f) throws IOException { - this.mf = new ManifestFile(f); + public Microservice setManifest(File f) throws IOException { + return setManifest(new ManifestFile(f)); } /** @@ -251,10 +265,11 @@ public abstract class Microservice implements ConfigEventListener { * specified class is contained within. * * @param c The class whose jar file contains the manifest to use for this microservice. + * @return This object (for method chaining). * @throws IOException If a problem occurred while trying to read the manifest file. */ - public void setManifest(Class<?> c) throws IOException { - this.mf = new ManifestFile(c); + public Microservice setManifest(Class<?> c) throws IOException { + return setManifest(new ManifestFile(c)); } /** @@ -262,15 +277,19 @@ public abstract class Microservice implements ConfigEventListener { * * <p> * The default implementation resolves the following variables: - * <ul> - * <li><code>$S{key}</code>, <code>$S{key,default}</code> - System properties. - * <li><code>$E{key}</code>, <code>$E{key,default}</code> - Environment variables. - * <li><code>$C{key}</code>, <code>$C{key,default}</code> - Config file entries. - * <li><code>$MF{key}</code>, <code>$MF{key,default}</code> - Manifest file entries. - * <li><code>$ARG{key}</code>, <code>$ARG{key,default}</code> - Command-line arguments. - * <li><code>$IF{boolArg,thenValue}</code>, <code>$IF{boolArg,thenValue,elseValue}</code> - If-block logic. - * <li><code>$SW{stringArg,pattern,thenVal...}</code>, - * <code>$SW{stringArg,pattern,thenVal,elseVal...}</code> - Switch-block logic. + * <ul class='doctree'> + * <li class='jc'>{@link org.apache.juneau.svl.vars.SystemPropertiesVar} - <code>$S{key[,default]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.EnvVariablesVar} - <code>$E{key[,default]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.ArgsVar} - <code>$A{key[,default]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.ManifestFileVar} - <code>$MF{key[,default]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.IfVar} - <code>$IF{arg,then[,else]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.SwitchVar} - <code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.CoalesceVar} - <code>$CO{arg1[,arg2...]}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.PatternMatchVar} - <code>$PM{arg,pattern}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.NotEmptyVar} - <code>$NE{arg}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.UpperCaseVar} - <code>$UC{arg}</code> + * <li class='jc'>{@link org.apache.juneau.svl.vars.LowerCaseVar} - <code>$LC{arg}</code> + * <li class='jc'>{@link org.apache.juneau.config.vars.ConfigVar} - <code>$C{key[,default]}</code> * </ul> * * <p> @@ -309,9 +328,7 @@ public abstract class Microservice implements ConfigEventListener { protected VarResolverBuilder createVarResolver() { VarResolverBuilder b = new VarResolverBuilder() .defaultVars() - .vars(ConfigVar.class, ManifestFileVar.class, ArgsVar.class, SwitchVar.class, IfVar.class) - .contextObject(ManifestFileVar.SESSION_manifest, mf) - .contextObject(ArgsVar.SESSION_args, args); + .vars(ConfigVar.class, SwitchVar.class, IfVar.class); if (cf != null) b.contextObject(ConfigVar.SESSION_config, cf); return b; @@ -333,6 +350,18 @@ public abstract class Microservice implements ConfigEventListener { } /** + * Sets the arguments for this microservice. + * + * @param args The arguments for this microservice. + * @return This object (for method chaining). + */ + public Microservice setArgs(Args args) { + this.args = args; + ArgsVar.init(args); + return this; + } + + /** * Returns the external INI-style configuration file that can be used to configure your microservice. * * <p> @@ -394,16 +423,16 @@ public abstract class Microservice implements ConfigEventListener { * <ck>sameAsAnInt</ck> = $C{MySection/anInt} * * <cc># A command-line argument in the form "myarg=foo"</cc> - * <ck>myArg</ck> = $ARG{myarg} + * <ck>myArg</ck> = $A{myarg} * * <cc># The first command-line argument</cc> - * <ck>firstArg</ck> = $ARG{0} + * <ck>firstArg</ck> = $A{0} * * <cc># Look for system property, or env var if that doesn't exist, or command-line arg if that doesn't exist.</cc> - * <ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}} + * <ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}} * * <cc># A POJO with embedded variables</cc> - * <ck>aBean2</ck> = {foo:'$ARG{0}',baz:$C{MySection/anInt}} + * <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}} * </p> * * <p class='bcode'> diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java deleted file mode 100755 index c0d7014..0000000 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java +++ /dev/null @@ -1,65 +0,0 @@ -// *************************************************************************************************************************** -// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * -// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * -// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * -// * with the License. You may obtain a copy of the License at * -// * * -// * http://www.apache.org/licenses/LICENSE-2.0 * -// * * -// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * -// * specific language governing permissions and limitations under the License. * -// *************************************************************************************************************************** -package org.apache.juneau.microservice; - -import static org.apache.juneau.rest.annotation.HookEvent.*; - -import org.apache.juneau.microservice.vars.*; -import org.apache.juneau.rest.*; -import org.apache.juneau.rest.annotation.*; - -/** - * Superclass for all REST resources. - * - * <p> - * In additional to the functionality of the {@link RestServletDefault} group, - * augments the {@link RestContext#getVarResolver()} method with the following additional variable types: - * <ul class='spaced-list'> - * <li> - * <code class='snippet'>$ARG{...}</code> - Command line arguments pulled from {@link Microservice#getArgs()}. - * - * <h5 class='figure'>Example:</h5> - * <p class='bcode'> - * String firstArg = request.getVarResolver().resolve(<js>"$ARG{0}"</js>); <jc>// First argument.</jc> - * String namedArg = request.getVarResolver().resolve(<js>"$ARG{myarg}"</js>); <jc>// Named argument (e.g. "myarg=foo"). </jc> - * </p> - * <li> - * <code class='snippet'>$MF{...}</code> - Manifest file entries pulled from {@link Microservice#getManifest()}. - * - * <h5 class='figure'>Example:</h5> - * <p class='bcode'> - * String mainClass = request.getVarResolver().resolve(<js>"$MF{Main-Class}"</js>); <jc>// Main class. </jc> - * </p> - * </ul> - */ -@SuppressWarnings("serial") -@RestResource -public abstract class Resource extends RestServletDefault { - - /** - * Add <code>$ARGS</code> and <code>$MF</code> variable resolvers. - * - * @param builder The resource config. - * @throws Exception - */ - @RestHook(INIT) - public void addConfigVars(RestContextBuilder builder) throws Exception { - Microservice m = Microservice.getInstance(); - if (m != null) { - builder - .vars(ArgsVar.class, ManifestFileVar.class) - .varContextObject(ArgsVar.SESSION_args, m.getArgs()) - .varContextObject(ManifestFileVar.SESSION_manifest, m.getManifest()); - } - } -} diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java deleted file mode 100755 index 3b2da75..0000000 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java +++ /dev/null @@ -1,66 +0,0 @@ -// *************************************************************************************************************************** -// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * -// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * -// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * -// * with the License. You may obtain a copy of the License at * -// * * -// * http://www.apache.org/licenses/LICENSE-2.0 * -// * * -// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * -// * specific language governing permissions and limitations under the License. * -// *************************************************************************************************************************** -package org.apache.juneau.microservice; - -import static org.apache.juneau.rest.annotation.HookEvent.*; - -import org.apache.juneau.microservice.vars.*; -import org.apache.juneau.rest.*; -import org.apache.juneau.rest.annotation.*; - -/** - * Superclass for all REST resource groups. - * - * <p> - * In additional to the functionality of the {@link RestServletGroupDefault} group, - * augments the {@link RestContext#getVarResolver()} method with the following additional variable types: - * <ul class='spaced-list'> - * <li> - * <jk>$ARG{...}</jk> - Command line arguments. - * <br>Resolves values from {@link Microservice#getArgs()}. - * - * <h5>Example:</h5> - * <p class='bcode'> - * String firstArg = request.getVarResolver().resolve(<js>"$ARG{0}"</js>); <jc>// First argument.</jc> - * String namedArg = request.getVarResolver().resolve(<js>"$ARG{myarg}"</js>); <jc>// Named argument (e.g. "myarg=foo"). </jc> - * </p> - * <li> - * <jk>$MF{...}</jk> - Manifest file entries. - * - * <h5>Example:</h5> - * <p class='bcode'> - * String mainClass = request.getVarResolver().resolve(<js>"$MF{Main-Class}"</js>); <jc>// Main class. </jc> - * </p> - * </ul> - */ -@SuppressWarnings("serial") -@RestResource -public abstract class ResourceGroup extends RestServletGroupDefault { - - /** - * Initializes the registry URL and rest clent. - * - * @param builder The resource config. - * @throws Exception - */ - @RestHook(INIT) - public void addConfigVars(RestContextBuilder builder) throws Exception { - Microservice m = Microservice.getInstance(); - if (m != null) { - builder - .vars(ArgsVar.class, ManifestFileVar.class) - .varContextObject(ArgsVar.SESSION_args, m.getArgs()) - .varContextObject(ManifestFileVar.SESSION_manifest, m.getManifest()); - } - } -} diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java deleted file mode 100644 index 6b99e1e..0000000 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java +++ /dev/null @@ -1,90 +0,0 @@ -// *************************************************************************************************************************** -// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * -// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * -// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * -// * with the License. You may obtain a copy of the License at * -// * * -// * http://www.apache.org/licenses/LICENSE-2.0 * -// * * -// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * -// * specific language governing permissions and limitations under the License. * -// *************************************************************************************************************************** -package org.apache.juneau.microservice; - -import static org.apache.juneau.rest.annotation.HookEvent.*; - -import org.apache.juneau.html.*; -import org.apache.juneau.jena.*; -import org.apache.juneau.microservice.vars.*; -import org.apache.juneau.rest.*; -import org.apache.juneau.rest.annotation.*; - -/** - * Superclass for all REST resource groups. - * - * <p> - * In additional to the functionality of the {@link RestServletGroupDefault} group, - * augments the {@link RestContext#getVarResolver()} method with the following additional variable types: - * <ul class='spaced-list'> - * <li> - * <jk>$ARG{...}</jk> - Command line arguments. - * <br>Resolves values from {@link Microservice#getArgs()}. - * - * <h5>Example:</h5> - * <p class='bcode'> - * String firstArg = request.getVarResolver().resolve(<js>"$ARG{0}"</js>); <jc>// First argument.</jc> - * String namedArg = request.getVarResolver().resolve(<js>"$ARG{myarg}"</js>); <jc>// Named argument (e.g. "myarg=foo"). </jc> - * </p> - * <li> - * <jk>$MF{...}</jk> - Manifest file entries. - * - * <h5>Example:</h5> - * <p class='bcode'> - * String mainClass = request.getVarResolver().resolve(<js>"$MF{Main-Class}"</js>); <jc>// Main class. </jc> - * </p> - * </ul> - */ -@SuppressWarnings("serial") -@RestResource( - htmldoc=@HtmlDoc( - navlinks={ - "up: request:/..", - "options: servlet:/?method=OPTIONS" - } - ), - config="$S{juneau.configFile}", - serializers={ - HtmlDocSerializer.class, // HTML must be listed first because Internet Explore does not include text/html in their Accept header. - RdfSerializer.Xml.class, - RdfSerializer.XmlAbbrev.class, - RdfSerializer.Turtle.class, - RdfSerializer.NTriple.class, - RdfSerializer.N3.class - }, - parsers={ - RdfParser.Xml.class, - RdfParser.Turtle.class, - RdfParser.NTriple.class, - RdfParser.N3.class - } -) -public abstract class ResourceJenaGroup extends RestServletGroupDefault { - - /** - * Add <code>$ARGS</code> and <code>$MF</code> variable resolvers. - * - * @param builder The resource config. - * @throws Exception - */ - @RestHook(INIT) - public void addConfigVars(RestContextBuilder builder) throws Exception { - Microservice m = Microservice.getInstance(); - if (m != null) { - builder - .vars(ArgsVar.class, ManifestFileVar.class) - .varContextObject(ArgsVar.SESSION_args, m.getArgs()) - .varContextObject(ManifestFileVar.SESSION_manifest, m.getManifest()); - } - } -} diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaDefault.java similarity index 85% copy from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java copy to juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaDefault.java index 4b99105..2dd956f 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaDefault.java @@ -18,18 +18,10 @@ import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; /** - * Superclass for all REST resources with RDF support. + * Resource servlet with additional RDF support. */ @SuppressWarnings("serial") @RestResource( - htmldoc=@HtmlDoc( - navlinks={ - "up: request:/..", - "options: servlet:/?method=OPTIONS" - }, - stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}" - ), - config="$S{juneau.configFile}", serializers={ HtmlDocSerializer.class, // HTML must be listed first because Internet Explore does not include text/html in their Accept header. RdfSerializer.Xml.class, @@ -45,4 +37,4 @@ import org.apache.juneau.rest.annotation.*; RdfParser.N3.class } ) -public abstract class ResourceJena extends RestServletDefault {} +public abstract class RestServletJenaDefault extends RestServletDefault {} diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaGroup.java old mode 100755 new mode 100644 similarity index 85% rename from juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java rename to juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaGroup.java index 4b99105..3c1f2b1 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaGroup.java @@ -18,18 +18,10 @@ import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; /** - * Superclass for all REST resources with RDF support. + * Resource group with additional RDF support. */ @SuppressWarnings("serial") @RestResource( - htmldoc=@HtmlDoc( - navlinks={ - "up: request:/..", - "options: servlet:/?method=OPTIONS" - }, - stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}" - ), - config="$S{juneau.configFile}", serializers={ HtmlDocSerializer.class, // HTML must be listed first because Internet Explore does not include text/html in their Accept header. RdfSerializer.Xml.class, @@ -45,4 +37,4 @@ import org.apache.juneau.rest.annotation.*; RdfParser.N3.class } ) -public abstract class ResourceJena extends RestServletDefault {} +public abstract class RestServletJenaGroup extends RestServletGroup {} diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java index 1027513..b08020f 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java @@ -21,7 +21,6 @@ import java.util.Map; import org.apache.juneau.*; import org.apache.juneau.dto.html5.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.annotation.Body; @@ -41,7 +40,7 @@ import org.apache.juneau.rest.annotation.Body; } ) ) -public class ConfigResource extends Resource { +public class ConfigResource extends RestServletDefault { private static final long serialVersionUID = 1L; /** diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java index 16738f5..983127c 100644 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java @@ -39,7 +39,7 @@ import org.apache.juneau.rest.labels.*; allowedMethodParams="OPTIONS,POST" ) @SuppressWarnings("javadoc") -public class DebugResource extends Resource { +public class DebugResource extends RestServletDefault { private static final long serialVersionUID = 1L; /** diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java index 9880aa2..94eeeb6 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java @@ -25,7 +25,6 @@ import java.util.logging.*; import javax.servlet.*; import org.apache.juneau.annotation.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.converters.*; @@ -74,7 +73,7 @@ import org.apache.juneau.utils.*; @Property(name="DirectoryResource.rootDir", value="") } ) -public class DirectoryResource extends Resource { +public class DirectoryResource extends RestServletDefault { private static final long serialVersionUID = 1L; private File rootDir; // The root directory diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java index 16b578d..46129f7 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java @@ -26,7 +26,6 @@ import java.util.*; import org.apache.juneau.annotation.*; import org.apache.juneau.config.*; import org.apache.juneau.dto.LinkString; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.converters.*; @@ -48,7 +47,7 @@ import org.apache.juneau.transforms.*; DateSwap.ISO8601DT.class // Serialize Date objects as ISO8601 strings. } ) -public class LogsResource extends Resource { +public class LogsResource extends RestServletDefault { private static final long serialVersionUID = 1L; private File logDir; diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java index 4122d6a..07d70e0 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java @@ -12,7 +12,7 @@ // *************************************************************************************************************************** package org.apache.juneau.microservice.resources; -import org.apache.juneau.microservice.*; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; /** @@ -24,6 +24,6 @@ import org.apache.juneau.rest.annotation.*; description="This is a sample router page", children={ConfigResource.class,LogsResource.class} ) -public class SampleRootResource extends ResourceGroup { +public class SampleRootResource extends RestServletGroup { private static final long serialVersionUID = 1L; } diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java index e950c15..dd33bfb 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java @@ -14,7 +14,7 @@ package org.apache.juneau.microservice.resources; import static org.apache.juneau.http.HttpMethodName.*; -import org.apache.juneau.microservice.*; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; /** @@ -24,7 +24,7 @@ import org.apache.juneau.rest.annotation.*; path="/shutdown", title="Shut down this resource" ) -public class ShutdownResource extends Resource { +public class ShutdownResource extends RestServletDefault { private static final long serialVersionUID = 1L; diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java deleted file mode 100755 index 40b9863..0000000 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java +++ /dev/null @@ -1,18 +0,0 @@ -// *************************************************************************************************************************** -// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * -// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * -// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * -// * with the License. You may obtain a copy of the License at * -// * * -// * http://www.apache.org/licenses/LICENSE-2.0 * -// * * -// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * -// * specific language governing permissions and limitations under the License. * -// *************************************************************************************************************************** - -/** - * Predefined SVL Variables - */ -package org.apache.juneau.microservice.vars; - diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java index 8de3f04..371df39 100755 --- a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java +++ b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java @@ -14,7 +14,7 @@ package org.apache.juneau.microservice.sample; import static org.apache.juneau.http.HttpMethodName.*; -import org.apache.juneau.microservice.Resource; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.RestMethod; import org.apache.juneau.rest.annotation.RestResource; @@ -26,7 +26,7 @@ import org.apache.juneau.rest.annotation.RestResource; path="/helloworld", description="Simplest possible REST resource" ) -public class HelloWorldResource extends Resource { +public class HelloWorldResource extends RestServletDefault { private static final long serialVersionUID = 1L; /** diff --git a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java index 41fa4fd..a9f94d7 100755 --- a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java +++ b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java @@ -12,9 +12,9 @@ // *************************************************************************************************************************** package org.apache.juneau.microservice.sample; -import org.apache.juneau.microservice.ResourceGroup; import org.apache.juneau.microservice.resources.ConfigResource; import org.apache.juneau.microservice.resources.LogsResource; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.HtmlDoc; import org.apache.juneau.rest.annotation.RestResource; import org.apache.juneau.rest.widget.ContentTypeMenuItem; @@ -42,6 +42,6 @@ import org.apache.juneau.rest.widget.StyleMenuItem; LogsResource.class } ) -public class RootResources extends ResourceGroup { +public class RootResources extends RestServletGroup { private static final long serialVersionUID = 1L; } diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java index aa86a79..e40ece7 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java @@ -24,7 +24,7 @@ import org.apache.juneau.rest.annotation.*; @RestResource( path="/testBpi" ) -public class BpiResource extends ResourceJena { +public class BpiResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; //==================================================================================================== diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java index 8e8d489..8ea723d 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java @@ -14,7 +14,7 @@ package org.apache.juneau.rest.test; import static org.apache.juneau.http.HttpMethodName.*; -import org.apache.juneau.microservice.*; +import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; /** @@ -28,12 +28,12 @@ import org.apache.juneau.rest.annotation.*; } ) @SuppressWarnings("serial") -public class ClientVersionResource extends Resource { +public class ClientVersionResource extends RestServletDefault { @RestResource( path="/defaultHeader" ) - public static class DefaultHeader extends Resource { + public static class DefaultHeader extends RestServletDefault { @RestMethod(name=GET, path="/") public String test0() { @@ -65,7 +65,7 @@ public class ClientVersionResource extends Resource { path="/customHeader", clientVersionHeader="Custom-Client-Version" ) - public static class CustomHeader extends Resource { + public static class CustomHeader extends RestServletDefault { @RestMethod(name=GET, path="/") public String test0() { diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java index da50e11..fe4b622 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java @@ -14,7 +14,6 @@ package org.apache.juneau.rest.test; import static org.apache.juneau.http.HttpMethodName.*; -import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; @@ -25,7 +24,7 @@ import org.apache.juneau.rest.annotation.*; path="/testConfig" ) @SuppressWarnings("serial") -public class ConfigResource extends Resource { +public class ConfigResource extends RestServletDefault { @RestMethod(name=GET, path="/") public Object test1(RestRequest req) { diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java index aa75846..4051202 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java @@ -31,7 +31,7 @@ import org.junit.*; */ @RestResource( path="/testInterfaceProxyResource") -public class InterfaceProxyResource extends ResourceJena { +public class InterfaceProxyResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; //==================================================================================================== diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java index 1e1759e..84d4854 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java @@ -23,7 +23,7 @@ import org.apache.juneau.rest.annotation.*; @RestResource( path="/testLargePojos" ) -public class LargePojosResource extends ResourceJena { +public class LargePojosResource extends RestServletJenaDefault { private static final long serialVersionUID = 1L; //==================================================================================================== diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java index e1fdf20..1703dd8 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java @@ -33,7 +33,7 @@ import org.apache.juneau.utils.*; } ) @SuppressWarnings({"serial"}) -public class NlsResource extends RestServletGroupDefault { +public class NlsResource extends RestServletGroup { private static final long serialVersionUID = 1L; //==================================================================================================== diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java index da3b956..4928fb6 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java @@ -27,7 +27,7 @@ import org.apache.juneau.rest.annotation.*; path="/testRequestBeanProxy" ) @SuppressWarnings("serial") -public class RequestBeanProxyResource extends ResourceJena { +public class RequestBeanProxyResource extends RestServletJenaDefault { @RestMethod(name=GET, path="/echoQuery") public Reader echoQuery(RestRequest req) throws Exception { diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java index 77e050f..ddc9fc5 100644 --- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java +++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java @@ -36,7 +36,7 @@ import org.apache.juneau.utils.*; path="/testThirdPartyProxy" ) @SuppressWarnings("serial") -public class ThirdPartyProxyResource extends ResourceJena { +public class ThirdPartyProxyResource extends RestServletJenaDefault { public static FileWriter logFile; static { diff --git a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java index 5f8b7fa..b6a475e 100644 --- a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java +++ b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java @@ -38,7 +38,7 @@ public class ConfigTest extends RestTestcase { Config cf = Config.create().memStore().build().load(m); - assertObjectEquals("{int1:'1',int2:'[1,2,3]',int3:'1',int4:'1',int5:'-1',boolean1:'true',boolean2:'[true,true]',testManifestEntry:'$MF{Test-Entry}'}", cf.getSectionAsMap("Test")); + assertObjectEquals("{int1:'1',int2:'[1,2,3]',int3:'1',int4:'1',int5:'-1',boolean1:'true',boolean2:'[true,true]',testManifestEntry:'test-value'}", cf.getSectionAsMap("Test")); assertEquals("'1'", c.doGet(URL + "/Test%2Fint1/" + getName(String.class)).getResponseAsString()); assertEquals("'[1,2,3]'", c.doGet(URL + "/Test%2Fint2/" + getName(String.class)).getResponseAsString()); diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java index fd4dbd1..fd90cdf 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java @@ -142,14 +142,8 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon htmlDocBuilder = new HtmlDocBuilder(properties); varResolverBuilder = new VarResolverBuilder() - .vars( - SystemPropertiesVar.class, - EnvVariablesVar.class, - ConfigVar.class, - IfVar.class, - SwitchVar.class, - CoalesceVar.class - ); + .defaultVars() + .vars(ConfigVar.class); VarResolver vr = varResolverBuilder.build(); diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroupDefault.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroup.java similarity index 95% rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroupDefault.java rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroup.java index 191e6aa..8d0125f 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroupDefault.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroup.java @@ -33,7 +33,7 @@ import org.apache.juneau.rest.labels.*; * </ul> */ @RestResource -public abstract class RestServletGroupDefault extends RestServletDefault { +public class RestServletGroup extends RestServletDefault { private static final long serialVersionUID = 1L; /** -- To stop receiving notification emails like this one, please contact [email protected].
