Class LoopbackRestServer
- All Implemented Interfaces:
Disposable, Observable<RestEndpoint>, Observers<RestEndpoint, RestServer>, RestServer, BaseLocatorAccessor, MediaTypeFactoryLookup, MediaTypeFactoryLookup.MutableMediaTypeFactoryLookup, RealmAccessor
- Direct Known Subclasses:
LoopbackRestServerSingleton
Lightweight in memory implementation of a RestServer used for
loopback style REST request processing without opening physical network
connections.
The LoopbackRestServer is primarily intended for:
- testing
RestEndpointimplementations - testing
RestRequestConsumerimplementations - integration testing of REST request processing pipelines
- simulating HTTP request dispatching in memory
- testing request/response marshaling behavior
- testing interceptor and observer integration
Instead of opening a physical HTTP or HTTPS server socket, requests are
directly dispatched to the registered REST infrastructure through the
onHttpRequest(InetSocketAddress, InetSocketAddress, HttpMethod, Url, RequestHeaderFields, InputStream, HttpServerResponse)
methods.
This implementation internally reuses the request processing logic provided
by AbstractRestServer, thereby enabling realistic simulation of:
- REST endpoint resolution
- HTTP method dispatching
- media type negotiation
- request unmarshaling
- response marshaling
- observer and interceptor execution
The server supports both textual request bodies as well as arbitrary
InputStream based request payloads.
Unlike JdkHttpRestServer, this implementation performs no actual
network communication and therefore avoids:
- socket allocation
- HTTP protocol overhead
- TLS/SSL setup
- port binding
This makes the LoopbackRestServer especially suitable for fast unit
and integration tests requiring deterministic in process REST request
handling.
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface BaseLocatorAccessor
BaseLocatorAccessor.BaseLocatorBuilder<B>, BaseLocatorAccessor.BaseLocatorMutator, BaseLocatorAccessor.BaseLocatorPropertyNested classes/interfaces inherited from interface MediaTypeFactoryLookup
MediaTypeFactoryLookup.MutableMediaTypeFactoryLookupNested classes/interfaces inherited from interface RealmAccessor
RealmAccessor.RealmBuilder<B>, RealmAccessor.RealmMutator, RealmAccessor.RealmProperty -
Field Summary
Fields inherited from class AbstractRestServer
_baseLocator, _realmFields inherited from class AbstractObservable
_executorService -
Constructor Summary
ConstructorsConstructorDescriptionInstantiates a new loopback rest server.LoopbackRestServer(String aBaseLocator) Instantiates a new loopback rest server. -
Method Summary
Modifier and TypeMethodDescriptionvoidonHttpRequest(InetSocketAddress aLocalAddress, InetSocketAddress aClientAddress, HttpMethod aHttpMethod, Url aUrl, RequestHeaderFields aRequestHeaderFields, InputStream aHttpInputStream, HttpServerResponse aHttpServerResponse) Invoke this method to simulate a REST request to be handled by the according registeredRestEndpointinstances:.voidonHttpRequest(InetSocketAddress aLocalAddress, InetSocketAddress aClientAddress, HttpMethod aHttpMethod, Url aUrl, RequestHeaderFields aRequestHeaderFields, String aHttpBody, HttpServerResponse aHttpServerResponse) Invoke this method to simulate a REST request to be handled by the according registeredRestEndpointinstances:.withObserversActive(boolean isActive) Methods inherited from class AbstractRestServer
addMediaTypeFactory, dispose, fireEvent, getBaseLocator, getFactoryMediaTypes, getRealm, initMedaTypeFactories, isObserversActive, observers, postIntercept, preIntercept, setObserversActive, subscribeObserver, toMediaTypeFactory, toMediaTypeFactory, toNegotiatedContenType, toResponseBody, unsubscribeObserverMethods inherited from class AbstractObservable
clear, doHandleEventListenerException, fireEvent, getThreadPriority, hasObserver, isEmpty, setThreadPriority, sizeMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface MediaTypeFactoryLookup
hasMediaTypeFactoryMethods inherited from interface Observable
hasObserverMethods inherited from interface Observers
disableObservers, enableObservers
-
Constructor Details
-
LoopbackRestServer
public LoopbackRestServer()Instantiates a new loopback rest server. -
LoopbackRestServer
Instantiates a new loopback rest server.- Parameters:
aBaseLocator- The base locator to be used.
-
-
Method Details
-
onHttpRequest
public void onHttpRequest(InetSocketAddress aLocalAddress, InetSocketAddress aClientAddress, HttpMethod aHttpMethod, Url aUrl, RequestHeaderFields aRequestHeaderFields, String aHttpBody, HttpServerResponse aHttpServerResponse) throws HttpStatusException Invoke this method to simulate a REST request to be handled by the according registeredRestEndpointinstances:.- Parameters:
aLocalAddress- the local addressaClientAddress- the client addressaHttpMethod- The method for the simulated REST request to be usedaUrl- The query string part of the request.aRequestHeaderFields- The simulated REST request's Header-Fields to be usedaHttpBody- The raw body for the simulated REST request to be used.aHttpServerResponse- TheHttpServerResponseto be filled with the complete result of processing the request.- Throws:
HttpStatusException- thrown in case of HTTP status code related exceptions (e.g. as of a HTTP response was of an erroneous status).
-
onHttpRequest
public void onHttpRequest(InetSocketAddress aLocalAddress, InetSocketAddress aClientAddress, HttpMethod aHttpMethod, Url aUrl, RequestHeaderFields aRequestHeaderFields, InputStream aHttpInputStream, HttpServerResponse aHttpServerResponse) throws HttpStatusException Invoke this method to simulate a REST request to be handled by the according registeredRestEndpointinstances:.- Overrides:
onHttpRequestin classAbstractRestServer- Parameters:
aLocalAddress- the local addressaClientAddress- the client addressaHttpMethod- The method for the simulated REST request to be usedaUrl- The query string part of the request.aRequestHeaderFields- The simulated REST request's Header-Fields to be usedaHttpInputStream- The HTTPInputStreamrepresenting the body for the simulated REST request to be used.aHttpServerResponse- TheHttpServerResponseto be filled with the complete result of processing the request.- Throws:
HttpStatusException- thrown in case of HTTP status code related exceptions (e.g. as of a HTTP response was of an erroneous status).
-
withObserversActive
-
withEnableObservers
-
withDisableObservers
-