Try changing the ref to "$ref": "./microformats/currency.json"

 

 

From: <[email protected]> on behalf of Austin 
<[email protected]>
Reply-To: "[email protected]" 
<[email protected]>
Date: Thursday, July 27, 2017 at 11:38
To: Swagger <[email protected]>
Subject: Re: Another Swagger re-use via $ref question

 

My less than ideal work around for now has been to move all my collection 
schema definitions into the same directory as my item schema definitions. This 
seems to prevent the reference resolver from getting the paths mixed up.

On Thursday, July 27, 2017 at 10:17:53 AM UTC-5, Austin wrote: 

Hello, 

 

   I've ran into a kind of funky problem where I have two operation objects 
with similar but not identical schemas. The get operation has a schema 
reference that points to a json file containing a standardized mason wrapper 
with an items collection in it. This items collection is a list of individual 
objects (in this case invoices). Then we also have a put operation under the 
same path where we can update a single object and it's schema points to just 
the individual objects schema file.  The problem I am seeing is that when 
Swagger UI attempts to resolve the json references it gets one reference right 
but then the later reference throws it off where it looks like it is trying to 
use the wrong location as it's baseDoc path.  Also it appears SwaggerCLI has no 
problem with the $refs as they are currently and prior to referencing the 
individual instance of the schema directly from the put operation all the 
references would resolve fine.  I've tested this in Swagger UI 3.0.21.

 

 

swagger.json  Path object

"ws/v1/customers/invoices/{invoiceId}": {

"parameters": [

{

"name": "invoiceId",

"in": "path",

"description": "The Invoice id.",

"required": true,

"type": "string"

}

],

"get": {

"summary": "Returns the specified Invoice.",

"tags": ["invoices"],

"responses": {

"200": {

"description": "The invoice requested in our standard collection object",

"schema": {

"$ref": "../collections/invoices.json"

}

}

}

},

"put": {

"summary": "Updates the specified Invoice.",

"tags": ["invoices"],

"parameters": [

{

"name": "Invoice",

"in": "body",

"description": "The updated Invoice.",

"required": true,

"schema": {

"$ref": "../schemas/invoice.json"

}

}

],

"responses": {

"200": {

"description": "A paged collection of Invoices",

"schema": {

"$ref": "../schemas/invoice.json"

}

}

}

}

}

 

 

/collections/invoices.json

{

"type": "object",

"properties":{

"@namespace": {

"type": "object",

"properties": {

"uvrel": {

"type": "string"

}

}

},

"items": {

"type": "array",

"items":{

"$ref":"../schemas/invoice.json"

}

},

"@controls": {

"type":"object",

"properties": {

"describedby": {

"type": "object",

"properties": {

"href": {

"type": "string"

}

}

},

"self": {

"type": "object",

"properties": {

"href": {

"type": "string"

}

}

}

}

}

}

}

 

 

/schemas/invoice.json

{

"title": "customer-invoice",

"properties": {

"totalAmount": {

"description": "Invoice Total Amount",

"type": "number"

},

"currency": {

"$ref": "microformats/currency.json"

},

...

}

"type": "object",

"description": "Invoice header resource"

}

 

 

/schemas/microformats/currency.json

{

    "properties": {

        "description": {

            "description": "Name of currency",

            "type": "string"

        },

        "code": {

            "pattern": "[A-Z]{3}",

            "description": "Currency code",

            "type": "string"

        }

    },

    "description": "Currency object",

    "type": "object"

}

 

 

Swagger UI throws errors for any microformats we use within our schemas as 
follows

 
Resolver error at 
paths./ws/v1/customers/invoices/{invoice}.put.responses.200.schema.properties.items.items.properties.currency.$ref
Could not resolve reference because of: Not Found





Javascript Console contains

n {message: "Could not resolve reference because of: Not Found", originalError: 
Error: Not Found

    at http://development:8080/system/api/swagger-ui-bundle.js:52:174646

…, pointer: "", $ref: "microformats/currency.json", baseDoc: 
"/system/api/ref/collections/invoices.json"…}$ref: 
"microformats/currency.json"baseDoc: 
"/system/api/ref/collections/invoices.json"fullPath: Array(12)level: 
"error"line: 40message: "Could not resolve reference because of: Not 
Found"originalError: Error: Not Found

    at http://development:8080/system/api/swagger-ui-bundle.js:52:174646

    at <anonymous>path: 
"paths./ws/v1/customers/invoices/{invoice}.put.responses.200.schema.properties.items.items.properties.currency.$ref"pointer:
 ""source: "resolver"type: "thrown"stack: "JSONRefError↵    at o 
(http://development:8080/system/api/swagger-ui-bundle.js:52:197768)↵    at 
http://development:8080/system/api/swagger-ui-bundle.js:52:200499↵    at 
<anonymous>"__proto__: Error

    at r (http://development:8080/system/api/swagger-ui-bundle.js:52:178095)

    at Object.<anonymous> 
(http://development:8080/system/api/swagger-ui-bundle.js:52:199857)

    at t (http://development:8080/system/api/swagger-ui-bundle.js:52:167480)

    at Object.e.exports.Object.defineProperty.value 
(http://development:8080/system/api/swagger-ui-bundle.js:52:187615)

    at t (http://development:8080/system/api/swagger-ui-bundle.js:52:167480)

    at Object.e.exports.Object.defineProperty.value 
(http://development:8080/system/api/swagger-ui-bundle.js:52:187214)

    at t (http://development:8080/system/api/swagger-ui-bundle.js:52:167480)

    at Object.e.exports.Object.defineProperty.value 
(http://development:8080/system/api/swagger-ui-bundle.js:52:178871)

    at t (http://development:8080/system/api/swagger-ui-bundle.js:52:167480)

    at Object.<anonymous> 
(http://development:8080/system/api/swagger-ui-bundle.js:52:201598)

(anonymous) @ swagger-ui-bundle.js:12

(anonymous) @ swagger-ui-bundle.js:12

swagger-ui-bundle.js:12 n {message: "Could not resolve reference because of: 
Not Found", originalError: Error: Not Found

    at http://development:8080/system/api/swagger-ui-bundle.js:52:174646

…, pointer: "", $ref: "microformats/currency.json", baseDoc: 
"/system/api/ref/collections/invoices.json"…}        <-- This bit in particular 
looks like part of the problem since it is ending up with the wrong baseDoc 
path.

(anonymous) @ swagger-ui-bundle.js:12

(anonymous) @ swagger-ui-bundle.js:12

-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.


-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to