Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

$ref relative paths to external domain files not resolved #100

Closed
martinsmyllie opened this issue Mar 25, 2020 · 3 comments
Closed

$ref relative paths to external domain files not resolved #100

martinsmyllie opened this issue Mar 25, 2020 · 3 comments

Comments

@martinsmyllie
Copy link

with the following folder structure

.
├── files
│   ├── api.yaml
├── my_domain
│   ├── domain.yaml

and the following in the api.yaml file

paths:
  /{tenantId}/squads:
    post:
      parameters:
        - $ref: '../my_domain/domain.yaml#/components/parameters/TenantIdParam'
      responses:
        401:
         description: User Not Authenticated

The following exception results

org.cornutum.tcases.openapi.OpenApiException: Error processing Squads Service, /{tenantId}/squads, POST
	at org.cornutum.tcases.openapi.OpenApiContext.resultFor(OpenApiContext.java:44)
	at org.cornutum.tcases.openapi.InputModeller.resultFor(InputModeller.java:2867)
	at org.cornutum.tcases.openapi.InputModeller.opRequestDef(InputModeller.java:169)
	at org.cornutum.tcases.openapi.InputModeller.lambda$pathRequestDefs$2(InputModeller.java:149)
	at org.cornutum.tcases.openapi.OpenApiContext.resultFor(OpenApiContext.java:36)
	at org.cornutum.tcases.openapi.InputModeller.resultFor(InputModeller.java:2867)
	at org.cornutum.tcases.openapi.InputModeller.pathRequestDefs(InputModeller.java:143)
	at org.cornutum.tcases.openapi.InputModeller.lambda$null$0(InputModeller.java:127)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267)
	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:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.cornutum.tcases.SystemInputDefBuilder.functions(SystemInputDefBuilder.java:119)
	at org.cornutum.tcases.openapi.InputModeller.lambda$requestInputModel$1(InputModeller.java:127)
	at org.cornutum.tcases.openapi.OpenApiContext.resultFor(OpenApiContext.java:36)
	at org.cornutum.tcases.openapi.InputModeller.resultFor(InputModeller.java:2867)
	at org.cornutum.tcases.openapi.InputModeller.requestInputModel(InputModeller.java:121)
	at org.cornutum.tcases.openapi.RequestInputModeller.getRequestInputModel(RequestInputModeller.java:43)
	at org.cornutum.tcases.openapi.TcasesOpenApi.getRequestInputModel(TcasesOpenApi.java:44)
	at org.cornutum.tcases.openapi.io.TcasesOpenApiIO.getRequestInputModel(TcasesOpenApiIO.java:92)
	at org.cornutum.tcases.openapi.ApiCommand.run(ApiCommand.java:1025)
	at org.cornutum.tcases.openapi.ApiCommand.main(ApiCommand.java:983)
Caused by: java.lang.NullPointerException
	at java.util.ArrayDeque.addLast(ArrayDeque.java:244)
	at org.cornutum.tcases.openapi.OpenApiContext.resultFor(OpenApiContext.java:33)
	at org.cornutum.tcases.openapi.InputModeller.resultFor(InputModeller.java:2867)
	at org.cornutum.tcases.openapi.InputModeller.parameterVarDef(InputModeller.java:386)
	at org.cornutum.tcases.openapi.InputModeller.lambda$null$3(InputModeller.java:177)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	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:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.cornutum.tcases.FunctionInputDefBuilder.vars(FunctionInputDefBuilder.java:119)
	at org.cornutum.tcases.openapi.InputModeller.lambda$opRequestDef$4(InputModeller.java:177)
	at org.cornutum.tcases.openapi.OpenApiContext.resultFor(OpenApiContext.java:36)
	... 26 more

@kerrykimbrough
Copy link
Contributor

Thanks, Martin. I have reproduced this problem, and I'm investigating a fix now.

Part of the problem is how the $ref resolution failure is reported. Something more helpful than a NullPointerException should be expected! Of course, the root cause is that references to components in a different spec are simply not handled by the current implementation.

@martinsmyllie
Copy link
Author

Thanks for looking at that Kerry. I've generally found that $ref resolution is not consistent within the swagger toolset, so it's obviously a bit of a tricky one.

@kerrykimbrough
Copy link
Contributor

Fixed by PR #101

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants