Package org.refcodes.rest
Class HttpRestServerImpl
- java.lang.Object
-
- org.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
- org.refcodes.rest.AbstractRestServer
-
- org.refcodes.rest.HttpRestServerImpl
-
- All Implemented Interfaces:
org.refcodes.component.Closable
,org.refcodes.component.Closable.CloseBuilder<org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<org.refcodes.net.HttpServerContext,HttpRestServer>>
,org.refcodes.component.ConnectionComponent<org.refcodes.net.HttpServerContext>
,org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<org.refcodes.net.HttpServerContext,HttpRestServer>
,org.refcodes.component.ConnectionOpenable<org.refcodes.net.HttpServerContext>
,org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<org.refcodes.net.HttpServerContext,org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<org.refcodes.net.HttpServerContext,HttpRestServer>>
,org.refcodes.component.ConnectionStatusAccessor
,org.refcodes.component.LinkComponent
,org.refcodes.component.Openable
,org.refcodes.io.MaxConnectionsAccessor
,org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsBuilder<HttpRestServer>
,org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsMutator
,org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsProperty
,org.refcodes.mixin.Disposable
,org.refcodes.mixin.Loggable
,org.refcodes.mixin.PortAccessor
,org.refcodes.mixin.PortAccessor.PortBuilder<HttpRestServer>
,org.refcodes.mixin.PortAccessor.PortMutator
,org.refcodes.mixin.PortAccessor.PortProperty
,org.refcodes.net.BaseLocatorAccessor
,org.refcodes.net.BaseLocatorAccessor.BaseLocatorBuilder<RestServer>
,org.refcodes.net.BaseLocatorAccessor.BaseLocatorMutator
,org.refcodes.net.BaseLocatorAccessor.BaseLocatorProperty
,org.refcodes.net.BasicAuthObservable<HttpRestServer>
,org.refcodes.net.HttpsConnectionRequestObservable<HttpRestServer>
,org.refcodes.net.MediaTypeFactoryLookup
,org.refcodes.net.MediaTypeFactoryLookup.MutableMediaTypeFactoryLookup
,org.refcodes.net.RealmAccessor
,org.refcodes.net.RealmAccessor.RealmBuilder<RestServer>
,org.refcodes.net.RealmAccessor.RealmMutator
,org.refcodes.net.RealmAccessor.RealmProperty
,org.refcodes.net.SchemeAccessor
,org.refcodes.net.SchemeAccessor.SchemeBuilder<HttpRestServer>
,org.refcodes.net.SchemeAccessor.SchemeMutator
,org.refcodes.net.SchemeAccessor.SchemeProperty
,org.refcodes.observer.Observable<RestEndpoint>
,org.refcodes.observer.Observers<RestEndpoint,RestServer>
,HttpExceptionHandlerAccessor
,HttpExceptionHandlerAccessor.HttpExceptionHandlerBuilder<RestServer>
,HttpExceptionHandlerAccessor.HttpExceptionHandlerMutator
,HttpExceptionHandlerAccessor.HttpExceptionHandlerProperty
,HttpExceptionHandlingAccessor
,HttpExceptionHandlingAccessor.HttpExceptionHandlingBuilder<RestServer>
,HttpExceptionHandlingAccessor.HttpExceptionHandlingMutator
,HttpExceptionHandlingAccessor.HttpExceptionHandlingProperty
,HttpRestServer
,RestServer
,org.refcodes.runtime.RequestCorrelation<RestServer>
,org.refcodes.runtime.SessionCorrelation<RestServer>
,org.refcodes.security.KeyStoreDescriptorAccessor
,org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorBuilder<HttpRestServer>
,org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorMutator
,org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorProperty
- Direct Known Subclasses:
HttpRestServerSingleton
public class HttpRestServerImpl extends AbstractRestServer implements HttpRestServer
Implementation of theHttpRestServer
interface using theHttpServer
defined in thecom.sun.net.httpserver
package. TheHttpRestServerImpl
is being initialized with some commonMediaTypeFactory
instances (as implemented by theAbstractRestServer
). At the time of writing this document theMediaTypeFactory
instances being pre-configured are:JsonMediaTypeFactory
XmlMediaTypeFactory
TextMediaTypeFactory
FormMediaTypeFactory
HttpRestServerImpl
supports HTTP as well as HTTPS protocols as being based on theHttpServer
as well as on theHttpsServer
. For opening up an HTTPS connection, refer to the methods such asHttpRestServer.open(String, KeyStoreDescriptor, int)
orHttpRestServer.open(KeyStoreDescriptor, int)
and the like.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.refcodes.net.BaseLocatorAccessor
org.refcodes.net.BaseLocatorAccessor.BaseLocatorBuilder<B extends org.refcodes.net.BaseLocatorAccessor.BaseLocatorBuilder<B>>, org.refcodes.net.BaseLocatorAccessor.BaseLocatorMutator, org.refcodes.net.BaseLocatorAccessor.BaseLocatorProperty
-
Nested classes/interfaces inherited from interface org.refcodes.component.Closable
org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.Closable.CloseBuilder<B extends org.refcodes.component.Closable.CloseBuilder<B>>
-
Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionComponent
org.refcodes.component.ConnectionComponent.ConnectionAutomaton<CON extends java.lang.Object>, org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON extends java.lang.Object,B extends org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON,B>>
-
Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionOpenable
org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<CON extends java.lang.Object>, org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON extends java.lang.Object,B extends org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON,B>>
-
Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionStatusAccessor
org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusMutator, org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusProperty
-
Nested classes/interfaces inherited from interface org.refcodes.mixin.Disposable
org.refcodes.mixin.Disposable.Disposedable
-
Nested classes/interfaces inherited from interface org.refcodes.rest.HttpExceptionHandlerAccessor
HttpExceptionHandlerAccessor.HttpExceptionHandlerBuilder<B extends HttpExceptionHandlerAccessor.HttpExceptionHandlerBuilder<B>>, HttpExceptionHandlerAccessor.HttpExceptionHandlerMutator, HttpExceptionHandlerAccessor.HttpExceptionHandlerProperty
-
Nested classes/interfaces inherited from interface org.refcodes.rest.HttpExceptionHandlingAccessor
HttpExceptionHandlingAccessor.HttpExceptionHandlingBuilder<B extends HttpExceptionHandlingAccessor.HttpExceptionHandlingBuilder<B>>, HttpExceptionHandlingAccessor.HttpExceptionHandlingMutator, HttpExceptionHandlingAccessor.HttpExceptionHandlingProperty
-
Nested classes/interfaces inherited from interface org.refcodes.security.KeyStoreDescriptorAccessor
org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorBuilder<B extends org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorBuilder<B>>, org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorMutator, org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorProperty
-
Nested classes/interfaces inherited from interface org.refcodes.component.LinkComponent
org.refcodes.component.LinkComponent.LinkAutomaton, org.refcodes.component.LinkComponent.LinkComponentBuilder<B extends org.refcodes.component.LinkComponent.LinkComponentBuilder<B>>
-
Nested classes/interfaces inherited from interface org.refcodes.io.MaxConnectionsAccessor
org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsBuilder<B extends org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsBuilder<B>>, org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsMutator, org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsProperty
-
Nested classes/interfaces inherited from interface org.refcodes.net.MediaTypeFactoryLookup
org.refcodes.net.MediaTypeFactoryLookup.MutableMediaTypeFactoryLookup
-
Nested classes/interfaces inherited from interface org.refcodes.component.Openable
org.refcodes.component.Openable.OpenAutomaton, org.refcodes.component.Openable.OpenBuilder<B extends org.refcodes.component.Openable.OpenBuilder<B>>
-
Nested classes/interfaces inherited from interface org.refcodes.mixin.PortAccessor
org.refcodes.mixin.PortAccessor.PortBuilder<B extends org.refcodes.mixin.PortAccessor.PortBuilder<B>>, org.refcodes.mixin.PortAccessor.PortMutator, org.refcodes.mixin.PortAccessor.PortProperty
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.String
CONTEXT_PATH
-
Fields inherited from class org.refcodes.rest.AbstractRestServer
_hasRequestCorrelation, _hasSessionCorrelation, _httpExceptionHandler, _httpExceptionHandling
-
-
Constructor Summary
Constructors Constructor Description HttpRestServerImpl()
Constructs aHttpRestServerImpl
.HttpRestServerImpl(java.util.concurrent.ExecutorService aExecutorService)
Constructs aHttpRestServerImpl
.HttpRestServerImpl(org.refcodes.controlflow.ThreadingModel aThreadingModel)
Constructs aHttpRestServerImpl
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
org.refcodes.component.ConnectionStatus
getConnectionStatus()
protected com.sun.net.httpserver.HttpServer
getHttpServer()
Gets the http server.org.refcodes.security.KeyStoreDescriptor
getKeyStoreDescriptor()
int
getMaxConnections()
int
getPort()
org.refcodes.data.Scheme
getScheme()
HttpRestServer
onBasicAuthRequest(org.refcodes.net.BasicAuthObserver aBasicAuthObserver)
HttpRestServer
onConnectionRequest(org.refcodes.net.HttpsConnectionRequestObserver aObserver)
protected void
open(com.sun.net.httpserver.HttpServer aHttpServer)
A hook to be used when using customHttpServer
(HttpsServer
) by custom open(...) methods of sub-classes of thisHttpRestServerImpl
.void
open(java.lang.String aProtocol, org.refcodes.security.KeyStoreDescriptor aStoreDescriptor, int aPort, int aMaxConnections)
Opens the HTTPS sever connection (socket) at the given port allowing the given number of maximum connections at the same time using the provided HTTPS configuration parameters.void
setKeyStoreDescriptor(org.refcodes.security.KeyStoreDescriptor aStoreDescriptor)
void
setMaxConnections(int aMaxConnections)
void
setPort(int aPort)
void
setProtocol(java.lang.String aProtocol)
void
setScheme(org.refcodes.data.Scheme aScheme)
java.lang.String
toProtocol()
HttpRestServer
withRealm(java.lang.String aRealm)
-
Methods inherited from class org.refcodes.observer.AbstractObservable
clear, doHandleEventListenerException, fireEvent, getThreadPriority, hasObserverSubscription, isEmpty, setThreadPriority, size
-
Methods inherited from class org.refcodes.rest.AbstractRestServer
addMediaTypeFactory, dispose, doRequestCorrelation, doSessionCorrelation, fireEvent, getBaseLocator, getFactoryMediaTypes, getHttpExceptionHandler, getHttpExceptionHandling, getRealm, hasRequestCorrelation, hasSessionCorrelation, initMedaTypeFactories, isObserversActive, observers, onHttpRequest, setBaseLocator, setHttpExceptionHandler, setHttpExceptionHandling, setObserversActive, setRealm, setRequestCorrelation, setSessionCorrelation, subscribeObserver, toMediaTypeFactory, toNegotiatedContenType, toResponseBody, unsubscribeObserver
-
Methods inherited from interface org.refcodes.net.BaseLocatorAccessor.BaseLocatorMutator
setBaseLocator
-
Methods inherited from interface org.refcodes.component.Closable
closeIn, closeQuietly, closeUnchecked
-
Methods inherited from interface org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder
withOpenUnchecked
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlerAccessor
getHttpExceptionHandler
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlerAccessor.HttpExceptionHandlerBuilder
withOnHttpException
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlerAccessor.HttpExceptionHandlerMutator
onHttpException, setHttpExceptionHandler
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlingAccessor
getHttpExceptionHandling
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlingAccessor.HttpExceptionHandlingMutator
setHttpExceptionHandling
-
Methods inherited from interface org.refcodes.rest.HttpRestServer
open, open, open, open, open, open, open, open, open, open, open, open, withBaseLocator, withClose, withCloseIn, withCloseQuietly, withDisableRequestCorrelation, withDisableSessionCorrelation, withEnableRequestCorrelation, withEnableSessionCorrelation, withHttpExceptionHandler, withHttpExceptionHandling, withKeyStoreDescriptor, withMaxConnections, withOpen, withOpen, withPort, withProtocol, withRequestCorrelation, withScheme, withSessionCorrelation
-
Methods inherited from interface org.refcodes.mixin.Loggable
alert, alert, critical, critical, debug, error, info, notice, panic, trace, warn, warn
-
Methods inherited from interface org.refcodes.net.MediaTypeFactoryLookup
getFactoryMediaTypes, hasMediaTypeFactory, toMediaTypeFactory
-
Methods inherited from interface org.refcodes.net.MediaTypeFactoryLookup.MutableMediaTypeFactoryLookup
addMediaTypeFactory
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.refcodes.observer.Observable
hasObserverSubscription, subscribeObserver, unsubscribeObserver
-
Methods inherited from interface org.refcodes.observer.Observers
disableObservers, enableObservers, isObserversActive, observers, setObserversActive
-
Methods inherited from interface org.refcodes.runtime.RequestCorrelation
disableRequestCorrelation, enableRequestCorrelation, hasRequestCorrelation, setRequestCorrelation
-
Methods inherited from interface org.refcodes.rest.RestServer
onDelete, onGet, onPost, onPut, onRequest, onRequest, onRequest, withDisableObservers, withEnableObservers, withObserversActive
-
-
-
-
Constructor Detail
-
HttpRestServerImpl
public HttpRestServerImpl(org.refcodes.controlflow.ThreadingModel aThreadingModel)
Constructs aHttpRestServerImpl
. UseHttpRestServer.open(int)
or similar to make it listen on your port. The providedThreadingModel
defines whether to use a single-threaded or a multi-threaded threading model. Threads are created as daemon threads. For more control on thread generation use the constructorHttpRestServerImpl(ExecutorService)
.- Parameters:
aThreadingModel
- Specifies to either use a single-threaded threading model (noExecutorService
) or a multi-threaded threading model with a defaultExecutorService
as ofControlFlowUtility.createCachedExecutorService(boolean)
.
-
HttpRestServerImpl
public HttpRestServerImpl()
Constructs aHttpRestServerImpl
. UseHttpRestServer.open(int)
or similar to make it listen on your port. Uses a multi threaded threading model with a defaultExecutorService
as ofControlFlowUtility.createCachedExecutorService(boolean)
. Threads are created as daemon threads. For more control on thread generation use the constructorHttpRestServerImpl(ExecutorService)
.
-
HttpRestServerImpl
public HttpRestServerImpl(java.util.concurrent.ExecutorService aExecutorService)
Constructs aHttpRestServerImpl
. UseHttpRestServer.open(int)
or similar to make it listen on your port. Uses a multi threaded threading model.- Parameters:
aExecutorService
- An executor service to be used when creatingThread
s.
-
-
Method Detail
-
close
public void close() throws org.refcodes.component.CloseException
- Specified by:
close
in interfaceorg.refcodes.component.Closable
- Throws:
org.refcodes.component.CloseException
-
open
public void open(java.lang.String aProtocol, org.refcodes.security.KeyStoreDescriptor aStoreDescriptor, int aPort, int aMaxConnections) throws org.refcodes.component.OpenException
Opens the HTTPS sever connection (socket) at the given port allowing the given number of maximum connections at the same time using the provided HTTPS configuration parameters.- Specified by:
open
in interfaceHttpRestServer
- Parameters:
aProtocol
- The protocol to use, e.g. "TLS".aStoreDescriptor
- The store descriptor describing yourKeyStore
required for HTTPS.aPort
- The port on which to listen for requests.aMaxConnections
- The number of maximum connections at the same time.- Throws:
org.refcodes.component.OpenException
- thrown in case something went wrong such as the port being already in use.
-
getConnectionStatus
public org.refcodes.component.ConnectionStatus getConnectionStatus()
- Specified by:
getConnectionStatus
in interfaceorg.refcodes.component.ConnectionStatusAccessor
-
onConnectionRequest
public HttpRestServer onConnectionRequest(org.refcodes.net.HttpsConnectionRequestObserver aObserver)
- Specified by:
onConnectionRequest
in interfaceorg.refcodes.net.HttpsConnectionRequestObservable<HttpRestServer>
-
onBasicAuthRequest
public HttpRestServer onBasicAuthRequest(org.refcodes.net.BasicAuthObserver aBasicAuthObserver)
- Specified by:
onBasicAuthRequest
in interfaceorg.refcodes.net.BasicAuthObservable<HttpRestServer>
-
withRealm
public HttpRestServer withRealm(java.lang.String aRealm)
- Specified by:
withRealm
in interfaceHttpRestServer
- Specified by:
withRealm
in interfaceorg.refcodes.net.RealmAccessor.RealmBuilder<RestServer>
- Specified by:
withRealm
in interfaceRestServer
-
setPort
public void setPort(int aPort)
- Specified by:
setPort
in interfaceorg.refcodes.mixin.PortAccessor.PortMutator
-
getPort
public int getPort()
- Specified by:
getPort
in interfaceorg.refcodes.mixin.PortAccessor
-
setScheme
public void setScheme(org.refcodes.data.Scheme aScheme)
- Specified by:
setScheme
in interfaceorg.refcodes.net.SchemeAccessor.SchemeMutator
-
getScheme
public org.refcodes.data.Scheme getScheme()
- Specified by:
getScheme
in interfaceorg.refcodes.net.SchemeAccessor
-
toProtocol
public java.lang.String toProtocol()
- Specified by:
toProtocol
in interfaceorg.refcodes.net.SchemeAccessor
-
setProtocol
public void setProtocol(java.lang.String aProtocol)
- Specified by:
setProtocol
in interfaceorg.refcodes.net.SchemeAccessor.SchemeMutator
-
getKeyStoreDescriptor
public org.refcodes.security.KeyStoreDescriptor getKeyStoreDescriptor()
- Specified by:
getKeyStoreDescriptor
in interfaceorg.refcodes.security.KeyStoreDescriptorAccessor
-
setKeyStoreDescriptor
public void setKeyStoreDescriptor(org.refcodes.security.KeyStoreDescriptor aStoreDescriptor)
- Specified by:
setKeyStoreDescriptor
in interfaceorg.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorMutator
-
getMaxConnections
public int getMaxConnections()
- Specified by:
getMaxConnections
in interfaceorg.refcodes.io.MaxConnectionsAccessor
-
setMaxConnections
public void setMaxConnections(int aMaxConnections)
- Specified by:
setMaxConnections
in interfaceorg.refcodes.io.MaxConnectionsAccessor.MaxConnectionsMutator
-
getHttpServer
protected com.sun.net.httpserver.HttpServer getHttpServer()
Gets the http server.- Returns:
- the http server
-
open
protected void open(com.sun.net.httpserver.HttpServer aHttpServer) throws java.io.IOException
A hook to be used when using customHttpServer
(HttpsServer
) by custom open(...) methods of sub-classes of thisHttpRestServerImpl
. E.gHttpRestServerImpl
uses this hook to pre-configure aHttpsServer
for HTTPS. The passedHttpServer
(HttpsServer
) must already be bound to a port and enabled with the number of concurrent connections as ofHttpServer.bind(InetSocketAddress, int)
.- Parameters:
aHttpServer
- TheHttpServer
to be used. E.g. anHttpsServer
might be used to enable HTTPS.- Throws:
java.io.IOException
- in case opening with the providedHttpRestServer
fails.
-
-