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]

Reply via email to