On Fri, 20 Mar 2026 19:29:41 GMT, Lance Andersen <[email protected]> wrote:
> Yes I see what you are saying and I agree with the validation happening
> earlier. I just want to avoid multiple try blocks for this. Could do
> something similar to ZipFile::initCen which keeps it tidier
Sorry for being slow, I finally think I understand: You want to coalesce the
try/catch for validating name and comment because you find the repeated try /
catch noisy or untidy.
ZipFile::initCen is somewhat different in that it processes a pre-existing ZIP
which is either corrupt or opened using an unexpected Charset. So the source of
the problem is more far removed.
In the ZipOutputStream producer case, where a user is supplying the name or
comment directly, I think knowing whether it was the name or the comment that
was incorrect is useful informartion for the user.
How about we extract the try / catch into a helper / checker method, such that
the validation looks like this:
// Verify that entry name and comment can be encoded
checkEncodable(e.name, "unmappable character in ZIP entry name");
if (e.comment != null) {
checkEncodable(e.comment, "unmappable character in ZIP entry
comment");
}
```
where checkEncodable is:
// Throws ZipException if the given string cannot be encoded
private void checkEncodable(String str, String msg) throws ZipException {
try {
zc.getBytes(str);
} catch (IllegalArgumentException ex) {
throw (ZipException) new ZipException(msg).initCause(ex);
}
}
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/30319#discussion_r2967951201