Skip to content

2023.2.1

Compare
Choose a tag to compare
@hauner hauner released this 14 Jun 05:35
· 4 commits to 2023.2.x since this release

#29 (fix), a property with a java keyword name generates invalid Java code

using a parameter/property name that was identical to a java keyword generated invalid Java code. For example, with a parameter and property name class:

openapi: 3.0.3
info:
  title: keyword identifier
  version: 1.0.0

paths:

  /keywords:
    get:
      parameters:
        - name: class
          description: parameter
          in: query
          schema:
            $ref: '#/components/schemas/class'
      responses:
        '200':
          description: the foo result
          content:
            application/json:
                schema:
                  $ref: '#/components/schemas/class'

components:
  schemas:

    class:
      type: object
      properties:
        class:
          type: string

the processor did generate interfaces with an invalid class parameter name and a model class with an invalid property name class.

Now it adds a a prefix if a parameter/property name is identical to any keyword:

package generated.api;

import annotation.Mapping;
import annotation.Parameter;
import generated.model.Class;
import generated.support.Generated;

@Generated(value = "openapi-processor-core", version = "test")
public interface Api {

    @Mapping("/keywords")
    Class getKeywords(@Parameter Class aClass);

}
package generated.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import generated.support.Generated;

@Generated(value = "openapi-processor-core", version = "test")
public class Class {

    @JsonProperty("class")
    private String aClass;

    public String getClass() {
        return aClass;
    }

    public void setClass(String aClass) {
        this.aClass = aClass;
    }

}

#25 (fix), invalid type of enum parameter

an enum parameter name was not properly converted to valid class name. With a name foo-foo

openapi: 3.0.0
info:
  title: sample API
  version: 1.0.0

paths:
  /foo:
    get:
      parameters:
        - name: foo-foo
          description: test parameter
          in: query
          schema:
            type: string
            enum:
              - foo-1
      responses:
        '204':
          description: response

the processor generated a class Foo-foo instead of FooFoo:

public interface Api {

    @GetMapping(path = "/foo")
    void getFoo(@RequestParam(name = "foo-foo", required = false) Foo-foo fooFoo);

}

#24 (fix), doesn't find nested schemas of additionalProperties

using {package-name} with a nested schema of additionalProperties did not find the nested schema.

this prevented mappings like

map:
  types:
    - type: Values => java.util.Map<java.lang.String, {package-name}.model.Value>>
    - type: MultiValues => java.util.Map<java.lang.String, java.util.List<{package-name}.model.Value>>>

assuming Values is nested schema of additionalProperties:

components:
  schemas:

    Values:
      description: key is string, value is a Value object
      type: object
      additionalProperties:
        $ref: '#/components/schemas/Value'