Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2301,7 +2301,7 @@ private boolean shouldBeImplicitHeader(CodegenParameter parameter) {
@Override
public void addImportsToOneOfInterface(List<Map<String, String>> imports) {
if (jackson) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo")) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wing328 FYI as this will affect all Java codegen.

This is copying the behaviour that already exists in Java client though

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the overrides from JavaClient and JavaHelidon, which were duplicates of this exact implementation. I presume this is what led to the bug in the first place - someone edited only the override in specialization and forgot about the parent method.

Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1155,17 +1155,6 @@ public String toApiVarName(String name) {
return apiVarName;
}

@Override
public void addImportsToOneOfInterface(List<Map<String, String>> imports) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
imports.add(oneImport);
}
}
}

@Override
public List<VendorExtension> getSupportedVendorExtensions() {
List<VendorExtension> extensions = super.getSupportedVendorExtensions();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -488,17 +487,6 @@ public String toApiVarName(String name) {
return apiVarName;
}

@Override
public void addImportsToOneOfInterface(List<Map<String, String>> imports) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
imports.add(oneImport);
}
}
}

@Override
public List<VendorExtension> getSupportedVendorExtensions() {
List<VendorExtension> extensions = super.getSupportedVendorExtensions();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5103,4 +5103,14 @@ public void testEnumUnknownDefaultCaseDeserializationNotSet_issue13241() throws
.assertMethod("build")
.doesNotHaveAnnotation("Deprecated");
}

@Test
public void shouldAddJsonIgnorePropertiesImportWhenUsingOneOfWithinOneOf_issue18929() throws IOException {
final SpringCodegen codegen = new SpringCodegen();

final Map<String, File> files = generateFiles(codegen, "src/test/resources/3_0/spring/issue_18929.yaml");

JavaFileAssert.assertThat(files.get("RequestTwoSchemaNestedOneOf.java"))
.hasImports("com.fasterxml.jackson.annotation.JsonIgnoreProperties");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
openapi: 3.0.3
info:
title: oneOf within oneOf
version: 7.7.0-SNAPSHOT
paths:
/oneOf-within-oneOf-test:
post:
operationId: 'oneOfWithinOneOfTest'
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/RequestTwoSchema'
- $ref: '#/components/schemas/RequestOneSchema'
responses:
'201':
description: The request was successful and the resource has been created.
content:
application/json:
schema:
type: string
components:
schemas:
AbstractNestedSchema:
type: object
discriminator:
propertyName: type
mapping:
NESTED_ONE: '#/components/schemas/NestedOneSchema'
NESTED_TWO: '#/components/schemas/NestedTwoSchema'
required:
- type
properties:
type:
type: string
NestedOneSchema:
type: object
allOf:
- $ref: '#/components/schemas/AbstractNestedSchema'
AbstractRequestSchema:
type: object
discriminator:
propertyName: type
mapping:
REQUEST_ONE: '#/components/schemas/RequestOneSchema'
REQUEST_TWO: '#/components/schemas/RequestTwoSchema'
required:
- type
properties:
type:
type: string
RequestTwoSchema:
type: object
allOf:
- $ref: '#/components/schemas/AbstractRequestSchema'
required:
- nested
properties:
nested:
oneOf:
- $ref: '#/components/schemas/NestedTwoSchema'
- $ref: '#/components/schemas/NestedOneSchema'
RequestOneSchema:
type: object
allOf:
- $ref: '#/components/schemas/AbstractRequestSchema'
NestedTwoSchema:
type: object
allOf:
- $ref: '#/components/schemas/AbstractNestedSchema'
Original file line number Diff line number Diff line change
Expand Up @@ -1142,6 +1142,27 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/ResponseObjectWithDifferentFieldNames"
/fake/one-of-within-one-of-park-persons:
post:
tags:
- PerkPerson
summary: Create a Park Person
operationId: createParkPerson
requestBody:
required: true
content:
'application/json':
schema:
oneOf:
- $ref: '#/components/schemas/CreateParkAnimalCarerPerson'
- $ref: '#/components/schemas/CreateParkVisitorPerson'
responses:
201:
description: Park Person created
content:
'application/json':
schema:
type: string
servers:
- url: http://petstore.swagger.io:80/v2
components:
Expand Down Expand Up @@ -2096,3 +2117,50 @@ components:
type: object
additionalProperties:
type: string
OneOfWithinOneOfAbstractAnimal:
type: object
discriminator:
propertyName: type
mapping:
CAT: '#/components/schemas/OneOfWithinOneOfCat'
DOG: '#/components/schemas/OneOfWithinOneOfDog'
required:
- type
properties:
type:
type: string
OneOfWithinOneOfCat:
type: object
allOf:
- $ref: '#/components/schemas/OneOfWithinOneOfAbstractAnimal'
AbstractCreateParkPerson:
type: object
discriminator:
propertyName: type
mapping:
VISITOR: '#/components/schemas/CreateParkVisitorPerson'
ANIMAL_CARER: '#/components/schemas/CreateParkAnimalCarerPerson'
required:
- type
properties:
type:
type: string
CreateParkAnimalCarerPerson:
type: object
allOf:
- $ref: '#/components/schemas/AbstractCreateParkPerson'
required:
- responsibleFor
properties:
responsibleFor:
oneOf:
- $ref: '#/components/schemas/OneOfWithinOneOfDog'
- $ref: '#/components/schemas/OneOfWithinOneOfCat'
CreateParkVisitorPerson:
type: object
allOf:
- $ref: '#/components/schemas/AbstractCreateParkPerson'
OneOfWithinOneOfDog:
type: object
allOf:
- $ref: '#/components/schemas/OneOfWithinOneOfAbstractAnimal'
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ pom.xml
src/main/java/org/openapitools/api/AnotherFakeApi.java
src/main/java/org/openapitools/api/FakeApi.java
src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
src/main/java/org/openapitools/api/PerkPersonApi.java
src/main/java/org/openapitools/api/PetApi.java
src/main/java/org/openapitools/api/StoreApi.java
src/main/java/org/openapitools/api/UserApi.java
src/main/java/org/openapitools/configuration/HttpInterfacesAbstractConfigurator.java
src/main/java/org/openapitools/model/AbstractCreateParkPerson.java
src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
Expand All @@ -27,6 +29,10 @@ src/main/java/org/openapitools/model/ChildWithNullable.java
src/main/java/org/openapitools/model/ClassModel.java
src/main/java/org/openapitools/model/Client.java
src/main/java/org/openapitools/model/ContainerDefaultValue.java
src/main/java/org/openapitools/model/CreateParkAnimalCarerPerson.java
src/main/java/org/openapitools/model/CreateParkAnimalCarerPersonResponsibleForOneOf.java
src/main/java/org/openapitools/model/CreateParkPersonRequest.java
src/main/java/org/openapitools/model/CreateParkVisitorPerson.java
src/main/java/org/openapitools/model/Dog.java
src/main/java/org/openapitools/model/EnumArrays.java
src/main/java/org/openapitools/model/EnumClass.java
Expand All @@ -44,6 +50,9 @@ src/main/java/org/openapitools/model/ModelReturn.java
src/main/java/org/openapitools/model/Name.java
src/main/java/org/openapitools/model/NullableMapProperty.java
src/main/java/org/openapitools/model/NumberOnly.java
src/main/java/org/openapitools/model/OneOfWithinOneOfAbstractAnimal.java
src/main/java/org/openapitools/model/OneOfWithinOneOfCat.java
src/main/java/org/openapitools/model/OneOfWithinOneOfDog.java
src/main/java/org/openapitools/model/Order.java
src/main/java/org/openapitools/model/OuterComposite.java
src/main/java/org/openapitools/model/OuterEnum.java
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.7.0-SNAPSHOT).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
package org.openapitools.api;

