swagger-api / swagger-parser

Swagger Spec to Java POJOs
http://swagger.io
Apache License 2.0
780 stars 526 forks source link

parsing files with file:/ URL emits FileNotFoundException when resolving internal schemas #2034

Closed maddingo closed 8 months ago

maddingo commented 9 months ago
File inputSpec = new File("openapi.json");
ParseOptions options = new ParseOptions();
options.setResolve(true); // same with resolveFully
OpenAPI openAPI = new OpenAPIV3Parser().read(inputSpec.getAbsoluteFile().toURI().toURL().toString(), null, options);
maddingo commented 9 months ago

Exception is java.io.FileNotFoundException: file:/home/martin/Develop/oas-codegen/oas-codegen-maven-plugin/src/it/simple-it/src/main/resources/openapi.json (No such file or directory) at java.io.FileInputStream.open0 (Native Method) at java.io.FileInputStream.open (FileInputStream.java:216) at java.io.FileInputStream. (FileInputStream.java:157) at java.io.FileInputStream. (FileInputStream.java:111) at io.swagger.v3.parser.reference.Visitor.readFile (Visitor.java:66) at io.swagger.v3.parser.reference.Visitor.readURI (Visitor.java:84) at io.swagger.v3.parser.reference.ReferenceVisitor.parse (ReferenceVisitor.java:305) at io.swagger.v3.parser.reference.ReferenceVisitor.resolveSchemaRef (ReferenceVisitor.java:241) at io.swagger.v3.parser.reference.ReferenceVisitor.visitSchema (ReferenceVisitor.java:141) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseSchema (OpenAPI31Traverser.java:790) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMediaType (OpenAPI31Traverser.java:603) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap (OpenAPI31Traverser.java:933) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseResponse (OpenAPI31Traverser.java:299) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap (OpenAPI31Traverser.java:933) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseResponses (OpenAPI31Traverser.java:270) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseOperation (OpenAPI31Traverser.java:237) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traversePathItem (OpenAPI31Traverser.java:394) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseMap (OpenAPI31Traverser.java:933) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traversePaths (OpenAPI31Traverser.java:197) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverseOpenApi (OpenAPI31Traverser.java:124) at io.swagger.v3.parser.reference.OpenAPI31Traverser.traverse (OpenAPI31Traverser.java:65) at io.swagger.v3.parser.reference.OpenAPIDereferencer31.dereference (OpenAPIDereferencer31.java:74) at io.swagger.v3.parser.OpenAPIV3Parser.resolve (OpenAPIV3Parser.java:225) at io.swagger.v3.parser.OpenAPIV3Parser.readContents (OpenAPIV3Parser.java:181) at io.swagger.v3.parser.OpenAPIV3Parser.readLocation (OpenAPIV3Parser.java:97) at io.swagger.v3.parser.OpenAPIV3Parser.read (OpenAPIV3Parser.java:124) at no.maddin.codegen.CodeGenerator.generateCode (CodeGenerator.java:28) at no.maddin.codegen.CodeGeneratorMain.main (CodeGeneratorMain.java:31) [main] INFO io.swagger.v3.parser.OpenAPIV3Parser - io.swagger.v3.parser.OpenAPIV3Parser@71def8f8: file:/home/martin/Develop/oas-codegen/oas-codegen-maven-plugin/src/it/simple-it/src/main/resources/openapi.json The reason is that the full URL, including the schema is passed on to the FileInputStream