package org.jboss.resteasy.plugins.server.vertx; import io.vertx.core.Context; import io.vertx.core.Vertx; import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.HttpResponse; import org.jboss.resteasy.spi.ResourceFactory; import org.jboss.resteasy.spi.ResteasyProviderFactory; import java.util.UUID; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ public class VertxResourceFactory implements ResourceFactory { private final ResourceFactory delegate; private final String id = UUID.randomUUID().toString(); public VertxResourceFactory(ResourceFactory delegate) { this.delegate = delegate; } @Override public Class<?> getScannableClass() { return delegate.getScannableClass(); } @Override public void registered(ResteasyProviderFactory factory) { delegate.registered(factory); } @Override public Object createResource(HttpRequest request, HttpResponse response, ResteasyProviderFactory factory) { Context ctx = Vertx.currentContext(); if (ctx != null) { Object resource = ctx.get(id); if (resource == null) { resource = delegate.createResource(request, response, factory); ctx.put(id, resource); } return resource; } else { throw new IllegalStateException(); } } @Override public void requestFinished(HttpRequest request, HttpResponse response, Object resource) { delegate.requestFinished(request, response, resource); } @Override public void unregistered() { delegate.unregistered(); } }