package org.jboss.resteasy.plugins.server.sun.http;
import com.sun.net.httpserver.HttpServer;
import org.jboss.resteasy.plugins.server.embedded.EmbeddedJaxrsServer;
import org.jboss.resteasy.plugins.server.embedded.SecurityDomain;
import org.jboss.resteasy.spi.ResteasyDeployment;
import java.io.IOException;
import java.net.InetSocketAddress;
/**
* com.sun.net.httpserver.HttpServer adapter for Resteasy. You may instead want to create and manage your own HttpServer.
* Use the HttpContextBuilder class in this case to build and register a specific HttpContext.
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class SunHttpJaxrsServer implements EmbeddedJaxrsServer
{
protected HttpContextBuilder context = new HttpContextBuilder();
protected HttpServer httpServer;
protected int configuredPort = 8080;
protected int runtimePort = -1;
public void setRootResourcePath(String rootResourcePath)
{
context.setPath(rootResourcePath);
}
public ResteasyDeployment getDeployment()
{
return context.getDeployment();
}
public void setDeployment(ResteasyDeployment deployment)
{
this.context.setDeployment(deployment);
}
/**
* Setting a security domain will turn on Basic Authentication
*
* @param securityDomain
*/
public void setSecurityDomain(SecurityDomain securityDomain)
{
this.context.setSecurityDomain(securityDomain);
}
/**
* If you do not provide an HttpServer instance, one will be created on startup
*
* @param httpServer
*/
public void setHttpServer(HttpServer httpServer)
{
this.httpServer = httpServer;
}
/**
* Value is ignored if HttpServer property is set. Default value is 8080
*
* @param port
*/
public void setPort(int port)
{
this.configuredPort = port;
}
/**
* Gets port number of this HttpServer.
*
* @return port number.
*/
public int getPort()
{
return runtimePort > 0 ? runtimePort : configuredPort;
}
@Override
public void start()
{
if (httpServer == null)
{
try
{
httpServer = HttpServer.create(new InetSocketAddress(configuredPort), 10);
runtimePort = httpServer.getAddress().getPort();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
context.bind(httpServer);
httpServer.start();
}
@Override
public void stop()
{
runtimePort = -1;
httpServer.stop(0);
context.cleanup();
}
}