Font Size:
Ask Joget AI

Web Service REST Mapper

Introduction

The Web Service REST Mapper plugin lets you expose Joget's internal web service URLs through clean, friendly, REST-style URLs.

Joget web service endpoints are normally called using long plugin-based URLs with query string parameters, for example:

 
/jw/web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=job&id=abc123

With this plugin installed and configured, the same endpoint can be called as:

 
/jw/scheduler/jobs/abc123

The plugin is a web filter. It inspects every incoming request, checks it against a list of mappings you define, and — when a request matches — forwards it internally to the real Joget web service URL. The forward happens server-side, so the caller never sees the internal URL and no redirect is issued.

Plugin information

  • Plugin Name: Scheduler Plugin
  • Joget DX Compatibility: Joget DX 9 and onwards

Get started

Where to get the plugin

How to install the plugin

  1. Download the plugin JAR file from the releases page.
  2. Go to Settings > Manage Plugins > Upload Plugin.
  3. Upload the JAR file.

How to use it

  1. Open the plugin configuration.
    Go to Settings > Manage Plugins and open the Configurable Plugins tab. The plugin appears in the list as Web Service REST Mapper, with the type Web Filter.
  2. Click the plugin row to open its configuration.

    The Plugin Configuration dialog contains a single grid field, URL Mappings. Each row in the grid defines one mapping.
    Fields to configure:
    • HTTP Method: The HTTP method the incoming request must use. Options: GET, POST, PUT, PATCH, DELETE. Required.
    • Public REST Path: The friendly path that external callers will use, relative to the Joget context path (/jw by default). May contain path variables in curly braces. Required.
    • Internal Web Service Path: The real Joget web service URL the request is forwarded to. Must begin with /web/. May include a query string and may reference path variables. Required.
  1. Path variables
    To capture a dynamic segment of the URL, wrap a name in curly braces in the Public REST Path, then reference the same name in the Internal Web Service Path.
Public REST Path Internal Web Service Path
/customers/{customerId}

/web/json/plugin/com.example.CustomerService/service?action=get&id={customerId}


A request to /jw/customers/C-1024 is forwarded to /web/json/plugin/com.example.CustomerService/service?action=get&id=C-1024.
Captured values are URL-encoded automatically before being substituted, so values containing spaces or special characters are handled safely.
You can use more than one variable in a single path, for example /apps/{appId}/records/{recordId}.

  1. Example — mapping the Scheduler Web Service API

The example below maps the Scheduler Plugin's web service into a conventional REST interface. All internal paths point at /web/json/plugin/org.joget.scheduler.SchedulerWebService/service.

HTTP Method Public REST Path Internal Web Service Path
GET /scheduler/jobs /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=jobs
GET /scheduler/jobs/{jobId} /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=job&id={jobId}
POST /scheduler/jobs/{jobId}/enable /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=enable&id={jobId}
POST /scheduler/jobs/{jobId}/disable /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=disable&id={jobId}
DELETE /scheduler/jobs/{jobId} /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=delete&id={jobId}
GET /scheduler/settings/thread-count /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=threadCount
PUT /scheduler/settings/thread-count /web/json/plugin/org.joget.scheduler.SchedulerWebService/service?action=threadCount
 

After saving, the Scheduler API can be called with:

GET    http://<host>:<port>/jw/scheduler/jobs
GET    http://<host>:<port>/jw/scheduler/jobs/{jobId}
POST   http://<host>:<port>/jw/scheduler/jobs/{jobId}/enable
POST   http://<host>:<port>/jw/scheduler/jobs/{jobId}/disable
DELETE http://<host>:<port>/jw/scheduler/jobs/{jobId}
GET    http://<host>:<port>/jw/scheduler/settings/thread-count
PUT    http://<host>:<port>/jw/scheduler/settings/thread-count 

Validation and security restrictions

To prevent the mapper from being used to reach outside Joget's web service area, an Internal Web Service Path is only accepted if it:

  • starts with /web/
  • does not contain ..
  • does not contain ://

Rows that fail any of these checks, or that leave a required field blank, are silently ignored at runtime. If a mapping does not appear to be working, check its internal path against these rules first.

Created by Nabila Jahan Last modified by Debanraj Ravindran on Aug 17, 2026