-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[java][Okhttp] replace okhttp-gson with okhttp-gson-nextgen #11538
Conversation
@wing328 we are upgrading from 5.3.4 to 6.0.0 BETA and this change has broken our exception handling. Particularly in catch (ApiException e) {
e.setErrorObject(localVarApiClient.getJSON().getGson().fromJson(e.getResponseBody(), new TypeToken<{{{errorObjectType}}}{{^errorObjectType}}{{{returnType}}}{{/errorObjectType}}>(){}.getType()));
e.setErrorObjectType(new GenericType<{{{errorObjectType}}}{{^errorObjectType}}{{{returnType}}}{{/errorObjectType}}>(){});
throw e;
} |
This is what we get with 6.0.0-BETA: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
at com.google.gson.Gson.fromJson(Gson.java:1003)
at com.google.gson.Gson.fromJson(Gson.java:956)
at com.google.gson.Gson.fromJson(Gson.java:905)
|
Thanks for trying out the beta version and the error details. Let me look into it later this week. can you also share how the response is defined in the spec for that particular endpoint? |
Yep so first here is what we had to do to make it work: Generated client code: catch (ApiException e) {
e.setErrorObject(localVarApiClient.getJSON().getGson().fromJson(e.getResponseBody(), new TypeToken<List<PlannedAnalysis>>(){}.getType()));
e.setErrorObjectType(new GenericType<List<PlannedAnalysis>>(){});
throw e;
} What it should be: catch (ApiException e) {
e.setErrorObject(localVarApiClient.getJSON().getGson().fromJson(e.getResponseBody(), new TypeToken<ApiError>(){}.getType()));
e.setErrorObjectType(new GenericType<ApiError>(){});
throw e;
} And here is how our OpenAPI endpoint is defined in our code: @GetMapping("/")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Planned Analysis found", content = {
@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, array = @ArraySchema(schema = @Schema(implementation = PlannedAnalysis.class))) }),
@ApiResponse(responseCode = "404", description = "Planned Analysis does not exist", content = {
@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = ApiError.class)) })
@Operation(summary = "Find Planned Analysis by study guid AND planned analysis name", security = {
@SecurityRequirement(name = ApplicationConfiguration.BEARER) })
public ResponseEntity<List<PlannedAnalysis>> findPlannedAnalysisByStudyGuidAndName(
@Parameter(description = "The study guid", required = true) @RequestParam("studyGuid") @GUID @NotEmpty String studyGuid,
@Parameter(description = "The name of the Planned Analysis, optional") @RequestParam("plannedAnalysisName") Optional<String> plannedAnalysisName) {
return plannedAnalysisService.getByPlannedAnalysisNameAndStudyGuid(studyGuid, plannedAnalysisName);
} Our main response returns |
@melloware thanks again for the details. I've filed #12131. Can you please give it a try to see if it fixes the issue? |
Tested and verified your new versions work in our scenarios! |
PR checklist
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*
.For Windows users, please run the script in Git BASH.
master
(5.3.0),6.0.x
cc @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)