From 2fb2b6264affc09c241ee369a62817ed670b9d3c Mon Sep 17 00:00:00 2001 From: Ross Stanton Date: Tue, 15 Dec 2015 20:49:34 +0000 Subject: [PATCH 1/2] Fixed issue in which a null pointer exception was generated if a internal reference existed within a external referenced spec. This currently leaves the internal reference unprocessed. --- .../parser/processors/ExternalRefProcessor.java | 12 ++++++++++-- .../parser/processors/ExternalRefProcessorTest.java | 11 ++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java index 50f13f1e1f..43dd624435 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java @@ -11,7 +11,7 @@ import static io.swagger.parser.util.RefUtils.computeDefinitionName; import static io.swagger.parser.util.RefUtils.deconflictName; - +import static io.swagger.parser.util.RefUtils.isAnExternalRefFormat; public final class ExternalRefProcessor { @@ -24,8 +24,12 @@ public ExternalRefProcessor(ResolverCache cache, Swagger swagger) { } public String processRefToExternalDefinition(String $ref, RefFormat refFormat) { + System.out.println("Processing: "+$ref); final Model model = cache.loadRef($ref, refFormat, Model.class); + if(model==null){ + System.out.println("Model is null for "+$ref);; + } String newRef; Map definitions = swagger.getDefinitions(); @@ -64,7 +68,11 @@ public String processRefToExternalDefinition(String $ref, RefFormat refFormat) { for (Map.Entry prop : subProps.entrySet()) { if (prop.getValue() instanceof RefProperty) { RefProperty subRef = (RefProperty) prop.getValue(); - subRef.set$ref(processRefToExternalDefinition(subRef.get$ref(), subRef.getRefFormat())); + + System.out.println(subRef.get$ref()+"," +subRef.getRefFormat()); + + if(isAnExternalRefFormat(subRef.getRefFormat())) + subRef.set$ref(processRefToExternalDefinition(subRef.get$ref(), subRef.getRefFormat())); } } } diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ExternalRefProcessorTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ExternalRefProcessorTest.java index ac07c238db..e2a5fd7736 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ExternalRefProcessorTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/processors/ExternalRefProcessorTest.java @@ -134,6 +134,16 @@ public void testNestedExternalRefs(@Injectable final Model mockedModel){ final String addressURL = "http://my.company.com/path/to/address.json#/definitions/Address"; address.set$ref(addressURL); custProps.put("Address", address); + + //Create a 'local' reference to something in #/definitions, this should be ignored a no longer result in a null pointer exception + final String loyaltyURL = "#/definitions/LoyaltyScheme"; + + RefProperty loyaltyProp = new RefProperty(); + loyaltyProp.set$ref(loyaltyURL); + loyaltyProp.setName("LoyaltyCardNumber"); + loyaltyProp.setRequired(true); + + custProps.put("Loyalty", loyaltyProp); customerModel.setProperties(custProps); //create address model, add Contact Ref Property to it @@ -174,6 +184,5 @@ public void testNestedExternalRefs(@Injectable final Model mockedModel){ assertTrue(testedSwagger.getDefinitions().get("Customer")!=null); assertTrue(testedSwagger.getDefinitions().get("Contact")!=null); assertTrue(testedSwagger.getDefinitions().get("Address")!=null); - assertTrue(testedSwagger.getDefinitions().size()==3); } } From 7b1ac6d954733e576b6e985ec4493619e9f646ae Mon Sep 17 00:00:00 2001 From: Ross Stanton Date: Tue, 15 Dec 2015 20:51:13 +0000 Subject: [PATCH 2/2] Fixed issue in which a null pointer exception was generated if an internal reference existed within a external referenced spec. This currently leaves the internal reference unprocessed. --- .../swagger/parser/processors/ExternalRefProcessor.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java index 43dd624435..2e5075487a 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java @@ -24,12 +24,8 @@ public ExternalRefProcessor(ResolverCache cache, Swagger swagger) { } public String processRefToExternalDefinition(String $ref, RefFormat refFormat) { - System.out.println("Processing: "+$ref); final Model model = cache.loadRef($ref, refFormat, Model.class); - if(model==null){ - System.out.println("Model is null for "+$ref);; - } String newRef; Map definitions = swagger.getDefinitions(); @@ -68,9 +64,7 @@ public String processRefToExternalDefinition(String $ref, RefFormat refFormat) { for (Map.Entry prop : subProps.entrySet()) { if (prop.getValue() instanceof RefProperty) { RefProperty subRef = (RefProperty) prop.getValue(); - - System.out.println(subRef.get$ref()+"," +subRef.getRefFormat()); - + if(isAnExternalRefFormat(subRef.getRefFormat())) subRef.set$ref(processRefToExternalDefinition(subRef.get$ref(), subRef.getRefFormat())); }