diff --git a/src/main/java/org/eclipsefoundation/adopters/resource/mappers/NotFoundMapper.java b/src/main/java/org/eclipsefoundation/adopters/resource/mappers/NotFoundMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..1e9692d0a5131b163b1833e3aceb7d37011de111 --- /dev/null +++ b/src/main/java/org/eclipsefoundation/adopters/resource/mappers/NotFoundMapper.java @@ -0,0 +1,39 @@ +package org.eclipsefoundation.adopters.resource.mappers; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import javax.enterprise.inject.Instance; +import javax.ws.rs.NotFoundException; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.apache.commons.io.IOUtils; +import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Return the compiled 404 page when a URL mapping is not found. + * + * @author Martin Lowe + */ +@Provider +public class NotFoundMapper implements ExceptionMapper<NotFoundException> { + private static final Logger LOGGER = LoggerFactory.getLogger(NotFoundMapper.class); + + @ConfigProperty(name = "eclipse.error.location", defaultValue = "/META-INF/resources/404.html") + Instance<String> errorPageLoc; + + @Override + public Response toResponse(NotFoundException exception) { + try (InputStream is = this.getClass().getResourceAsStream(errorPageLoc.get())) { + return Response.status(404).entity(IOUtils.toString(is, StandardCharsets.UTF_8)).build(); + } catch (IOException e) { + LOGGER.error("Unable to read in error page at location {}", errorPageLoc.get(), e); + } + return Response.status(404).build(); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 85a9786836ea7c11a37fb14bc684ebf6d7a7883f..a2513892fe0fb8cc93c4ceb774fe4519614ab6cd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -5,4 +5,5 @@ quarkus.http.port=8080 quarkus.http.root-path=/adopters ## Adopters raw location -eclipse.adopters.path.json=/config/adopters.json \ No newline at end of file +eclipse.adopters.path.json=/config/adopters.json +%dev.eclipse.adopters.path.json=/tmp/config/adopters.json \ No newline at end of file