2022 Releases

October 2022

  • openapi-processor-spring/micronaut 2022.5

annotation mapping

this is a new feature.

It allows to place additional annotations on generated model classes. It is possible to place the annotation at the class itself or on parameters of that type.

openapi-processor-mapping: v2.1 (1)

options:
  package-name: io.openapiprocessor.openapi
  bean-validation: true

map:
  types:
    - type: Bar @ io.openapiprocessor.samples.validations.Sum(24) (2)

  parameters:
    - type: Foo @ io.openapiprocessor.samples.validations.Sum(value = 42) (3)

The Sum annotation in the example is a custom bean validation but the feature itself is not limited to bean validation.

1 use v2.1 as the mapping version to avoid validation warnings in the mapping file.
2 the Bar mapping is using a global type annotation mapping, so the annotation is added to the generated Bar class.
3 the Foo mapping adds the annotation to the parameter of the endpoint methods that use Foo.

See annotation mapping for the details.

@Generated

This will replace the text header from the generated files with a (generated) @Generated annotation.

Other tools may be able to detect the generated files and ignore them.

For example jacoco automatically ignores @Generated classes. It is no longer necessary to exclude the generated files from code coverage.

A generated interface/class will now look like this:

package io.openapiprocessor.release;

import io.openapiprocessor.release.support.Generated;
import org.springframework.web.bind.annotation.GetMapping;

@Generated(value = "openapi-processor-spring", version = "2022.6", date = "2022-09-28T18:37:33.250622+02:00")
public interface ReleaseApi {
// ...
}

Because of the longish date the code formatter will probably add a few line breaks.

Generation of the data parameter can be disabled by setting the generated-date option to false:

openapi-processor-mapping: v2.1 (1)

options:
  package-name: io.openapiprocessor.openapi
  generated-date: false
1 use v2.1 as the mapping version to avoid validation warnings in the mapping file.

additional parameter configuration did not working in global context

using an additional parameter in the global context was not implemented.

map:
  parameters:
    - add: request => javax.servlet.http.HttpServletRequest

@HeadMapping/@TraceMapping/@OptionsMapping do not exist

a few http methods do not have an explicit mapping annotation: @HeadMapping, @TraceMapping, @OptionsMapping.

The processor now generates @RequestMapping(method = RequestMethod. {http method} )) .

windows path handling

was broken since 2022.4

May 2022

  • openapi-processor-spring/micronaut 2022.4

openapi-processor offers a new alternative OpenAPI 3.0 & 3.1 parser and fixes missing bean validation imports

  • OpenAPI 3.0 support includes JSON schema validation with detailed reporting.

  • OpenAPI 3.1 support is experimental and does not yet support schema validation.

OpenAPI 3.0 parser & JSON schema validation

openapi-processor provides an alternative internal OpenAPI 3.0 parser. It includes JSON schema validation with detailed reporting.

To enable it, set the parser configuration to INTERNAL.

// build.gradle processor configuration

openapiProcessor {
    spring {
        processor 'io.openapiprocessor:openapi-processor-spring:2022.4'

        apiPath "${projectDir}/src/api/openapi.yaml"
        targetDir "$projectDir/build/openapi"
        mapping "${projectDir}/src/api/mapping.yaml"

        // use internal OpenAPI parser
        parser 'INTERNAL'
    }
}

OpenAPI 3.1 (experimental)

The internal OpenAPI parser supports OpenAPI 3.1 but does not yet have schema validation.

To enable it, set the parser configuration to INTERNAL. It will automatically detect OpenAPI 3.0 & 3.1.

The processor does handle the renamed/changed OpenAPI 3.1 properties as needed for code generation:

type keyword

The type keyword allows a list of types. Defining a nullable type is done by adding "null" to the list of types.

# OpenAPI v3.0
type: string
nullable: true

# OpenAPI v3.1
type:
- "string"
- "null"

The processor does support the new nullable definition. Apart from that it will use the first non-null type as the type for code generation.

exclusiveMinimum and exclusiveMaximum keywords

# OpenAPI v3.0
maximum: 42
exclusiveMaximum: true

# OpenAPI v3.1
exclusiveMaximum: 42

which is used for adding bean validations.

missing import for javax.validation.constraints.Pattern

the `import`s for bean validation annotations were missing for item constraints of a mapped array. Having an api description like this

paths:
  /test:
    get:
      parameters:
        - in: query
          name: patternParam
          required: false
          description: query parameter with @Pattern annotation
          schema:
            $ref: '#/components/schemas/PatternParam'
      responses:
        '200':
          description: ok
  schemas:
    PatternParam:
      type: array
      items:
        type: string
        pattern: '.*'

and a mapping

openapi-processor-spring: v2

options:
  package-name: generated
  bean-validation: true

map:
  types:
  - type: array => java.util.List

did not generate the javax.validation.constraints.Pattern import.

package generated.api;

import annotation.Mapping;
import annotation.Parameter;
import java.util.List;
import javax.validation.constraints.Pattern;

public interface Api {

    @Mapping("/test")
    void getTest(@Parameter List<@Pattern(regexp = ".*") String> patternParam);

}

(ignore the @Mapping/@Parameter annotations, this is pseudo-code used by the integration tests)

dependency updates

  • updated openapi-processor-core to 2022.5 (was 2022.4)