register exception mappers separately in JettyMarmotta for testing, because Jetty uses a different way to initialise RESTEasy (MARMOTTA-466)
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/30dd4282 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/30dd4282 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/30dd4282 Branch: refs/heads/develop Commit: 30dd42820c064bcf77e5b9cd7187bbf50a57fa7b Parents: 290ec30 Author: Sebastian Schaffert <[email protected]> Authored: Mon Mar 17 15:28:42 2014 +0100 Committer: Sebastian Schaffert <[email protected]> Committed: Mon Mar 17 15:28:42 2014 +0100 ---------------------------------------------------------------------- .../core/api/jaxrs/ExceptionMapperService.java | 3 +++ .../jaxrs/ExceptionMapperServiceImpl.java | 9 ++++++++- .../platform/core/test/base/JettyMarmotta.java | 21 +++++++++++++++----- 3 files changed, 27 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/30dd4282/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/jaxrs/ExceptionMapperService.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/jaxrs/ExceptionMapperService.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/jaxrs/ExceptionMapperService.java index 970f6ee..b305848 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/jaxrs/ExceptionMapperService.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/jaxrs/ExceptionMapperService.java @@ -17,6 +17,8 @@ package org.apache.marmotta.platform.core.api.jaxrs; +import org.jboss.resteasy.spi.ResteasyProviderFactory; + /** * This service auto-registers JAX-RS exception mappers implementing the CDIExceptionMapper interface and * registers them with RESTEasy. This allows applications based on Marmotta to easily implement and register their @@ -28,4 +30,5 @@ package org.apache.marmotta.platform.core.api.jaxrs; * @author Sebastian Schaffert ([email protected]) */ public interface ExceptionMapperService { + void register(ResteasyProviderFactory factory); } http://git-wip-us.apache.org/repos/asf/marmotta/blob/30dd4282/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/jaxrs/ExceptionMapperServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/jaxrs/ExceptionMapperServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/jaxrs/ExceptionMapperServiceImpl.java index 0b6e93b..2306686 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/jaxrs/ExceptionMapperServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/jaxrs/ExceptionMapperServiceImpl.java @@ -53,10 +53,17 @@ public class ExceptionMapperServiceImpl implements ExceptionMapperService { */ @PostConstruct public void initialise() { - log.info("initialising JAX-RS exception mappers"); ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance(); + register(factory); + } + + + @Override + public void register(ResteasyProviderFactory factory) { + log.info("initialising JAX-RS exception mappers"); + for(CDIExceptionMapper<?> mapper : mappers) { log.debug("registering exception mapper: {}", mapper.getClass().getName()); http://git-wip-us.apache.org/repos/asf/marmotta/blob/30dd4282/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/JettyMarmotta.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/JettyMarmotta.java b/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/JettyMarmotta.java index c1a965f..979d89e 100644 --- a/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/JettyMarmotta.java +++ b/platform/marmotta-core/src/test/java/org/apache/marmotta/platform/core/test/base/JettyMarmotta.java @@ -17,10 +17,7 @@ */ package org.apache.marmotta.platform.core.test.base; -import java.io.IOException; -import java.net.ServerSocket; -import java.util.*; - +import org.apache.marmotta.platform.core.api.jaxrs.ExceptionMapperService; import org.apache.marmotta.platform.core.servlet.MarmottaResourceFilter; import org.apache.marmotta.platform.core.test.base.jetty.TestApplication; import org.apache.marmotta.platform.core.test.base.jetty.TestInjectorFactory; @@ -28,11 +25,15 @@ import org.apache.marmotta.platform.core.util.CDIContext; import org.apache.marmotta.platform.core.webservices.CoreApplication; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.FilterMapping; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; +import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher; import javax.servlet.DispatcherType; +import javax.servlet.ServletException; +import java.io.IOException; +import java.net.ServerSocket; +import java.util.*; /** * An extended version of the EmbeddedMarmotta which also starts a jetty servlet @@ -124,6 +125,8 @@ public class JettyMarmotta extends AbstractMarmotta { //ctx.addFilter(restEasyFilter,"/*", Handler.ALL); ctx.addServlet(restEasyFilter, "/*"); + + try { jetty.start(); String url = "http://localhost:" + this.port + this.context + "/"; @@ -131,6 +134,14 @@ public class JettyMarmotta extends AbstractMarmotta { } catch (Exception e) { log.error("could not start up embedded jetty server", e); } + + // make sure exception mappers are loaded and registered before jetty starts up + ExceptionMapperService mapperService = CDIContext.getInstance(ExceptionMapperService.class); + try { + mapperService.register(((HttpServletDispatcher) restEasyFilter.getServlet()).getDispatcher().getProviderFactory()); + } catch (ServletException e) { + log.warn("could not register exception mappers"); + } } @Override
