Skip to content

Commit f71a28c

Browse files
committed
Value API: integrate value APu into master
2 parents 586e631 + b0f5678 commit f71a28c

69 files changed

Lines changed: 687 additions & 285 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/asciidoc/index.adoc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ fun main(args: Array<String>) {
7070
* <<responses, Reactive responses>> (Completable Futures, RxJava and Reactor types and Kotlin Coroutines)
7171
* <<server, Multi-server>> including https://https://www.eclipse.org/jetty[Jetty], https://netty.io[Netty] and http://undertow.io[Undertow]
7272
* Simple <<extensions-and-services, extension/plugin mechanism>> with a variety of <<modules, modules>>
73-
* <<support-plans, Commercial Support>>
7473

7574
=== Script API
7675

docs/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.jooby</groupId>
88
<artifactId>jooby-project</artifactId>
9-
<version>2.0.7-SNAPSHOT</version>
9+
<version>2.1.1-SNAPSHOT</version>
1010
</parent>
1111

1212
<modelVersion>4.0.0</modelVersion>

etc/release.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,4 @@
22

33
DIR=$(cd "$(dirname "$0")"; pwd)
44

5-
if sh $DIR/javadoc.sh; then
6-
sh $DIR/maven.sh -pl '!docs,!tests,!examples' clean deploy -P bom,central
7-
fi
5+
sh $DIR/maven.sh -pl '!docs,!tests,!examples' clean deploy -P bom,central

examples/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.jooby</groupId>
88
<artifactId>jooby-project</artifactId>
9-
<version>2.0.7-SNAPSHOT</version>
9+
<version>2.1.1-SNAPSHOT</version>
1010
</parent>
1111

1212
<modelVersion>4.0.0</modelVersion>

jooby/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.jooby</groupId>
88
<artifactId>jooby-project</artifactId>
9-
<version>2.0.7-SNAPSHOT</version>
9+
<version>2.1.1-SNAPSHOT</version>
1010
</parent>
1111

1212
<modelVersion>4.0.0</modelVersion>

jooby/src/main/java/io/jooby/Context.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,13 @@ public interface Context extends Registry {
751751
*/
752752
@Nonnull Context removeResponseHeader(@Nonnull String name);
753753

754+
/**
755+
* Clear/reset all the headers, including cookies.
756+
*
757+
* @return This context.
758+
*/
759+
@Nonnull Context removeResponseHeaders();
760+
754761
/**
755762
* Set response content length header.
756763
*
@@ -1068,4 +1075,20 @@ public interface Context extends Registry {
10681075
*/
10691076
boolean isResponseStarted();
10701077

1078+
/**
1079+
* True if response headers are cleared on application error. If none set it uses the
1080+
* default/global value specified by {@link RouterOptions#getResetHeadersOnError()}.
1081+
*
1082+
* @return True if response headers are cleared on application error. If none set it uses the
1083+
* default/global value specified by {@link RouterOptions#getResetHeadersOnError()}.
1084+
*/
1085+
boolean getResetHeadersOnError();
1086+
1087+
/**
1088+
* Set whenever reset/clear headers on application error.
1089+
*
1090+
* @param value True for reset/clear headers.
1091+
* @return This context.
1092+
*/
1093+
@Nonnull Context setResetHeadersOnError(boolean value);
10711094
}

jooby/src/main/java/io/jooby/CorsHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public CorsHandler() {
7070
return ctx.send(StatusCode.FORBIDDEN);
7171
}
7272
} else if (isSimple(ctx)) {
73+
ctx.setResetHeadersOnError(false);
7374
simple(ctx, options, origin);
7475
} else {
7576
return ctx.send(StatusCode.FORBIDDEN);

jooby/src/main/java/io/jooby/DefaultContext.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,13 @@ public interface DefaultContext extends Context {
339339
return setResponseHeader(name, RFC1123.format(Instant.ofEpochMilli(value.getTime())));
340340
}
341341

342-
@Override @Nonnull default Context setResponseHeader(@Nonnull String name, @Nonnull Instant value) {
342+
@Override @Nonnull
343+
default Context setResponseHeader(@Nonnull String name, @Nonnull Instant value) {
343344
return setResponseHeader(name, RFC1123.format(value));
344345
}
345346

346-
@Override @Nonnull default Context setResponseHeader(@Nonnull String name, @Nonnull Object value) {
347+
@Override @Nonnull
348+
default Context setResponseHeader(@Nonnull String name, @Nonnull Object value) {
347349
if (value instanceof Date) {
348350
return setResponseHeader(name, (Date) value);
349351
}
@@ -390,7 +392,8 @@ public interface DefaultContext extends Context {
390392
return responseStream(consumer);
391393
}
392394

393-
@Override default @Nonnull Context responseStream(@Nonnull SneakyThrows.Consumer<OutputStream> consumer)
395+
@Override default @Nonnull Context responseStream(
396+
@Nonnull SneakyThrows.Consumer<OutputStream> consumer)
394397
throws Exception {
395398
try (OutputStream out = responseStream()) {
396399
consumer.accept(out);
@@ -406,7 +409,8 @@ public interface DefaultContext extends Context {
406409
return responseWriter(contentType, contentType.getCharset());
407410
}
408411

409-
@Override default @Nonnull Context responseWriter(@Nonnull SneakyThrows.Consumer<PrintWriter> consumer)
412+
@Override default @Nonnull Context responseWriter(
413+
@Nonnull SneakyThrows.Consumer<PrintWriter> consumer)
410414
throws Exception {
411415
return responseWriter(MediaType.text, consumer);
412416
}
@@ -416,7 +420,8 @@ public interface DefaultContext extends Context {
416420
return responseWriter(contentType, contentType.getCharset(), consumer);
417421
}
418422

419-
@Override default @Nonnull Context responseWriter(@Nonnull MediaType contentType, @Nullable Charset charset,
423+
@Override default @Nonnull Context responseWriter(@Nonnull MediaType contentType,
424+
@Nullable Charset charset,
420425
@Nonnull SneakyThrows.Consumer<PrintWriter> consumer) throws Exception {
421426
try (PrintWriter writer = responseWriter(contentType, charset)) {
422427
consumer.accept(writer);
@@ -428,7 +433,8 @@ public interface DefaultContext extends Context {
428433
return sendRedirect(StatusCode.FOUND, location);
429434
}
430435

431-
@Override default @Nonnull Context sendRedirect(@Nonnull StatusCode redirect, @Nonnull String location) {
436+
@Override default @Nonnull Context sendRedirect(@Nonnull StatusCode redirect,
437+
@Nonnull String location) {
432438
setResponseHeader("location", location);
433439
return send(redirect);
434440
}
@@ -474,21 +480,25 @@ public interface DefaultContext extends Context {
474480
* @param statusCode Status code.
475481
* @return This context.
476482
*/
477-
@Override @Nonnull default Context sendError(@Nonnull Throwable cause, @Nonnull StatusCode statusCode) {
483+
@Override @Nonnull default Context sendError(@Nonnull Throwable cause,
484+
@Nonnull StatusCode statusCode) {
478485
Router router = getRouter();
479486
if (isResponseStarted()) {
480487
router.getLog().error(ErrorHandler.errorMessage(this, statusCode), cause);
481488
} else {
482489
try {
490+
if (getResetHeadersOnError()) {
491+
removeResponseHeaders();
492+
}
483493
router.getErrorHandler().apply(this, cause, statusCode);
484494
} catch (Exception x) {
485495
router.getLog()
486496
.error("error handler resulted in exception {} {}", getMethod(), pathString(), x);
487497
}
488-
/** rethrow fatal exceptions: */
489-
if (SneakyThrows.isFatal(cause)) {
490-
throw SneakyThrows.propagate(cause);
491-
}
498+
}
499+
/** rethrow fatal exceptions: */
500+
if (SneakyThrows.isFatal(cause)) {
501+
throw SneakyThrows.propagate(cause);
492502
}
493503
return this;
494504
}

jooby/src/main/java/io/jooby/ForwardingContext.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,11 @@ public Context setResponseHeader(@Nonnull String name, @Nonnull Instant value) {
330330
return this;
331331
}
332332

333+
@Nonnull @Override public Context removeResponseHeaders() {
334+
ctx.removeResponseHeaders();
335+
return this;
336+
}
337+
333338
@Override public long getResponseLength() {
334339
return ctx.getResponseLength();
335340
}
@@ -517,6 +522,15 @@ public Context sendError(@Nonnull Throwable cause, @Nonnull StatusCode statusCod
517522
return ctx.isResponseStarted();
518523
}
519524

525+
@Override public boolean getResetHeadersOnError() {
526+
return ctx.getResetHeadersOnError();
527+
}
528+
529+
@Override public Context setResetHeadersOnError(boolean value) {
530+
ctx.setResetHeadersOnError(value);
531+
return this;
532+
}
533+
520534
@Nonnull @Override public <T> T require(@Nonnull Class<T> type) throws RegistryException {
521535
return ctx.require(type);
522536
}

jooby/src/main/java/io/jooby/Route.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ public interface Handler extends Serializable {
270270
* Handler for {@link StatusCode#METHOD_NOT_ALLOWED} responses.
271271
*/
272272
public static final Handler METHOD_NOT_ALLOWED = ctx -> {
273+
ctx.setResetHeadersOnError(false);
273274
// Allow header was generated by routing algorithm
274275
if (ctx.getMethod().equals(Router.OPTIONS)) {
275276
return ctx.send(StatusCode.OK);

0 commit comments

Comments
 (0)