diff --git a/media/common/pom.xml b/media/common/pom.xml index 7a0908bc020..0ba05542c71 100644 --- a/media/common/pom.xml +++ b/media/common/pom.xml @@ -41,6 +41,10 @@ io.helidon.common helidon-common-mapper + + io.helidon.config + helidon-config + org.junit.jupiter junit-jupiter-api diff --git a/media/common/src/main/java/io/helidon/media/common/MediaSupport.java b/media/common/src/main/java/io/helidon/media/common/MediaSupport.java index 7f2cd0cd546..28fa7f75acb 100644 --- a/media/common/src/main/java/io/helidon/media/common/MediaSupport.java +++ b/media/common/src/main/java/io/helidon/media/common/MediaSupport.java @@ -15,6 +15,8 @@ */ package io.helidon.media.common; +import io.helidon.config.Config; + /** * Media support. */ @@ -22,10 +24,18 @@ public final class MediaSupport { private final MessageBodyReaderContext readerContext; private final MessageBodyWriterContext writerContext; + private final boolean serverErrorsIncludeStackTraces; private MediaSupport(MessageBodyReaderContext readerContext, MessageBodyWriterContext writerContext) { + this(readerContext, writerContext, false); + } + + private MediaSupport(MessageBodyReaderContext readerContext, + MessageBodyWriterContext writerContext, + boolean serverErrorsIncludeStackTraces) { this.readerContext = readerContext; this.writerContext = writerContext; + this.serverErrorsIncludeStackTraces = serverErrorsIncludeStackTraces; } /** @@ -44,6 +54,16 @@ public MessageBodyWriterContext writerContext() { return writerContext; } + /** + * Returns {@code true} if server errors will include stack trace + * information. + * @return {@code true} if server errors will include stack trace + * information + */ + public boolean serverErrorsIncludeStackTraces() { + return serverErrorsIncludeStackTraces; + } + /** * Create a new instance with empty reader and writer contexts. * @return MediaSupport @@ -52,6 +72,15 @@ public static MediaSupport create() { return builder().build(); } + /** + * Create a new instance with empty reader and writer contexts. + * @param config a {@link Config} + * @return MediaSupport + */ + public static MediaSupport create(Config config) { + return builder().config(config).build(); + } + /** * Create a new instance with the default readers and writers registered on * the contexts. @@ -61,9 +90,20 @@ public static MediaSupport createWithDefaults() { return builder().registerDefaults().build(); } + /** + * Create a new instance with the default readers and writers registered on + * the contexts. + * @param config a {@link Config} that will be passed to {@link + * Builder#registerDefaults(Config)} + * @return MediaSupport + */ + public static MediaSupport createWithDefaults(Config config) { + return builder().config(config).registerDefaults().build(); + } + /** * Create a new {@link Builder} instance. - * @return Builder + * @return a new {@link Builder} */ public static Builder builder() { return new Builder(); @@ -76,12 +116,41 @@ public static final class Builder implements io.helidon.common.Builder { + if (b) { + registerDefaults(); + } + }); + return this; + } + + /** + * Ensures that {@link MediaSupport} instances {@linkplain + * #build() built} by this {@link Builder} will include stack + * trace information when server errors are returned. + * @param serverErrorsIncludeStackTraces whether stack trace + * information should be included + * @return this {@link Builder} + */ + public Builder serverErrorsIncludeStackTraces(boolean serverErrorsIncludeStackTraces) { + this.serverErrorsIncludeStackTraces = serverErrorsIncludeStackTraces; + return this; + } + /** * Register the default readers and writers. *

Default readers

@@ -101,9 +170,11 @@ public static final class Builder implements io.helidon.common.Builder *
  • {@link FileBodyWriter} - generates payload from * {@code File.class}
  • + *
  • {@link ThrowableBodyWriter} - generates payload from + * {@link Throwable Throwable.class}
  • * * - * @return this builder instance + * @return this {@link Builder} */ public Builder registerDefaults() { // default readers @@ -117,7 +188,7 @@ public Builder registerDefaults() { .registerWriter(ByteChannelBodyWriter.create()) .registerWriter(PathBodyWriter.create()) .registerWriter(FileBodyWriter.create()) - .registerWriter(ThrowableBodyWriter.create(false)); + .registerWriter(ThrowableBodyWriter.create(serverErrorsIncludeStackTraces)); return this; } diff --git a/media/common/src/main/java/module-info.java b/media/common/src/main/java/module-info.java index 40bad050f18..53ebf42f095 100644 --- a/media/common/src/main/java/module-info.java +++ b/media/common/src/main/java/module-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2019 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ requires io.helidon.common.mapper; requires io.helidon.common.reactive; requires io.helidon.common.http; + requires io.helidon.config; exports io.helidon.media.common; }