package org.jboss.resteasy.plugins.server.sun.http;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;
import org.jboss.resteasy.plugins.server.embedded.SecurityDomain;
import org.jboss.resteasy.spi.ResteasyConfiguration;
import org.jboss.resteasy.spi.ResteasyDeployment;
/**
* Helper class to create a ResteasyDeployment and bind it to an HttpContext of an HttpServer. Setting the SecurityDomain
* will turn on Basic Authentication. Right now, only BasicAuthentication is supported.
*
* HttpContext.getAttributes() data is available within Providers and Resources by injecting a ResteasyConfiguration interface
*
* <pre>
HttpServer httpServer = HttpServer.create(new InetSocketAddress(port), 10);
contextBuilder = new HttpContextBuilder();
contextBuilder.getDeployment().getActualResourceClasses().add(SimpleResource.class);
HttpContext context = contextBuilder.bind(httpServer);
context.getAttributes().put("some.config.info", "42");
httpServer.start();
contextBuilder.cleanup();
httpServer.stop(0);
</pre>
* Create your HttpServer the way you want then use the org.jboss.resteasy.plugins.server.sun.http.HttpContextBuilder to initialize Resteasy
* and bind it to an HttpContext. The HttpContext attributes are available by injecting in a org.jboss.resteasy.spi.ResteasyConfiguration
* interface using @Context within your provider and resource classes.
*
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class HttpContextBuilder
{
protected ResteasyDeployment deployment = new ResteasyDeployment();
protected String path = "/";
protected ResteasyHttpHandler handler;
protected SecurityDomain securityDomain;
protected HttpContext boundContext;
public ResteasyDeployment getDeployment()
{
return deployment;
}
public void setDeployment(ResteasyDeployment deployment)
{
this.deployment = deployment;
}
public String getPath()
{
return path;
}
/**
* Path to bind context
*
* @param path
*/
public void setPath(String path)
{
this.path = path;
if (!this.path.startsWith("/"))
{
this.path = "/" + path;
}
}
public SecurityDomain getSecurityDomain()
{
return securityDomain;
}
/**
* Will turn on Basic Authentication
*
* @param securityDomain
*/
public void setSecurityDomain(SecurityDomain securityDomain)
{
this.securityDomain = securityDomain;
}
public HttpContext bind(HttpServer server)
{
handler = new ResteasyHttpHandler();
boundContext = server.createContext(path, handler);
HttpContextResteasyConfiguration config = new HttpContextResteasyConfiguration(boundContext);
deployment.getDefaultContextObjects().put(ResteasyConfiguration.class, config);
if (securityDomain != null)
{
boundContext.getFilters().add(new BasicAuthFilter(securityDomain));
}
deployment.start();
handler.setDispatcher(deployment.getDispatcher());
handler.setProviderFactory(deployment.getProviderFactory());
return boundContext;
}
public void cleanup()
{
deployment.stop();
}
}