OpenAPITools / openapi-diff

Utility for comparing two OpenAPI specifications.
Apache License 2.0
810 stars 154 forks source link

Null ptr exception on `parametersIntersect` #486

Closed Dogacel closed 1 year ago

Dogacel commented 1 year ago
Unexpected exception. Reason: null
java.lang.NullPointerException
    at org.openapitools.openapidiff.core.compare.PathsDiff.lambda$parametersIntersect$4(PathsDiff.java:138)
    at java.util.stream.IntPipeline$9$1.accept(IntPipeline.java:366)
    at java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:110)
    at java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:693)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.LongPipeline.reduce(LongPipeline.java:461)
    at java.util.stream.LongPipeline.sum(LongPipeline.java:419)
    at java.util.stream.IntPipeline.count(IntPipeline.java:452)
    at org.openapitools.openapidiff.core.compare.PathsDiff.parametersIntersect(PathsDiff.java:139)
    at org.openapitools.openapidiff.core.compare.PathsDiff.methodsAndParametersIntersect(PathsDiff.java:119)
    at org.openapitools.openapidiff.core.compare.PathsDiff.lambda$null$1(PathsDiff.java:56)
    at java.util.function.BinaryOperator.lambda$minBy$0(BinaryOperator.java:59)
    at java.util.stream.ReduceOps$2ReducingSink.accept(ReduceOps.java:123)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:546)
    at java.util.stream.ReferencePipeline.min(ReferencePipeline.java:587)
    at org.openapitools.openapidiff.core.compare.PathsDiff.lambda$diff$3(PathsDiff.java:54)
    at java.util.LinkedHashMap$LinkedKeySet.forEach(LinkedHashMap.java:559)
    at org.openapitools.openapidiff.core.compare.PathsDiff.diff(PathsDiff.java:47)
    at org.openapitools.openapidiff.core.compare.OpenApiDiff.compare(OpenApiDiff.java:96)
    at org.openapitools.openapidiff.core.compare.OpenApiDiff.compare(OpenApiDiff.java:64)
    at org.openapitools.openapidiff.core.OpenApiCompare.fromSpecifications(OpenApiCompare.java:102)
    at org.openapitools.openapidiff.core.OpenApiCompare.fromLocations(OpenApiCompare.java:91)
    at org.openapitools.openapidiff.cli.Main.main(Main.java:175)

https://github.com/OpenAPITools/openapi-diff/blob/413664fe5281378d0ca8f553e61573189a08fd97/core/src/main/java/org/openapitools/openapidiff/core/compare/PathsDiff.java#L138

I can't share the schemas I used to compare. But I can say our spec is poorly documented & it might miss parameter definitions. We use https://github.com/iheartradio/play-swagger to generate our swagger specs.

Dogacel commented 1 year ago

I was able to resolve this by doing two things:

  1. Change swagger: "2.0" to openapi: 3.0.0
  2. Remove some hard-coded fields that made my schema openapi 3.0.0 compatible.

I hope this issue can guide others.