leehaut opened a new issue, #9083:
URL: https://github.com/apache/hop/issues/9083
### Apache Hop version?
2.20.0-SNAPSHOT
### Java version?
openjdk 21
### Operating system
Windows
### What happened?
`Action.check()` looks up values with Apache Commons Validator
(`ValidatorUtils.getValueAsString` / BeanUtils `PropertyUtils`). That lookup
uses the JavaBean property name. It does not use the `@HopMetadataProperty`
key, and it is case-sensitive.
Several actions pass a string that does not match the bean. A missing
property comes back as null. `notBlank` then reports the field as empty, and
`fileExists` never sees the real path. `IntegerValidator` treats a null as
blank and returns success, so a wrong name there silently skips the check.
The serialized XML keys are a separate contract and should stay as they are.
Existing workflows store `<filename>`, `<tablename>`, `<sslport>`, and so on.
### Affected actions
| Action | Bean property | `check()` looks up | Effect |
|---|---|---|---|
| MySQL Bulk Load, MySQL Bulk File, MSSQL Bulk Load | `fileName`,
`tableName` | `"filename"`, `"tablename"` | `"filename"` hits
`ActionBase.getFilename()`, which always returns null, so a filled file is
reported blank and `fileExists` never runs. `"tablename"` does not match
`getTableName()`, so the table name is always reported blank. |
| HTTP | `targetFilenameExtension` | `"targetFilenameExtention"` (missing
`s`) | `notBlank` always fails on a property that does not exist. A filled
extension is still reported blank. |
| Get POP | `sslPort` | `"SSLPort"` | The integer check never reads
`sslPort`. A non-integer port is accepted. An empty port already passes,
because `IntegerValidator` allows blank. |
| Pipeline | `filename` only | `"pipeline-name"`, `"directory"` when the
file name is empty | Those repository-era properties are gone. An empty file
name always fails `notBlank` on `pipeline-name`, and `directory` throws
`NoSuchMethodException` ("Unable to validate"). |
| XSLT | `xmlfilename`, `xslfilename`, `outputfilename` | `"xmlFilename"`,
`"xslFilename"`, `"outputFilename"` | The camelCase getters are commented out.
Lombok exposes the lower-case names. Filled paths are still reported blank, and
the XML/XSLT files are never tested with `fileExists`. |
Classes:
- `plugins/databases/mysql/.../mysqlbulkload/ActionMysqlBulkLoad.java`
- `plugins/databases/mysql/.../mysqlbulkfile/ActionMysqlBulkFile.java`
- `plugins/databases/mssqlnative/.../mssqlbulkload/ActionMssqlBulkLoad.java`
- `plugins/actions/http/.../http/ActionHttp.java`
- `plugins/misc/mail/.../getpop/ActionGetPOP.java`
- `plugins/actions/pipeline/.../pipeline/ActionPipeline.java`
- `plugins/actions/xml/.../xslt/Xslt.java`
Execution itself still reads the fields directly, so a workflow runs. The
bad names show up in workflow verification (`check()`).
### Expected
`check()` should use the JavaBean name that the getter actually exposes:
- Bulk Load / Bulk File: `"fileName"`, `"tableName"`
- HTTP: `"targetFilenameExtension"`
- Get POP: `"sslPort"`
- Pipeline: `"filename"` in both branches. Drop `"pipeline-name"` and
`"directory"`.
- XSLT: `"xmlfilename"`, `"xslfilename"`, `"outputfilename"`
Do not change `@HopMetadataProperty` keys. For example `key = "filename"`
must stay, or saved workflows stop loading.
### Issue Priority
Priority: 3
### Issue Component
Component: Actions
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]