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<RestServer>,org.refcodes.component.ConnectionComponent<RestServer>,org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<RestEndpoint,RestServer>,org.refcodes.component.ConnectionOpenable<RestServer>,org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<RestEndpoint,RestServer>,org.refcodes.component.ConnectionStatusAccessor,org.refcodes.component.LinkComponent,org.refcodes.component.Openable,org.refcodes.io.MaxConnectionsAccessor,org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsBuilder<RestServer>,org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsMutator,org.refcodes.io.MaxConnectionsAccessor.MaxConnectionsProperty,org.refcodes.mixin.PortAccessor,org.refcodes.mixin.PortAccessor.PortBuilder<RestServer>,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<RestServer>,org.refcodes.net.HttpsConnectionRequestObservable<RestServer>,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<RestServer>,org.refcodes.net.SchemeAccessor.SchemeMutator,org.refcodes.net.SchemeAccessor.SchemeProperty,org.refcodes.observer.Observable<RestServer>,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<RestServer>,org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorMutator,org.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorProperty
- Direct Known Subclasses:
HttpRestServerSingleton
public class HttpRestServerImpl extends AbstractRestServer implements HttpRestServer
Implementation of theHttpRestServerinterface using theHttpServerdefined in thecom.sun.net.httpserverpackage. TheHttpRestServerImplis being initialized with some commonMediaTypeFactoryinstances (as implemented by theAbstractRestServer). At the time of writing this document theMediaTypeFactoryinstances being pre-configured are:JsonMediaTypeFactoryXmlMediaTypeFactoryTextMediaTypeFactoryFormMediaTypeFactory
HttpRestServerImplsupports HTTP as well as HTTPS protocols as being based on theHttpServeras 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.StringCONTEXT_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 voidclose()org.refcodes.component.ConnectionStatusgetConnectionStatus()protected com.sun.net.httpserver.HttpServergetHttpServer()Gets the http server.org.refcodes.security.KeyStoreDescriptorgetKeyStoreDescriptor()intgetMaxConnections()intgetPort()org.refcodes.data.SchemegetScheme()HttpRestServeronBasicAuthRequest(org.refcodes.net.BasicAuthObserver aBasicAuthObserver)HttpRestServeronConnectionRequest(org.refcodes.net.HttpsConnectionRequestObserver aObserver)protected voidopen(com.sun.net.httpserver.HttpServer aHttpServer)A hook to be used when using customHttpServer(HttpsServer) by custom open(...) methods of sub-classes of thisHttpRestServerImpl.voidopen(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.voidsetKeyStoreDescriptor(org.refcodes.security.KeyStoreDescriptor aStoreDescriptor)voidsetMaxConnections(int aMaxConnections)voidsetPort(int aPort)voidsetProtocol(java.lang.String aProtocol)voidsetScheme(org.refcodes.data.Scheme aScheme)java.lang.StringtoProtocol()HttpRestServerwithRealm(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 providedThreadingModeldefines 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 defaultExecutorServiceas 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 defaultExecutorServiceas 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 creatingThreads.
-
-
Method Detail
-
close
public void close() throws org.refcodes.component.CloseException- Specified by:
closein 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.OpenExceptionOpens 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:
openin interfaceHttpRestServer- Parameters:
aProtocol- The protocol to use, e.g. "TLS".aStoreDescriptor- The store descriptor describing yourKeyStorerequired 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:
getConnectionStatusin interfaceorg.refcodes.component.ConnectionStatusAccessor
-
onConnectionRequest
public HttpRestServer onConnectionRequest(org.refcodes.net.HttpsConnectionRequestObserver aObserver)
- Specified by:
onConnectionRequestin interfaceorg.refcodes.net.HttpsConnectionRequestObservable<RestServer>
-
onBasicAuthRequest
public HttpRestServer onBasicAuthRequest(org.refcodes.net.BasicAuthObserver aBasicAuthObserver)
- Specified by:
onBasicAuthRequestin interfaceorg.refcodes.net.BasicAuthObservable<RestServer>
-
withRealm
public HttpRestServer withRealm(java.lang.String aRealm)
- Specified by:
withRealmin interfaceHttpRestServer- Specified by:
withRealmin interfaceorg.refcodes.net.RealmAccessor.RealmBuilder<RestServer>- Specified by:
withRealmin interfaceRestServer
-
setPort
public void setPort(int aPort)
- Specified by:
setPortin interfaceorg.refcodes.mixin.PortAccessor.PortMutator
-
getPort
public int getPort()
- Specified by:
getPortin interfaceorg.refcodes.mixin.PortAccessor
-
setScheme
public void setScheme(org.refcodes.data.Scheme aScheme)
- Specified by:
setSchemein interfaceorg.refcodes.net.SchemeAccessor.SchemeMutator
-
getScheme
public org.refcodes.data.Scheme getScheme()
- Specified by:
getSchemein interfaceorg.refcodes.net.SchemeAccessor
-
toProtocol
public java.lang.String toProtocol()
- Specified by:
toProtocolin interfaceorg.refcodes.net.SchemeAccessor
-
setProtocol
public void setProtocol(java.lang.String aProtocol)
- Specified by:
setProtocolin interfaceorg.refcodes.net.SchemeAccessor.SchemeMutator
-
getKeyStoreDescriptor
public org.refcodes.security.KeyStoreDescriptor getKeyStoreDescriptor()
- Specified by:
getKeyStoreDescriptorin interfaceorg.refcodes.security.KeyStoreDescriptorAccessor
-
setKeyStoreDescriptor
public void setKeyStoreDescriptor(org.refcodes.security.KeyStoreDescriptor aStoreDescriptor)
- Specified by:
setKeyStoreDescriptorin interfaceorg.refcodes.security.KeyStoreDescriptorAccessor.KeyStoreDescriptorMutator
-
getMaxConnections
public int getMaxConnections()
- Specified by:
getMaxConnectionsin interfaceorg.refcodes.io.MaxConnectionsAccessor
-
setMaxConnections
public void setMaxConnections(int aMaxConnections)
- Specified by:
setMaxConnectionsin 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.IOExceptionA hook to be used when using customHttpServer(HttpsServer) by custom open(...) methods of sub-classes of thisHttpRestServerImpl. E.gHttpRestServerImpluses this hook to pre-configure aHttpsServerfor 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- TheHttpServerto be used. E.g. anHttpsServermight be used to enable HTTPS.- Throws:
java.io.IOException- in case opening with the providedHttpRestServerfails.
-
-