You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+17Lines changed: 17 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -6,8 +6,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
7
7
## [Unreleased]
8
8
### Fixed
9
+
* Cloned Git repositories are now properly closed (only relevant for tests)
10
+
9
11
### New Features
12
+
* Added support for JWT authentication (enabled via property *mapping-service.authEnabled*)
13
+
* Integration of Prometheus monitoring
14
+
* Added endpoint /api/v1/mappingExecution/plugins/<PluginID>/execute for direct execution of plugins
15
+
* Added JoltPlugin to list of default plugins
16
+
* New configuration property *mapping-service.mappingAdminRole* can be used to authenticate access to administrative endpoints
17
+
* plugin-core jar released as separate dependency and can be used for implementing own plugins easier
18
+
10
19
### Changed
20
+
* Countless dependency updates
21
+
* Changed plugin loading behaviour (default plugins are now part of mapping-service and not shipped as jar files)
22
+
* Plugin code (Python-based plugins) is now checked out in a configurable folder (mapping-service.codeLocation)
23
+
* Changed base class for Python-based plugins to AbstractPythonMappingPlugin
24
+
* Plugin version should now match the Git release tag used by Python-based plugins
25
+
* Python-based plugins are now creating an own Venv (stored at the codeLocation) to avoid dependency conflicts
26
+
* MappingAdministration endpoints /api/v1/mappingAdministration/types|reloadTypes were renamed to /api/v1/mappingAdministration/plugins|reloadPlugins
27
+
* MappingAdministration /api/v1/mappingAdministration/reloadPlugins (GET) and PUT|POST /api/v1/mappingAdministration are now secured and can only be accessed from localhost (if authentication is disabled) or by users with the group role defined by property *mapping-service.mappingAdminRole*
@Operation(summary = "Create a new mapping.", description = "This endpoint allows to create a new mapping and required two parameters: The record metadata, which contains "
54
-
+ "the mapping identifier and mapping type, and the mapping document, which defines the rules for the mapping applied by the given mapping type. ",
53
+
+ "the mapping identifier and mapping plugin id, and the mapping document, which defines the rules for the mapping applied by the given mapping plugin. ",
55
54
responses = {
56
55
@ApiResponse(responseCode = "201", description = "CREATED is returned only if the record has been validated, persisted and the mapping document was successfully validated and stored.", content = @Content(schema = @Schema(implementation = MappingRecord.class))),
57
56
@ApiResponse(responseCode = "400", description = "BAD_REQUEST is returned if the provided mapping record or the mapping document are invalid."),
@@ -63,7 +62,7 @@ public interface IMappingAdministrationController {
63
62
ResponseEntity<MappingRecord> createMapping(
64
63
@Parameter(description = "JSON representation of the mapping record.", required = true) @RequestPart(name = "record") finalMultipartFilerecord,
65
64
@Parameter(description = "The mapping document associated with the record. "
66
-
+ "The format of the document is defined by the mapping type, which is given by the mappingType attribute of the mapping record.", required = true) @RequestPart(name = "document") finalMultipartFiledocument,
65
+
+ "The format of the document is defined by the mapping plugin, which is given by the mappingPluginId attribute of the mapping record.", required = true) @RequestPart(name = "document") finalMultipartFiledocument,
@Operation(summary = "Get all mapping records.", description = "List all mapping records in a paginated and/or sorted form. The listing can be "
98
-
+ "refined by providing a typeId in order to return only mapping for a certain mapping type. If not typeId is provided, all mapping "
97
+
+ "refined by providing a mappingPluginId in order to return only mapping for a certain mapping plugin. If no mappingPluginId is provided, all mapping "
99
98
+ "records are returned.",
100
99
responses = {
101
100
@ApiResponse(responseCode = "200", description = "OK and a list of records, which might be empty.", content = @Content(array = @ArraySchema(schema = @Schema(implementation = MappingRecord.class))))})
@Parameter(description = "JSON representation of the metadata record.") @RequestPart(name = "record") finalMultipartFilerecord,
125
124
@Parameter(description = "The mapping document associated with the record. "
126
-
+ "The format of the document is defined by the mapping type, which is given by the mappingType attribute of the mapping record.") @RequestPart(name = "document") finalMultipartFiledocument,
125
+
+ "The format of the document is defined by the mapping plugin, which is given by the mappingPluginId attribute of the mapping record.") @RequestPart(name = "document") finalMultipartFiledocument,
@Operation(summary = "Get all available plugins.",
147
146
responses = {
148
147
@ApiResponse(responseCode = "200", description = "OK and a list of all plugins will be returned, which might be empty.", content = @Content(array = @ArraySchema(schema = @Schema(implementation = PluginInformation.class))))})
@Operation(summary = "Reload all mapping types.", description = "Reloads all plugins from the plugin directory and updates their dependencies if necessary.",
154
+
@Operation(summary = "Reload all mapping plugins.", description = "Reloads all plugins from the plugin directory and updates their dependencies if necessary.",
156
155
responses = {
157
156
@ApiResponse(responseCode = "204", description = "NO_CONTENT is returned on a successful refresh.")})
@Operation(summary = "Map a document directly using the provided plugin.", description = "This endpoint allows the mapping of documents via a file upload. "
164
-
+ "The identifier of the plugin must be passed to this endpoint as parameters together with the document to be mapped and the mapping rules.", responses = {
165
-
@ApiResponse(responseCode = "200", description = "OK is returned if the mapping was successful. "
166
-
+ "The result will also be returned in the response."),
167
-
@ApiResponse(responseCode = "404", description = "NOT_FOUND is returned if no plugin for typeID could be found."),
168
-
@ApiResponse(responseCode = "400", description = "BAD_REQUEST is returned if a parameter is missing or the mapping could not be performed with the provided input. It is "
169
-
+ "expected that a mapping plugin accepts a well defined input and produces results for proper inputs. Therefore, only a faulty input "
170
-
+ "document should be the reason for a mapper to fail."),
171
-
@ApiResponse(responseCode = "500", description = "INTERNAL_SERVER_ERROR is returned the mapping returned successfully, but the mapping result "
172
-
+ "is not accessible. This is expected to be an error in the mapping implementation and should be fixed in there.")})
@Operation(summary = "Map a document directly using the provided plugin.", description = "This endpoint allows the mapping of documents via a file upload. "
120
+
+ "The identifier of the plugin must be passed to this endpoint as parameters together with the document to be mapped and the mapping rules.", responses = {
121
+
@ApiResponse(responseCode = "200", description = "OK is returned if the mapping was successful. "
122
+
+ "The result will also be returned in the response."),
123
+
@ApiResponse(responseCode = "404", description = "NOT_FOUND is returned if no plugin for pluginId could be found."),
124
+
@ApiResponse(responseCode = "400", description = "BAD_REQUEST is returned if a parameter is missing or the mapping could not be performed with the provided input. It is "
125
+
+ "expected that a mapping plugin accepts a well defined input and produces results for proper inputs. Therefore, only a faulty input "
126
+
+ "document should be the reason for a mapper to fail."),
127
+
@ApiResponse(responseCode = "500", description = "INTERNAL_SERVER_ERROR is returned the mapping returned successfully, but the mapping result "
128
+
+ "is not accessible. This is expected to be an error in the mapping implementation and should be fixed in there.")})
0 commit comments