import org.openapitools.model.CreateParkPersonRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.service.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import org.springframework.http.codec.multipart.Part;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import jakarta.annotation.Generated;


@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.7.0-SNAPSHOT")
public interface PerkPersonApi {

/**
* POST /fake/one-of-within-one-of-park-persons : Create a Park Person
*
* @param createParkPersonRequest (required)
* @return Park Person created (status code 201)
*/
@HttpExchange(
method = "POST",
value = "/fake/one-of-within-one-of-park-persons",
accept = { "application/json" },
contentType = "application/json"
)
Mono<ResponseEntity<String>> createParkPerson(
@RequestBody Mono<CreateParkPersonRequest> createParkPersonRequest
);

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.openapitools.api.AnotherFakeApi;
import org.openapitools.api.FakeApi;
import org.openapitools.api.FakeClassnameTags123Api;
import org.openapitools.api.PerkPersonApi;
import org.openapitools.api.PetApi;
import org.openapitools.api.StoreApi;
import org.openapitools.api.UserApi;
Expand Down Expand Up @@ -43,6 +44,12 @@ FakeClassnameTags123Api fakeClassnameTags123HttpProxy() {
return factory.createClient(FakeClassnameTags123Api.class);
}

@Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.perkPerson")
PerkPersonApi perkPersonHttpProxy() {
HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
return factory.createClient(PerkPersonApi.class);
}

@Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.pet")
PetApi petHttpProxy() {
HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
Expand Down
Loading