Skip to content

Commit

Permalink
fix: fixes java jackson discriminator when property is not camel case (
Browse files Browse the repository at this point in the history
  • Loading branch information
kennethaasan authored Sep 11, 2023
1 parent f243e43 commit b06ad04
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 14 deletions.
15 changes: 10 additions & 5 deletions src/generators/java/presets/JacksonPreset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}")`;
}
}

Expand Down
7 changes: 5 additions & 2 deletions src/helpers/ConstrainHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
7 changes: 3 additions & 4 deletions test/generators/java/presets/JacksonPreset.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { AsyncapiV2Schema } from '../../../../src';
import { JavaGenerator, JAVA_JACKSON_PRESET } from '../../../../src/generators';

describe('JAVA_JACKSON_PRESET', () => {
Expand Down Expand Up @@ -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' }
Expand All @@ -72,15 +71,15 @@ describe('JAVA_JACKSON_PRESET', () => {
title: 'Car',
type: 'object',
properties: {
vehicleType: { type: 'string' },
vehicle_type: { type: 'string' },
name: { type: 'string' }
}
},
Truck: {
title: 'Truck',
type: 'object',
properties: {
vehicleType: { type: 'string' },
vehicle_type: { type: 'string' },
name: { type: 'string' }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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\\")
Expand All @@ -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\\")
Expand All @@ -86,7 +86,7 @@ public interface Vehicle {
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
}",
"public class Truck implements Vehicle {
@JsonProperty(\\"vehicleType\\")
@JsonProperty(\\"vehicle_type\\")
@JsonInclude(JsonInclude.Include.NON_NULL)
private String vehicleType;
@JsonProperty(\\"name\\")
Expand Down

0 comments on commit b06ad04

Please sign in to comment.