Simplify default req/res header annotations.
diff --git a/juneau-doc/docs/ReleaseNotes/5.0.0.09.html b/juneau-doc/docs/ReleaseNotes/5.0.0.09.html
index fbfb4d8..c8b3bb3 100644
--- a/juneau-doc/docs/ReleaseNotes/5.0.0.09.html
+++ b/juneau-doc/docs/ReleaseNotes/5.0.0.09.html
@@ -39,7 +39,7 @@
<li>New <dc>@RestResource.defaultRequestHeaders</dc> and <dc>@RestResource.defaultResponseHeaders</dc> annotations.</li>
<li>New {@link oajr.annotation.RestMethod#serializers() @RestMethod(serializers)} and {@link oajr.annotation.RestMethod#parsers() @RestMethod(parsers)} annotations.</li>
<li>New {@link oajr.annotation.RestMethod#properties() @RestMethod(properties)} annotation.</li>
- <li>New {@link oajr.annotation.RestMethod#defaultRequestHeaders() @RestMethod(defaultRequestHeaders)} annotation.</li>
+ <li>New <dc>@RestMethod(defaultRequestHeaders)</dc> annotation.</li>
<li>New {@link oajr.annotation.RestMethod#matchers() @RestMethod(matchers)} annotation and {@link oajr.RestMatcher} class.</li>
<li><c>Readers</c> and <c>InputStreams</c> can be specified on <dc>@Content</dc> annotated parameters.</li>
<li>New <dc>@HasParam</dc> annotation.</li>
diff --git a/juneau-doc/docs/ReleaseNotes/7.1.0.html b/juneau-doc/docs/ReleaseNotes/7.1.0.html
index 86918b4..04da84a 100644
--- a/juneau-doc/docs/ReleaseNotes/7.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/7.1.0.html
@@ -273,8 +273,8 @@
<li>{@link oajr.RestContext#REST_converters REST_converters}
<li>{@link oajr.RestContext#REST_guards REST_guards}
<li>{@link oajr.RestContext#REST_responseHandlers REST_responseHandlers}
- <li>{@link oajr.RestContext#REST_defaultRequestHeaders REST_defaultRequestHeaders}
- <li>{@link oajr.RestContext#REST_defaultResponseHeaders REST_defaultResponseHeaders}
+ <li><dc>REST_defaultRequestHeaders</dc>
+ <li><dc>REST_defaultResponseHeaders</dc>
<li>{@link oajr.RestContext#REST_produces REST_produces}
<li>{@link oajr.RestContext#REST_consumes REST_consumes}
<li>{@link oajr.RestContext#REST_clientVersionHeader REST_clientVersionHeader}
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.0.html b/juneau-doc/docs/ReleaseNotes/8.1.0.html
index dcda35f..3f3c66c 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.0.html
@@ -211,12 +211,12 @@
<li class='jc'>{@link oajr.RequestAttributes}
<li class='jc'>{@link oajr.RestContext}
<ul>
- <li class='jf'>{@link oajr.RestContext#REST_attrs REST_attrs}
+ <li class='jf'><dc>REST_attrs</dc>
</ul>
<li class='jc'>{@link oajr.RestContextBuilder}
<ul>
- <li class='jm'>{@link oajr.RestContextBuilder#attrs(String...) attrs(String...)}
- <li class='jm'>{@link oajr.RestContextBuilder#attr(String,Object) attr(String,Object)}
+ <li class='jm'><dc>attrs(String...)</dc>
+ <li class='jm'><dc>attr(String,Object)</dc>
</ul>
<li class='jc'>{@link oajr.RestMethodContext}
<ul>
@@ -232,7 +232,7 @@
<li class='jm'>{@link oajr.RestResponse#attr(String,Object) attr(String,Object)}
</ul>
<li class='ja'>{@link oajr.annotation.Attr}
- <li class='ja'>{@link oajr.annotation.RestMethod#attrs()}
+ <li class='ja'><dc>RestMethod#attrs()</dc>
<li class='ja'><dc>RestResource.attrs()</dc>
</ul>
<br>This deprecates the following APIs:
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.3.html b/juneau-doc/docs/ReleaseNotes/8.1.3.html
index 530f5f2..05cb78c 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.3.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.3.html
@@ -48,6 +48,15 @@
<li>
Fixed a bug where <c><ja>@RestResource</ja>(debug=<js>"true"</js>)</c> wouldn't log requests if a
<ja>@RestMethod</ja>-annotated method was not matched.
+ <li>
+ Renamed the following annotations:
+ <ul>
+ <li><ja>@Rest(attrs)</ja> --> {@link oajr.annotation.Rest#reqAttrs() @Rest(reqAttrs)}
+ <li><ja>@Rest(defaultRequestHeaders)</ja> --> {@link oajr.annotation.Rest#reqHeaders() @Rest(reqHeaders)}
+ <li><ja>@Rest(defaultResponseHeaders)</ja> --> {@link oajr.annotation.Rest#resHeaders() @Rest(resHeaders)}
+ <li><ja>@RestMethod(attrs)</ja> --> {@link oajr.annotation.RestMethod#reqAttrs() @RestMethod(reqAttrs)}
+ <li><ja>@RestMethod(defaultRequestHeaders)</ja> --> {@link oajr.annotation.RestMethod#reqHeaders() @RestMethod(reqHeaders)}
+ </ul>
</ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html b/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html
index 3de6c54..9a2c90b 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html
@@ -85,7 +85,7 @@
</td>
</tr>
<tr>
- <td>{@link oajr.annotation.Rest#defaultRequestHeaders() defaultRequestHeaders()}</td>
+ <td>{@link oajr.annotation.Rest#reqHeaders() reqHeaders()}</td>
<td>
Headers on child are combined with those on parent class.
<br>Headers are applied parent-to-child in the order they appear in the annotation.
@@ -93,7 +93,7 @@
</td>
</tr>
<tr>
- <td>{@link oajr.annotation.Rest#defaultResponseHeaders() defaultResponseHeaders()}</td>
+ <td>{@link oajr.annotation.Rest#resHeaders() resHeaders()}</td>
<td>
Headers on child are combined with those on parent class.
<br>Headers are applied parent-to-child in the order they appear in the annotation.
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html b/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html
index e2f70d5..8469108 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html
@@ -20,10 +20,10 @@
</p>
<ul class='javatree'>
<li class='ja'>
- {@link oajr.annotation.Rest#defaultRequestHeaders() Rest(defaultRequestHeaders)}
+ {@link oajr.annotation.Rest#reqHeaders() Rest(reqHeaders)}
<br>Defines default headers on request when the client doesn't specify them.
<li class='ja'>
- {@link oajr.annotation.Rest#defaultResponseHeaders() Rest(defaultResponseHeaders)}
+ {@link oajr.annotation.Rest#resHeaders() Rest(resHeaders)}
<br>Appends the specified headers if they weren't already set programmatically.
</ul>
@@ -33,10 +33,10 @@
<ja>@Rest</ja>(
<jc>// Assume "text/json" Accept value when Accept not specified</jc>
- defaultRequestHeaders={<js>"Accept: text/json"</js>},
+ reqHeaders={<js>"Accept: text/json"</js>},
<jc>// Add a version header attribute to all responses</jc>
- defaultResponseHeaders={<js>"X-Version: 1.0"</js>}
+ resHeaders={<js>"X-Version: 1.0"</js>}
)
<jk>public</jk> MyRestServlet <jk>extends</jk> BasicRestServlet {
...
@@ -50,9 +50,9 @@
{@link oajr.RestContextBuilder}
<ul>
<li class='jm'>
- {@link oajr.RestContextBuilder#defaultRequestHeaders(String[])}
+ {@link oajr.RestContextBuilder#reqHeaders(String[])}
<li class='jm'>
- {@link oajr.RestContextBuilder#defaultResponseHeaders(String[])}
+ {@link oajr.RestContextBuilder#resHeaders(String[])}
</ul>
</li>
</ul>
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java
index 6c75034..3d8b1e7 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java
@@ -35,7 +35,7 @@
@Rest(
serializers={A01.class},
- attrs={"TestProperty:$L{key1}"},
+ reqAttrs={"TestProperty:$L{key1}"},
messages="NlsTest"
)
public static class A {
@@ -44,7 +44,7 @@
return null;
}
@RestMethod(
- attrs={"TestProperty:$L{key2}"}
+ reqAttrs={"TestProperty:$L{key2}"}
)
public String a02() {
return null;
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java
index db1edef..d4c690a 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java
@@ -37,7 +37,7 @@
@Rest(
path="/p1",
- attrs={
+ reqAttrs={
"A1: a1",
"A2: a2",
"foo: bar",
@@ -54,7 +54,7 @@
public static class A {
@RestMethod(name=GET, path="/p2",
- attrs={"B1: b1", "B2:b"},
+ reqAttrs={"B1: b1", "B2:b"},
serializers=A01.class
)
public void testPropertiesDefinedOnMethod(RestResponse res) {
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java
index 9d00e24..ebeacc2 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java
@@ -46,7 +46,7 @@
@Rest(
parsers=A01.class,
- attrs={
+ reqAttrs={
"p1:sp1", // Unchanged servlet-level property.
"p2:sp2", // Servlet-level property overridden by onPreCall.
"p3:sp3", // Servlet-level property overridded by method.
@@ -67,7 +67,7 @@
}
@RestMethod(name=PUT, path="/propertiesOverriddenByAnnotation",
- attrs={
+ reqAttrs={
"p3:mp3",
"p4:mp4"
}
@@ -119,7 +119,7 @@
@Rest(
serializers=B01.class,
- attrs={
+ reqAttrs={
"p1:sp1", // Unchanged servlet-level property.
"p2:sp2", // Servlet-level property overridden by onPostCall.
"p3:sp3", // Servlet-level property overridded by method.
@@ -143,11 +143,11 @@
}
@RestMethod(name=PUT, path="/propertiesOverridenByAnnotation",
- attrs={
+ reqAttrs={
"p3:mp3",
"p4:mp4"
},
- defaultRequestHeaders="Accept: text/s2"
+ reqHeaders="Accept: text/s2"
)
public String b01() {
return null;
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java
index 3869c71..d7b745c 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java
@@ -271,10 +271,10 @@
// Test properties inheritance.
//=================================================================================================================
- @Rest(attrs={"p1:v1","p2:v2"})
+ @Rest(reqAttrs={"p1:v1","p2:v2"})
public static class E {}
- @Rest(attrs={"p2:v2a","p3:v3","p4:v4"})
+ @Rest(reqAttrs={"p2:v2a","p3:v3","p4:v4"})
public static class E01 extends E {}
@Rest
@@ -284,7 +284,7 @@
// Should show {p1:'v1',p2:'v2a',p3:'v3',p4:'v4'}
return transform(attrs);
}
- @RestMethod(attrs={"p4:v4a","p5:v5"})
+ @RestMethod(reqAttrs={"p4:v4a","p5:v5"})
public ObjectMap e02(RequestAttributes attrs, @HasQuery("override") boolean override) {
// Should show {p1:'v1',p2:'v2a',p3:'v3',p4:'v4a',p5:'v5'} when override is false.
// Should show {p1:'x',p2:'x',p3:'x',p4:'x',p5:'x'} when override is true.
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java
index 1e497a5..5f3ba03 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java
@@ -62,7 +62,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Accept : text/s2 "},
+ reqHeaders={" Accept : text/s2 "},
serializers={S1.class,S2.class}
)
public static class A {
@@ -91,7 +91,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Accept : text/s2 "},
+ reqHeaders={" Accept : text/s2 "},
serializers={S1.class,S2.class}
)
public static class B {
@@ -123,7 +123,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Accept : text/s2 "},
+ reqHeaders={" Accept : text/s2 "},
serializers={S1.class,S2.class}
)
public static class C {
@@ -157,7 +157,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Accept : text/s2 "},
+ reqHeaders={" Accept : text/s2 "},
serializers={S1.class,S2.class}
)
public static class D {
@@ -195,11 +195,11 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Accept : text/s2 "},
+ reqHeaders={" Accept : text/s2 "},
serializers={S1.class,S2.class}
)
public static class E {
- @RestMethod(name=PUT, defaultRequestHeaders={"Accept: text/s3"}, serializers=S3.class)
+ @RestMethod(name=PUT, reqHeaders={"Accept: text/s3"}, serializers=S3.class)
public String d(@Body String in) {
return in;
}
@@ -233,11 +233,11 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Accept : text/s2 ",},
+ reqHeaders={" Accept : text/s2 ",},
serializers={S1.class,S2.class}
)
public static class F {
- @RestMethod(name=PUT, defaultRequestHeaders={"Accept: text/s3"}, serializers={Inherit.class, S3.class})
+ @RestMethod(name=PUT, reqHeaders={"Accept: text/s3"}, serializers={Inherit.class, S3.class})
public String f(@Body String in) {
return in;
}
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java
index 55d82c8..95ea2b7 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java
@@ -64,7 +64,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Content-Type : text/p2 "},
+ reqHeaders={" Content-Type : text/p2 "},
parsers={P1.class,P2.class}
)
public static class A {
@@ -93,7 +93,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Content-Type : text/p2 "},
+ reqHeaders={" Content-Type : text/p2 "},
parsers={P1.class,P2.class}
)
public static class B {
@@ -137,7 +137,7 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Content-Type : text/p2 "},
+ reqHeaders={" Content-Type : text/p2 "},
parsers={P1.class,P2.class}
)
public static class C {
@@ -172,11 +172,11 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Content-Type : text/p2 "},
+ reqHeaders={" Content-Type : text/p2 "},
parsers={P1.class,P2.class}
)
public static class E {
- @RestMethod(name=PUT, defaultRequestHeaders={"Content-Type: text/p3"}, parsers=P3.class)
+ @RestMethod(name=PUT, reqHeaders={"Content-Type: text/p3"}, parsers=P3.class)
public String e(@Body String in) {
return in;
}
@@ -210,11 +210,11 @@
//=================================================================================================================
@Rest(
- defaultRequestHeaders={" Content-Type : text/p2 "},
+ reqHeaders={" Content-Type : text/p2 "},
parsers={P1.class,P2.class}
)
public static class F {
- @RestMethod(name=PUT, defaultRequestHeaders={"Content-Type: text/p3"}, parsers={Inherit.class,P3.class})
+ @RestMethod(name=PUT, reqHeaders={"Content-Type: text/p3"}, parsers={Inherit.class,P3.class})
public String f(@Body String in) {
return in;
}
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java
index 689cbd4..e30085d 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java
@@ -459,7 +459,7 @@
@Rest
public static class C {
- @RestMethod(defaultRequestHeaders={"H1:1","H2=2"," H3 : 3 "})
+ @RestMethod(reqHeaders={"H1:1","H2=2"," H3 : 3 "})
public ObjectMap c(RequestHeaders headers) {
return new ObjectMap()
.append("h1", headers.getString("H1"))
@@ -470,15 +470,15 @@
static MockRest c = MockRest.build(C.class, null);
@Test
- public void c01_defaultRequestHeaders_default() throws Exception {
+ public void c01_reqHeaders_default() throws Exception {
c.get("/c").execute().assertBody("{h1:'1',h2:'2',h3:'3'}");
}
@Test
- public void c02_defaultRequestHeaders_override() throws Exception {
+ public void c02_reqHeaders_override() throws Exception {
c.get("/c").header("H1",4).header("H2",5).header("H3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
}
@Test
- public void c03_defaultRequestHeaders_override_caseInsensitive() throws Exception {
+ public void c03_reqHeaders_override_caseInsensitive() throws Exception {
c.get("/c").header("h1",4).header("h2",5).header("h3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
}
@@ -488,7 +488,7 @@
@Rest
public static class D {
- @RestMethod(defaultRequestHeaders={"H1:1","H2=2"," H3 : 3 "})
+ @RestMethod(reqHeaders={"H1:1","H2=2"," H3 : 3 "})
public ObjectMap d(RequestHeaders headers) {
return new ObjectMap()
.append("h1", headers.getString("h1"))
@@ -499,15 +499,15 @@
static MockRest d = MockRest.build(D.class, null);
@Test
- public void d01_defaultRequestHeadersCaseInsensitive_default() throws Exception {
+ public void d01_reqHeadersCaseInsensitive_default() throws Exception {
d.get("/d").execute().assertBody("{h1:'1',h2:'2',h3:'3'}");
}
@Test
- public void d02_defaultRequestHeadersCaseInsensitive_override() throws Exception {
+ public void d02_reqHeadersCaseInsensitive_override() throws Exception {
d.get("/d").header("H1",4).header("H2",5).header("H3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
}
@Test
- public void d03_defaultRequestHeadersCaseInsensitive_override_caseInsensitive() throws Exception {
+ public void d03_reqHeadersCaseInsensitive_override_caseInsensitive() throws Exception {
d.get("/d").header("h1",4).header("h2",5).header("h3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
}
@@ -629,7 +629,7 @@
@Rest
public static class H {
- @RestMethod(defaultRequestHeaders={"H1:1","H2=2"," H3 : 3 "})
+ @RestMethod(reqHeaders={"H1:1","H2=2"," H3 : 3 "})
public ObjectMap h(@Header(value="h1",_default="4") String h1, @Header(value="h2",_default="5") String h2, @Header(value="h3",_default="6") String h3) {
return new ObjectMap()
.append("h1", h1)
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java
index 37d1892..b73828d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java
@@ -182,7 +182,7 @@
}
if (context != null && reqd.isOneOf(MEDIUM, LONG)) {
- Map<String,Object> hh = context.getDefaultRequestHeaders();
+ Map<String,Object> hh = context.getReqHeaders();
if (! hh.isEmpty()) {
sb.append("\n---Default Servlet Headers---");
for (Map.Entry<String,Object> h : hh.entrySet()) {
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 95a27e0..d0f7463 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
@@ -1113,202 +1113,27 @@
/**
* Configuration property: Default request attributes.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"RestContext.attrs.smo"</js>
- * <li><b>Data type:</b> <c>Map<String,Object></c>
- * <li><b>Default:</b> empty map
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link Rest#attrs()}
- * <li class='ja'>{@link RestMethod#attrs()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link RestContextBuilder#attrs(String...)}
- * <li class='jm'>{@link RestContextBuilder#attr(String,Object)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Specifies default values for request attributes if they're not already set on the request.
- *
- * <ul class='notes'>
- * <li>
- * Strings are in the format <js>"Name: value"</js>.
- * <li>
- * Affects values returned by the following methods:
- * <ul>
- * <li class='jm'>{@link RestRequest#getAttribute(String)}.
- * <li class='jm'>{@link RestRequest#getAttributes()}.
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
- * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- * builder
- * .attr(<js>"Foo"</js>, <js>"bar"</js>);
- * .attr(<js>"Baz: true"</js>);
- *
- * <jc>// Same, but using property.</jc>
- * builder.addTo(<jsf>REST_attrs</jsf>, <js>"Foo"</js>, <js>"bar"</js>);
- * }
- *
- * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder builder) <jk>throws</jk> Exception {
- * builder.attr(<js>"Foo"</js>, <js>"bar"</js>);
- * }
- *
- * <jc>// Override at the method level.</jc>
- * <ja>@RestMethod</ja>(attrs={<js>"Foo: bar"</js>})
- * public Object myMethod() {...}
- * }
- * </p>
+ *
+ * @deprecated Use {@link #REST_reqAttrs}
*/
- public static final String REST_attrs = PREFIX + ".attrs.smo";
+ @Deprecated
+ public static final String REST_attrs = PREFIX + ".reqAttrs.smo";
/**
* Configuration property: Default request headers.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"RestContext.defaultRequestHeaders.smo"</js>
- * <li><b>Data type:</b> <c>Map<String,String></c>
- * <li><b>Default:</b> empty map
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link Rest#defaultRequestHeaders()}
- * <li class='ja'>{@link RestMethod#defaultRequestHeaders()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link RestContextBuilder#defaultRequestHeader(String,Object)}
- * <li class='jm'>{@link RestContextBuilder#defaultRequestHeaders(String...)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Specifies default values for request headers if they're not passed in through the request.
- *
- * <ul class='notes'>
- * <li>
- * Strings are in the format <js>"Header-Name: header-value"</js>.
- * <li>
- * Affects values returned by {@link RestRequest#getHeader(String)} when the header is not present on the request.
- * <li>
- * The most useful reason for this annotation is to provide a default <c>Accept</c> header when one is not
- * specified so that a particular default {@link Serializer} is picked.
- * </ul>
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
- * <ja>@Rest</ja>(defaultRequestHeaders={<js>"Accept: application/json"</js>, <js>"My-Header: $C{REST/myHeaderValue}"</js>})
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- * builder
- * .defaultRequestHeader(<js>"Accept"</js>, <js>"application/json"</js>);
- * .defaultRequestHeaders(<js>"My-Header: foo"</js>);
- *
- * <jc>// Same, but using property.</jc>
- * builder.addTo(<jsf>REST_defaultRequestHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</js>);
- * }
- *
- * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder builder) <jk>throws</jk> Exception {
- * builder.defaultRequestHeader(<js>"Accept"</js>, <js>"application/json"</js>);
- * }
- *
- * <jc>// Override at the method level.</jc>
- * <ja>@RestMethod</ja>(defaultRequestHeaders={<js>"Accept: text/xml"</js>})
- * public Object myMethod() {...}
- * }
- * </p>
+ *
+ * @deprecated Use {@link #REST_reqHeaders}
*/
- public static final String REST_defaultRequestHeaders = PREFIX + ".defaultRequestHeaders.smo";
+ @Deprecated
+ public static final String REST_defaultRequestHeaders = PREFIX + ".reqHeaders.smo";
/**
* Configuration property: Default response headers.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"RestContext.defaultResponseHeaders.omo"</js>
- * <li><b>Data type:</b> <c>Map<String,String></c>
- * <li><b>Default:</b> empty map
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link Rest#defaultResponseHeaders()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link RestContextBuilder#defaultResponseHeader(String,Object)}
- * <li class='jm'>{@link RestContextBuilder#defaultResponseHeaders(String...)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Specifies default values for response headers if they're not set after the Java REST method is called.
- *
- * <ul class='notes'>
- * <li>
- * Strings are in the format <js>"Header-Name: header-value"</js>.
- * <li>
- * This is equivalent to calling {@link RestResponse#setHeader(String, String)} programmatically in each of
- * the Java methods.
- * <li>
- * The header value will not be set if the header value has already been specified (hence the 'default' in the name).
- * </ul>
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
- * <ja>@Rest</ja>(defaultResponseHeaders={<js>"Content-Type: $C{REST/defaultContentType,text/plain}"</js>,<js>"My-Header: $C{REST/myHeaderValue}"</js>})
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- * builder
- * .defaultResponseHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
- * .defaultResponseHeaders(<js>"My-Header: foo"</js>);
- *
- * <jc>// Same, but using property.</jc>
- * builder
- * .addTo(<jsf>REST_defaultRequestHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</js>);
- * .addTo(<jsf>REST_defaultRequestHeaders</jsf>, <js>"My-Header"</js>, <js>"foo"</js>);
- * }
- *
- * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder builder) <jk>throws</jk> Exception {
- * builder.defaultResponseHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
- * }
- * }
- * </p>
+ *
+ * @deprecated Use {@link #REST_resHeaders}
*/
- public static final String REST_defaultResponseHeaders = PREFIX + ".defaultResponseHeaders.omo";
+ @Deprecated
+ public static final String REST_defaultResponseHeaders = PREFIX + ".resHeaders.omo";
/**
* Configuration property: Compression encoders.
@@ -2302,6 +2127,205 @@
public static final String REST_renderResponseStackTraces = PREFIX + ".renderResponseStackTraces.b";
/**
+ * Configuration property: Default request attributes.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"RestContext.reqAttrs.smo"</js>
+ * <li><b>Data type:</b> <c>Map<String,Object></c>
+ * <li><b>Default:</b> empty map
+ * <li><b>Session property:</b> <jk>false</jk>
+ * <li><b>Annotations:</b>
+ * <ul>
+ * <li class='ja'>{@link Rest#reqAttrs()}
+ * <li class='ja'>{@link RestMethod#reqAttrs()}
+ * </ul>
+ * <li><b>Methods:</b>
+ * <ul>
+ * <li class='jm'>{@link RestContextBuilder#reqAttrs(String...)}
+ * <li class='jm'>{@link RestContextBuilder#reqAttr(String,Object)}
+ * </ul>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * Specifies default values for request attributes if they're not already set on the request.
+ *
+ * <ul class='notes'>
+ * <li>
+ * Strings are in the format <js>"Name: value"</js>.
+ * <li>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ * </ul>
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(reqAttrs={<js>"Foo: bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
+ *
+ * <jc>// Using method on builder.</jc>
+ * builder
+ * .attr(<js>"Foo"</js>, <js>"bar"</js>);
+ * .attr(<js>"Baz: true"</js>);
+ *
+ * <jc>// Same, but using property.</jc>
+ * builder.addTo(<jsf>REST_reqAttrs</jsf>, <js>"Foo"</js>, <js>"bar"</js>);
+ * }
+ *
+ * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder builder) <jk>throws</jk> Exception {
+ * builder.reqAttr(<js>"Foo"</js>, <js>"bar"</js>);
+ * }
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestMethod</ja>(reqAttrs={<js>"Foo: bar"</js>})
+ * public Object myMethod() {...}
+ * }
+ * </p>
+ */
+ public static final String REST_reqAttrs = PREFIX + ".reqAttrs.smo";
+
+ /**
+ * Configuration property: Default request headers.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"RestContext.reqHeaders.smo"</js>
+ * <li><b>Data type:</b> <c>Map<String,String></c>
+ * <li><b>Default:</b> empty map
+ * <li><b>Session property:</b> <jk>false</jk>
+ * <li><b>Annotations:</b>
+ * <ul>
+ * <li class='ja'>{@link Rest#reqHeaders()}
+ * <li class='ja'>{@link RestMethod#reqHeaders()}
+ * </ul>
+ * <li><b>Methods:</b>
+ * <ul>
+ * <li class='jm'>{@link RestContextBuilder#reqHeader(String,Object)}
+ * <li class='jm'>{@link RestContextBuilder#reqHeaders(String...)}
+ * </ul>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * Specifies default values for request headers if they're not passed in through the request.
+ *
+ * <ul class='notes'>
+ * <li>
+ * Strings are in the format <js>"Header-Name: header-value"</js>.
+ * <li>
+ * Affects values returned by {@link RestRequest#getHeader(String)} when the header is not present on the request.
+ * <li>
+ * The most useful reason for this annotation is to provide a default <c>Accept</c> header when one is not
+ * specified so that a particular default {@link Serializer} is picked.
+ * </ul>
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(reqHeaders={<js>"Accept: application/json"</js>, <js>"My-Header: $C{REST/myHeaderValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
+ *
+ * <jc>// Using method on builder.</jc>
+ * builder
+ * .reqHeader(<js>"Accept"</js>, <js>"application/json"</js>);
+ * .reqHeaders(<js>"My-Header: foo"</js>);
+ *
+ * <jc>// Same, but using property.</jc>
+ * builder.addTo(<jsf>REST_reqHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</js>);
+ * }
+ *
+ * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder builder) <jk>throws</jk> Exception {
+ * builder.reqHeader(<js>"Accept"</js>, <js>"application/json"</js>);
+ * }
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestMethod</ja>(reqHeaders={<js>"Accept: text/xml"</js>})
+ * public Object myMethod() {...}
+ * }
+ * </p>
+ */
+ public static final String REST_reqHeaders = PREFIX + ".reqHeaders.smo";
+
+ /**
+ * Configuration property: Default response headers.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"RestContext.resHeaders.omo"</js>
+ * <li><b>Data type:</b> <c>Map<String,String></c>
+ * <li><b>Default:</b> empty map
+ * <li><b>Session property:</b> <jk>false</jk>
+ * <li><b>Annotations:</b>
+ * <ul>
+ * <li class='ja'>{@link Rest#resHeaders()}
+ * </ul>
+ * <li><b>Methods:</b>
+ * <ul>
+ * <li class='jm'>{@link RestContextBuilder#resHeader(String,Object)}
+ * <li class='jm'>{@link RestContextBuilder#resHeaders(String...)}
+ * </ul>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * Specifies default values for response headers if they're not set after the Java REST method is called.
+ *
+ * <ul class='notes'>
+ * <li>
+ * Strings are in the format <js>"Header-Name: header-value"</js>.
+ * <li>
+ * This is equivalent to calling {@link RestResponse#setHeader(String, String)} programmatically in each of
+ * the Java methods.
+ * <li>
+ * The header value will not be set if the header value has already been specified (hence the 'default' in the name).
+ * </ul>
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(resHeaders={<js>"Content-Type: $C{REST/defaultContentType,text/plain}"</js>,<js>"My-Header: $C{REST/myHeaderValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
+ *
+ * <jc>// Using method on builder.</jc>
+ * builder
+ * .resHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
+ * .resHeaders(<js>"My-Header: foo"</js>);
+ *
+ * <jc>// Same, but using property.</jc>
+ * builder
+ * .addTo(<jsf>REST_resHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</js>);
+ * .addTo(<jsf>REST_resHeaders</jsf>, <js>"My-Header"</js>, <js>"foo"</js>);
+ * }
+ *
+ * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder builder) <jk>throws</jk> Exception {
+ * builder.resHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
+ * }
+ * }
+ * </p>
+ */
+ public static final String REST_resHeaders = PREFIX + ".resHeaders.omo";
+
+ /**
* Configuration property: REST resource resolver.
*
* <h5 class='section'>Property:</h5>
@@ -3537,10 +3561,10 @@
consumes,
produces;
private final Map<String,Object>
- defaultRequestHeaders,
- defaultResponseHeaders,
+ reqHeaders,
+ resHeaders,
staticFileResponseHeaders;
- private final ObjectMap defaultRequestAttributes;
+ private final ObjectMap reqAttrs;
private final ResponseHandler[] responseHandlers;
private final MimetypesFileTypeMap mimetypesFileTypeMap;
private final StaticFiles[] staticFiles;
@@ -3683,12 +3707,12 @@
_paramResolvers.put(rp.forClass(), rp);
paramResolvers = unmodifiableMap(_paramResolvers);
- Map<String,Object> _defaultRequestHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
- _defaultRequestHeaders.putAll(getMapProperty(REST_defaultRequestHeaders, String.class));
- defaultRequestHeaders = unmodifiableMap(new LinkedHashMap<>(_defaultRequestHeaders));
+ Map<String,Object> _reqHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ _reqHeaders.putAll(getMapProperty(REST_reqHeaders, String.class));
+ reqHeaders = unmodifiableMap(new LinkedHashMap<>(_reqHeaders));
- defaultRequestAttributes = new ObjectMap(getMapProperty(REST_attrs, Object.class)).unmodifiable();
- defaultResponseHeaders = getMapProperty(REST_defaultResponseHeaders, Object.class);
+ reqAttrs = new ObjectMap(getMapProperty(REST_reqAttrs, Object.class)).unmodifiable();
+ resHeaders = getMapProperty(REST_resHeaders, Object.class);
staticFileResponseHeaders = getMapProperty(REST_staticFileResponseHeaders, Object.class);
logger = getInstanceProperty(REST_logger, resource, RestLogger.class, NoOpRestLogger.class, resourceResolver, this);
@@ -4841,45 +4865,45 @@
* Returns the default request headers for this resource.
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
* </ul>
*
* @return
* The default request headers for this resource.
* <br>Never <jk>null</jk>.
*/
- public Map<String,Object> getDefaultRequestHeaders() {
- return defaultRequestHeaders;
+ public Map<String,Object> getReqHeaders() {
+ return reqHeaders;
}
/**
- * Returns the default request headers for this resource.
+ * Returns the default request attributes for this resource.
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
* </ul>
*
* @return
* The default request headers for this resource.
* <br>Never <jk>null</jk>.
*/
- public ObjectMap getDefaultRequestAttributes() {
- return defaultRequestAttributes;
+ public ObjectMap getReqAttrs() {
+ return reqAttrs;
}
/**
* Returns the default response headers for this resource.
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+ * <li class='jf'>{@link RestContext#REST_resHeaders}
* </ul>
*
* @return
* The default response headers for this resource.
* <br>Never <jk>null</jk>.
*/
- public Map<String,Object> getDefaultResponseHeaders() {
- return defaultResponseHeaders;
+ public Map<String,Object> getResHeaders() {
+ return resHeaders;
}
/**
@@ -5299,8 +5323,6 @@
.append("callHandler", callHandler)
.append("clientVersionHeader", clientVersionHeader)
.append("consumes", consumes)
- .append("defaultRequestHeaders", defaultRequestHeaders)
- .append("defaultResponseHeaders", defaultResponseHeaders)
.append("infoProvider", infoProvider)
.append("logger", logger)
.append("paramResolvers", paramResolvers)
@@ -5310,6 +5332,8 @@
.append("produces", produces)
.append("properties", properties)
.append("renderResponseStackTraces", renderResponseStackTraces)
+ .append("reqHeaders", reqHeaders)
+ .append("resHeaders", resHeaders)
.append("resourceResolver", resourceResolver)
.append("responseHandlers", responseHandlers)
.append("serializers", serializers)
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 0610221..fcc7a38 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
@@ -869,50 +869,24 @@
/**
* Configuration property: Default request attributes.
- *
- * <p>
- * Specifies default values for request attributes if they're not already set on the request.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_attrs}
- * </ul>
- *
- * @param values The attributes in the format <js>"Name: value"</js>.
- * @return This object (for method chaining).
- * @throws RestServletException If malformed header is found.
+ *
+ * @deprecated Use {@link #reqAttrs(String...)}
*/
+ @SuppressWarnings("javadoc")
+ @Deprecated
public RestContextBuilder attrs(String...values) throws RestServletException {
- for (String v : values) {
- String[] p = RestUtils.parseKeyValuePair(v);
- if (p == null)
- throw new RestServletException("Invalid default request attribute specified: ''{0}''. Must be in the format: ''Name: value''", v);
- defaultRequestHeader(p[0], p[1]);
- }
- return this;
+ return reqAttrs(values);
}
/**
* Configuration property: Default request headers.
- *
- * <p>
- * Specifies default values for request headers if they're not passed in through the request.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
- * </ul>
- *
- * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
- * @return This object (for method chaining).
- * @throws RestServletException If malformed header is found.
+ *
+ * @deprecated Use {@link #reqHeaders(String...)}
*/
+ @SuppressWarnings("javadoc")
+ @Deprecated
public RestContextBuilder defaultRequestHeaders(String...headers) throws RestServletException {
- for (String header : headers) {
- String[] h = RestUtils.parseHeader(header);
- if (h == null)
- throw new RestServletException("Invalid default request header specified: ''{0}''. Must be in the format: ''Header-Name: header-value''", header);
- defaultRequestHeader(h[0], h[1]);
- }
- return this;
+ return reqHeaders(headers);
}
/**
@@ -925,7 +899,7 @@
*/
public RestContextBuilder defaultAccept(String value) {
if (isNotEmpty(value))
- defaultRequestHeader("Accept", value);
+ reqHeader("Accept", value);
return this;
}
@@ -939,86 +913,52 @@
*/
public RestContextBuilder defaultContentType(String value) {
if (isNotEmpty(value))
- defaultRequestHeader("Content-Type", value);
+ reqHeader("Content-Type", value);
return this;
}
/**
* Configuration property: Default request attribute.
*
- * <p>
- * Same as {@link #attrs(String...)} but adds a single attribute name/value pair.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_attrs}
- * </ul>
- *
- * @param name The HTTP header name.
- * @param value The HTTP header value.
- * @return This object (for method chaining).
+ * @deprecated Use {@link #reqAttr(String, Object)}
*/
+ @SuppressWarnings("javadoc")
+ @Deprecated
public RestContextBuilder attr(String name, Object value) {
- return addTo(REST_attrs, name, value);
+ return reqAttr(name, value);
}
/**
* Configuration property: Default request headers.
- *
- * <p>
- * Same as {@link #defaultRequestHeaders(String...)} but adds a single header name/value pair.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
- * </ul>
- *
- * @param name The HTTP header name.
- * @param value The HTTP header value.
- * @return This object (for method chaining).
+ *
+ * @deprecated Use {@link #reqHeader(String,Object)}
*/
+ @SuppressWarnings("javadoc")
+ @Deprecated
public RestContextBuilder defaultRequestHeader(String name, Object value) {
- return addTo(REST_defaultRequestHeaders, name, value);
+ return reqHeader(name, value);
}
/**
* Configuration property: Default response headers.
*
- * <p>
- * Specifies default values for response headers if they're not set after the Java REST method is called.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
- * </ul>
- *
- * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
- * @return This object (for method chaining).
- * @throws RestServletException If malformed header is found.
+ * @deprecated Use {@link #resHeaders(String...)}
*/
+ @SuppressWarnings("javadoc")
+ @Deprecated
public RestContextBuilder defaultResponseHeaders(String...headers) throws RestServletException {
- for (String header : headers) {
- String[] h = RestUtils.parseHeader(header);
- if (h == null)
- throw new RestServletException("Invalid default response header specified: ''{0}''. Must be in the format: ''Header-Name: header-value''", header);
- defaultResponseHeader(h[0], h[1]);
- }
- return this;
+ return resHeaders(headers);
}
/**
* Configuration property: Default response headers.
*
- * <p>
- * Same as {@link #defaultResponseHeaders(String...)} but adds a single header name/value pair.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
- * </ul>
- *
- * @param name The HTTP header name.
- * @param value The HTTP header value.
- * @return This object (for method chaining).
+ * @deprecated Use {@link #resHeader(String, Object)}
*/
+ @SuppressWarnings("javadoc")
+ @Deprecated
public RestContextBuilder defaultResponseHeader(String name, Object value) {
- return addTo(REST_defaultResponseHeaders, name, value);
+ return resHeader(name, value);
}
/**
@@ -1510,6 +1450,132 @@
}
/**
+ * Configuration property: Default request attribute.
+ *
+ * <p>
+ * Same as {@link #reqAttrs(String...)} but adds a single attribute name/value pair.
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
+ * </ul>
+ *
+ * @param name The HTTP header name.
+ * @param value The HTTP header value.
+ * @return This object (for method chaining).
+ */
+ public RestContextBuilder reqAttr(String name, Object value) {
+ return addTo(REST_reqAttrs, name, value);
+ }
+
+ /**
+ * Configuration property: Default request attributes.
+ *
+ * <p>
+ * Specifies default values for request attributes if they're not already set on the request.
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
+ * </ul>
+ *
+ * @param values The attributes in the format <js>"Name: value"</js>.
+ * @return This object (for method chaining).
+ * @throws RestServletException If malformed header is found.
+ */
+ public RestContextBuilder reqAttrs(String...values) throws RestServletException {
+ for (String v : values) {
+ String[] p = RestUtils.parseKeyValuePair(v);
+ if (p == null)
+ throw new RestServletException("Invalid default request attribute specified: ''{0}''. Must be in the format: ''Name: value''", v);
+ reqHeader(p[0], p[1]);
+ }
+ return this;
+ }
+
+ /**
+ * Configuration property: Default request headers.
+ *
+ * <p>
+ * Same as {@link #reqHeaders(String...)} but adds a single header name/value pair.
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
+ * </ul>
+ *
+ * @param name The HTTP header name.
+ * @param value The HTTP header value.
+ * @return This object (for method chaining).
+ */
+ public RestContextBuilder reqHeader(String name, Object value) {
+ return addTo(REST_reqHeaders, name, value);
+ }
+
+ /**
+ * Configuration property: Default request headers.
+ *
+ * <p>
+ * Specifies default values for request headers if they're not passed in through the request.
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
+ * </ul>
+ *
+ * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
+ * @return This object (for method chaining).
+ * @throws RestServletException If malformed header is found.
+ */
+ public RestContextBuilder reqHeaders(String...headers) throws RestServletException {
+ for (String header : headers) {
+ String[] h = RestUtils.parseHeader(header);
+ if (h == null)
+ throw new RestServletException("Invalid default request header specified: ''{0}''. Must be in the format: ''Header-Name: header-value''", header);
+ reqHeader(h[0], h[1]);
+ }
+ return this;
+ }
+
+ /**
+ * Configuration property: Default response headers.
+ *
+ * <p>
+ * Specifies default values for response headers if they're not set after the Java REST method is called.
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_resHeaders}
+ * </ul>
+ *
+ * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
+ * @return This object (for method chaining).
+ * @throws RestServletException If malformed header is found.
+ */
+ public RestContextBuilder resHeaders(String...headers) throws RestServletException {
+ for (String header : headers) {
+ String[] h = RestUtils.parseHeader(header);
+ if (h == null)
+ throw new RestServletException("Invalid default response header specified: ''{0}''. Must be in the format: ''Header-Name: header-value''", header);
+ resHeader(h[0], h[1]);
+ }
+ return this;
+ }
+
+ /**
+ * Configuration property: Default response headers.
+ *
+ * <p>
+ * Same as {@link #resHeaders(String...)} but adds a single header name/value pair.
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_resHeaders}
+ * </ul>
+ *
+ * @param name The HTTP header name.
+ * @param value The HTTP header value.
+ * @return This object (for method chaining).
+ */
+ public RestContextBuilder resHeader(String name, Object value) {
+ return addTo(REST_resHeaders, name, value);
+ }
+
+ /**
* REST resource resolver.
*
* <p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
index 8fa25a4..e9b1c1c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
@@ -67,43 +67,11 @@
/**
* Configuration property: Default request attributes.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"RestMethodContext.defaultRequestAttributes.smo"</js>
- * <li><b>Data type:</b> <c>Map<String,Object></c>
- * <li><b>Default:</b> <jk>null</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link RestMethod#attrs()}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * Default request attributes.
- *
- * <p>
- * Specifies default values for request attributes if they are not already set on the request.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doGet() {...}
- * </p>
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_attrs}
- * </ul>
+ *
+ * @deprecated Use {@link #RESTMETHOD_reqAttrs}
*/
- public static final String RESTMETHOD_attrs = PREFIX + ".attrs.smo";
+ @Deprecated
+ public static final String RESTMETHOD_attrs = PREFIX + ".reqAttrs.smo";
/**
* Configuration property: Client version pattern matcher.
@@ -274,45 +242,11 @@
/**
* Configuration property: Default request headers.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"RestMethodContext.defaultRequestHeaders.smo"</js>
- * <li><b>Data type:</b> <c>Map<String,Object></c>
- * <li><b>Default:</b> <jk>null</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link RestMethod#defaultRequestHeaders()}
- * <li class='ja'>{@link RestMethod#defaultAccept()}
- * <li class='ja'>{@link RestMethod#defaultContentType()}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * Default request headers.
- *
- * <p>
- * Specifies default values for request headers if they're not passed in through the request.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestHeaders={<js>"Accept: text/json"</js>})
- * <jk>public</jk> String doGet() {...}
- * </p>
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
- * </ul>
+ *
+ * @deprecated Use {@link #RESTMETHOD_defaultRequestHeaders}
*/
- public static final String RESTMETHOD_defaultRequestHeaders = PREFIX + ".defaultRequestHeaders.smo";
+ @Deprecated
+ public static final String RESTMETHOD_defaultRequestHeaders = PREFIX + ".reqHeaders.smo";
/**
* Configuration property: HTTP method name.
@@ -491,6 +425,88 @@
*/
public static final String RESTMETHOD_priority = PREFIX + ".priority.i";
+ /**
+ * Configuration property: Default request attributes.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"RestMethodContext.reqAttrs.smo"</js>
+ * <li><b>Data type:</b> <c>Map<String,Object></c>
+ * <li><b>Default:</b> <jk>null</jk>
+ * <li><b>Session property:</b> <jk>false</jk>
+ * <li><b>Annotations:</b>
+ * <ul>
+ * <li class='ja'>{@link RestMethod#reqAttrs()}
+ * </ul>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * Default request attributes.
+ *
+ * <p>
+ * Specifies default values for request attributes if they are not already set on the request.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
+ * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqAttrs={<js>"Foo: bar"</js>})
+ * <jk>public</jk> String doGet() {...}
+ * </p>
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
+ * </ul>
+ */
+ public static final String RESTMETHOD_reqAttrs = PREFIX + ".reqAttrs.smo";
+
+ /**
+ * Configuration property: Default request headers.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"RestMethodContext.reqHeaders.smo"</js>
+ * <li><b>Data type:</b> <c>Map<String,Object></c>
+ * <li><b>Default:</b> <jk>null</jk>
+ * <li><b>Session property:</b> <jk>false</jk>
+ * <li><b>Annotations:</b>
+ * <ul>
+ * <li class='ja'>{@link RestMethod#reqHeaders()}
+ * <li class='ja'>{@link RestMethod#defaultAccept()}
+ * <li class='ja'>{@link RestMethod#defaultContentType()}
+ * </ul>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * Default request headers.
+ *
+ * <p>
+ * Specifies default values for request headers if they're not passed in through the request.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
+ * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqHeaders={<js>"Accept: text/json"</js>})
+ * <jk>public</jk> String doGet() {...}
+ * </p>
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
+ * </ul>
+ */
+ public static final String RESTMETHOD_reqHeaders = PREFIX + ".reqHeaders.smo";
+
//-------------------------------------------------------------------------------------------------------------------
// Instance
//-------------------------------------------------------------------------------------------------------------------
@@ -515,10 +531,10 @@
final HttpPartParser partParser;
final JsonSchemaGenerator jsonSchemaGenerator;
final Map<String,Object>
- defaultRequestHeaders,
+ reqHeaders,
defaultQuery,
defaultFormData;
- final ObjectMap defaultRequestAttributes;
+ final ObjectMap reqAttrs;
final String defaultCharset;
final long maxInput;
final Map<String,Widget> widgets;
@@ -625,10 +641,10 @@
this.jsonSchemaGenerator = JsonSchemaGenerator.create().apply(ps).build();
- Map<String,Object> _defaultRequestHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
- _defaultRequestHeaders.putAll(getMapProperty(RESTMETHOD_defaultRequestHeaders, Object.class));
+ Map<String,Object> _reqHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ _reqHeaders.putAll(getMapProperty(RESTMETHOD_reqHeaders, Object.class));
- ObjectMap _defaultRequestAttributes = new ObjectMap(context.getDefaultRequestAttributes()).appendAll(getMapProperty(RESTMETHOD_attrs, Object.class));
+ ObjectMap _reqAttrs = new ObjectMap(context.getReqAttrs()).appendAll(getMapProperty(RESTMETHOD_reqAttrs, Object.class));
Map<String,Object> _defaultQuery = new LinkedHashMap<>(getMapProperty(RESTMETHOD_defaultQuery, Object.class));
@@ -642,7 +658,7 @@
Header h = (Header)a;
if (h._default().length > 0) {
try {
- _defaultRequestHeaders.put(firstNonEmpty(h.name(), h.value()), parseAnything(joinnl(h._default())));
+ _reqHeaders.put(firstNonEmpty(h.name(), h.value()), parseAnything(joinnl(h._default())));
} catch (ParseException e) {
throw new ConfigException(e, "Malformed @Header annotation");
}
@@ -669,8 +685,8 @@
}
}
- this.defaultRequestHeaders = Collections.unmodifiableMap(_defaultRequestHeaders);
- this.defaultRequestAttributes = _defaultRequestAttributes.unmodifiable();
+ this.reqHeaders = Collections.unmodifiableMap(_reqHeaders);
+ this.reqAttrs = _reqAttrs.unmodifiable();
this.defaultQuery = Collections.unmodifiableMap(_defaultQuery);
this.defaultFormData = Collections.unmodifiableMap(_defaultFormData);
@@ -1026,7 +1042,7 @@
.append("RestMethodContext", new DefaultFilteringObjectMap()
.append("defaultFormData", defaultFormData)
.append("defaultQuery", defaultQuery)
- .append("defaultRequestHeaders", defaultRequestHeaders)
+ .append("reqHeaders", reqHeaders)
.append("httpMethod", httpMethod)
.append("priority", priority)
);
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index a7cfcf0..d7d0006 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -111,7 +111,7 @@
private UriContext uriContext;
private String charset, authorityPath;
private RequestHeaders headers;
- private RequestAttributes attributes;
+ private RequestAttributes attrs;
private Config cf;
private Swagger swagger;
private SerializerSessionArgs serializerSessionArgs;
@@ -198,10 +198,10 @@
.addDefault(rjm.defaultQuery)
.parser(rjm.partParser);
this.headers
- .addDefault(rjm.defaultRequestHeaders)
- .addDefault(context.getDefaultRequestHeaders())
+ .addDefault(rjm.reqHeaders)
+ .addDefault(context.getReqHeaders())
.parser(rjm.partParser);
- this.attributes = new RequestAttributes(this, rjm.defaultRequestAttributes);
+ this.attrs = new RequestAttributes(this, rjm.reqAttrs);
this.body
.encoders(rjm.encoders)
.parsers(rjm.parsers)
@@ -510,7 +510,7 @@
* <br>Never <jk>null</jk>.
*/
public RequestAttributes getAttributes() {
- return attributes;
+ return attrs;
}
/**
@@ -1689,7 +1689,7 @@
sb.append("\t").append(h).append(": ").append(getHeader(h)).append("\n");
}
sb.append("---Default Servlet Headers---\n");
- for (Map.Entry<String,Object> e : context.getDefaultRequestHeaders().entrySet()) {
+ for (Map.Entry<String,Object> e : context.getReqHeaders().entrySet()) {
sb.append("\t").append(e.getKey()).append(": ").append(e.getValue()).append("\n");
}
if (javaMethod == null) {
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index e182d46..a68160c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -80,7 +80,7 @@
this.inner = res;
this.request = req;
- for (Map.Entry<String,Object> e : context.getDefaultResponseHeaders().entrySet())
+ for (Map.Entry<String,Object> e : context.getResHeaders().entrySet())
setHeaderSafe(e.getKey(), stringify(e.getValue()));
try {
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 44186de..a710948 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
@@ -151,20 +151,10 @@
/**
* Default request attributes.
- *
- * <p>
- * Specifies default values for request attributes if they're not already set on the request.
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$L{my.localized.variable}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_attrs}
- * </ul>
+ *
+ * @deprecated Use {@link #reqAttrs()}
*/
+ @Deprecated
String[] attrs() default {};
/**
@@ -261,7 +251,7 @@
* The default value for the <c>Accept</c> header if not specified on a request.
*
* <p>
- * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+ * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
*
* <ul class='notes'>
* <li>
@@ -296,7 +286,7 @@
* The default value for the <c>Content-Type</c> header if not specified on a request.
*
* <p>
- * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+ * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
*
* <ul class='notes'>
* <li>
@@ -308,38 +298,18 @@
/**
* Default request headers.
- *
- * <p>
- * Specifies default values for request headers if they're not passed in through the request.
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$L{my.localized.variable}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
- * </ul>
+ *
+ * @deprecated Use {@link #reqHeaders()}
*/
+ @Deprecated
String[] defaultRequestHeaders() default {};
/**
* Default response headers.
- *
- * <p>
- * Specifies default values for response headers if they're not set after the Java REST method is called.
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$L{my.localized.variable}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
- * </ul>
+ *
+ * @deprecated Use {@link #resHeaders()}
*/
+ @Deprecated
String[] defaultResponseHeaders() default {};
/**
@@ -719,6 +689,60 @@
String renderResponseStackTraces() default "";
/**
+ * Default request attributes.
+ *
+ * <p>
+ * Specifies default values for request attributes if they're not already set on the request.
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
+ * </ul>
+ */
+ String[] reqAttrs() default {};
+
+ /**
+ * Default request headers.
+ *
+ * <p>
+ * Specifies default values for request headers if they're not passed in through the request.
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
+ * </ul>
+ */
+ String[] reqHeaders() default {};
+
+ /**
+ * Default response headers.
+ *
+ * <p>
+ * Specifies default values for response headers if they're not set after the Java REST method is called.
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_resHeaders}
+ * </ul>
+ */
+ String[] resHeaders() default {};
+
+ /**
* REST resource resolver.
*
* <p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
index cdcf9e6..e5c3e12 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
@@ -48,6 +48,7 @@
super(c, r);
}
+ @SuppressWarnings("deprecation")
@Override
public void apply(AnnotationInfo<Rest> ai, PropertyStoreBuilder psb) {
Rest a = ai.getAnnotation();
@@ -92,6 +93,14 @@
psb.addTo(REST_attrs, ra2[0], ra2[1]);
}
+ for (String ra : strings(a.reqAttrs())) {
+ String[] ra2 = RestUtils.parseKeyValuePair(ra);
+ if (ra2 == null)
+ throw new FormattedRuntimeException("Invalid default request attribute specified: ''{0}''. Must be in the format: ''Name: value''", ra);
+ if (isNotEmpty(ra2[1]))
+ psb.addTo(REST_reqAttrs, ra2[0], ra2[1]);
+ }
+
for (String header : strings(a.defaultRequestHeaders())) {
String[] h = RestUtils.parseHeader(header);
if (h == null)
@@ -100,16 +109,24 @@
psb.addTo(REST_defaultRequestHeaders, h[0], h[1]);
}
+ for (String header : strings(a.reqHeaders())) {
+ String[] h = RestUtils.parseHeader(header);
+ if (h == null)
+ throw new FormattedRuntimeException("Invalid default request header specified: ''{0}''. Must be in the format: ''Header-Name: header-value''", header);
+ if (isNotEmpty(h[1]))
+ psb.addTo(REST_reqHeaders, h[0], h[1]);
+ }
+
if (a.defaultAccept().length() > 0) {
s = string(a.defaultAccept());
if (isNotEmpty(s))
- psb.addTo(REST_defaultRequestHeaders, "Accept", s);
+ psb.addTo(REST_reqHeaders, "Accept", s);
}
if (a.defaultContentType().length() > 0) {
s = string(a.defaultContentType());
if (isNotEmpty(s))
- psb.addTo(REST_defaultRequestHeaders, "Content-Type", s);
+ psb.addTo(REST_reqHeaders, "Content-Type", s);
}
@@ -121,6 +138,14 @@
psb.addTo(REST_defaultResponseHeaders, h[0], h[1]);
}
+ for (String header : strings(a.resHeaders())) {
+ String[] h = parseHeader(header);
+ if (h == null)
+ throw new FormattedRuntimeException("Invalid default response header specified: ''{0}''. Must be in the format: ''Header-Name: header-value''", header);
+ if (isNotEmpty(h[1]))
+ psb.addTo(REST_resHeaders, h[0], h[1]);
+ }
+
psb.addTo(REST_responseHandlers, a.responseHandlers());
psb.addTo(REST_converters, a.converters());
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
index df88cde..d177480 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
@@ -39,27 +39,10 @@
/**
* Default request attributes.
- *
- * <p>
- * Specifies default values for request attributes if they're not already set on the request.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, attrs={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doGet() {...}
- * </p>
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_attrs}
- * </ul>
+ *
+ * @deprecated Use {@link #reqAttrs()}
*/
+ @Deprecated
String[] attrs() default {};
/**
@@ -202,7 +185,7 @@
* The default value for the <c>Accept</c> header if not specified on a request.
*
* <p>
- * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+ * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
*/
String defaultAccept() default "";
@@ -231,7 +214,7 @@
* The default value for the <c>Content-Type</c> header if not specified on a request.
*
* <p>
- * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+ * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
*/
String defaultContentType() default "";
@@ -292,27 +275,10 @@
/**
* Default request headers.
- *
- * <p>
- * Specifies default values for request headers if they're not passed in through the request.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestHeaders={<js>"Accept: text/json"</js>})
- * <jk>public</jk> String doGet() {...}
- * </p>
- *
- * <ul class='notes'>
- * <li>
- * Supports {@doc DefaultRestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
- * </ul>
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
- * </ul>
+ *
+ * @deprecated Use {@link #reqHeaders()}
*/
+ @Deprecated
String[] defaultRequestHeaders() default {};
/**
@@ -641,6 +607,56 @@
Property[] properties() default {};
/**
+ * Default request attributes.
+ *
+ * <p>
+ * Specifies default values for request attributes if they're not already set on the request.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
+ * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqAttrs={<js>"Foo: bar"</js>})
+ * <jk>public</jk> String doGet() {...}
+ * </p>
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
+ * </ul>
+ */
+ String[] reqAttrs() default {};
+
+ /**
+ * Default request headers.
+ *
+ * <p>
+ * Specifies default values for request headers if they're not passed in through the request.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
+ * <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqHeaders={<js>"Accept: text/json"</js>})
+ * <jk>public</jk> String doGet() {...}
+ * </p>
+ *
+ * <ul class='notes'>
+ * <li>
+ * Supports {@doc DefaultRestSvlVariables}
+ * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
+ * </ul>
+ */
+ String[] reqHeaders() default {};
+
+ /**
* Declared roles.
*
* <p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java
index eb43cff..d466efc 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java
@@ -88,16 +88,24 @@
psb.addTo(REST_defaultRequestHeaders, h[0], h[1]);
}
+ for (String header : strings(a.reqHeaders())) {
+ String[] h = RestUtils.parseHeader(header);
+ if (h == null)
+ throw new ConfigException("Invalid default request header specified on method ''{0}'': ''{1}''. Must be in the format: ''Header-Name: header-value''", sig, header);
+ if (isNotEmpty(h[1]))
+ psb.addTo(REST_reqHeaders, h[0], h[1]);
+ }
+
if (a.defaultAccept().length() > 0) {
s = string(a.defaultAccept());
if (isNotEmpty(s))
- psb.addTo(REST_defaultRequestHeaders, "Accept", s);
+ psb.addTo(REST_reqHeaders, "Accept", s);
}
if (a.defaultContentType().length() > 0) {
s = string(a.defaultContentType());
if (isNotEmpty(s))
- psb.addTo(REST_defaultRequestHeaders, "Content-Type", s);
+ psb.addTo(REST_reqHeaders, "Content-Type", s);
}
psb.addTo(REST_converters, a.converters());
@@ -167,6 +175,14 @@
psb.addTo(RESTMETHOD_defaultRequestHeaders, h2[0], h2[1]);
}
+ for (String h : a.reqHeaders()) {
+ String[] h2 = RestUtils.parseKeyValuePair(string(h));
+ if (h2 == null)
+ throw new ConfigException(
+ "Invalid default request header specified on method ''{0}'': ''{1}''. Must be in the format: ''name[:=]value''", sig, s);
+ psb.addTo(RESTMETHOD_reqHeaders, h2[0], h2[1]);
+ }
+
for (String ra : a.attrs()) {
String[] ra2 = RestUtils.parseKeyValuePair(string(ra));
if (ra2 == null)
@@ -175,11 +191,19 @@
psb.addTo(RESTMETHOD_attrs, ra2[0], ra2[1]);
}
+ for (String ra : a.reqAttrs()) {
+ String[] ra2 = RestUtils.parseKeyValuePair(string(ra));
+ if (ra2 == null)
+ throw new ConfigException(
+ "Invalid default request attribute specified on method ''{0}'': ''{1}''. Must be in the format: ''name[:=]value''", sig, s);
+ psb.addTo(RESTMETHOD_reqAttrs, ra2[0], ra2[1]);
+ }
+
if (! a.defaultAccept().isEmpty())
- psb.addTo(RESTMETHOD_defaultRequestHeaders, "Accept", string(a.defaultAccept()));
+ psb.addTo(RESTMETHOD_reqHeaders, "Accept", string(a.defaultAccept()));
if (! a.defaultContentType().isEmpty())
- psb.addTo(RESTMETHOD_defaultRequestHeaders, string(a.defaultContentType()));
+ psb.addTo(RESTMETHOD_reqHeaders, string(a.defaultContentType()));
for (String h : a.defaultQuery()) {
String[] h2 = RestUtils.parseKeyValuePair(string(h));
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index 072505b..af2b561 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -196,7 +196,7 @@
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_attrs}
+ * <li class='jf'>{@link RestContext#REST_reqAttrs}
* </ul>
*/
String[] attrs() default {};
@@ -368,7 +368,7 @@
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+ * <li class='jf'>{@link RestContext#REST_reqHeaders}
* </ul>
*/
String[] defaultRequestHeaders() default {};
@@ -386,7 +386,7 @@
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+ * <li class='jf'>{@link RestContext#REST_resHeaders}
* </ul>
*/
String[] defaultResponseHeaders() default {};