diff --git a/src/generators/java/presets/JacksonPreset.ts b/src/generators/java/presets/JacksonPreset.ts index ce48744183..c0a95ed026 100644 --- a/src/generators/java/presets/JacksonPreset.ts +++ b/src/generators/java/presets/JacksonPreset.ts @@ -103,11 +103,16 @@ ${content}`; union instanceof ConstrainedReferenceModel && union.ref instanceof ConstrainedObjectModel ) { - const discriminatorProp = - union.ref.properties[discriminator.discriminator].property; - - if (discriminatorProp.options.const) { - return ` @JsonSubTypes.Type(value = ${union.name}.class, name = "${discriminatorProp.options.const.originalInput}")`; + const discriminatorProp = Object.values( + union.ref.properties + ).find( + (model) => + model.unconstrainedPropertyName === + discriminator.discriminator + ); + + if (discriminatorProp?.property.options.const) { + return ` @JsonSubTypes.Type(value = ${union.name}.class, name = "${discriminatorProp.property.options.const.originalInput}")`; } } diff --git a/src/helpers/ConstrainHelpers.ts b/src/helpers/ConstrainHelpers.ts index be84756be6..72409b793a 100644 --- a/src/helpers/ConstrainHelpers.ts +++ b/src/helpers/ConstrainHelpers.ts @@ -329,8 +329,11 @@ function addDiscriminatorTypeToUnionModel( const ref = union.ref; if (ref instanceof ConstrainedObjectModel) { - const discriminatorProp = - ref.properties[constrainedModel.options.discriminator.discriminator]; + const discriminatorProp = Object.values(ref.properties).find( + (model) => + model.unconstrainedPropertyName === + constrainedModel.options.discriminator?.discriminator + ); if (discriminatorProp) { propertyTypes.add(discriminatorProp.property.type); diff --git a/test/generators/java/presets/JacksonPreset.spec.ts b/test/generators/java/presets/JacksonPreset.spec.ts index e140589a82..7cf5bb25c9 100644 --- a/test/generators/java/presets/JacksonPreset.spec.ts +++ b/test/generators/java/presets/JacksonPreset.spec.ts @@ -1,4 +1,3 @@ -import { AsyncapiV2Schema } from '../../../../src'; import { JavaGenerator, JAVA_JACKSON_PRESET } from '../../../../src/generators'; describe('JAVA_JACKSON_PRESET', () => { @@ -59,7 +58,7 @@ describe('JAVA_JACKSON_PRESET', () => { Vehicle: { payload: { title: 'Vehicle', - discriminator: 'vehicleType', + discriminator: 'vehicle_type', oneOf: [ { $ref: '#/components/schemas/Car' }, { $ref: '#/components/schemas/Truck' } @@ -72,7 +71,7 @@ describe('JAVA_JACKSON_PRESET', () => { title: 'Car', type: 'object', properties: { - vehicleType: { type: 'string' }, + vehicle_type: { type: 'string' }, name: { type: 'string' } } }, @@ -80,7 +79,7 @@ describe('JAVA_JACKSON_PRESET', () => { title: 'Truck', type: 'object', properties: { - vehicleType: { type: 'string' }, + vehicle_type: { type: 'string' }, name: { type: 'string' } } } diff --git a/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap b/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap index c4cc7a48e3..f7d1757aab 100644 --- a/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap +++ b/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap @@ -55,7 +55,7 @@ exports[`JAVA_JACKSON_PRESET should render Jackson annotations for enum 1`] = ` exports[`JAVA_JACKSON_PRESET union handle oneOf with AsyncAPI discriminator with Jackson 1`] = ` Array [ - "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"vehicleType\\", visible=true) + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"vehicle_type\\", visible=true) @JsonSubTypes({ @JsonSubTypes.Type(value = Car.class, name = \\"Car\\"), @JsonSubTypes.Type(value = Truck.class, name = \\"Truck\\") @@ -67,7 +67,7 @@ public interface Vehicle { String getVehicleType(); }", "public class Car implements Vehicle { - @JsonProperty(\\"vehicleType\\") + @JsonProperty(\\"vehicle_type\\") @JsonInclude(JsonInclude.Include.NON_NULL) private String vehicleType; @JsonProperty(\\"name\\") @@ -86,7 +86,7 @@ public interface Vehicle { public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } }", "public class Truck implements Vehicle { - @JsonProperty(\\"vehicleType\\") + @JsonProperty(\\"vehicle_type\\") @JsonInclude(JsonInclude.Include.NON_NULL) private String vehicleType; @JsonProperty(\\"name\\")