Environment:
- Repository: TIBCOSoftware/js-docker
- JasperReports Server: 10.0.0 PRO
- Docker deployment using jaspersoft-containers/Docker/jrs
- Webapp image: jasperserver-webapp:10.0.0
- Buildomatic image: jasperserver-buildomatic:10.0.0
- PostgreSQL repository: postgres:12
- Tomcat base image from .env: tomcat:10.1.43-jdk17-temurin
- JDK base image from .env: eclipse-temurin:17-jdk-noble
Issue:
Saving a JDBC Data Source fails with HTTP 400.
The JDBC connection test works correctly from the UI, but when saving the Data Source, the request fails with:
{
"message": "The mandatory parameter "resource body" is missing.",
"errorCode": "mandatory.parameter.error",
"parameters": [
"resource body"
],
"properties": [
{
"key": "propertyPath",
"value": "resource body"
}
]
}
Reproduction:
- Deploy a clean JasperReports Server 10.0.0 Docker environment using js-docker.
- Use a clean PostgreSQL repository volume, no migration/import from older Jasper versions.
- Login as superuser/superuser.
- Create a new JDBC Data Source from the UI.
- Use the internal PostgreSQL repository database:
- Driver: PostgreSQL (org.postgresql.Driver)
- Host: repository
- Port: 5432
- Database: jasperserver
- URL: jdbc:postgresql://repository:5432/jasperserver
- Username: postgres
- Password: postgres
- Click "Test Connection": connection succeeds.
- Click "Save": save fails with HTTP 400 and mandatory.parameter.error "resource body" missing.
REST reproduction:
Creating a folder via REST works:
PUT /jasperserver-pro/rest_v2/resources/public/Rest_Folder_Test
Content-Type: application/repository.folder+json
Result: HTTP 201
Creating a JDBC Data Source via REST fails:
PUT /jasperserver-pro/rest_v2/resources/public/PG_Repo_DS_Clean_Test?createFolders=false&overwrite=true
Content-Type: application/repository.jdbcDataSource+json
Accept: application/repository.jdbcDataSource+json
Body:
{
"label": "PG_Repo_DS_Clean_Test",
"uri": "/public/PG_Repo_DS_Clean_Test",
"driverClass": "org.postgresql.Driver",
"username": "postgres",
"password": "postgres",
"connectionUrl": "jdbc:postgresql://repository:5432/jasperserver",
"timezone": ""
}
Result:
HTTP 400
{
"message": "The mandatory parameter "resource body" is missing.",
"errorCode": "mandatory.parameter.error",
"parameters": [
"resource body"
],
"properties": [
{
"key": "propertyPath",
"value": "resource body"
}
]
}
Additional tests:
- Same issue happens in a custom image and in a clean vanilla image.
- Same issue happens with a clean repository, without importing content from JasperReports Server 7.
- Same issue happens with SQL Server and PostgreSQL JDBC Data Sources.
- GET of existing JDBC Data Sources works.
- Test connection works.
- PUT folder works.
- PUT JDBC Data Source fails.
- Using Content-Type: application/json saves a generic JSON file resource, not a JDBC Data Source, so it is not a valid workaround.
Expected behavior:
A JDBC Data Source should be saved as a repository jdbcDataSource resource.
Actual behavior:
Saving fails with HTTP 400 and "resource body" missing.
I also reproduced the issue from the clean UI:
- Login: superuser/superuser
- Create JDBC Data Source under /public
- PostgreSQL driver: org.postgresql.Driver
- Host: repository
- Port: 5432
- Database: jasperserver
- Test Connection: successful
- Save: fails with HTTP 400
Network response:
{
"message": "The mandatory parameter "resource body" is missing.",
"errorCode": "mandatory.parameter.error",
"parameters": [
"resource body"
],
"properties": [
{
"key": "propertyPath",
"value": "resource body"
}
]
}
Environment:
Issue:
Saving a JDBC Data Source fails with HTTP 400.
The JDBC connection test works correctly from the UI, but when saving the Data Source, the request fails with:
{
"message": "The mandatory parameter "resource body" is missing.",
"errorCode": "mandatory.parameter.error",
"parameters": [
"resource body"
],
"properties": [
{
"key": "propertyPath",
"value": "resource body"
}
]
}
Reproduction:
REST reproduction:
Creating a folder via REST works:
PUT /jasperserver-pro/rest_v2/resources/public/Rest_Folder_Test
Content-Type: application/repository.folder+json
Result: HTTP 201
Creating a JDBC Data Source via REST fails:
PUT /jasperserver-pro/rest_v2/resources/public/PG_Repo_DS_Clean_Test?createFolders=false&overwrite=true
Content-Type: application/repository.jdbcDataSource+json
Accept: application/repository.jdbcDataSource+json
Body:
{
"label": "PG_Repo_DS_Clean_Test",
"uri": "/public/PG_Repo_DS_Clean_Test",
"driverClass": "org.postgresql.Driver",
"username": "postgres",
"password": "postgres",
"connectionUrl": "jdbc:postgresql://repository:5432/jasperserver",
"timezone": ""
}
Result:
HTTP 400
{
"message": "The mandatory parameter "resource body" is missing.",
"errorCode": "mandatory.parameter.error",
"parameters": [
"resource body"
],
"properties": [
{
"key": "propertyPath",
"value": "resource body"
}
]
}
Additional tests:
Expected behavior:
A JDBC Data Source should be saved as a repository jdbcDataSource resource.
Actual behavior:
Saving fails with HTTP 400 and "resource body" missing.
I also reproduced the issue from the clean UI:
Network response:
{
"message": "The mandatory parameter "resource body" is missing.",
"errorCode": "mandatory.parameter.error",
"parameters": [
"resource body"
],
"properties": [
{
"key": "propertyPath",
"value": "resource body"
}
]
}