Skip to content

Java Native Client: handle Byte[] and File response types correctly#21346

Merged
wing328 merged 1 commit intoOpenAPITools:masterfrom
duttonw:fix/21345_java_native_handle_primative_file_or_byte_array_response_objects
Jul 3, 2025
Merged

Java Native Client: handle Byte[] and File response types correctly#21346
wing328 merged 1 commit intoOpenAPITools:masterfrom
duttonw:fix/21345_java_native_handle_primative_file_or_byte_array_response_objects

Conversation

@duttonw
Copy link
Contributor

@duttonw duttonw commented May 29, 2025

Fixes #21345 #19491

Include direct file download and byte array direct. This is self contained and semi based off Jersey3 version.

Filename from the response header is used if available else a random temp file is created instead. Best effort is given for cleanup but the person getting the file should clean up first.

https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/resources/Java/libraries/jersey3/ApiClient.mustache#L1129

This is tested on my override's for my work here: qld-gov-au/kiteworks-integration@d9a1720

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package || exit
    ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
    ./bin/utils/export_docs_generators.sh || exit
    
    (For Windows users, please run the script in WSL)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.x.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04) @lwlee2608 (2019/10) @martin-mfg (2023/08)

@duttonw duttonw force-pushed the fix/21345_java_native_handle_primative_file_or_byte_array_response_objects branch from 821822b to 5bbd525 Compare May 29, 2025 03:48
@wing328
Copy link
Member

wing328 commented Jul 3, 2025

restarted failed circleci jobs. let's see how that goes

@wing328
Copy link
Member

wing328 commented Jul 3, 2025

thanks for the pr. all tests passed

let's give it a try

@wing328 wing328 merged commit 6fdb632 into OpenAPITools:master Jul 3, 2025
86 checks passed
@wing328
Copy link
Member

wing328 commented Jul 3, 2025

when you've time, can you please PM me via Slack?

https://join.slack.com/t/openapi-generator/shared_invite/zt-38mcfd9x2-DuLqQ_x1BPnjRSSShrcmPA

@wing328 wing328 added this to the 7.15.0 milestone Jul 3, 2025
@wing328 wing328 changed the title fix: #21345 #19491 Java Native Client, handle Byte[] and File response types correctly Java Native Client: handle Byte[] and File response types correctly Jul 3, 2025
cziberpv added a commit to cziberpv/openapi-generator that referenced this pull request Feb 10, 2026
The Feign library's ApiResponseDecoder routes all responses through
JacksonDecoder, including binary ones (File, byte[], InputStream).
This causes JsonParseException when an endpoint returns non-JSON
content (e.g. PDF, ZIP, images).

Add binary type detection and handling before delegating to
JacksonDecoder. This applies to both direct return types and
ApiResponse<T> wrappers.

Consistent with the native library fix in OpenAPITools#21346.

Closes OpenAPITools#2486

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
wing328 pushed a commit that referenced this pull request Feb 11, 2026
…22939)

* fix(java/feign): handle binary response types in ApiResponseDecoder

The Feign library's ApiResponseDecoder routes all responses through
JacksonDecoder, including binary ones (File, byte[], InputStream).
This causes JsonParseException when an endpoint returns non-JSON
content (e.g. PDF, ZIP, images).

Add binary type detection and handling before delegating to
JacksonDecoder. This applies to both direct return types and
ApiResponse<T> wrappers.

Consistent with the native library fix in #21346.

Closes #2486

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address code review feedback

- Sanitize Content-Disposition filename to prevent path traversal
  (Paths.get(filename).getFileName() strips directory components)
- Add null check for response.body() to handle 204/205 empty responses
- Fix regex to support quoted filenames with spaces
  (e.g. filename="my invoice.pdf")

* fix: regenerate feign-hc5 sample with updated ApiResponseDecoder

The feign-hc5 sample was missed during the second commit's regeneration
because setTemplateDir("feign") overrides the filesystem templateDir
from the config, causing the generator to use embedded JAR resources.
After rebuilding the JAR with the updated mustache template, the
feign-hc5 sample now matches feign and feign-no-nullable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] [java native] File response being passed to Jackson instead of directly converted to File object (in temp space)

2 participants