Package jadex.extension.rs.publish
Class AbstractRestPublishService
- java.lang.Object
-
- jadex.extension.rs.publish.AbstractRestPublishService
-
- All Implemented Interfaces:
IPublishService,IWebPublishService
- Direct Known Subclasses:
ExternalRestPublishService
public abstract class AbstractRestPublishService extends java.lang.Object implements IWebPublishService
Publish service without Jersey directly using different containers (in concrete impls).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classAbstractRestPublishService.MappingInfostatic classAbstractRestPublishService.RequestInfoStruct for storing info about a request and the results.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringASYNC_CONTEXT_INFOAsync context info.protected jadex.platform.service.serialization.serializers.JadexBinarySerializerbinserThe binary processor.protected IInternalAccesscomponentThe component.protected MultiCollection<java.lang.String,IObjectStringConverter>convertersThe media type converters.static java.lang.StringFINISHEDFinished result marker.static java.lang.StringHEADER_JADEX_CALLFINISHEDHttp header for the call id siganlling that this is the last response (resp).static java.lang.StringHEADER_JADEX_CALLIDHttp header for the call id (req and resp).static java.lang.StringHEADER_JADEX_CLIENTTIMEOUTHttp header for the client side timeout of calls (req).static java.lang.StringHEADER_JADEX_ISLOGGEDINstatic java.lang.StringHEADER_JADEX_LOGINHttp header to login to the platform and gain admin access (req).static java.lang.StringHEADER_JADEX_LOGOUTstatic java.lang.StringHEADER_JADEX_MAXHttp header for max value of intermediate future.static java.lang.StringHEADER_JADEX_TERMINATEHttp header to terminate the call (req).static java.lang.StringHEADER_JADEX_VERSIONHttp header for the Jadex version.protected jadex.platform.service.serialization.serializers.JadexJsonSerializerjsonserThe json processor.protected booleanloginsecLogin security of or off.static java.util.List<java.lang.String>PARAMETER_MEDIATYPESSome basic media types for service invocations.protected java.util.Map<java.lang.String,AbstractRestPublishService.RequestInfo>requestinfosThe internal request info containing also results per call (coming from the called Jadex service).protected java.util.Map<java.lang.String,java.util.Collection<javax.servlet.AsyncContext>>requestspercallThe requests per call (coming from the rest client).-
Fields inherited from interface jadex.bridge.service.types.publish.IPublishService
DEFAULT_RSPUBLISH_COMPONENTS, PUBLISH_RS, PUBLISH_WS
-
-
Constructor Summary
Constructors Constructor Description AbstractRestPublishService()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddConverter(java.lang.String[] mediatypes, IObjectStringConverter converter)Add a converter for one or multiple types.protected static voidaddEntry(java.util.Map<java.lang.String,java.lang.Object> ret, java.lang.String key, java.lang.Object val)protected voidcomplete(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)static java.lang.ObjectconvertJsonValue(java.lang.String val, java.lang.Class<?> type, java.lang.ClassLoader cl, boolean tomap)Convert a json string to a java object.java.lang.ObjectconvertParameter(java.lang.Object val, java.lang.Class<?> target)Convert a (string) parameterprotected java.lang.ObjectconvertParameter(java.util.List<java.lang.String> sr, java.lang.String val, java.lang.Class<?> targetclazz)Convert a parameter string to an object if is json or xml.IFuture<PathManager<AbstractRestPublishService.MappingInfo>>evaluateMapping(IServiceIdentifier sid, PublishInfo pi)Evaluate the service interface and generate mappings.java.util.Map<java.lang.String,java.lang.String>extractCallerValues(java.lang.Object request)Extract caller values like ip and browser.protected javax.servlet.AsyncContextgetAsyncContext(javax.servlet.http.HttpServletRequest request)Get the asyncjava.lang.StringgetCleanPublishId(java.lang.String id)Get the cleaned publish id.abstract java.lang.ObjectgetHttpServer(java.net.URI uri, PublishInfo info)Get or start an api to the http server.Tuple2<java.util.List<Tuple2<java.lang.String,java.lang.String>>,java.util.Map<java.lang.String,java.lang.Class<?>>>getParameterInfos(java.lang.reflect.Method method)static longgetRequestTimeout(javax.servlet.http.HttpServletRequest request)Get the request timeout.java.lang.StringgetServiceInfo(java.lang.Object service, java.lang.String baseuri, PathManager<AbstractRestPublishService.MappingInfo> mappings)Functionality blueprint for get service info web method.static java.lang.StringgetServletHost(javax.servlet.http.HttpServletRequest req)Get the servlet base url.static java.lang.StringgetServletUrl(javax.servlet.http.HttpServletRequest req)Get the servlet base url.AbstractRestPublishService.MappingInfo.HttpMethodguessRestType(java.lang.reflect.Method method)Guess the http type (GET, POST, PUT, DELETE, ...) of a method.voidhandleRequest(IService service, PathManager<AbstractRestPublishService.MappingInfo> pm, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object[] others)Handle a web request.booleanhasStringConvertableParameters(java.lang.reflect.Method method, java.lang.Class<?> rettype, java.lang.Class<?>[] paramtypes)Test if a method has parameters that are all convertible from string.IFuture<java.lang.Void>init()The service init.protected booleanisComplete(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)IFuture<java.lang.Boolean>isLoggedIn(java.lang.String callid)Test if a the web user is logged in.booleanisLoggedIn(javax.servlet.http.HttpServletRequest request)Test if a the web user is logged in.IFuture<java.lang.Boolean>isSupported(java.lang.String publishtype)Test if publishing a specific type is supported (e.g.java.lang.StringloadFunctionJS()java.lang.StringloadStyleCSS()IFuture<java.lang.Boolean>login(javax.servlet.http.HttpServletRequest request, java.lang.String secret)Log in to the platform.IFuture<java.lang.Boolean>logout(javax.servlet.http.HttpServletRequest request)Logout from the platform.static voidmain(java.lang.String[] args)protected Tuple2<AbstractRestPublishService.MappingInfo,java.lang.Object[]>mapParameters(javax.servlet.http.HttpServletRequest request, java.util.Collection<AbstractRestPublishService.MappingInfo> mis, java.util.List<java.util.Map<java.lang.String,java.lang.String>> bindings)Map the incoming uri/post/multipart parameters to the service target parameter types.protected java.lang.ObjectmapResult(java.lang.reflect.Method method, java.lang.Object ret)Map a result using the result mapper.static java.util.List<java.lang.String>parseMimetypes(java.lang.String mts)todo: make statically accessible Copied from Jadex ForwardFilterabstract IFuture<java.lang.Void>publishService(IServiceIdentifier serviceid, PublishInfo info)Publish a service.voidremoveConverter(java.lang.String[] mediatypes, IObjectStringConverter converter)Remove a converter.protected voidsaveRequestContext(java.lang.String callid, javax.servlet.AsyncContext ctx)IFuture<java.lang.Void>setLoginSecurity(boolean sec)Turn on or off the login security.static java.util.Map<java.lang.String,java.lang.Object>splitQueryString(java.lang.String query)Split the query and save the order.protected voidwriteResponse(java.lang.Object result, int status, java.lang.String callid, AbstractRestPublishService.MappingInfo mi, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean fin, java.lang.Integer max)protected voidwriteResponse(java.lang.Object result, java.lang.String callid, AbstractRestPublishService.MappingInfo mi, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean fin, java.lang.Integer max)protected voidwriteResponseContent(java.lang.Object result, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.util.List<java.lang.String> sr)Write the response content.protected java.util.List<java.lang.String>writeResponseHeader(java.lang.Object ret, int status, java.lang.String callid, AbstractRestPublishService.MappingInfo mi, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean fin, java.lang.Integer max)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jadex.bridge.service.types.publish.IPublishService
unpublishService
-
Methods inherited from interface jadex.bridge.service.types.publish.IWebPublishService
publishHMTLPage, publishResources
-
-
-
-
Field Detail
-
ASYNC_CONTEXT_INFO
public static final java.lang.String ASYNC_CONTEXT_INFO
Async context info.- See Also:
- Constant Field Values
-
HEADER_JADEX_VERSION
public static final java.lang.String HEADER_JADEX_VERSION
Http header for the Jadex version.- See Also:
- Constant Field Values
-
HEADER_JADEX_CALLID
public static final java.lang.String HEADER_JADEX_CALLID
Http header for the call id (req and resp).- See Also:
- Constant Field Values
-
HEADER_JADEX_CALLFINISHED
public static final java.lang.String HEADER_JADEX_CALLFINISHED
Http header for the call id siganlling that this is the last response (resp).- See Also:
- Constant Field Values
-
HEADER_JADEX_MAX
public static final java.lang.String HEADER_JADEX_MAX
Http header for max value of intermediate future.- See Also:
- Constant Field Values
-
HEADER_JADEX_CLIENTTIMEOUT
public static final java.lang.String HEADER_JADEX_CLIENTTIMEOUT
Http header for the client side timeout of calls (req).- See Also:
- Constant Field Values
-
HEADER_JADEX_TERMINATE
public static final java.lang.String HEADER_JADEX_TERMINATE
Http header to terminate the call (req).- See Also:
- Constant Field Values
-
HEADER_JADEX_LOGIN
public static final java.lang.String HEADER_JADEX_LOGIN
Http header to login to the platform and gain admin access (req).- See Also:
- Constant Field Values
-
HEADER_JADEX_LOGOUT
public static final java.lang.String HEADER_JADEX_LOGOUT
- See Also:
- Constant Field Values
-
HEADER_JADEX_ISLOGGEDIN
public static final java.lang.String HEADER_JADEX_ISLOGGEDIN
- See Also:
- Constant Field Values
-
FINISHED
public static final java.lang.String FINISHED
Finished result marker.- See Also:
- Constant Field Values
-
PARAMETER_MEDIATYPES
public static java.util.List<java.lang.String> PARAMETER_MEDIATYPES
Some basic media types for service invocations.
-
component
protected IInternalAccess component
The component.
-
requestinfos
protected java.util.Map<java.lang.String,AbstractRestPublishService.RequestInfo> requestinfos
The internal request info containing also results per call (coming from the called Jadex service).
-
requestspercall
protected java.util.Map<java.lang.String,java.util.Collection<javax.servlet.AsyncContext>> requestspercall
The requests per call (coming from the rest client). Signals sn ongoing conversation as long as callid is contained (results are not immediately available).
-
converters
protected MultiCollection<java.lang.String,IObjectStringConverter> converters
The media type converters.
-
loginsec
protected boolean loginsec
Login security of or off.
-
jsonser
protected jadex.platform.service.serialization.serializers.JadexJsonSerializer jsonser
The json processor.
-
binser
protected jadex.platform.service.serialization.serializers.JadexBinarySerializer binser
The binary processor.
-
-
Method Detail
-
init
public IFuture<java.lang.Void> init()
The service init.
-
setLoginSecurity
public IFuture<java.lang.Void> setLoginSecurity(boolean sec)
Turn on or off the login security. If true one has to log in with platform secret before using published services.- Specified by:
setLoginSecurityin interfaceIWebPublishService- Parameters:
sec- On or off.
-
addConverter
public void addConverter(java.lang.String[] mediatypes, IObjectStringConverter converter)Add a converter for one or multiple types.
-
removeConverter
public void removeConverter(java.lang.String[] mediatypes, IObjectStringConverter converter)Remove a converter.- Parameters:
converter- The converter.
-
isSupported
public IFuture<java.lang.Boolean> isSupported(java.lang.String publishtype)
Test if publishing a specific type is supported (e.g. web service).- Specified by:
isSupportedin interfaceIPublishService- Parameters:
publishtype- The type to test.- Returns:
- True, if can be published.
-
handleRequest
public void handleRequest(IService service, PathManager<AbstractRestPublishService.MappingInfo> pm, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object[] others) throws java.io.IOException, javax.servlet.ServletException
Handle a web request.- Parameters:
service- The service.mappings- The collected mapping infos for the service.request- The request.response- The response.- Throws:
java.io.IOExceptionjavax.servlet.ServletException
-
publishService
public abstract IFuture<java.lang.Void> publishService(IServiceIdentifier serviceid, PublishInfo info)
Publish a service.- Specified by:
publishServicein interfaceIPublishService- Parameters:
cl- The classloader.service- The original service.pid- The publish id (e.g. url or name).
-
getHttpServer
public abstract java.lang.Object getHttpServer(java.net.URI uri, PublishInfo info)Get or start an api to the http server.
-
login
public IFuture<java.lang.Boolean> login(javax.servlet.http.HttpServletRequest request, java.lang.String secret)
Log in to the platform.- Parameters:
request- The request.secret- The platform secret.- Returns:
- True, if login was successful.
-
logout
public IFuture<java.lang.Boolean> logout(javax.servlet.http.HttpServletRequest request)
Logout from the platform.- Parameters:
secret- The platform secret.- Returns:
- True, if login was successful.
-
isLoggedIn
public boolean isLoggedIn(javax.servlet.http.HttpServletRequest request)
Test if a the web user is logged in.- Parameters:
request- The web request.- Returns:
- True, if is logged in.
-
isLoggedIn
public IFuture<java.lang.Boolean> isLoggedIn(java.lang.String callid)
Test if a the web user is logged in.- Specified by:
isLoggedInin interfaceIWebPublishService- Parameters:
callid- The callid of the request.- Returns:
- True, if is logged in.
-
getAsyncContext
protected javax.servlet.AsyncContext getAsyncContext(javax.servlet.http.HttpServletRequest request)
Get the async
-
mapParameters
protected Tuple2<AbstractRestPublishService.MappingInfo,java.lang.Object[]> mapParameters(javax.servlet.http.HttpServletRequest request, java.util.Collection<AbstractRestPublishService.MappingInfo> mis, java.util.List<java.util.Map<java.lang.String,java.lang.String>> bindings)
Map the incoming uri/post/multipart parameters to the service target parameter types.
-
convertJsonValue
public static java.lang.Object convertJsonValue(java.lang.String val, java.lang.Class<?> type, java.lang.ClassLoader cl, boolean tomap)Convert a json string to a java object.- Parameters:
val- The json string.type- The target class.cl- The classloader.tomap- Flag, if a (nested) map should be read (only possible if type is map too).
-
convertParameter
public java.lang.Object convertParameter(java.lang.Object val, java.lang.Class<?> target)Convert a (string) parameter- Parameters:
val-target-- Returns:
-
convertParameter
protected java.lang.Object convertParameter(java.util.List<java.lang.String> sr, java.lang.String val, java.lang.Class<?> targetclazz)Convert a parameter string to an object if is json or xml.- Parameters:
sr- The media types.val- The string value.- Returns:
- The decoded object.
-
mapResult
protected java.lang.Object mapResult(java.lang.reflect.Method method, java.lang.Object ret)Map a result using the result mapper.
-
writeResponse
protected void writeResponse(java.lang.Object result, java.lang.String callid, AbstractRestPublishService.MappingInfo mi, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean fin, java.lang.Integer max)
-
writeResponse
protected void writeResponse(java.lang.Object result, int status, java.lang.String callid, AbstractRestPublishService.MappingInfo mi, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean fin, java.lang.Integer max)
-
writeResponseHeader
protected java.util.List<java.lang.String> writeResponseHeader(java.lang.Object ret, int status, java.lang.String callid, AbstractRestPublishService.MappingInfo mi, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean fin, java.lang.Integer max)
-
writeResponseContent
protected void writeResponseContent(java.lang.Object result, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.util.List<java.lang.String> sr)Write the response content.
-
saveRequestContext
protected void saveRequestContext(java.lang.String callid, javax.servlet.AsyncContext ctx)- Parameters:
callid-ctx-
-
getRequestTimeout
public static long getRequestTimeout(javax.servlet.http.HttpServletRequest request)
Get the request timeout.
-
parseMimetypes
public static java.util.List<java.lang.String> parseMimetypes(java.lang.String mts)
todo: make statically accessible Copied from Jadex ForwardFilter
-
splitQueryString
public static java.util.Map<java.lang.String,java.lang.Object> splitQueryString(java.lang.String query) throws java.lang.ExceptionSplit the query and save the order.- Throws:
java.lang.Exception
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception- Throws:
java.lang.Exception
-
addEntry
protected static void addEntry(java.util.Map<java.lang.String,java.lang.Object> ret, java.lang.String key, java.lang.Object val)- Parameters:
ret-key-val-
-
evaluateMapping
public IFuture<PathManager<AbstractRestPublishService.MappingInfo>> evaluateMapping(IServiceIdentifier sid, PublishInfo pi)
Evaluate the service interface and generate mappings. Return a multicollection in which for each path name the possible methods are contained (can be more than one due to different parameters).
-
getServletUrl
public static java.lang.String getServletUrl(javax.servlet.http.HttpServletRequest req)
Get the servlet base url.- Parameters:
req- The request.- Returns:
- The servlet base url.
-
getServletHost
public static java.lang.String getServletHost(javax.servlet.http.HttpServletRequest req)
Get the servlet base url.- Parameters:
req- The request.- Returns:
- The servlet base url.
-
getServiceInfo
public java.lang.String getServiceInfo(java.lang.Object service, java.lang.String baseuri, PathManager<AbstractRestPublishService.MappingInfo> mappings)Functionality blueprint for get service info web method. Creates a html page with css for style and javascript for ajax post requests. The service info site contains a section for each published method.- Parameters:
params- The parameters.- Returns:
- The result.
-
loadFunctionJS
public java.lang.String loadFunctionJS()
-
loadStyleCSS
public java.lang.String loadStyleCSS()
-
guessRestType
public AbstractRestPublishService.MappingInfo.HttpMethod guessRestType(java.lang.reflect.Method method)
Guess the http type (GET, POST, PUT, DELETE, ...) of a method.- Parameters:
method- The method.- Returns:
- The rs annotation of the method type to use
-
hasStringConvertableParameters
public boolean hasStringConvertableParameters(java.lang.reflect.Method method, java.lang.Class<?> rettype, java.lang.Class<?>[] paramtypes)Test if a method has parameters that are all convertible from string.- Parameters:
method- The method.rettype- The return types (possibly unwrapped from future type).paramtypes- The parameter types.- Returns:
- True, if is convertible.
-
complete
protected void complete(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)- Parameters:
request-cinfo-
-
isComplete
protected boolean isComplete(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)- Parameters:
request-cinfo-
-
getParameterInfos
public Tuple2<java.util.List<Tuple2<java.lang.String,java.lang.String>>,java.util.Map<java.lang.String,java.lang.Class<?>>> getParameterInfos(java.lang.reflect.Method method)
-
extractCallerValues
public java.util.Map<java.lang.String,java.lang.String> extractCallerValues(java.lang.Object request)
Extract caller values like ip and browser.- Parameters:
request- The requrest.vals- The values.
-
getCleanPublishId
public java.lang.String getCleanPublishId(java.lang.String id)
Get the cleaned publish id. Square brackets for the optional host and context part are removed.
-
-