swagger-parser icon indicating copy to clipboard operation
swagger-parser copied to clipboard

Delegate resolving of relative URLs to Java framework

Open chgeuer opened this issue 7 years ago • 1 comments

Delegate resolving of relative URLs to Java framework, instead of solving that in custom code.

Fix swagger-api/swagger-parser#750

Repro

String rootPath = "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/specification/storage/resource-manager/Microsoft.Storage/stable/2018-02-01/storage.json";
String relativePath = "../../../../../common-types/resource-management/v1/types.json";
String expected="https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/specification/common-types/resource-management/v1/types.json";
System.out.println(io.swagger.parser.util.RefUtils.buildUrl(rootPath, relativePath));

results in an ArrayIndexOutOfBoundsException:

Exception in thread "main" java.lang.RuntimeException: Unable to load RELATIVE ref: ../../../../../common-types/resource-management/v1/types.json path:https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/specification/storage/resource-manager/Microsoft.Storage/stable/2018-02-01/storage.json
        at io.swagger.parser.util.RefUtils.readExternalUrlRef(RefUtils.java:68)
        at io.swagger.parser.ResolverCache.loadRef(ResolverCache.java:116)
        at io.swagger.parser.processors.ParameterProcessor.processParameters(ParameterProcessor.java:37)
        at io.swagger.parser.processors.OperationProcessor.processOperation(OperationProcessor.java:26)
        at io.swagger.parser.processors.PathsProcessor.processPaths(PathsProcessor.java:101)
        at io.swagger.parser.SwaggerResolver.resolve(SwaggerResolver.java:50)
        at io.swagger.parser.SwaggerParser.read(SwaggerParser.java:71)
        at io.swagger.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:431)
        at io.swagger.codegen.cmd.Generate.run(Generate.java:283)
        at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
Caused by: java.lang.ArrayIndexOutOfBoundsException
        at java.lang.System.arraycopy(Native Method)
        at io.swagger.parser.util.RefUtils.buildUrl(RefUtils.java:108)
        at io.swagger.parser.util.RefUtils.readExternalUrlRef(RefUtils.java:63)

I experienced that when using the codegen CLI:

java -jar swagger-codegen-cli.jar generate \
    -l elixir \
    -i "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/specification/storage/resource-manager/Microsoft.Storage/stable/2018-02-01/storage.json"

chgeuer avatar Jul 05 '18 08:07 chgeuer

Hi! thanks for this PR, can you please add a unit test with some cases before I merge.

gracekarina avatar Jul 20 '18 01:07 gracekarina

replaced by 2082

frantuma avatar May 01 '24 13:05 frantuma