func (p *schemaPool) GetDocument(reference gojsonreference.JsonReference) (*schemaPoolDocument, error) { if internalLogEnabled { internalLog("Get Document ( %s )", reference.String()) } var err error // It is not possible to load anything that is not canonical... if !reference.IsCanonical() { return nil, errors.New(formatErrorDescription( Locale.ReferenceMustBeCanonical(), ErrorDetails{"reference": reference}, )) } refToUrl := reference refToUrl.GetUrl().Fragment = "" var spd *schemaPoolDocument // Try to find the requested document in the pool for k := range p.schemaPoolDocuments { if k == refToUrl.String() { spd = p.schemaPoolDocuments[k] } } if spd != nil { if internalLogEnabled { internalLog(" From pool") } return spd, nil } jsonReferenceLoader := NewReferenceLoader(reference.String()) document, err := jsonReferenceLoader.loadJSON() if err != nil { return nil, err } spd = &schemaPoolDocument{Document: document} // add the document to the pool for potential later use p.schemaPoolDocuments[refToUrl.String()] = spd return spd, nil }
func (p *schemaPool) GetDocument(reference gojsonreference.JsonReference) (*schemaPoolDocument, error) { internalLog("Get Document ( %s )", reference.String()) var err error // It is not possible to load anything that is not canonical... if !reference.IsCanonical() { return nil, errors.New(fmt.Sprintf(ERROR_MESSAGE_REFERENCE_X_MUST_BE_CANONICAL, reference)) } refToUrl := reference refToUrl.GetUrl().Fragment = "" var spd *schemaPoolDocument // Try to find the requested document in the pool for k := range p.schemaPoolDocuments { if k == refToUrl.String() { spd = p.schemaPoolDocuments[k] } } if spd != nil { internalLog(" From pool") return spd, nil } jsonReferenceLoader := NewReferenceLoader(reference.String()) document, err := jsonReferenceLoader.loadJSON() if err != nil { return nil, err } spd = &schemaPoolDocument{Document: document} // add the document to the pool for potential later use p.schemaPoolDocuments[refToUrl.String()] = spd return spd, nil }