redskap / swagger-brake

Swagger contract checker for breaking API changes
Apache License 2.0
57 stars 16 forks source link

Exception when comparing swagger files #129

Closed rennyeb closed 1 month ago

rennyeb commented 3 months ago

Using version 2.4.0 I get following exception:

java.lang.IllegalStateException: Recursive update at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1742) at io.redskap.swagger.brake.core.model.store.SchemaStore.getTransformer(SchemaStore.java:21) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.getSchemaForRef(SchemaTransformer.java:141) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.transformSchema(SchemaTransformer.java:80) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.internalTransform(SchemaTransformer.java:52) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.internalTransform(SchemaTransformer.java:42) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.getSchemaAttributes(SchemaTransformer.java:120) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.transformSchema(SchemaTransformer.java:98) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.transformComposedSchema(SchemaTransformer.java:72) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.internalTransform(SchemaTransformer.java:50) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.internalTransform(SchemaTransformer.java:42) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.getSchemaAttributes(SchemaTransformer.java:120) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.transformSchema(SchemaTransformer.java:98) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.internalTransform(SchemaTransformer.java:52) at io.redskap.swagger.brake.core.model.transformer.SchemaTransformer.transform(SchemaTransformer.java:31) at io.redskap.swagger.brake.core.model.transformer.MediaTypeTransformer.transform(MediaTypeTransformer.java:15) at io.redskap.swagger.brake.core.model.transformer.RequestBodyTransformer.lambda$transform$1(RequestBodyTransformer.java:23) at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180) at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1921) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at io.redskap.swagger.brake.core.model.transformer.RequestBodyTransformer.transform(RequestBodyTransformer.java:23) at io.redskap.swagger.brake.core.model.transformer.PathItemTransformer.getRequestBody(PathItemTransformer.java:78) at io.redskap.swagger.brake.core.model.transformer.PathItemTransformer.transform(PathItemTransformer.java:53) at io.redskap.swagger.brake.core.model.transformer.PathTransformer.transform(PathTransformer.java:31) at io.redskap.swagger.brake.core.model.transformer.PathTransformer.lambda$transform$0(PathTransformer.java:27) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1921) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at io.redskap.swagger.brake.core.model.transformer.PathTransformer.transform(PathTransformer.java:27) at io.redskap.swagger.brake.core.model.transformer.OpenApiTransformer.transform(OpenApiTransformer.java:33) at io.redskap.swagger.brake.core.model.transformer.OpenApiTransformer.transform(OpenApiTransformer.java:12) at io.redskap.swagger.brake.runner.Checker.check(Checker.java:30) at io.redskap.swagger.brake.runner.Runner.run(Runner.java:55) at io.redskap.swagger.brake.runner.Starter.start(Starter.java:15) at io.redskap.swagger.brake.cli.Cli.start(Cli.java:34) at io.redskap.swagger.brake.cli.SwaggerBrakeMain.main(SwaggerBrakeMain.java:16) For help please use --help

(Unfortunately I am unable to share the swagger files that I was comparing)

rennyeb commented 3 months ago

I made some informal changes to the source and rebuilt the shadow jar, which worked around the problem above. Patched source file attached if that helps. SchemaStore.zip

galovics commented 1 month ago

Fixed on master.