Allow @RestResource/@RestMethod annotations to be used on any classes. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/07843d64 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/07843d64 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/07843d64
Branch: refs/heads/master Commit: 07843d641d9911843e3c489bd96b5999de7faa84 Parents: db0cf72 Author: JamesBognar <[email protected]> Authored: Thu Mar 16 22:16:57 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Thu Mar 16 22:16:57 2017 -0400 ---------------------------------------------------------------------- .../java/org/apache/juneau/jena/package.html | 2 +- .../org/apache/juneau/utils/ClassUtilsTest.java | 36 + .../org/apache/juneau/internal/ArrayUtils.java | 21 +- .../org/apache/juneau/internal/ClassUtils.java | 90 + .../apache/juneau/internal/CollectionUtils.java | 2 +- .../org/apache/juneau/internal/IOUtils.java | 32 + .../org/apache/juneau/internal/ObjectUtils.java | 36 + .../java/org/apache/juneau/internal/Pair.java | 64 + .../apache/juneau/internal/ReflectionUtils.java | 18 +- .../java/org/apache/juneau/json/package.html | 2 +- .../java/org/apache/juneau/uon/package.html | 2 +- .../org/apache/juneau/urlencoding/package.html | 2 +- .../java/org/apache/juneau/xml/package.html | 2 +- juneau-core/src/main/javadoc/overview.html | 226 +- .../juneau/examples/rest/DirectoryResource.java | 11 +- .../examples/rest/DockerRegistryResource.java | 11 +- .../examples/rest/SampleRemoteableServlet.java | 2 +- .../juneau/examples/rest/SqlQueryResource.java | 23 +- .../rest/addressbook/AddressBookResource.java | 4 +- .../apache/juneau/microservice/Resource.java | 19 +- .../juneau/microservice/ResourceGroup.java | 19 +- .../org/apache/juneau/microservice/package.html | 12 +- .../microservice/resources/ConfigResource.java | 14 +- .../resources/DirectoryResource.java | 2 +- .../microservice/resources/LogsResource.java | 25 +- .../juneau/rest/jaxrs/JuneauProvider.java | 2 +- .../juneau/rest/test/AcceptCharsetResource.java | 2 +- .../apache/juneau/rest/test/ConfigResource.java | 4 +- .../juneau/rest/test/ContentResource.java | 2 +- .../apache/juneau/rest/test/GroupsResource.java | 17 +- .../apache/juneau/rest/test/ParamsResource.java | 10 +- .../apache/juneau/rest/test/PathResource.java | 6 +- .../java/org/apache/juneau/rest/test/Root.java | 2 +- .../juneau/rest/test/ErrorConditionsTest.java | 2 +- .../org/apache/juneau/rest/test/TestUtils.java | 14 +- .../java/org/apache/juneau/rest/CallMethod.java | 996 ++++++ .../java/org/apache/juneau/rest/CallRouter.java | 98 + .../juneau/rest/ClientVersionMatcher.java | 10 +- .../java/org/apache/juneau/rest/Redirect.java | 3 +- .../org/apache/juneau/rest/ResponseHandler.java | 4 +- .../org/apache/juneau/rest/RestCallHandler.java | 348 ++ .../java/org/apache/juneau/rest/RestConfig.java | 1153 ++++++ .../org/apache/juneau/rest/RestContext.java | 1418 ++++++++ .../org/apache/juneau/rest/RestException.java | 4 +- .../apache/juneau/rest/RestInfoProvider.java | 499 +++ .../java/org/apache/juneau/rest/RestLogger.java | 233 ++ .../juneau/rest/RestMatcherReflecting.java | 6 +- .../org/apache/juneau/rest/RestRequest.java | 84 +- .../juneau/rest/RestResourceResolver.java | 80 + .../org/apache/juneau/rest/RestResponse.java | 13 +- .../org/apache/juneau/rest/RestServlet.java | 3321 +----------------- .../apache/juneau/rest/RestServletContext.java | 306 -- .../apache/juneau/rest/RestServletDefault.java | 7 +- .../juneau/rest/RestServletGroupDefault.java | 2 +- .../java/org/apache/juneau/rest/RestUtils.java | 9 + .../apache/juneau/rest/annotation/FormData.java | 2 +- .../apache/juneau/rest/annotation/Query.java | 2 +- .../juneau/rest/annotation/RestMethod.java | 5 + .../juneau/rest/annotation/RestResource.java | 152 +- .../rest/jena/RestServletJenaDefault.java | 7 +- .../rest/jena/RestServletJenaGroupDefault.java | 2 +- .../rest/labels/ChildResourceDescriptions.java | 14 +- .../java/org/apache/juneau/rest/package.html | 125 +- .../rest/remoteable/RemoteableServlet.java | 4 +- .../juneau/rest/response/DefaultHandler.java | 3 - .../rest/response/InputStreamHandler.java | 3 - .../juneau/rest/response/ReaderHandler.java | 3 - .../juneau/rest/response/RedirectHandler.java | 3 - .../juneau/rest/response/StreamableHandler.java | 3 - .../juneau/rest/response/WritableHandler.java | 3 - .../juneau/rest/vars/ServletInitParamVar.java | 2 +- 71 files changed, 5775 insertions(+), 3890 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html index c29250c..5f1d7aa 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/package.html @@ -1083,7 +1083,7 @@ The <code>$L{...}</code> variable represent localized strings pulled from the resource bundle identified by the <code>messages</code> annotation. These variables are replaced at runtime based on the HTTP request locale. Several built-in runtime variable types are defined, and the API can be extended to include user-defined variables. - See {@link org.apache.juneau.rest.RestServlet#getVarResolver()} for more information. + See {@link org.apache.juneau.rest.RestContext#getVarResolver()} for more information. </p> <p> This document won't go into all the details of the Juneau <code>RestServlet</code> class.<br> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java ---------------------------------------------------------------------- diff --git a/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java index ce2d30e..688c2bc 100755 --- a/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java +++ b/juneau-core-test/src/test/java/org/apache/juneau/utils/ClassUtilsTest.java @@ -112,4 +112,40 @@ public class ClassUtilsTest { public void getClassFromReadableName() throws Exception { fail("Not implemented"); } + + //==================================================================================================== + // findPublicMethod + //==================================================================================================== + @Test + public void testFindPublicMethod() { + + assertNotNull(findPublicMethod(B.class, "m1", void.class)); + assertNull(findPublicMethod(B.class, "m1", int.class)); + + assertNull(findPublicMethod(B.class, "m2", void.class)); + + assertNull(findPublicMethod(B.class, "m3", void.class)); + assertNotNull(findPublicMethod(B.class, "m3", int.class)); + + assertNotNull(findPublicMethod(B.class, "m4", CharSequence.class)); + assertNotNull(findPublicMethod(B.class, "m4", Object.class)); + assertNull(findPublicMethod(B.class, "m4", String.class)); + + assertNotNull(findPublicMethod(B.class, "m5", void.class, int.class, CharSequence.class)); + assertNotNull(findPublicMethod(B.class, "m5", void.class, int.class, String.class)); + assertNull(findPublicMethod(B.class, "m5", void.class, int.class, Object.class)); + + assertNull(findPublicMethod(B.class, "m5", void.class, int.class)); + assertNull(findPublicMethod(B.class, "m5", void.class, int.class, CharSequence.class, CharSequence.class)); + } + + public static class B { + + public void m1() {}; + protected void m2() {}; + public int m3() { return 0; } + public CharSequence m4() { return ""; } + + public void m5(int f1, CharSequence f2) {} + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/ArrayUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/ArrayUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/ArrayUtils.java index 12c7614..effd363 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/ArrayUtils.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/ArrayUtils.java @@ -195,9 +195,9 @@ public final class ArrayUtils { * @param componentType The component type of the collection. * @return A new array. */ - public static <T> Object toArray(Collection<T> c, Class<T> componentType) { + public static <T> Object toArray(Collection<?> c, Class<T> componentType) { Object a = Array.newInstance(componentType, c.size()); - Iterator<T> it = c.iterator(); + Iterator<?> it = c.iterator(); int i = 0; while (it.hasNext()) Array.set(a, i++, it.next()); @@ -205,6 +205,23 @@ public final class ArrayUtils { } /** + * Shortcut for calling <code>myList.toArray(new T[myList.size()]);</code> + * + * @param c The collection being converted to an array. + * @param componentType The component type of the array. + * @return The collection converted to an array. + */ + @SuppressWarnings("unchecked") + public static <T> T[] toObjectArray(Collection<?> c, Class<T> componentType) { + Object a = Array.newInstance(componentType, c.size()); + Iterator<?> it = c.iterator(); + int i = 0; + while (it.hasNext()) + Array.set(a, i++, it.next()); + return (T[])a; + } + + /** * Copies the specified array into the specified list. * Works on both object and primitive arrays. * http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java index 088d70a..4ba239f 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/ClassUtils.java @@ -426,6 +426,96 @@ public final class ClassUtils { } } + /** + * Finds a public method with the specified parameters. + * + * @param c The class to look for the method. + * @param name The method name. + * @param returnType The return type of the method. + * Can be a super type of the actual return type. + * For example, if the actual return type is <code>CharSequence</code>, then <code>Object</code> will match but <code>String</code> will not. + * @param parameterTypes The parameter types of the method. + * Can be subtypes of the actual parameter types. + * For example, if the parameter type is <code>CharSequence</code>, then <code>String</code> will match but <code>Object</code> will not. + * @return The matched method, or <jk>null</jk> if no match was found. + */ + public static Method findPublicMethod(Class<?> c, String name, Class<?> returnType, Class<?>...parameterTypes) { + for (Method m : c.getMethods()) { + if (isPublic(m) && m.getName().equals(name)) { + Class<?> rt = m.getReturnType(); + if (isParentClass(returnType, rt)) { + Class<?>[] pt = m.getParameterTypes(); + if (pt.length == parameterTypes.length) { + boolean matches = true; + for (int i = 0; i < pt.length; i++) { + if (! isParentClass(pt[i], parameterTypes[i])) { + matches = false; + break; + } + } + if (matches) + return m; + } + } + } + } + return null; + } + + /** + * Finds a public constructor with the specified parameters without throwing an exception. + * + * @param c The class to search for a constructor. + * @param parameterTypes The parameter types in the constructor. + * Can be subtypes of the actual constructor argument types. + * @return The matching constructor, or <jk>null</jk> if constructor could not be found. + */ + @SuppressWarnings("unchecked") + public static <T> Constructor<T> findPublicConstructor(Class<T> c, Class<?>...parameterTypes) { + for (Constructor<?> n : c.getConstructors()) { + if (isPublic(n)) { + Class<?>[] pt = n.getParameterTypes(); + if (pt.length == parameterTypes.length) { + boolean matches = true; + for (int i = 0; i < pt.length; i++) { + if (! isParentClass(pt[i], parameterTypes[i])) { + matches = false; + break; + } + } + if (matches) + return (Constructor<T>)n; + } + } + } + return null; + } + + /** + * Finds the public constructor that can take in the specified arguments. + * + * @param c The class we're trying to construct. + * @param args The arguments we want to pass into the constructor. + * @return The constructor, or <jk>null</jk> if a public constructor could not be found that takes + * in the specified arguments. + */ + public static <T> Constructor<T> findPublicConstructor(Class<T> c, Object...args) { + return findPublicConstructor(c, getClasses(args)); + } + + /** + * Returns the class types for the specified arguments. + * + * @param args The objects we're getting the classes of. + * @return The classes of the arguments. + */ + public static Class<?>[] getClasses(Object...args) { + Class<?>[] pt = new Class<?>[args.length]; + for (int i = 0; i < args.length; i++) + pt[i] = args[i] == null ? null : args[i].getClass(); + return pt; + } + // This code is inherently unsafe (but still potentially useful?) // // /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/CollectionUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/CollectionUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/CollectionUtils.java index 7c11d22..c413427 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/CollectionUtils.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/CollectionUtils.java @@ -25,7 +25,7 @@ public class CollectionUtils { * @param in The map to reverse the order on. * @return A new {@link LinkedHashMap} with keys in reverse order. */ - public static <K,V> LinkedHashMap<K,V> reverse(LinkedHashMap<K,V> in) { + public static <K,V> LinkedHashMap<K,V> reverse(Map<K,V> in) { if (in == null) return null; LinkedHashMap<K,V> m = new LinkedHashMap<K,V>(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/IOUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/IOUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/IOUtils.java index 72ece2c..77caa63 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/IOUtils.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/IOUtils.java @@ -361,4 +361,36 @@ public final class IOUtils { closeQuietly((Writer)o2); } } + + /** + * Converts an object to an <code>InputStream</code>. + * + * @param o The object to convert to an input stream. + * Can be any of the following: + * <ul> + * <li>{@link InputStream} + * <li>{@link Reader} + * <li>{@link File} + * <li>{@link CharSequence} - Converted to UTF-8 stream. + * <li><code><jk>byte</jk>[]</code> + * <li><code><jk>null</jk></code> - Returns null. + * </ul> + * @return The object converted to an input stream. + * @throws IOException If invalid object passed in or file could not be read. + */ + public static InputStream toInputStream(Object o) throws IOException { + if (o == null) + return null; + if (o instanceof InputStream) + return (InputStream)o; + if (o instanceof File) + return new FileInputStream((File)o); + if (o instanceof byte[]) + return new ByteArrayInputStream((byte[])o); + if (o instanceof CharSequence) + return new ByteArrayInputStream(((CharSequence)o).toString().getBytes(UTF8)); + if (o instanceof Reader) + return new ByteArrayInputStream(IOUtils.read((Reader)o).getBytes(UTF8)); + throw new IOException("Invalid object type passed to IOUtils.toInputStream(Object): " + o.getClass().getName()); + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/ObjectUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/ObjectUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/ObjectUtils.java new file mode 100644 index 0000000..fac4337 --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/internal/ObjectUtils.java @@ -0,0 +1,36 @@ +// *************************************************************************************************************************** +// * 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.internal; + +/** + * Object-related utility methods. + */ +public class ObjectUtils { + + /** + * Returns <jk>true</jk> if the specified objects are equal. + * <p> + * Gracefully handles <jk>null</jk>s. + * + * @param o1 Object #1 + * @param o2 Object #2 + * @return <jk>true</jk> if the objects are equal or both <jk>null</jk>. + */ + public static boolean equals(Object o1, Object o2) { + if (o1 == null && o2 == null) + return true; + if (o1 == null || o2 == null) + return false; + return o1.equals(o2); + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/Pair.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/Pair.java b/juneau-core/src/main/java/org/apache/juneau/internal/Pair.java new file mode 100644 index 0000000..93cda29 --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/internal/Pair.java @@ -0,0 +1,64 @@ +// *************************************************************************************************************************** +// * 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.internal; + +/** + * Represents a simple object pair. + * @param <F> The first object type. + * @param <S> The second object type. + */ +public class Pair<F,S> { + private final F first; + private final S second; + + /** + * Constructor. + * + * @param first The first object in the pair. + * @param second The second object in the pair. + */ + public Pair(F first, S second) { + this.first = first; + this.second = second; + } + + /** + * Returns the first object in the pair. + * @return The first object in the pair. + */ + public F first() { + return first; + } + + /** + * Returns the second object in the pair. + * @return The second object in the pair. + */ + public S second() { + return second; + } + + @Override /* Object */ + public boolean equals(Object o) { + if (o instanceof Pair) { + Pair<?,?> p = (Pair<?,?>)o; + return ObjectUtils.equals(first, p.first) && ObjectUtils.equals(second, p.second); + } + return false; + } + + @Override /* Object */ + public int hashCode() { + return (first == null ? 0 : first.hashCode()) ^ (second == null ? 0 : second.hashCode()); + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/internal/ReflectionUtils.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/ReflectionUtils.java b/juneau-core/src/main/java/org/apache/juneau/internal/ReflectionUtils.java index 0a0c602..acb2043 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/ReflectionUtils.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/ReflectionUtils.java @@ -102,7 +102,7 @@ public final class ReflectionUtils { } /** - * Sames as {@link #findAnnotations(Class, Class)} except returns the annotations as a map + * Same as {@link #findAnnotations(Class, Class)} except returns the annotations as a map * with the keys being the class on which the annotation was found. * <p> * Results are ordered child-to-parent. @@ -110,7 +110,7 @@ public final class ReflectionUtils { * @param <T> The annotation class type. * @param a The annotation class type. * @param c The class being searched. - * @return The found matches, or an empty array if annotation was not found. + * @return The found matches, or an empty map if annotation was not found. */ public static <T extends Annotation> LinkedHashMap<Class<?>,T> findAnnotationsMap(Class<T> a, Class<?> c) { LinkedHashMap<Class<?>,T> m = new LinkedHashMap<Class<?>,T>(); @@ -118,6 +118,18 @@ public final class ReflectionUtils { return m; } + /** + * Same as {@link #findAnnotationsMap(Class, Class)} except returns results in parent-to-child order. + * + * @param <T> The annotation class type. + * @param a The annotation class type. + * @param c The class being searched. + * @return The found matches, or an empty map if annotation was not found. + */ + public static <T extends Annotation> LinkedHashMap<Class<?>,T> findAnnotationsMapParentFirst(Class<T> a, Class<?> c) { + return CollectionUtils.reverse(findAnnotationsMap(a, c)); + } + private static <T extends Annotation> void findAnnotationsMap(Class<T> a, Class<?> c, Map<Class<?>,T> m) { if (c == null) return; @@ -163,6 +175,8 @@ public final class ReflectionUtils { * @return An input stream on the specified resource, or <jk>null</jk> if the resource could not be found. */ public static InputStream getResource(Class<?> c, String name) { + if (name == null) + return null; while (c != null) { InputStream is = c.getResourceAsStream(name); if (is != null) http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/json/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/json/package.html b/juneau-core/src/main/java/org/apache/juneau/json/package.html index 06e6db6..f302ec9 100644 --- a/juneau-core/src/main/java/org/apache/juneau/json/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/json/package.html @@ -1022,7 +1022,7 @@ The <code>$L{...}</code> variable represent localized strings pulled from the resource bundle identified by the <code>messages</code> annotation. These variables are replaced at runtime based on the HTTP request locale. Several built-in runtime variable types are defined, and the API can be extended to include user-defined variables. - See {@link org.apache.juneau.rest.RestServlet#getVarResolver()} for more information. + See {@link org.apache.juneau.rest.RestContext#getVarResolver()} for more information. </p> <p> This document won't go into all the details of the Juneau <code>RestServlet</code> class.<br> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/uon/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/uon/package.html b/juneau-core/src/main/java/org/apache/juneau/uon/package.html index e6b1d10..6c2c6ca 100644 --- a/juneau-core/src/main/java/org/apache/juneau/uon/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/uon/package.html @@ -1005,7 +1005,7 @@ The <code>$L{...}</code> variable represent localized strings pulled from the resource bundle identified by the <code>messages</code> annotation. These variables are replaced at runtime based on the HTTP request locale. Several built-in runtime variable types are defined, and the API can be extended to include user-defined variables. - See {@link org.apache.juneau.rest.RestServlet#getVarResolver()} for more information. + See {@link org.apache.juneau.rest.RestContext#getVarResolver()} for more information. </p> <p> This document won't go into all the details of the Juneau <code>RestServlet</code> class.<br> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html b/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html index 4d623d1..ddb09b2 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html @@ -1005,7 +1005,7 @@ The <code>$L{...}</code> variable represent localized strings pulled from the resource bundle identified by the <code>messages</code> annotation. These variables are replaced at runtime based on the HTTP request locale. Several built-in runtime variable types are defined, and the API can be extended to include user-defined variables. - See {@link org.apache.juneau.rest.RestServlet#getVarResolver()} for more information. + See {@link org.apache.juneau.rest.RestContext#getVarResolver()} for more information. </p> <p> This document won't go into all the details of the Juneau <code>RestServlet</code> class.<br> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/java/org/apache/juneau/xml/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/package.html b/juneau-core/src/main/java/org/apache/juneau/xml/package.html index 4d9d595..4c0fbeb 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/xml/package.html @@ -2941,7 +2941,7 @@ The <code>$L{...}</code> variable represent localized strings pulled from the resource bundle identified by the <code>messages</code> annotation. These variables are replaced at runtime based on the HTTP request locale. Several built-in runtime variable types are defined, and the API can be extended to include user-defined variables. - See {@link org.apache.juneau.rest.RestServlet#getVarResolver()} for more information. + See {@link org.apache.juneau.rest.RestContext#getVarResolver()} for more information. </p> <p> This document won't go into all the details of the Juneau <code>RestServlet</code> class.<br> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-core/src/main/javadoc/overview.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html index bab4158..9a959d0 100644 --- a/juneau-core/src/main/javadoc/overview.html +++ b/juneau-core/src/main/javadoc/overview.html @@ -633,7 +633,7 @@ <li class='c'><a class='doclink' href='org/apache/juneau/xml/XmlParserContext.html#ConfigProperties'>XmlParserContext</a> - Configurable properties on the XML parser. </ul> </ul> - <li class='c'><a class='doclink' href='org/apache/juneau/server/RestServletContext.html#ConfigProperties'>RestServletContext</a> - Configurable properties on the REST servlet. + <li class='c'><a class='doclink' href='org/apache/juneau/server/RestContext.html#ConfigProperties'>RestContext</a> - Configurable properties on the REST servlet. </ul> </div> @@ -2625,7 +2625,7 @@ </p> <p> The <l>title</l> and <l>description</l> keys identify the localized values - return by the {@link org.apache.juneau.rest.RestServlet#getTitle(RestRequest)} and {@link org.apache.juneau.rest.RestServlet#getDescription(RestRequest)} methods. + return by the {@link org.apache.juneau.rest.RestRequest#getServletTitle()} and {@link org.apache.juneau.rest.RestRequest#getServletDescription()} methods. </p> <p> The <l>children</l> annotation defines the child resources of this router resource. @@ -2646,7 +2646,7 @@ It should be noted that child resources do not need to be defined this way. They could also be defined as servlets in the same way as the root resource. The <l>children</l> annotation approach simply makes it easier to define them without having to touch the <l>web.xml</l> file again. - Child resources can also be defined programmatically by overriding the {@link org.apache.juneau.rest.RestServlet#createChildren()} method. + Child resources can also be defined programmatically by using the {@link org.apache.juneau.rest.RestConfig#addChildResources(Class[])} method. </p> <p> Note that these router pages can be arbitrarily nested deep. @@ -3131,8 +3131,8 @@ <h6 class='topic'>Additional Information</h6> <ul class='javahierarchy'> - <li class='m'>{@link org.apache.juneau.rest.RestServlet#createVarResolver()} - Servlet and request variables. - <li class='m'>{@link org.apache.juneau.rest.RestServlet#getSessionObjects(RestRequest)} - Var resolver session objects. + <li class='m'>{@link org.apache.juneau.rest.RestConfig#addVars(Class[])} - Servlet and request variables. + <li class='m'>{@link org.apache.juneau.rest.RestCallHandler#getSessionObjects(RestRequest)} - Var resolver session objects. </ul> </div> @@ -3208,31 +3208,27 @@ {@link org.apache.juneau.rest.annotation.RestResource#pojoSwaps() @RestResopurce.pojoSwaps()} annotations are used to set behavior properties on the resource's underlying bean context, serializers, and parsers. You're using them here to modify the behavior of serialization for all content types. - The annotations are functionally equivalent to overriding the {@link org.apache.juneau.rest.RestServlet#createSerializers(ObjectMap,Class[],Class[])} method, as follows: + The annotations are functionally equivalent to using the {@link org.apache.juneau.rest.RestConfig} class, as follows: </p> <h6 class='figure'>Hypothetical RequestEchoResource.createSerializers() method</h6> <p class='bcode'> <jd>/** Override the default rest serializers to add some transforms */</jd> <ja>@Override</ja> - <jk>protected</jk> SerializerGroupBuilder createSerializers(ObjectMap properties, Class[] beanFilters, Class[] pojoSwaps) { - - <jc>// You'll just reuse the parent serializer group</jc> - SerializerGroupBuilder b = <jk>super</jk>.createSerializers(properties, beanFilters, pojoSwaps); - + <jk>public synchronize void</jk> init(RestConfig config) throws Exception { <jc>// Add bean filters for the HttpServletRequest, HttpSession, and ServletContext objects // so that you don't show vendor-specific properties on subclasses. // Add Enumeration POJO swap to be able to render the contents of Enumeration properties. // The max depth and detect recursion options prevent any possible runaway serializations. // This shouldn't happen, but future JEE APIs may introduce deep hierarchies or loops.</jc> - b - .beanFilters(HttpServletRequest.<jk>class</jk>, HttpSession.<jk>class</jk>, ServletContext.<jk>class</jk>) - .pojoSwaps(EnumerationSwap.<jk>class</jk>) - .maxDepth(10) - .detectRecursions(<jk>true</jk>); + config + .addBeanFilters(HttpServletRequest.<jk>class</jk>, HttpSession.<jk>class</jk>, ServletContext.<jk>class</jk>) + .addPojoSwaps(EnumerationSwap.<jk>class</jk>) + .setProperty(<jsf>SERIALIZER_maxDepth</jsf>, 10) + .setProperty(<jsf>SERIALIZER_detectRecursions</jsf>, <jk>true</jk>) .property(<jsf>HTMLDOC_links</jsf>, <js>"{...}"</js>); - <jc>// Return the updated group</jc> - <jk>return</jk> b; + <jc>// Don't forget to call this!</jc> + <jk>super</jk>.init(config); } </p> <p> @@ -4248,7 +4244,7 @@ http://localhost:10000/addressBook/people/3/name?method=PUT&content="'Barack Hussein Obama'" </p> <p> - The ability to overload methods is enabled through the {@link org.apache.juneau.rest.RestServletContext#REST_allowMethodParam} property. + The ability to overload methods is enabled through the {@link org.apache.juneau.rest.RestContext#REST_allowMethodParam} property. </p> </div> </div> @@ -4590,7 +4586,7 @@ <ul class='spaced-list'> <li>Accessing a docker registry REST API as POJOs using {@link org.apache.juneau.rest.client.RestClient}. <li>Using the {@link org.apache.juneau.rest.labels.ResourceDescription} class to implement a top-level 'router' page. - <li>Using the {@link org.apache.juneau.rest.RestServlet#getConfig()} method to access external configuration file values. + <li>Using the {@link org.apache.juneau.rest.RestContext#getConfigFile()} method to access external configuration file values. </ul> <p> Pointing a browser to the resource shows the following: @@ -4663,7 +4659,7 @@ <h6 class='topic'>Additional Information</h6> <ul class='javahierarchy'> <li class='c'>{@link org.apache.juneau.rest.labels.ResourceDescription} - <li class='m'>{@link org.apache.juneau.rest.RestServlet#getConfig()} + <li class='m'>{@link org.apache.juneau.rest.RestContext#getConfigFile()} </ul> </div> @@ -4975,7 +4971,7 @@ </p> <ul class='spaced-list'> <li>Using the {@link org.apache.juneau.dto.ResultSetList} to serialize database result sets. - <li>Using {@link org.apache.juneau.rest.RestServlet#getConfig()} to access config properties. + <li>Using {@link org.apache.juneau.rest.RestContext#getConfigFile()} to access config properties. <li>Using form entry beans. </ul> <p> @@ -5449,8 +5445,8 @@ <h3 class='topic' onclick='toggle(this)'>9.2.2 - Apply transforms to a subset of serializers or parsers</h3> <div class='topic'> <p> - The {@link org.apache.juneau.rest.RestServlet#createSerializers(ObjectMap,Class[],Class[])} and {@link org.apache.juneau.rest.RestServlet#createParsers(ObjectMap,Class[],Class[])} - methods are the servlet methods that get called during servlet initialization to create the serializer and + The {@link org.apache.juneau.rest.RestConfig#addSerializers(Class[])} and {@link org.apache.juneau.rest.RestConfig#addParsers(Class[])} + methods are the methods that get called during servlet initialization to create the serializer and parser groups. These methods can be overridden to customize individual serializers and parsers in a way that can't be done using annotations. </p> @@ -5460,10 +5456,9 @@ </p> <p class='bcode'> <ja>@Override</ja> - <jk>protected</jk> SerializerGroup createSerializers(ObjectMap properties, Class[] beanFilters, Class[] pojoSwaps) <jk>throws</jk> Exception { - SerializerGroup g = <jk>super</jk>.createSerializers(properties, beanFilters, pojoSwaps); - g.getSerializer(<js>"text/html"</js>).pojoSwaps(DoubleSwap.<jk>class</jk>); - <jk>return</jk> g; + <jk>public synchronized void</jk> init(RestServletConfig config) <jk>throws</jk> Exception { + config.addSerializer(<jk>new</jk> HtmlSerializerBuilder().pojoSwaps(DoubleSwap.<jk>class</jk>).build()); + super.init(config); } </p> </div> @@ -5593,7 +5588,7 @@ <h5 class='toc'>What's new in each release</h5> <ul class='toc'> - <li><p><a class='doclink' href='#6.1.1'>6.1.1 (TBD)</a></p> + <li><p><a class='doclink' href='#6.2.0'>6.2.0 (TBD)</a></p> <li><p><a class='doclink' href='#6.1.0'>6.1.0 (Feb 25, 2017)</a></p> <li><p><a class='doclink' href='#6.0.1'>6.0.1 (Jan 3, 2017)</a></p> <li><p><a class='doclink' href='#6.0.0'>6.0.0 (Oct 3, 2016)</a></p> @@ -5661,11 +5656,11 @@ <!-- ======================================================================================================== --> - <a id="6.1.1"></a> - <h3 class='topic' onclick='toggle(this)'>6.1.1 (TBD)</h3> + <a id="6.2.0"></a> + <h3 class='topic' onclick='toggle(this)'>6.2.0 (TBD)</h3> <div class='topic'> <p> - Juneau 6.1.1 is ... + Juneau 6.2.0 is a major update. </p> <h6 class='topic'>org.apache.juneau</h6> @@ -5732,6 +5727,48 @@ <h6 class='topic'>org.apache.juneau.rest</h6> <ul class='spaced-list'> + <li>{@link org.apache.juneau.rest.annotation.RestResource @RestResource} annotation can now be applied to + any class! You're no longer restricted to subclassing your resources from {@link org.apache.juneau.rest.RestServlet}. + <br>This is a major enhancement in the API. Anything you could do by subclassing from <code>RestServlet</code> + should have an equivalent for non-<code>RestServlet</code> classes. + <br>The only restriction is that the top-level resource must subclass from <code>RestServlet</code>. + Child resources do not. + <br><br> + The majority of code has been split up into two separate classes: + <ul> + <li>{@link org.apache.juneau.rest.RestConfig} - A modifiable configuration of a resource. Subclasses from {@link javax.servlet.ServletConfig}. + <li>{@link org.apache.juneau.rest.RestContext} - A read-only configuration that's the result of a snapshot of the config. + </ul> + <br><br> + The {@link org.apache.juneau.rest.RestServlet} class now has the following initialization method that allows you to override + the config settings define via annotations: + <ul> + <li>{@link org.apache.juneau.rest.RestServlet#init(RestConfig)} - A modifiable configuration of a resource. + </ul> + Non-<code>RestServlet</code> classes must have one of the following to allow it to be instantiated: + <ul> + <li>A <code><jk>public</jk> T(RestConfig)</code> constructor. + <li>A <code><jk>public</jk> T()</code> constructor. + <li>The parent resource must have a customized {@link org.apache.juneau.rest.RestResourceResolver} for instantiating it. + </ul> + <br> + Non-<code>RestServlet</code> classes can optionally include the following init methods to gain access to the config and context: + <ul> + <li><code><jk>public</jk> init(RestConfig)</code> + <li><code><jk>public</jk> init(RestContext)</code> + </ul> + <li>New annotations added to {@link org.apache.juneau.rest.annotation.RestResource @RestResource} to allow non-<code>RestServlet</code> + resources to do the same as subclassing directly from <code>RestServlet</code>: + <ul> + <li>{@link org.apache.juneau.rest.annotation.RestResource#resourceResolver() resourceResolver()} + - Specify a {@link org.apache.juneau.rest.RestResourceResolver} class for resolving child resources. + <li>{@link org.apache.juneau.rest.annotation.RestResource#callHandler() callHandler()} + - Specify a {@link org.apache.juneau.rest.RestCallHandler} class for handling the lifecycle of a REST call. + <li>{@link org.apache.juneau.rest.annotation.RestResource#infoProvider() infoProvider()} + - Specify a {@link org.apache.juneau.rest.RestInfoProvider} class for customizing title/description/Swagger information on a REST resource. + <li>{@link org.apache.juneau.rest.annotation.RestResource#logger() logger()} + - Specify a {@link org.apache.juneau.rest.RestLogger} class for handling logging. + </ul> <li>{@link org.apache.juneau.rest.annotation.RestResource#stylesheet()} can now take in a comma-delimited list of stylesheet paths. <li>{@link org.apache.juneau.rest.StreamResource} can now contain multiple sources from a variety of source types (e.g. <code><jk>byte</jk>[]</code> arrays, <code>InputStreams</code>, <code>Files</code>, etc...) and is now immutable. It also includes a new {@link org.apache.juneau.rest.StreamResource.Builder} class. @@ -6126,16 +6163,16 @@ <li>Eliminated <code>ResourceOptions</code> and related code. <li>New annotations and related methods: <ul> - <li>{@link org.apache.juneau.rest.annotation.RestResource#title() @RestResource.title()} / {@link org.apache.juneau.rest.RestServlet#getTitle(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#description() @RestResource.description()} / {@link org.apache.juneau.rest.RestServlet#getDescription(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#termsOfService() @RestResource.termsOfService()} / {@link org.apache.juneau.rest.RestServlet#getTermsOfService(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#contact() @RestResource.contact()} / {@link org.apache.juneau.rest.RestServlet#getContact(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#license() @RestResource.license()} / {@link org.apache.juneau.rest.RestServlet#getLicense(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#version() @RestResource.version()} / {@link org.apache.juneau.rest.RestServlet#getVersion(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#tags() @RestResource.tags()} / {@link org.apache.juneau.rest.RestServlet#getTags(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestResource#externalDocs() @RestResource.externalDocs()} / {@link org.apache.juneau.rest.RestServlet#getExternalDocs(RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestMethod#summary() @RestMethod.summary()} / {@link org.apache.juneau.rest.RestServlet#getMethodSummary(String,RestRequest)} - <li>{@link org.apache.juneau.rest.annotation.RestMethod#description() @RestMethod.description()} / {@link org.apache.juneau.rest.RestServlet#getMethodDescription(String,RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#title() @RestResource.title()} / {@link org.apache.juneau.rest.RestInfoProvider#getTitle(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#description() @RestResource.description()} / {@link org.apache.juneau.rest.RestInfoProvider#getDescription(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#termsOfService() @RestResource.termsOfService()} / {@link org.apache.juneau.rest.RestInfoProvider#getTermsOfService(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#contact() @RestResource.contact()} / {@link org.apache.juneau.rest.RestInfoProvider#getContact(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#license() @RestResource.license()} / {@link org.apache.juneau.rest.RestInfoProvider#getLicense(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#version() @RestResource.version()} / {@link org.apache.juneau.rest.RestInfoProvider#getVersion(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#tags() @RestResource.tags()} / {@link org.apache.juneau.rest.RestInfoProvider#getTags(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestResource#externalDocs() @RestResource.externalDocs()} / {@link org.apache.juneau.rest.RestInfoProvider#getExternalDocs(RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestMethod#summary() @RestMethod.summary()} / {@link org.apache.juneau.rest.RestInfoProvider#getMethodSummary(String,RestRequest)} + <li>{@link org.apache.juneau.rest.annotation.RestMethod#description() @RestMethod.description()} / {@link org.apache.juneau.rest.RestInfoProvider#getMethodDescription(String,RestRequest)} <li>{@link org.apache.juneau.rest.annotation.RestMethod#externalDocs() @RestMethod.externalDocs()} <li>{@link org.apache.juneau.rest.annotation.RestMethod#tags() @RestMethod.tags()} <li>{@link org.apache.juneau.rest.annotation.RestMethod#deprecated() @RestMethod.deprecated()} @@ -6144,23 +6181,23 @@ </ul> </li> </ul> - <li>New {@link org.apache.juneau.rest.RestServletContext#paramFormat} context property. + <li>New <code><del>RestServletContext.paramFormat</del></code> context property. <li>New/updated methods on {@link org.apache.juneau.rest.RestServlet}: <ul> - <li>{@link org.apache.juneau.rest.RestServlet#createProperties()} - <li>{@link org.apache.juneau.rest.RestServlet#createBeanContext(ObjectMap,Class[],Class[])} - <li>{@link org.apache.juneau.rest.RestServlet#createBeanFilters()} - <li>{@link org.apache.juneau.rest.RestServlet#createPojoSwaps()} - <li>{@link org.apache.juneau.rest.RestServlet#createParsers(ObjectMap,Class[],Class[])} - <li>{@link org.apache.juneau.rest.RestServlet#createUrlEncodingSerializer(ObjectMap,Class[],Class[])} - <li>{@link org.apache.juneau.rest.RestServlet#createUrlEncodingParser(ObjectMap,Class[],Class[])} - <li>{@link org.apache.juneau.rest.RestServlet#createConverters(ObjectMap)} - <li>{@link org.apache.juneau.rest.RestServlet#createDefaultRequestHeaders(ObjectMap)} - <li>{@link org.apache.juneau.rest.RestServlet#createDefaultResponseHeaders(ObjectMap)} - <li>{@link org.apache.juneau.rest.RestServlet#createEncoders(ObjectMap)} - <li>{@link org.apache.juneau.rest.RestServlet#createGuards(ObjectMap)} - <li>{@link org.apache.juneau.rest.RestServlet#createMimetypesFileTypeMap(ObjectMap)} - <li>{@link org.apache.juneau.rest.RestServlet#createResponseHandlers(ObjectMap)} + <li><code><del>RestServlet.createProperties()</del></code> + <li><code><del>RestServlet.createBeanContext(ObjectMap,Class[],Class[])</del></code> + <li><code><del>RestServlet.createBeanFilters()</del></code> + <li><code><del>RestServlet.createPojoSwaps()</del></code> + <li><code><del>RestServlet.createParsers(ObjectMap,Class[],Class[])</del></code> + <li><code><del>RestServlet.createUrlEncodingSerializer(ObjectMap,Class[],Class[])</del></code> + <li><code><del>RestServlet.createUrlEncodingParser(ObjectMap,Class[],Class[])</del></code> + <li><code><del>RestServlet.createConverters(ObjectMap)</del></code> + <li><code><del>RestServlet.createDefaultRequestHeaders(ObjectMap)</del></code> + <li><code><del>RestServlet.createDefaultResponseHeaders(ObjectMap)</del></code> + <li><code><del>RestServlet.createEncoders(ObjectMap)</del></code> + <li><code><del>RestServlet.createGuards(ObjectMap)</del></code> + <li><code><del>RestServlet.createMimetypesFileTypeMap(ObjectMap)</del></code> + <li><code><del>RestServlet.createResponseHandlers(ObjectMap)</del></code> </ul> </li> <li>New client-version annotations: @@ -6223,10 +6260,9 @@ <h6 class='topic'>Server</h6> <ul class='spaced-list'> - <li>New methods on {@link org.apache.juneau.rest.RestServlet}: + <li>New methods on {@link org.apache.juneau.rest.RestContext}: <ul> - <li>{@link org.apache.juneau.rest.RestServlet#getMessages()} - <li>{@link org.apache.juneau.rest.RestServlet#getMessages(Locale)} + <li>{@link org.apache.juneau.rest.RestContext#getMessages()} </ul> </ul> @@ -6569,15 +6605,15 @@ </ul> <li>New methods in {@link org.apache.juneau.rest.RestServlet}: <ul> - <li>{@link org.apache.juneau.rest.RestServlet#getChildClasses()} - Programmatic equivalent to {@link org.apache.juneau.rest.annotation.RestResource#children()} annotation. - <li>{@link org.apache.juneau.rest.RestServlet#shouldLog(HttpServletRequest,HttpServletResponse,RestException)} - <li>{@link org.apache.juneau.rest.RestServlet#shouldLogStackTrace(HttpServletRequest,HttpServletResponse,RestException)} - <li>{@link org.apache.juneau.rest.RestServlet#logObjects(Level,String,Object[])} - <li>{@link org.apache.juneau.rest.RestServlet#resolveStaticFile(String)} - <li>{@link org.apache.juneau.rest.RestServlet#createStyleSheet()} - <li>{@link org.apache.juneau.rest.RestServlet#createFavIcon()} - <li>{@link org.apache.juneau.rest.RestServlet#createStaticFilesMap()} - <li>{@link org.apache.juneau.rest.RestServlet#getConfigMgr()} + <li><code><del>RestServlet.getChildClasses()</del></code> - Programmatic equivalent to {@link org.apache.juneau.rest.annotation.RestResource#children()} annotation. + <li><code><del>RestServlet.shouldLog(HttpServletRequest,HttpServletResponse,RestException)</del></code> + <li><code><del>RestServlet.shouldLogStackTrace(HttpServletRequest,HttpServletResponse,RestException)</del></code> + <li><code><del>RestServlet.logObjects(Level,String,Object[])</del></code> + <li><code><del>RestServlet.resolveStaticFile(String)</del></code> + <li><code><del>RestServlet.createStyleSheet()</del></code> + <li><code><del>RestServlet.createFavIcon()</del></code> + <li><code><del>RestServlet.createStaticFilesMap()</del></code> + <li><code><del>RestServlet.getConfigMgr()</del></code> </ul> <li>Removed {@link org.apache.juneau.jso.JsoParser} from {@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault}. @@ -6709,7 +6745,7 @@ <li>Changes to {@link org.apache.juneau.rest.RestServlet}: <ul> <li>New methods for accessing external INI config files:<br> - {@link org.apache.juneau.rest.RestServlet#getConfig()}<br> + <code><del>RestServlet.getConfig()</del></code><br> <code><del>RestServlet.createConfigFile()</del></code> <li>New <js>"$C{...}"</js> variable that resolve to INI config file values. <li>New <js>"$UE{...}"</js> variable that URL-encodes the value inside the variable. @@ -6718,16 +6754,16 @@ <del><code>RestServlet.getResourceAsString(String)</code></del><br> <del><code>RestServlet.getResource(Class,String,String)</code></del>. Useful if you want to load predefined POJOs from JSON files in your classpath. - <li>New {@link org.apache.juneau.rest.RestServlet#handleNotFound(int,RestRequest,RestResponse)} method for customized handling + <li>New <code><del>RestServlet.handleNotFound(int,RestRequest,RestResponse)</del></code> method for customized handling of when a resource or method was not found. </ul> <li>{@link org.apache.juneau.rest.RestServletDefault} now automatically processes <js>"/favicon.ico"</js> requests by - overriding the new {@link org.apache.juneau.rest.RestServlet#handleNotFound(int,RestRequest,RestResponse)} method. + overriding the new <code><del>RestServlet.handleNotFound(int,RestRequest,RestResponse)</del></code> method. <li>New {@link org.apache.juneau.rest.RestRequest} methods: <ul> <li>{@link org.apache.juneau.rest.RestRequest#resolveVars(String)} <li><code>RestRequest.getVarResource(String)</code> - <li>{@link org.apache.juneau.rest.RestRequest#getConfig()} + <li><code><del>RestRequest.getConfig()</del></code> </ul> <li>New {@link org.apache.juneau.rest.RestResponse} methods: <ul> @@ -6816,11 +6852,11 @@ These replace the various <code>description</code> annotations added 2 days ago with a simpler design. <li>New methods on {@link org.apache.juneau.rest.RestServlet}: <ul> - <li>{@link org.apache.juneau.rest.RestServlet#getMethodDescription(String,RestRequest)} so that subclasses + <li><code><del>RestServlet.getMethodDescription(String,RestRequest)</del></code> so that subclasses can override the method description in the OPTIONS page. <li><del><code>RestServlet.createRequestVarResolver(RestRequest)</code></del> so that subclasses can override and augment the variable resolver. - <li>{@link org.apache.juneau.rest.RestServlet#resolveChild(Class)} and {@link org.apache.juneau.rest.RestServlet#replaceChild(RestServlet)} + <li><code><del>RestServlet.resolveChild(Class)</del></code> and <code><del>RestServlet.replaceChild(RestServlet)</del></code> classes that allows customized resolution of servlet instances (e.g. if services are defined in OSGi). </ul> <li>Reverted the <del><code>MethodDescription</code></del> back to 5.1.0.16 since it was being used by someone. @@ -6904,7 +6940,7 @@ <li><code>$R{trimmedRequestURI}</code> - Returns value from {@link org.apache.juneau.rest.RestRequest#getTrimmedRequestURI()} <li><code>$E{var}</code> - Environment variables. </ul> - <li>Added methods {@link org.apache.juneau.rest.RestServlet#getDescription(RestRequest)} and <del><code>RestServlet.getLabel(RestRequest)</code></del>. + <li>Added methods <code><del>RestServlet.getDescription(RestRequest)</del></code> and <del><code>RestServlet.getLabel(RestRequest)</code></del>. <li>{@link org.apache.juneau.rest.RestServletDefault} and {@link org.apache.juneau.rest.jena.RestServletJenaDefault} now provide default HTML titles and descriptions: <p class='bcode'> @@ -7456,7 +7492,7 @@ </p> <ul class='spaced-list'> - <li>New {@link org.apache.juneau.rest.RestServlet#getPath()} method. + <li>New <code><del>RestServlet.getPath()</del></code> method. <li>New <code>SerializerContext.getJavaMethod()</code> and <code>ParserContext.getJavaMethod()</code> to allow access to REST methods that invoked the serializers or parsers. For example, can be used to access additional annotations on REST methods to perform special handing @@ -7691,20 +7727,20 @@ <li> New methods on {@link org.apache.juneau.rest.RestServlet} that allow easier customization by subclasses: <ul> - <li><code>RestServlet.createConfigFactory()</code></li> - <li><code>RestServlet.createConverters()</code></li> - <li><code>RestServlet.createDefaultRequestHeaders()</code></li> - <li><code>RestServlet.createDefaultResponseHeaders()</code></li> - <li><code>RestServlet.createEncoders()</code></li> - <li><code>RestServlet.createFilters()</code></li> - <li><code>RestServlet.createGuards()</code></li> - <li><code>RestServlet.createMimetypesFileTypeMap()</code></li> - <li><code>RestServlet.createParsers()</code></li> - <li>{@link org.apache.juneau.rest.RestServlet#createProperties()}</li> - <li>{@link org.apache.juneau.rest.RestServlet#createRequestProperties(ObjectMap,RestRequest)}</li> - <li><code>RestServlet.createRequestVarResolver(RestRequest)</code></li> - <li><code>RestServlet.createSerializers()</code></li> - <li><code>RestServlet.createUrlEncodingParser()</code></li> + <li><code><del>RestServlet.createConfigFactory()</del></code></li> + <li><code><del>RestServlet.createConverters()</del></code></li> + <li><code><del>RestServlet.createDefaultRequestHeaders()</del></code></li> + <li><code><del>RestServlet.createDefaultResponseHeaders()</del></code></li> + <li><code><del>RestServlet.createEncoders()</del></code></li> + <li><code><del>RestServlet.createFilters()</del></code></li> + <li><code><del>RestServlet.createGuards()</del></code></li> + <li><code><del>RestServlet.createMimetypesFileTypeMap()</del></code></li> + <li><code><del>RestServlet.createParsers()</del></code></li> + <li><code><del>RestServlet.createProperties()</del></code></li> + <li><code><del>RestServlet.createRequestProperties(ObjectMap,RestRequest)</del></code></li> + <li><code><del>RestServlet.createRequestVarResolver(RestRequest)</del></code></li> + <li><code><del>RestServlet.createSerializers()</del></code></li> + <li><code><del>RestServlet.createUrlEncodingParser()</del></code></li> </ul> </li> <li> @@ -8537,7 +8573,7 @@ Support for <code>Accept</code> and <code>Content-Type</code> <js>"application/x-www-form-urlencoded"</js> added by default on {@link org.apache.juneau.rest.RestServletDefault}. </li> <li> - New {@link org.apache.juneau.rest.RestServlet#renderError(HttpServletRequest,HttpServletResponse,RestException)} method to allow customized handling of response errors. + New <code><del>RestServlet.renderError(HttpServletRequest,HttpServletResponse,RestException)</del></code> method to allow customized handling of response errors. </li> </ul> </div> @@ -8557,7 +8593,7 @@ <h6 class='topic'>REST server API changes</h6> <ul class='spaced-list'> <li>New <code>RestServletProperties</code> class that defines all the class-level properties that can be set on the servlet.</li> - <li>Properties can be set through {@link org.apache.juneau.rest.annotation.RestResource#properties() @RestResource.properties} annotation, or new {@link org.apache.juneau.rest.RestServlet#setProperty(String,Object)} method.</li> + <li>Properties can be set through {@link org.apache.juneau.rest.annotation.RestResource#properties() @RestResource.properties} annotation, or new <code><del>RestServlet.setProperty(String,Object)</del></code> method.</li> <li>New <js>"?noTrace"</js> URL parameter to prevent stack traces from being logged (for JUnit testing of error conditions).</li> <li>New <code>RestServletProperties.REST_useStackTraceHashes</code> property to prevent the same stack trace from being logged multiple times.</li> <li>New <code>RestServletProperties.REST_renderResponseStackTraces</code> property for preventing stack traces in responses for security reasons.</li> @@ -9041,6 +9077,4 @@ </div> </div> -</body> - - +</body> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java index 6a8512c..f0b6a3d 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java @@ -15,15 +15,13 @@ package org.apache.juneau.examples.rest; import static java.util.logging.Level.*; import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.html.HtmlDocSerializerContext.*; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.io.*; import java.net.*; import java.util.*; import java.util.logging.*; -import javax.servlet.*; - import org.apache.juneau.*; import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; @@ -58,9 +56,10 @@ public class DirectoryResource extends Resource { private static Logger logger = Logger.getLogger(DirectoryResource.class.getName()); - @Override /* Servlet */ - public void init() throws ServletException { - ObjectMap p = getProperties(); + @Override /* RestServlet */ + public synchronized void init(RestConfig config) throws Exception { + super.init(config); + ObjectMap p = config.getProperties(); rootDir = new File(p.getString("rootDir")); allowViews = p.getBoolean("allowViews", false); allowDeletes = p.getBoolean("allowDeletes", false); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java index eab51fa..00bc907 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java @@ -16,8 +16,7 @@ import static org.apache.juneau.html.HtmlDocSerializerContext.*; import java.util.*; -import javax.servlet.*; - +import org.apache.juneau.ini.*; import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; @@ -38,13 +37,15 @@ public class DockerRegistryResource extends Resource { private static final long serialVersionUID = 1L; // Get registry URL from examples.cfg file. - private String registryUrl = getConfig().getString("DockerRegistry/url"); + private String registryUrl; RestClient rc; @Override /* Servlet */ - public void init() throws ServletException { - super.init(); + public synchronized void init(RestConfig servletConfig) throws Exception { + super.init(servletConfig); + ConfigFile cf = servletConfig.getConfigFile(); + registryUrl = cf.getString("DockerRegistry/url"); rc = new RestClientBuilder().build(); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java index 68f457b..4173623 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java @@ -13,7 +13,7 @@ package org.apache.juneau.examples.rest; import static org.apache.juneau.html.HtmlDocSerializerContext.*; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.util.*; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java index bd270d9..e32d302 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java @@ -43,17 +43,20 @@ import org.apache.juneau.rest.annotation.Body; public class SqlQueryResource extends Resource { private static final long serialVersionUID = 1L; - private ConfigFile cf = getConfig(); - - private String driver = cf.getString("SqlQueryResource/driver"); - private String connectionUrl = cf.getString("SqlQueryResource/connectionUrl"); - private boolean - allowUpdates = cf.getBoolean("SqlQueryResource/allowUpdates", false), - allowTempUpdates = cf.getBoolean("SqlQueryResource/allowTempUpdates", false), + private String driver, connectionUrl; + private boolean allowUpdates, allowTempUpdates, includeRowNums; + + @Override /* RestServlet */ + public synchronized void init(RestConfig servletConfig) throws Exception { + super.init(servletConfig); + ConfigFile cf = servletConfig.getConfigFile(); + + driver = cf.getString("SqlQueryResource/driver"); + connectionUrl = cf.getString("SqlQueryResource/connectionUrl"); + allowUpdates = cf.getBoolean("SqlQueryResource/allowUpdates", false); + allowTempUpdates = cf.getBoolean("SqlQueryResource/allowTempUpdates", false); includeRowNums = cf.getBoolean("SqlQueryResource/includeRowNums", false); - - @Override /* Servlet */ - public void init() { + try { Class.forName(driver).newInstance(); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java index e077abf..b8a7a50 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java @@ -17,7 +17,7 @@ import static org.apache.juneau.examples.addressbook.AddressBook.*; import static org.apache.juneau.html.HtmlDocSerializerContext.*; import static org.apache.juneau.jena.RdfCommonContext.*; import static org.apache.juneau.jena.RdfSerializerContext.*; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.util.*; @@ -288,7 +288,7 @@ public class AddressBookResource extends ResourceJena { ) }; - return new DataSet(items, addressBook, this.getBeanContext().createSession()); + return new DataSet(items, addressBook, this.getContext().getBeanContext().createSession()); } /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java index c0b9326..6102193 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java @@ -16,14 +16,13 @@ import static org.apache.juneau.html.HtmlDocSerializerContext.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; -import org.apache.juneau.svl.*; import org.apache.juneau.svl.vars.*; /** * Superclass for all REST resources. * <p> * In additional to the functionality of the {@link RestServletDefault} group, - * augments the {@link #createVarResolver()} method with the following additional variable types: + * 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()}.<br> * <h6 class='figure'>Example:</h6> @@ -48,14 +47,12 @@ import org.apache.juneau.svl.vars.*; ) public abstract class Resource extends RestServletDefault { - /** - * Adds $ARG and $MF variables to variable resolver defined on {@link RestServlet#createVarResolver()}. - */ - @Override - protected VarResolverBuilder createVarResolver() { - return super.createVarResolver() - .vars(ArgsVar.class, ManifestFileVar.class) - .contextObject(ArgsVar.SESSION_args, Microservice.getArgs()) - .contextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest()); + @Override /* RestServlet */ + public synchronized void init(RestConfig config) throws Exception { + config + .addVars(ArgsVar.class, ManifestFileVar.class) + .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs()) + .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest()); + super.init(config); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java index 610575d..440bd28 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java @@ -16,14 +16,13 @@ import static org.apache.juneau.html.HtmlDocSerializerContext.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; -import org.apache.juneau.svl.*; import org.apache.juneau.svl.vars.*; /** * Superclass for all REST resource groups. * <p> * In additional to the functionality of the {@link RestServletGroupDefault} group, - * augments the {@link #createVarResolver()} method with the following additional variable types: + * 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()}.<br> @@ -49,14 +48,12 @@ import org.apache.juneau.svl.vars.*; ) public abstract class ResourceGroup extends RestServletGroupDefault { - /** - * Adds $ARG and $MF variables to variable resolver defined on {@link RestServlet#createVarResolver()}. - */ - @Override - protected VarResolverBuilder createVarResolver() { - return super.createVarResolver() - .vars(ArgsVar.class, ManifestFileVar.class) - .contextObject(ArgsVar.SESSION_args, Microservice.getArgs()) - .contextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest()); + @Override /* RestServlet */ + public synchronized void init(RestConfig config) throws Exception { + config + .addVars(ArgsVar.class, ManifestFileVar.class) + .addVarContextObject(ArgsVar.SESSION_args, Microservice.getArgs()) + .addVarContextObject(ManifestFileVar.SESSION_manifest, Microservice.getManifest()); + super.init(config); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-microservice/src/main/java/org/apache/juneau/microservice/package.html ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/package.html b/juneau-microservice/src/main/java/org/apache/juneau/microservice/package.html index b546032..f77d119 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/package.html +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/package.html @@ -612,8 +612,9 @@ <li><l>$MF{key}, $MF{key,default}</l> - Manifest file entries. <li><l>$ARG{key}, $ARG{key,default}</l> - Command-line arguments. </ul> - Additional user-defined variables can be defined by overriding the {@link org.apache.juneau.microservice.Microservice#createVarResolver()} method. - <li class='m'>{@link org.apache.juneau.rest.RestServlet#getConfig()} - An instance method to access it from inside a REST servlet.<br> + Additional user-defined variables can be defined by overriding the {@link org.apache.juneau.microservice.Microservice#createVarResolver()} method + and using the {@link org.apache.juneau.rest.RestConfig#addVars(Class...)} method. + <li class='m'>{@link org.apache.juneau.rest.RestContext#getConfigFile()} - An instance method to access it from inside a REST servlet.<br> The following variables are available in addition to the variables defined above: <ul> <li><l>$I{key}, $I{key,default}</l> - Servlet initialization parameters. @@ -640,9 +641,10 @@ } </p> <p> - Additional user-defined variables can be defined at this level by overriding the {@link org.apache.juneau.microservice.Resource#createVarResolver()} method. + Additional user-defined variables can be defined at this level by overriding the {@link org.apache.juneau.microservice.Resource#init(RestConfig)} method + and using the {@link org.apache.juneau.rest.RestConfig#addVars(Class...)} method. </p> - <li class='m'>{@link org.apache.juneau.rest.RestRequest#getConfig()} - An instance method to access it from inside a REST method.<br> + <li class='m'>{@link org.apache.juneau.rest.RestRequest#getConfigFile()} - An instance method to access it from inside a REST method.<br> The following variables are available in addition to the variables defined above: <ul> <li><l>$L{key}, $L{key,args}</l> - Localized variables pulled from {@link org.apache.juneau.rest.RestRequest#getMessage(String, Object...)}. @@ -709,7 +711,7 @@ <ck>MyHelloResource.HelloMessage</ck> = <cv>Hello {0}!</cv> </p> <p> - Additional user-defined variables can be defined at this level by overriding the {@link org.apache.juneau.rest.RestServlet#createVarResolver()} method. + Additional user-defined variables can be defined at this level by overriding the {@link org.apache.juneau.rest.RestConfig#addVars(Class...)} method. </p> </ul> <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java index c7f1b08..f258ec8 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java @@ -49,7 +49,7 @@ public class ConfigResource extends Resource { */ @RestMethod(name="GET", path="/", description="Show contents of config file.") public ConfigFile getConfigContents() throws Exception { - return getConfig(); + return getServletConfig().getConfigFile(); } /** @@ -68,7 +68,7 @@ public class ConfigResource extends Resource { tr(th().child("Contents")), tr(th().child( textarea().name("contents").rows(40).cols(120).style("white-space:pre;word-wrap:normal;overflow-x:scroll;font-family:monospace;") - .text(getConfig().toString())) + .text(getConfigContents().toString())) ) ) ) @@ -143,7 +143,7 @@ public class ConfigResource extends Resource { ) public ConfigFile setConfigContents(@Body Reader contents) throws Exception { ConfigFile cf2 = ConfigMgr.DEFAULT.create().load(contents); - return getConfig().merge(cf2).save(); + return getConfigContents().merge(cf2).save(); } /** @@ -162,7 +162,7 @@ public class ConfigResource extends Resource { } ) public ObjectMap setConfigSection(@Path("section") String section, @Body Map<String,String> contents) throws Exception { - getConfig().setSection(section, contents); + getConfigContents().setSection(section, contents); return getSection(section); } @@ -184,12 +184,12 @@ public class ConfigResource extends Resource { } ) public String setConfigSection(@Path("section") String section, @Path("key") String key, @Body String value) throws Exception { - getConfig().put(section, key, value, false); + getConfigContents().put(section, key, value, false); return getSection(section).getString(key); } - private ObjectMap getSection(String name) { - ObjectMap m = getConfig().getSectionMap(name); + private ObjectMap getSection(String name) throws Exception { + ObjectMap m = getConfigContents().getSectionMap(name); if (m == null) throw new RestException(SC_NOT_FOUND, "Section not found."); return m; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java index da1cae9..0922221 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java @@ -15,7 +15,7 @@ package org.apache.juneau.microservice.resources; import static java.util.logging.Level.*; import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.html.HtmlDocSerializerContext.*; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.io.*; import java.net.*; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java ---------------------------------------------------------------------- diff --git a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java index ea1bc2f..b2011a4 100755 --- a/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java +++ b/juneau-microservice/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java @@ -14,7 +14,7 @@ package org.apache.juneau.microservice.resources; import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.html.HtmlDocSerializerContext.*; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.io.*; import java.net.*; @@ -53,14 +53,8 @@ import org.apache.juneau.transforms.*; public class LogsResource extends Resource { private static final long serialVersionUID = 1L; - private ConfigFile cf = getConfig(); - - private File logDir = new File(cf.getString("Logging/logDir", ".")); - private LogEntryFormatter leFormatter = new LogEntryFormatter( - cf.getString("Logging/format", "[{date} {level}] {msg}%n"), - cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss"), - cf.getBoolean("Logging/useStackTraceHashes") - ); + private File logDir; + private LogEntryFormatter leFormatter; private final FileFilter filter = new FileFilter() { @Override /* FileFilter */ @@ -68,6 +62,19 @@ public class LogsResource extends Resource { return f.isDirectory() || f.getName().endsWith(".log"); } }; + + @Override /* RestServlet */ + public synchronized void init(RestConfig config) throws Exception { + super.init(config); + ConfigFile cf = config.getConfigFile(); + + logDir = new File(cf.getString("Logging/logDir", ".")); + leFormatter = new LogEntryFormatter( + cf.getString("Logging/format", "[{date} {level}] {msg}%n"), + cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss"), + cf.getBoolean("Logging/useStackTraceHashes") + ); + } /** * [GET /*] - Get file details or directory listing. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java ---------------------------------------------------------------------- diff --git a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java index 6ded12d..e2a6571 100644 --- a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java +++ b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/JuneauProvider.java @@ -65,7 +65,7 @@ public @interface JuneauProvider { * <p> * Any of the following property names can be specified: * <ul> - * <li>{@link RestServletContext} + * <li>{@link RestContext} * <li>{@link BeanContext} * <li>{@link SerializerContext} * <li>{@link ParserContext} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java index ee3a172..9ab29c6 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java @@ -12,7 +12,7 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.test; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.io.*; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java index 5be60cb..e8f84cc 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java @@ -28,11 +28,11 @@ public class ConfigResource extends Resource { @RestMethod(name="GET", path="/") public ConfigFile test1(RestRequest req) { - return req.getConfig(); + return req.getConfigFile(); } @RestMethod(name="GET", path="/{key}/{class}") public Object test2(RestRequest req, @Path("key") String key, @Path("class") Class<?> c) throws Exception { - return req.getConfig().getObject(c, key); + return req.getConfigFile().getObject(c, key); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java index 3da65d6..6575ec9 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ContentResource.java @@ -12,7 +12,7 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.test; -import static org.apache.juneau.rest.RestServletContext.*; +import static org.apache.juneau.rest.RestContext.*; import java.util.*; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/07843d64/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/GroupsResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/GroupsResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/GroupsResource.java index 0ca0557..adad8d2 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/GroupsResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/GroupsResource.java @@ -29,6 +29,12 @@ import org.apache.juneau.serializer.*; public class GroupsResource extends RestServlet { private static final long serialVersionUID = 1L; + @Override /* RestServlet */ + public synchronized void init(RestConfig config) throws Exception { + config.addSerializers(SSerializer.class).addParsers(PParser.class); + super.init(config); + } + @Produces("text/s1,text/s2") public static class SSerializer extends WriterSerializer { @@ -56,17 +62,6 @@ public class GroupsResource extends RestServlet { } } - - @Override /* RestServlet */ - public SerializerGroupBuilder createSerializers(ObjectMap properties, Class<?>[] beanFilters, Class<?>[] pojoSwaps) throws Exception { - return super.createSerializers(properties, beanFilters, pojoSwaps).append(SSerializer.class); - } - - @Override /* RestServlet */ - public ParserGroupBuilder createParsers(ObjectMap properties, Class<?>[] beanFilters, Class<?>[] pojoSwaps) throws Exception { - return super.createParsers(properties, beanFilters, pojoSwaps).append(PParser.class); - } - //==================================================================================================== // Serializer defined on class. //====================================================================================================
