diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/exceptionmappers/HttpRedirectException.java b/wizard-server/src/main/java/org/cobbzilla/wizard/exceptionmappers/HttpRedirectException.java index 7bdabd4..b1d15e7 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/exceptionmappers/HttpRedirectException.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/exceptionmappers/HttpRedirectException.java @@ -13,4 +13,6 @@ public class HttpRedirectException extends RuntimeException { @Getter @Setter private int status = HttpStatusCodes.FOUND; @Getter @Setter private String location = "/"; + public HttpRedirectException (String location) { this.location = location; } + } diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/resources/ResourceUtil.java b/wizard-server/src/main/java/org/cobbzilla/wizard/resources/ResourceUtil.java index 5371b28..8e22f70 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/resources/ResourceUtil.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/resources/ResourceUtil.java @@ -8,6 +8,7 @@ import org.cobbzilla.wizard.api.ApiException; import org.cobbzilla.wizard.api.ForbiddenException; import org.cobbzilla.wizard.api.NotFoundException; import org.cobbzilla.wizard.api.ValidationException; +import org.cobbzilla.wizard.exceptionmappers.HttpRedirectException; import org.cobbzilla.wizard.stream.ByteStreamingOutput; import org.cobbzilla.wizard.stream.FileStreamingOutput; import org.cobbzilla.wizard.stream.SendableResource; @@ -123,6 +124,11 @@ public class ResourceUtil { return Response.status(status).header(LOCATION, location).build(); } + public static Response forceRedirect (String location) { return forceRedirect(FOUND, location); } + public static Response forceRedirect (int status, String location) { + throw new HttpRedirectException(status, location); + } + public static Response forbidden() { return status(FORBIDDEN); } public static ResourceHttpException forbiddenEx() { return new ResourceHttpException(FORBIDDEN); } diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java index 27ced6f..7f90122 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java @@ -29,6 +29,7 @@ import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.message.internal.StreamingOutputProvider; import org.glassfish.jersey.server.ContainerFactory; import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.server.ServerProperties; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; @@ -48,8 +49,7 @@ import java.util.concurrent.TimeUnit; import static org.cobbzilla.util.daemon.ZillaRuntime.*; import static org.cobbzilla.util.network.NetworkUtil.IPv4_ALL_ADDRS; -import static org.cobbzilla.util.reflect.ReflectionUtil.copy; -import static org.cobbzilla.util.reflect.ReflectionUtil.forNames; +import static org.cobbzilla.util.reflect.ReflectionUtil.*; import static org.cobbzilla.util.string.StringUtil.EMPTY_ARRAY; import static org.cobbzilla.util.system.Sleep.sleep; @@ -277,6 +277,14 @@ public abstract class RestServerBase implemen if (jerseyConfiguration.hasProviderPackages()) { for (Class c : findClassesWithAnnotation(jerseyConfiguration.getProviderPackages(), Provider.class)) rc.register(c); } + if (jerseyConfiguration.hasServerProperties()) { + final Map props = new HashMap<>(); + for (Map.Entry entry : jerseyConfiguration.getServerProperties().entrySet()) { + final String realKey = constValue(ServerProperties.class, entry.getKey()); + props.put(realKey != null ? realKey : entry.getKey(), entry.getValue()); + } + rc.setProperties(props); + } configuration.setValidator(new Validator()); rc.register(new JacksonMessageBodyProvider(getObjectMapper(), configuration.getValidator())); diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/JerseyConfiguration.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/JerseyConfiguration.java index 281584f..a093f15 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/JerseyConfiguration.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/JerseyConfiguration.java @@ -3,17 +3,24 @@ package org.cobbzilla.wizard.server.config; import lombok.Getter; import lombok.Setter; +import java.util.Map; + +import static org.cobbzilla.util.daemon.ZillaRuntime.empty; + public class JerseyConfiguration { @Getter @Setter private String[] resourcePackages; @Getter @Setter private String[] providerPackages; - public boolean hasProviderPackages () { return providerPackages != null && providerPackages.length > 0; } + public boolean hasProviderPackages () { return !empty(providerPackages); } @Getter @Setter private String[] requestFilters; - public boolean hasRequestFilters() { return requestFilters != null && requestFilters.length > 0; } + public boolean hasRequestFilters() { return !empty(requestFilters); } @Getter @Setter private String[] responseFilters; - public boolean hasResponseFilters() { return responseFilters != null && responseFilters.length > 0; } + public boolean hasResponseFilters() { return !empty(responseFilters); } + + @Getter @Setter private Map serverProperties; + public boolean hasServerProperties () { return !empty(serverProperties); } }