Class AbstractRestPublishService

    • 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_ALIVE

        public static final java.lang.String HEADER_JADEX_ALIVE
        Http header for the client side to indicate that conversation is still alive/ongoing.
        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
      • RANDOM

        public static final java.lang.String RANDOM
        URL parameter random request.
        See Also:
        Constant Field Values
      • CONTENTTYPE

        public static final java.lang.String CONTENTTYPE
        URL parameter type request.
        See Also:
        Constant Field Values
      • ACCEPT

        public static final java.lang.String ACCEPT
        URL parameter accept request.
        See Also:
        Constant Field Values
      • PARAMETER_MEDIATYPES

        public static final java.util.List<java.lang.String> PARAMETER_MEDIATYPES
        Some basic media types for service invocations.
      • 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.
      • sessions

        protected java.util.Map<java.lang.String,​java.util.Map<java.lang.String,​java.lang.Object>> sessions
        The sessions. Cannot use built-in due to problem with concurrent inital requests (and also after platform restart). Two requests (sse, subscribeX) arrive at server with the same jsessionid -> session not known, server creates a new one for both with different ids. https://community.oracle.com/tech/developers/discussion/1455774/multiple-sessions-created.
    • Constructor Detail

      • AbstractRestPublishService

        public AbstractRestPublishService()
    • Method Detail

      • init

        public IFuture<java.lang.Void> init()
        The service init.
      • getSession

        public java.util.Map<java.lang.String,​java.lang.Object> getSession​(jakarta.servlet.http.HttpServletRequest request,
                                                                                 boolean create)
        Get a session.
        Parameters:
        request - The request
        create - Flag if shall be created.
        Returns:
        The session.
      • getSession

        public java.util.Map<java.lang.String,​java.lang.Object> getSession​(java.lang.String sessionid,
                                                                                 boolean create)
        Get a session.
        Parameters:
        request - The request
        create - Flag if shall be created.
        Returns:
        The session.
      • getSessionId

        public java.lang.String getSessionId​(jakarta.servlet.http.HttpServletRequest request)
        Get a session id.
        Parameters:
        request - The request
        Returns:
        The session id.
      • 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:
        setLoginSecurity in interface IWebPublishService
        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:
        isSupported in interface IPublishService
        Parameters:
        publishtype - The type to test.
        Returns:
        True, if can be published.
      • handleRequest

        public void handleRequest​(IService service,
                                  PathManager<AbstractRestPublishService.MappingInfo> pm,
                                  jakarta.servlet.http.HttpServletRequest request,
                                  jakarta.servlet.http.HttpServletResponse response,
                                  java.lang.Object[] others)
                           throws java.io.IOException,
                                  jakarta.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.IOException
        jakarta.servlet.ServletException
      • pruneObsoleteConversations

        protected void pruneObsoleteConversations()
        Prune the timeouted conversations.
      • setCORSHeader

        protected void setCORSHeader​(jakarta.servlet.http.HttpServletResponse response)
        Set the cors header in the response.
        Parameters:
        response - The response.
      • setNoCachingHeader

        protected void setNoCachingHeader​(jakarta.servlet.http.HttpServletResponse response)
        Set the cache header in the response.
        Parameters:
        response - The response.
      • sendDelayedSSEEvents

        protected void sendDelayedSSEEvents​(java.util.Map<java.lang.String,​java.lang.Object> session)
        Send the delayed events which have been collected during connection loss. Must check if callid belongs to still ongoing call (could be terminated).
      • 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​(jakarta.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​(jakarta.servlet.http.HttpServletRequest request)
        Logout from the platform.
        Parameters:
        secret - The platform secret.
        Returns:
        True, if login was successful.
      • isLoggedIn

        public boolean isLoggedIn​(jakarta.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:
        isLoggedIn in interface IWebPublishService
        Parameters:
        callid - The callid of the request.
        Returns:
        True, if is logged in.
      • getAsyncContextInfo

        protected IAsyncContextInfo getAsyncContextInfo​(jakarta.servlet.http.HttpServletRequest request)
        Get the async
      • addMimeTypes

        public static void addMimeTypes​(java.lang.Object cs,
                                        java.util.List<java.lang.String> types)
      • generateInParameters

        public static java.lang.Object[] generateInParameters​(java.util.Map<java.lang.String,​java.lang.Object> inparamsmap,
                                                              Tuple2<java.util.List<Tuple2<java.lang.String,​java.lang.String>>,​java.util.Map<java.lang.String,​java.lang.Class<?>>> pinfos,
                                                              java.lang.Class<?>[] types)
        Generate in parameters that are correct wrt order and number of targetparameter (must convert types possibly).
      • 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.Object 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.
      • createSSEEvent

        protected AbstractRestPublishService.SSEEvent createSSEEvent​(java.lang.Object result,
                                                                     boolean finished,
                                                                     java.lang.String callid,
                                                                     java.lang.Integer max,
                                                                     java.lang.String exceptiontype)
        Create an sse event.
      • getRequestTimeout

        public static long getRequestTimeout​(jakarta.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.Exception
        Split 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 -
      • getServletUrl

        public static java.lang.String getServletUrl​(jakarta.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​(jakarta.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​(jakarta.servlet.http.HttpServletRequest request,
                                jakarta.servlet.http.HttpServletResponse response)
        Parameters:
        request -
        cinfo -
      • isComplete

        protected boolean isComplete​(jakarta.servlet.http.HttpServletRequest request,
                                     jakarta.servlet.http.HttpServletResponse response)
        Parameters:
        request -
        cinfo -
      • loadJadexJS

        public IFuture<byte[]> loadJadexJS()
        Load jadex.js
        Returns:
        The text from the file.
      • 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)
        Get metainfo about parameters from the target method via annotations.
      • 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.