Package org.refcodes.rest
Class AbstractRestServer
- java.lang.Object
-
- org.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
- org.refcodes.rest.AbstractRestServer
-
- All Implemented Interfaces:
org.refcodes.net.BaseLocatorAccessor
,org.refcodes.net.BaseLocatorAccessor.BaseLocatorBuilder<RestServer>
,org.refcodes.net.BaseLocatorAccessor.BaseLocatorMutator
,org.refcodes.net.BaseLocatorAccessor.BaseLocatorProperty
,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.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
,RestServer
,org.refcodes.runtime.RequestCorrelation<RestServer>
,org.refcodes.runtime.SessionCorrelation<RestServer>
- Direct Known Subclasses:
HttpRestServerImpl
,LoopbackRestServerImpl
public abstract class AbstractRestServer extends org.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest> implements RestServer
Implementation of the base functionality of theRestServer
interface omitting the HTTP handling part being the foundation for variousRestServer
implementations such asHttpRestServerImpl
orLoopbackRestServerImpl
. TheAbstractRestServer
is pre-configured with the followingMediaTypeFactory
instances:JsonMediaTypeFactory
XmlMediaTypeFactory
TextMediaTypeFactory
FormMediaTypeFactory
initMedaTypeFactories()
, therein callingaddMediaTypeFactory(MediaTypeFactory)
to add (by also invoking super'sinitMedaTypeFactories()
) or to set your own (without invoking super'sinitMedaTypeFactories()
)MediaTypeFactory
instances.
-
-
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.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
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
_hasRequestCorrelation
protected boolean
_hasSessionCorrelation
protected HttpExceptionHandler
_httpExceptionHandler
protected HttpExceptionHandling
_httpExceptionHandling
-
Constructor Summary
Constructors Constructor Description AbstractRestServer()
Constructs aAbstractRestServer
pre-configured withMediaTypeFactory
instances for JSON and REST.AbstractRestServer(java.util.concurrent.ExecutorService aExecutorService)
CConstructs aAbstractRestServer
pre-configured withMediaTypeFactory
instances for JSON and REST.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
addMediaTypeFactory(org.refcodes.net.MediaTypeFactory aMediaTypeFactory)
void
dispose()
protected void
doRequestCorrelation(org.refcodes.net.RequestHeaderFields aRequestHeaderFields, org.refcodes.net.HttpServerResponse aServerResponse)
Do request correlation.protected void
doSessionCorrelation(org.refcodes.net.RequestHeaderFields aRequestHeaderFields, org.refcodes.net.HttpServerResponse aServerResponse)
Do session correlation.protected boolean
fireEvent(org.refcodes.net.HttpRequest aEvent, RestEndpoint aObserver, org.refcodes.controlflow.ExecutionStrategy aExecutionStrategy)
java.lang.String
getBaseLocator()
org.refcodes.net.MediaType[]
getFactoryMediaTypes()
HttpExceptionHandler
getHttpExceptionHandler()
Retrieves theHttpExceptionHandler
from theHttpExceptionHandler
property.HttpExceptionHandling
getHttpExceptionHandling()
Retrieves theHttpExceptionHandling
from theHttpExceptionHandling
property.java.lang.String
getRealm()
boolean
hasRequestCorrelation()
boolean
hasSessionCorrelation()
protected void
initMedaTypeFactories()
Adds the defaultMediaTypeFactory
instances.boolean
isObserversActive()
java.util.Iterator<RestEndpoint>
observers()
protected void
onHttpRequest(java.net.InetSocketAddress aLocalAddress, java.net.InetSocketAddress aRemoteAddress, org.refcodes.net.HttpMethod aHttpMethod, org.refcodes.net.Url aUrl, org.refcodes.net.RequestHeaderFields aRequestHeaderFields, java.io.InputStream aHttpInputStream, org.refcodes.net.HttpServerResponse aHttpServerResponse)
Extensions of this class disect an incoming request and pass it to this method for doing the actual invocation of the registeredRestEndpoint
instances.void
setBaseLocator(java.lang.String aBaseLocator)
void
setHttpExceptionHandler(HttpExceptionHandler aHttpErrorHandler)
Sets theHttpExceptionHandler
for theHttpExceptionHandler
property.void
setHttpExceptionHandling(HttpExceptionHandling aHttpErrorHandling)
Sets theHttpExceptionHandling
for theHttpExceptionHandling
property.void
setObserversActive(boolean isActive)
void
setRealm(java.lang.String aRealm)
void
setRequestCorrelation(boolean hasRequestCorrelation)
void
setSessionCorrelation(boolean hasSessionCorrelation)
boolean
subscribeObserver(RestEndpoint aObserver)
org.refcodes.net.MediaTypeFactory
toMediaTypeFactory(org.refcodes.net.MediaType aMediaType)
protected org.refcodes.net.ContentType
toNegotiatedContenType(org.refcodes.net.RequestHeaderFields aRequestHeaderFields)
Determines the best fitting respone'sContentType
.protected byte[]
toResponseBody(java.lang.Object aResponse, org.refcodes.net.RequestHeaderFields aRequestHeaderFields, org.refcodes.net.ResponseHeaderFields aResponseHeaderFields)
Creates aString
MediaType
encoded as of theHeaderField.CONTENT_TYPE
from the response header or if not set as of theHeaderField.ACCEPT
from the request header or if not set as of theHeaderField.CONTENT_TYPE
from the request header.boolean
unsubscribeObserver(RestEndpoint aObserver)
-
Methods inherited from class org.refcodes.observer.AbstractObservable
clear, doHandleEventListenerException, fireEvent, getThreadPriority, hasObserverSubscription, isEmpty, setThreadPriority, size
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlerAccessor.HttpExceptionHandlerBuilder
withHttpExceptionHandler, withOnHttpException
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlerAccessor.HttpExceptionHandlerMutator
onHttpException
-
Methods inherited from interface org.refcodes.rest.HttpExceptionHandlingAccessor.HttpExceptionHandlingBuilder
withHttpExceptionHandling
-
Methods inherited from interface org.refcodes.mixin.Loggable
alert, alert, critical, critical, debug, error, info, notice, panic, trace, warn, warn
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.refcodes.runtime.RequestCorrelation
disableRequestCorrelation, enableRequestCorrelation
-
Methods inherited from interface org.refcodes.rest.RestServer
onDelete, onGet, onPost, onPut, onRequest, onRequest, onRequest, withBaseLocator, withDisableObservers, withDisableRequestCorrelation, withDisableSessionCorrelation, withEnableObservers, withEnableRequestCorrelation, withEnableSessionCorrelation, withObserversActive, withRealm, withRequestCorrelation, withSessionCorrelation
-
-
-
-
Field Detail
-
_hasRequestCorrelation
protected boolean _hasRequestCorrelation
-
_hasSessionCorrelation
protected boolean _hasSessionCorrelation
-
_httpExceptionHandling
protected HttpExceptionHandling _httpExceptionHandling
-
_httpExceptionHandler
protected HttpExceptionHandler _httpExceptionHandler
-
-
Constructor Detail
-
AbstractRestServer
public AbstractRestServer()
Constructs aAbstractRestServer
pre-configured withMediaTypeFactory
instances for JSON and REST.
-
AbstractRestServer
public AbstractRestServer(java.util.concurrent.ExecutorService aExecutorService)
CConstructs aAbstractRestServer
pre-configured withMediaTypeFactory
instances for JSON and REST.- Parameters:
aExecutorService
- An executor service to be used when creatingThread
s.
-
-
Method Detail
-
initMedaTypeFactories
protected void initMedaTypeFactories()
Adds the defaultMediaTypeFactory
instances. Can be overridden.
-
getHttpExceptionHandler
public HttpExceptionHandler getHttpExceptionHandler()
Retrieves theHttpExceptionHandler
from theHttpExceptionHandler
property.- Specified by:
getHttpExceptionHandler
in interfaceHttpExceptionHandlerAccessor
- Returns:
- The
HttpExceptionHandler
stored by theHttpExceptionHandler
property.
-
setHttpExceptionHandler
public void setHttpExceptionHandler(HttpExceptionHandler aHttpErrorHandler)
Sets theHttpExceptionHandler
for theHttpExceptionHandler
property.- Specified by:
setHttpExceptionHandler
in interfaceHttpExceptionHandlerAccessor.HttpExceptionHandlerMutator
- Parameters:
aHttpErrorHandler
- TheHttpExceptionHandler
to be stored by theHttpExceptionHandler
property.
-
getHttpExceptionHandling
public HttpExceptionHandling getHttpExceptionHandling()
Retrieves theHttpExceptionHandling
from theHttpExceptionHandling
property.- Specified by:
getHttpExceptionHandling
in interfaceHttpExceptionHandlingAccessor
- Returns:
- The
HttpExceptionHandling
stored by theHttpExceptionHandling
property.
-
setHttpExceptionHandling
public void setHttpExceptionHandling(HttpExceptionHandling aHttpErrorHandling)
Sets theHttpExceptionHandling
for theHttpExceptionHandling
property.- Specified by:
setHttpExceptionHandling
in interfaceHttpExceptionHandlingAccessor.HttpExceptionHandlingMutator
- Parameters:
aHttpErrorHandling
- TheHttpExceptionHandling
to be stored by theHttpExceptionHandling
property.
-
setObserversActive
public void setObserversActive(boolean isActive)
- Specified by:
setObserversActive
in interfaceorg.refcodes.observer.Observers<RestEndpoint,RestServer>
- Overrides:
setObserversActive
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
isObserversActive
public boolean isObserversActive()
- Specified by:
isObserversActive
in interfaceorg.refcodes.observer.Observers<RestEndpoint,RestServer>
- Overrides:
isObserversActive
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
observers
public java.util.Iterator<RestEndpoint> observers()
- Specified by:
observers
in interfaceorg.refcodes.observer.Observers<RestEndpoint,RestServer>
- Overrides:
observers
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
setRequestCorrelation
public void setRequestCorrelation(boolean hasRequestCorrelation)
- Specified by:
setRequestCorrelation
in interfaceorg.refcodes.runtime.RequestCorrelation<RestServer>
-
hasRequestCorrelation
public boolean hasRequestCorrelation()
- Specified by:
hasRequestCorrelation
in interfaceorg.refcodes.runtime.RequestCorrelation<RestServer>
-
setSessionCorrelation
public void setSessionCorrelation(boolean hasSessionCorrelation)
- Specified by:
setSessionCorrelation
in interfaceorg.refcodes.runtime.SessionCorrelation<RestServer>
-
hasSessionCorrelation
public boolean hasSessionCorrelation()
- Specified by:
hasSessionCorrelation
in interfaceorg.refcodes.runtime.SessionCorrelation<RestServer>
-
getRealm
public java.lang.String getRealm()
- Specified by:
getRealm
in interfaceorg.refcodes.net.RealmAccessor
-
setRealm
public void setRealm(java.lang.String aRealm)
- Specified by:
setRealm
in interfaceorg.refcodes.net.RealmAccessor.RealmMutator
-
getBaseLocator
public java.lang.String getBaseLocator()
- Specified by:
getBaseLocator
in interfaceorg.refcodes.net.BaseLocatorAccessor
-
setBaseLocator
public void setBaseLocator(java.lang.String aBaseLocator)
- Specified by:
setBaseLocator
in interfaceorg.refcodes.net.BaseLocatorAccessor.BaseLocatorMutator
-
subscribeObserver
public boolean subscribeObserver(RestEndpoint aObserver)
- Specified by:
subscribeObserver
in interfaceorg.refcodes.observer.Observable<RestServer>
- Overrides:
subscribeObserver
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
unsubscribeObserver
public boolean unsubscribeObserver(RestEndpoint aObserver)
- Specified by:
unsubscribeObserver
in interfaceorg.refcodes.observer.Observable<RestServer>
- Overrides:
unsubscribeObserver
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
addMediaTypeFactory
public boolean addMediaTypeFactory(org.refcodes.net.MediaTypeFactory aMediaTypeFactory)
- Specified by:
addMediaTypeFactory
in interfaceorg.refcodes.net.MediaTypeFactoryLookup.MutableMediaTypeFactoryLookup
-
toMediaTypeFactory
public org.refcodes.net.MediaTypeFactory toMediaTypeFactory(org.refcodes.net.MediaType aMediaType)
- Specified by:
toMediaTypeFactory
in interfaceorg.refcodes.net.MediaTypeFactoryLookup
-
getFactoryMediaTypes
public org.refcodes.net.MediaType[] getFactoryMediaTypes()
- Specified by:
getFactoryMediaTypes
in interfaceorg.refcodes.net.MediaTypeFactoryLookup
-
dispose
public void dispose()
- Overrides:
dispose
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
-
onHttpRequest
protected void onHttpRequest(java.net.InetSocketAddress aLocalAddress, java.net.InetSocketAddress aRemoteAddress, org.refcodes.net.HttpMethod aHttpMethod, org.refcodes.net.Url aUrl, org.refcodes.net.RequestHeaderFields aRequestHeaderFields, java.io.InputStream aHttpInputStream, org.refcodes.net.HttpServerResponse aHttpServerResponse) throws org.refcodes.net.HttpStatusException
Extensions of this class disect an incoming request and pass it to this method for doing the actual invocation of the registeredRestEndpoint
instances. An extension might call this method from inside an event (request) handler.- Parameters:
aLocalAddress
- The host and port of your REST service.aRemoteAddress
- The host and port for the caller.aHttpMethod
- TheHttpMethod
of the request.aUrl
- TheUrl
from which to take the URL specific data.aRequestHeaderFields
- The Header-Fields (HeaderFields
) belonging to the request.aHttpInputStream
- The body passed by the request.aHttpServerResponse
- AHttpServerResponse
instance to be used by the extension to produce an according HTTP-Response.- Throws:
org.refcodes.net.HttpStatusException
- thrown in case of anRestEndpoint
responsible for the given request encountered a problem or noneRestEndpoint
felt responsible to produce aHttpServerResponse
.
-
toNegotiatedContenType
protected org.refcodes.net.ContentType toNegotiatedContenType(org.refcodes.net.RequestHeaderFields aRequestHeaderFields)
Determines the best fitting respone'sContentType
. The default Content-Type-Negotiation implementation of this method makes use of theRequestHeaderFields
and matches them against the supportedMediaType
types ( retrieved viagetFactoryMediaTypes()
). May be overwritten to enforce another Content-Type-Negotiation strategy.- Parameters:
aRequestHeaderFields
- The request'sHeaderField
instance to use when determining the best fitting respone'sContentType
.- Returns:
- The best fitting (as of the implemented Content-Type-Negotiation strategy) Content-Type to be used for the response.
-
toResponseBody
protected byte[] toResponseBody(java.lang.Object aResponse, org.refcodes.net.RequestHeaderFields aRequestHeaderFields, org.refcodes.net.ResponseHeaderFields aResponseHeaderFields) throws org.refcodes.exception.MarshalException, org.refcodes.net.UnsupportedMediaTypeException
Creates aString
MediaType
encoded as of theHeaderField.CONTENT_TYPE
from the response header or if not set as of theHeaderField.ACCEPT
from the request header or if not set as of theHeaderField.CONTENT_TYPE
from the request header.- Parameters:
aResponse
- The response which to encode as of the detectedMediaType
s.aRequestHeaderFields
- The Header-Fields from the request.aResponseHeaderFields
- The Header-Fields from the response.- Returns:
- An accordingly encoded response as byte array.
- Throws:
org.refcodes.exception.MarshalException
- thrown when marshaling / serializing an object failed.org.refcodes.net.UnsupportedMediaTypeException
- thrown in case none of the identified media types is supported, e.g. no requiredMediaTypeFactory
has been registered as ofaddMediaTypeFactory(MediaTypeFactory)
.
-
fireEvent
protected boolean fireEvent(org.refcodes.net.HttpRequest aEvent, RestEndpoint aObserver, org.refcodes.controlflow.ExecutionStrategy aExecutionStrategy) throws org.refcodes.exception.VetoException
- Specified by:
fireEvent
in classorg.refcodes.observer.AbstractObservable<RestEndpoint,org.refcodes.net.HttpRequest>
- Throws:
org.refcodes.exception.VetoException
-
doRequestCorrelation
protected void doRequestCorrelation(org.refcodes.net.RequestHeaderFields aRequestHeaderFields, org.refcodes.net.HttpServerResponse aServerResponse)
Do request correlation.- Parameters:
aRequestHeaderFields
- the request Header-FieldsaServerResponse
- the server response
-
doSessionCorrelation
protected void doSessionCorrelation(org.refcodes.net.RequestHeaderFields aRequestHeaderFields, org.refcodes.net.HttpServerResponse aServerResponse)
Do session correlation.- Parameters:
aRequestHeaderFields
- the request Header-FieldsaServerResponse
- the server response
-
-