openapi-processor / openapi-processor-core

moved into openapi-processor-base
Apache License 2.0
7 stars 5 forks source link

allOf does not work correctly #43

Closed schlagi123 closed 3 years ago

schlagi123 commented 3 years ago

Hi,

here my minimal schema:

# openapi yaml
openapi: 3.0.2
info:
  title: simple query parameters
  version: 1.0.0

paths:
  /query:
    get:
      tags:
        - endpoint
      responses:
        '200':
          description: plain text response
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      prop1:
                        type: string
                  - type: object
                    properties:
                      prop2:
                        type: string

If I run the processor I get the following error message:

processing failed!
com.google.googlejavaformat.java.FormatterException: 13:19: error: '{' expected
    at com.google.googlejavaformat.java.FormatterException.fromJavacDiagnostics(FormatterException.java:50)
    at com.google.googlejavaformat.java.Formatter.format(Formatter.java:152)
    at com.google.googlejavaformat.java.Formatter.getFormatReplacements(Formatter.java:291)
    at com.google.googlejavaformat.java.Formatter.formatSource(Formatter.java:267)
    at com.google.googlejavaformat.java.Formatter.formatSource(Formatter.java:233)
    at io.openapiprocessor.core.writer.java.ApiWriter.format(ApiWriter.kt:116)
    at io.openapiprocessor.core.writer.java.ApiWriter.writeDataType(ApiWriter.kt:102)
    at io.openapiprocessor.core.writer.java.ApiWriter.access$writeDataType(ApiWriter.kt:41)
    at io.openapiprocessor.core.writer.java.ApiWriter$writeObjectDataTypes$1.accept(ApiWriter.kt:79)
    at io.openapiprocessor.core.writer.java.ApiWriter$writeObjectDataTypes$1.accept(ApiWriter.kt:41)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at io.openapiprocessor.core.model.Api.forEachObjectDataType(Api.kt:60)
    at io.openapiprocessor.core.writer.java.ApiWriter.writeObjectDataTypes(ApiWriter.kt:76)
    at io.openapiprocessor.core.writer.java.ApiWriter.write(ApiWriter.kt:62)
    at io.openapiprocessor.spring.processor.SpringProcessor.run(SpringProcessor.kt:95)
    at io.openapiprocessor.api.OpenApiProcessor$run$0.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
    at com.github.hauner.openapi.gradle.OpenApiProcessorWorker.run(OpenApiProcessorWorker.groovy:44)
    at org.gradle.workers.internal.AdapterWorkAction.execute(AdapterWorkAction.java:57)
    at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
    at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)
    at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)
    at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
    at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)
    at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
    at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
    at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.lambda$execute$0(IsolatedClassloaderWorkerFactory.java:58)
    at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
    at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
    at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.execute(IsolatedClassloaderWorkerFactory.java:50)
    at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:200)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:215)
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    at java.base/java.lang.Thread.run(Thread.java:834)
hauner commented 3 years ago

The processor does not yet handle allOf.

In this case it is generating the following strangely named class:

public class QueryResponse200-of-0 {

    @JsonProperty("prop1")
    private String prop1;

    public String getProp1() {
        return prop1;
    }

    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }

}

The invalid class name is what the code formatter is complaining about.

hauner commented 3 years ago

Looks like there should be no big issue handling this case.

Converting to the internal data structures looks already good. The -of-0-name is the name of the first allOf item and the second one is called -of-1. It is all there.

It is just the DataTypeWriter that is confused by the composed schema.

hauner commented 3 years ago

closed by #47