This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new ec12a37 Context API refactoring.
ec12a37 is described below
commit ec12a37c68aa84da49ea44b9591f898e2acb43cb
Author: JamesBognar <[email protected]>
AuthorDate: Sat Sep 11 17:07:40 2021 -0400
Context API refactoring.
---
.../main/java/org/apache/juneau/cp/Messages.java | 199 +++++++++++++++++++--
.../java/org/apache/juneau/cp/MessagesBuilder.java | 128 -------------
.../java/org/apache/juneau/rest/RestContext.java | 84 +--------
.../org/apache/juneau/rest/RestContextBuilder.java | 87 +++++++--
.../org/apache/juneau/rest/annotation/Rest.java | 4 +-
5 files changed, 268 insertions(+), 234 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
index 6f39857..5150747 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
@@ -12,6 +12,8 @@
//
***************************************************************************************************************************
package org.apache.juneau.cp;
+import static org.apache.juneau.internal.ExceptionUtils.*;
+import static org.apache.juneau.internal.ObjectUtils.*;
import static org.apache.juneau.internal.ResourceBundleUtils.*;
import static org.apache.juneau.internal.StringUtils.*;
@@ -20,6 +22,10 @@ import java.util.*;
import java.util.concurrent.*;
import org.apache.juneau.collections.*;
+import org.apache.juneau.internal.*;
+import org.apache.juneau.marshall.*;
+import org.apache.juneau.parser.ParseException;
+import org.apache.juneau.utils.*;
/**
* An enhanced {@link ResourceBundle}.
@@ -87,7 +93,7 @@ import org.apache.juneau.collections.*;
* </ul>
*
* <p>
- * These patterns can be customized using the {@link
MessagesBuilder#baseNames(String...)} method.
+ * These patterns can be customized using the {@link
Builder#baseNames(String...)} method.
*
* <p>
* Localized messages can be retrieved in the following way:
@@ -119,8 +125,8 @@ public class Messages extends ResourceBundle {
* The class we're creating this object for.
* @return A new builder.
*/
- public static final MessagesBuilder create(Class<?> forClass) {
- return new MessagesBuilder(forClass);
+ public static final Builder create(Class<?> forClass) {
+ return new Builder(forClass);
}
/**
@@ -152,15 +158,14 @@ public class Messages extends ResourceBundle {
/**
* Constructor.
*
- * @param forClass
- * The class we're creating this object for.
- * @param rb
- * The resource bundle we're encapsulating. Can be <jk>null</jk>.
- * @param locale The locale of these messages.
- * @param parent
- * The parent resource. Can be <jk>null</jk>.
+ * @param builder
+ * The builder for this object.
*/
- public Messages(Class<?> forClass, ResourceBundle rb, Locale locale,
Messages parent) {
+ protected Messages(Builder builder) {
+ this(builder.forClass, builder.getBundle(), builder.locale,
builder.parent);
+ }
+
+ Messages(Class<?> forClass, ResourceBundle rb, Locale locale, Messages
parent) {
this.c = forClass;
this.rb = rb;
this.parent = parent;
@@ -195,6 +200,178 @@ public class Messages extends ResourceBundle {
}
/**
+ * The builder for this object.
+ */
+ public static class Builder {
+
+ Class<?> forClass;
+ Locale locale = Locale.getDefault();
+ Messages impl;
+ String name;
+ Messages parent;
+ List<Tuple2<Class<?>,String>> locations = new ArrayList<>();
+
+ private String[] baseNames =
{"{package}.{name}","{package}.i18n.{name}","{package}.nls.{name}","{package}.messages.{name}"};
+
+ /**
+ * Constructor.
+ *
+ * @param forClass The base class.
+ */
+ protected Builder(Class<?> forClass) {
+ this.forClass = forClass;
+ this.name = forClass.getSimpleName();
+ }
+
+ /**
+ * Adds a parent bundle.
+ *
+ * @param parent The parent bundle. Can be <jk>null</jk>.
+ * @return This object.
+ */
+ public Builder parent(Messages parent) {
+ this.parent = parent;
+ return this;
+ }
+
+ /**
+ * Specifies the bundle name (e.g. <js>"Messages"</js>).
+ *
+ * @param name
+ * The bundle name.
+ * <br>If <jk>null</jk>, the forClass class name is used.
+ * @return This object.
+ */
+ public Builder name(String name) {
+ this.name = isEmpty(name) ? forClass.getSimpleName() :
name;
+ return this;
+ }
+
+ /**
+ * Specifies the base name patterns to use for finding the
resource bundle.
+ *
+ * @param baseNames
+ * The bundle base names.
+ * <br>The default is the following:
+ * <ul>
+ * <li><js>"{package}.{name}"</js>
+ * <li><js>"{package}.i18n.{name}"</js>
+ * <li><js>"{package}.nls.{name}"</js>
+ * <li><js>"{package}.messages.{name}"</js>
+ * </ul>
+ * @return This object.
+ */
+ public Builder baseNames(String...baseNames) {
+ this.baseNames = baseNames == null ? new String[]{} :
baseNames;
+ return this;
+ }
+
+ /**
+ * Specifies the locale.
+ *
+ * @param locale
+ * The locale.
+ * If <jk>null</jk>, the default locale is used.
+ * @return This object.
+ */
+ public Builder locale(Locale locale) {
+ this.locale = locale == null ? Locale.getDefault() :
locale;
+ return this;
+ }
+
+ /**
+ * Specifies the locale.
+ *
+ * @param locale
+ * The locale.
+ * If <jk>null</jk>, the default locale is used.
+ * @return This object.
+ */
+ public Builder locale(String locale) {
+ return locale(locale == null ? null :
Locale.forLanguageTag(locale));
+ }
+
+ /**
+ * Specifies a pre-instantiated bean for the {@link #build()}
method to return.
+ *
+ * @param value The value for this setting.
+ * @return This object.
+ */
+ public Builder impl(Messages value) {
+ this.impl = value;
+ return this;
+ }
+
+ /**
+ * Specifies a location of where to look for messages.
+ *
+ * @param baseClass The base class.
+ * @param bundlePath The bundle path.
+ * @return This object.
+ */
+ public Builder location(Class<?> baseClass, String bundlePath) {
+ this.locations.add(0, Tuple2.of(baseClass, bundlePath));
+ return this;
+ }
+
+ /**
+ * Creates a new {@link Messages} based on the setting of this
builder.
+ *
+ * @return A new {@link Messages} object.
+ */
+ public Messages build() {
+
+ if (impl != null)
+ return impl;
+
+ if (! locations.isEmpty()) {
+ Tuple2<Class<?>,String>[] mbl =
locations.toArray(new Tuple2[0]);
+
+ Builder x = null;
+
+ for (int i = mbl.length-1; i >= 0; i--) {
+ Class<?> c =
firstNonNull(mbl[i].getA(), forClass);
+ String value = mbl[i].getB();
+ if (isJsonObject(value, true)) {
+ MessagesString ms;
+ try {
+ ms =
SimpleJson.DEFAULT.read(value, MessagesString.class);
+ } catch (ParseException e) {
+ throw
runtimeException(e);
+ }
+ x =
Messages.create(c).name(ms.name).baseNames(split(ms.baseNames,
',')).locale(ms.locale).parent(x == null ? null : x.build());
+ } else {
+ x =
Messages.create(c).name(value).parent(x == null ? null : x.build());
+ }
+ }
+
+ return x == null ? null : x.build(); //
Shouldn't be null.
+ }
+
+ return new Messages(this);
+ }
+
+ private static class MessagesString {
+ public String name;
+ public String[] baseNames;
+ public String locale;
+ }
+
+ ResourceBundle getBundle() {
+ ClassLoader cl = forClass.getClassLoader();
+ OMap m = OMap.of("name", name, "package",
forClass.getPackage().getName());
+ for (String bn : baseNames) {
+ bn = StringUtils.replaceVars(bn, m);
+ ResourceBundle rb = findBundle(bn, locale, cl);
+ if (rb != null)
+ return rb;
+ }
+ return null;
+ }
+ }
+
+
+ /**
* Returns this message bundle for the specified locale.
*
* @param locale The locale to get the messages for.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/MessagesBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/MessagesBuilder.java
deleted file mode 100644
index 67db127..0000000
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/MessagesBuilder.java
+++ /dev/null
@@ -1,128 +0,0 @@
-//
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file *
-// * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance *
-// * with the License. You may obtain a copy of the License at
*
-// *
*
-// * http://www.apache.org/licenses/LICENSE-2.0
*
-// *
*
-// * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied. See the License for the *
-// * specific language governing permissions and limitations under the
License. *
-//
***************************************************************************************************************************
-package org.apache.juneau.cp;
-
-import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ResourceBundleUtils.*;
-
-import java.util.*;
-
-import org.apache.juneau.collections.*;
-import org.apache.juneau.internal.*;
-
-/**
- * Builder for {@link Messages} objects.
- */
-public class MessagesBuilder {
-
- private Class<?> forClass;
- private Locale locale = Locale.getDefault();
- private String name;
- private Messages parent;
-
- private String[] baseNames =
{"{package}.{name}","{package}.i18n.{name}","{package}.nls.{name}","{package}.messages.{name}"};
-
- MessagesBuilder(Class<?> forClass) {
- this.forClass = forClass;
- this.name = forClass.getSimpleName();
- }
-
- /**
- * Adds a parent bundle.
- *
- * @param parent The parent bundle. Can be <jk>null</jk>.
- * @return This object (for method chaining).
- */
- public MessagesBuilder parent(Messages parent) {
- this.parent = parent;
- return this;
- }
-
- /**
- * Specifies the bundle name (e.g. <js>"Messages"</js>).
- *
- * @param name
- * The bundle name.
- * <br>If <jk>null</jk>, the forClass class name is used.
- * @return This object (for method chaining).
- */
- public MessagesBuilder name(String name) {
- this.name = isEmpty(name) ? forClass.getSimpleName() : name;
- return this;
- }
-
- /**
- * Specifies the base name patterns to use for finding the resource
bundle.
- *
- * @param baseNames
- * The bundle base names.
- * <br>The default is the following:
- * <ul>
- * <li><js>"{package}.{name}"</js>
- * <li><js>"{package}.i18n.{name}"</js>
- * <li><js>"{package}.nls.{name}"</js>
- * <li><js>"{package}.messages.{name}"</js>
- * </ul>
- * @return This object (for method chaining).
- */
- public MessagesBuilder baseNames(String...baseNames) {
- this.baseNames = baseNames == null ? new String[]{} : baseNames;
- return this;
- }
-
- /**
- * Specifies the locale.
- *
- * @param locale
- * The locale.
- * If <jk>null</jk>, the default locale is used.
- * @return This object (for method chaining).
- */
- public MessagesBuilder locale(Locale locale) {
- this.locale = locale == null ? Locale.getDefault() : locale;
- return this;
- }
-
- /**
- * Specifies the locale.
- *
- * @param locale
- * The locale.
- * If <jk>null</jk>, the default locale is used.
- * @return This object (for method chaining).
- */
- public MessagesBuilder locale(String locale) {
- return locale(locale == null ? null :
Locale.forLanguageTag(locale));
- }
-
- /**
- * Creates a new {@link Messages} based on the setting of this builder.
- *
- * @return A new {@link Messages} object.
- */
- public Messages build() {
- return new Messages(forClass, getBundle(), locale, parent);
- }
-
- private ResourceBundle getBundle() {
- ClassLoader cl = forClass.getClassLoader();
- OMap m = OMap.of("name", name, "package",
forClass.getPackage().getName());
- for (String bn : baseNames) {
- bn = StringUtils.replaceVars(bn, m);
- ResourceBundle rb = findBundle(bn, locale, cl);
- if (rb != null)
- return rb;
- }
- return null;
- }
-}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 8d1662a..39f8200 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -13,7 +13,6 @@
package org.apache.juneau.rest;
import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.internal.ObjectUtils.*;
import static org.apache.juneau.http.HttpHeaders.*;
import static org.apache.juneau.internal.ClassUtils.*;
import static org.apache.juneau.internal.IOUtils.*;
@@ -52,7 +51,6 @@ import org.apache.juneau.httppart.*;
import org.apache.juneau.httppart.bean.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.jsonschema.*;
-import org.apache.juneau.marshall.*;
import org.apache.juneau.mstat.*;
import org.apache.juneau.oapi.*;
import org.apache.juneau.parser.*;
@@ -261,9 +259,9 @@ public class RestContext extends Context {
logger = bs.add(Logger.class, builder.logger());
thrownStore = bs.add(ThrownStore.class,
builder.thrownStore().build());
methodExecStore = bs.add(MethodExecStore.class,
builder.methodExecStore().thrownStoreOnce(thrownStore).build());
+ messages = bs.add(Messages.class,
builder.messages().build());
Object r = resource.get();
- Messages m = messages = createMessages(r, builder);
VarResolver vr = varResolver = builder
.varResolver()
@@ -360,7 +358,7 @@ public class RestContext extends Context {
restChildren = createRestChildren(r, builder, bs,
builder.inner);
- swaggerProvider = createSwaggerProvider(r, builder, bs,
fileFinder, m, vr);
+ swaggerProvider = createSwaggerProvider(r, builder, bs,
fileFinder, messages, vr);
} catch (BasicHttpException e) {
_initException = e;
@@ -1127,7 +1125,7 @@ public class RestContext extends Context {
* The factory used for creating beans and retrieving injected
beans.
* <br>Created by {@link RestContextBuilder#beanStore()}.
* @param fileFinder The file finder configured on this bean created by
{@link #createFileFinder(Object,RestContextBuilder,BeanStore)}.
- * @param messages The localized messages configured on this bean
created by {@link #createMessages(Object,RestContextBuilder)}.
+ * @param messages The localized messages configured on this bean.
* @param varResolver The variable resolver configured on this bean.
* @return The info provider for this REST resource.
* @throws Exception If info provider could not be instantiated.
@@ -1171,7 +1169,7 @@ public class RestContext extends Context {
* The factory used for creating beans and retrieving injected
beans.
* <br>Created by {@link RestContextBuilder#beanStore()}.
* @param fileFinder The file finder configured on this bean created by
{@link #createFileFinder(Object,RestContextBuilder,BeanStore)}.
- * @param messages The localized messages configured on this bean
created by {@link #createMessages(Object,RestContextBuilder)}.
+ * @param messages The localized messages configured on this bean.
* @param varResolver The variable resolver configured on this bean.
* @return The REST API builder for this REST resource.
* @throws Exception If REST API builder could not be instantiated.
@@ -1383,80 +1381,6 @@ public class RestContext extends Context {
}
/**
- * Instantiates the messages for this REST object.
- *
- * @param resource
- * The REST servlet or bean that this context defines.
- * @param builder
- * The builder for this object.
- * @return The messages for this REST object.
- * @throws Exception An error occurred.
- */
- protected Messages createMessages(Object resource, RestContextBuilder
builder) throws Exception {
-
- Messages x = createMessagesBuilder(resource, builder).build();
-
- x = BeanStore
- .of(beanStore, resource)
- .addBean(Messages.class, x)
- .beanCreateMethodFinder(Messages.class, resource)
- .find("createMessages")
- .withDefault(x)
- .run();
-
- return x;
- }
-
- /**
- * Instantiates the Messages builder for this REST resource.
- *
- * <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createMessages(Object,RestContextBuilder)} method.
- *
- * @param resource
- * The REST servlet or bean that this context defines.
- * @param builder
- * The builder for this object.
- * @return The messages builder for this REST resource.
- * @throws Exception If messages builder could not be instantiated.
- */
- protected MessagesBuilder createMessagesBuilder(Object resource,
RestContextBuilder builder) throws Exception {
-
- Tuple2<Class<?>,String>[] mbl = builder.messages.toArray(new
Tuple2[0]);
- MessagesBuilder x = null;
-
- for (int i = mbl.length-1; i >= 0; i--) {
- Class<?> c = firstNonNull(mbl[i].getA(),
resource.getClass());
- String value = mbl[i].getB();
- if (isJsonObject(value,true)) {
- MessagesString ms =
SimpleJson.DEFAULT.read(value, MessagesString.class);
- x =
Messages.create(c).name(ms.name).baseNames(split(ms.baseNames,
',')).locale(ms.locale).parent(x == null ? null : x.build());
- } else {
- x = Messages.create(c).name(value).parent(x ==
null ? null : x.build());
- }
- }
-
- if (x == null)
- x = Messages.create(resource.getClass());
-
- x = BeanStore
- .of(beanStore, resource)
- .addBean(MessagesBuilder.class, x)
- .beanCreateMethodFinder(MessagesBuilder.class, resource)
- .find("createMessagesBuilder")
- .withDefault(x)
- .run();
-
- return x;
- }
-
- private static class MessagesString {
- public String name;
- public String[] baseNames;
- public String locale;
- }
-
- /**
* Creates the set of {@link RestOpContext} objects that represent the
methods on this resource.
*
* @param resource
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index dc1cab6..30ec709 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.assertions.Assertions.*;
import static org.apache.juneau.http.HttpHeaders.*;
import static org.apache.juneau.internal.ClassUtils.*;
import static org.apache.juneau.internal.ExceptionUtils.*;
+import static org.apache.juneau.internal.ObjectUtils.*;
import static org.apache.juneau.internal.StringUtils.*;
import static org.apache.juneau.parser.Parser.*;
import static org.apache.juneau.rest.HttpRuntimeException.*;
@@ -124,6 +125,7 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
private Logger logger;
private ThrownStore.Builder thrownStore;
private MethodExecStore.Builder methodExecStore;
+ private Messages.Builder messages;
String
allowedHeaderParams = env("RestContext.allowedHeaderParams",
"Accept,Content-Type"),
@@ -163,8 +165,6 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
HttpPartSerializer.Creator partSerializer =
HttpPartSerializer.creator().set(OpenApiSerializer.class);
HttpPartParser.Creator partParser =
HttpPartParser.creator().set(OpenApiParser.class);
- List<Tuple2<Class<?>,String>> messages = new ArrayList<>();
-
Enablement debugDefault, debug;
ResponseProcessorList.Builder responseProcessors =
ResponseProcessorList.create().add(
@@ -241,8 +241,6 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
this.inner = servletConfig;
this.parentContext = parentContext;
- ClassInfo rci = ClassInfo.of(resourceClass);
-
// Pass-through default values.
if (parentContext != null) {
callLoggerDefault =
parentContext.callLoggerDefault;
@@ -280,10 +278,6 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
}
}
- VarResolverSession vrs = vr.createSession();
- AnnotationWorkList al =
rci.getAnnotationList(ContextApplyFilter.INSTANCE).getWork(vrs);
- apply(al);
-
} catch (Exception e) {
throw new ServletException(e);
}
@@ -315,10 +309,16 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
public RestContextBuilder init(Object resource) throws ServletException
{
this.resource = resource instanceof Supplier ?
(Supplier<?>)resource : ()->resource;
+ ClassInfo rci = ClassInfo.of(resourceClass);
BeanStore bs = beanStore();
runInitHooks(bs, resource());
logger();
+ messages();
+
+ VarResolverSession vrs = varResolver().build().createSession();
+ AnnotationWorkList al =
rci.getAnnotationList(ContextApplyFilter.INSTANCE).getWork(vrs);
+ apply(al);
return this;
}
@@ -912,11 +912,10 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
/**
* Instantiates the method execution statistics store for this REST
resource.
*
- * @param resource
- * The REST servlet or bean that this context defines.
* @param beanStore
* The factory used for creating beans and retrieving injected
beans.
- * <br>Created by {@link RestContextBuilder#beanStore()}.
+ * @param resource
+ * The REST servlet or bean that this context defines.
* @return The stack trace store for this REST resource.
*/
protected MethodExecStore.Builder createMethodExecStore(BeanStore
beanStore, Supplier<?> resource) {
@@ -953,6 +952,68 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
return v.get();
}
+ /**
+ * Returns the builder for the {@link Messages} object in the REST
context.
+ *
+ * @return The builder for the {@link Messages} object in the REST
context.
+ */
+ public final Messages.Builder messages() {
+ if (messages == null)
+ messages = createMessages(beanStore(), resource());
+ return messages;
+ }
+
+ /**
+ * Sets the builder for the {@link MethodExecStore} object in the REST
context.
+ *
+ * @param value The builder for the {@link MethodExecStore} object in
the REST context.
+ * @return This object.
+ * @throws RuntimeException If {@link #init(Object)} has not been
called.
+ */
+ public final RestContextBuilder messages(Messages value) {
+ messages().impl(value);
+ return this;
+ }
+
+ /**
+ * Instantiates the messages for this REST object.
+ *
+ * @param beanStore
+ * The factory used for creating beans and retrieving injected
beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @return The messages builder for this REST object.
+ */
+ protected Messages.Builder createMessages(BeanStore beanStore,
Supplier<?> resource) {
+
+ Value<Messages.Builder> v = Value.empty();
+ Object r = resource.get();
+
+ BeanStore
+ .of(beanStore, resource)
+ .beanCreateMethodFinder(Messages.Builder.class, r)
+ .find("createMessages")
+ .execute()
+ .ifPresent(x -> v.set(x));
+
+ if (v.isEmpty()) {
+ v.set(
+ Messages
+ .create(r.getClass())
+ );
+ }
+
+ BeanStore
+ .of(beanStore, resource)
+ .addBean(Messages.Builder.class, v.get())
+ .beanCreateMethodFinder(Messages.class, r)
+ .find("createMessages")
+ .execute()
+ .ifPresent(x -> v.get().impl(x));
+
+ return v.get();
+ }
+
//----------------------------------------------------------------------------------------------------
// Methods that give access to the config file, var resolver, and
properties.
//----------------------------------------------------------------------------------------------------
@@ -2300,7 +2361,7 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
*/
@FluentSetter
public RestContextBuilder messages(Class<?> baseClass, String
bundlePath) {
- messages.add(0, Tuple2.of(baseClass, bundlePath));
+ messages().location(baseClass, bundlePath);
return this;
}
@@ -2315,7 +2376,7 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
*/
@FluentSetter
public RestContextBuilder messages(String bundlePath) {
- messages.add(0, Tuple2.of(null, bundlePath));
+ messages().location(null, bundlePath);
return this;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index 89c83cb..6751339 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -736,13 +736,13 @@ public @interface Rest {
* <p>
* There are two possible formats:
* <ul>
- * <li>A simple string - Represents the {@link
MessagesBuilder#name(String) name} of the resource bundle.
+ * <li>A simple string - Represents the {@link
org.apache.juneau.cp.Messages.Builder#name(String) name} of the resource bundle.
* <br><br><i>Example:</i>
* <p class='bcode w800'>
* <jc>// Bundle name is Messages.properties.</jc>
* <ja>@Rest</ja>(messages=<js>"Messages"</js>)
* </p>
- * <li>Simplified JSON - Represents parameters for the {@link
MessagesBuilder} class.
+ * <li>Simplified JSON - Represents parameters for the {@link
org.apache.juneau.cp.Messages.Builder} class.
* <br><br><i>Example:</i>
* <p class='bcode w800'>
* <jc>// Bundles can be found in two packages.</jc>