You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/03/17 02:17:12 UTC
[7/7] incubator-juneau git commit: Allow @RestResource/@RestMethod
annotations to be used on any classes.
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 <ja...@apache.org>
Authored: Thu Mar 16 22:16:57 2017 -0400
Committer: JamesBognar <ja...@apache.org>
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.
//====================================================================================================