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_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_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
      • 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.
      • 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 MultiCollection<java.lang.String,​javax.servlet.AsyncContext> requestspercall
        The requests per call (coming from the rest client). Signals on ongoing conversation as long as callid is contained (results are not immediately available).
    • Constructor Detail

      • AbstractRestPublishService

        public AbstractRestPublishService()
    • Method Detail

      • init

        public IFuture<java.lang.Void> init()
        The service init.
      • 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,
                                  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.IOException
        javax.servlet.ServletException
      • getHttpServer

        public abstract java.lang.Object getHttpServer​(java.net.URI uri,
                                                       PublishInfo info)
        Get or start an api to the http server.
      • getAsyncContext

        protected javax.servlet.AsyncContext getAsyncContext​(javax.servlet.http.HttpServletRequest request)
        Get the async
      • 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)
      • 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)
      • 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)
      • 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.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​(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.