NONRTRIC SME fix servicemanager sonar 66/13466/1 master
authoraravind.est <aravindhan.a@est.tech>
Fri, 27 Sep 2024 10:22:16 +0000 (11:22 +0100)
committeraravind.est <aravindhan.a@est.tech>
Fri, 27 Sep 2024 10:22:16 +0000 (11:22 +0100)
Servicemanager sonar job missing the go.mod and it is fixed.

Issue-ID: NONRTRIC-1033
Change-Id: I86b3b74c1a34a9b2b7cc263ab545b939012350f1
Signed-off-by: aravind.est <aravindhan.a@est.tech>
28 files changed:
.readthedocs.yaml
.releases/container-release-capif.yaml [new file with mode: 0644]
.releases/container-release-sm.yaml [new file with mode: 0644]
capifcore/build-capifcore-ubuntu.sh
capifcore/container-tag.yaml
capifcore/internal/publishservice/publishservice.go
docs/api-docs.rst [new file with mode: 0644]
docs/developer-guide.rst
docs/index.rst
docs/openapi/Discover_Service.html
docs/openapi/Events.html
docs/openapi/Invoker_Management.html
docs/openapi/Provider_Management.html
docs/openapi/Publish_Service.html
docs/openapi/Security.html
docs/overview.rst
docs/release-notes.rst
servicemanager/.env.example
servicemanager/README.md
servicemanager/build-servicemanager-ubuntu.sh
servicemanager/container-tag.yaml
servicemanager/internal/discoverservice/discoverservice_test.go
servicemanager/internal/envreader/envreader.go
servicemanager/internal/publishservice/publishservice.go
servicemanager/internal/publishservice/publishservice_test.go
servicemanager/internal/publishserviceapi/typeupdate.go
servicemanager/main.go
servicemanager/mockkong/kong_mock.go

index 95da239..3fd1760 100644 (file)
@@ -1,5 +1,6 @@
 #  ============LICENSE_START===============================================
 #  Copyright (C) 2022-2023 Nordix Foundation. All rights reserved.
+#  Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
 #  ========================================================================
 #  Licensed under the Apache License, Version 2.0 (the "License");
 #  you may not use this file except in compliance with the License.
diff --git a/.releases/container-release-capif.yaml b/.releases/container-release-capif.yaml
new file mode 100644 (file)
index 0000000..0cf91e5
--- /dev/null
@@ -0,0 +1,11 @@
+---
+distribution_type: container
+container_release_tag: 1.3.1
+tag_release: false
+container_pull_registry: nexus3.o-ran-sc.org:10004
+container_push_registry: nexus3.o-ran-sc.org:10002
+project: nonrtric
+ref: 36718abc0fb386770a182c2c01358e1ce3621c75
+containers:
+    - name: nonrtric-plt-capifcore
+      version: 1.3.1
diff --git a/.releases/container-release-sm.yaml b/.releases/container-release-sm.yaml
new file mode 100644 (file)
index 0000000..f46c63f
--- /dev/null
@@ -0,0 +1,10 @@
+---
+distribution_type: container
+container_release_tag: 0.1.2
+container_pull_registry: nexus3.o-ran-sc.org:10004
+container_push_registry: nexus3.o-ran-sc.org:10002
+project: nonrtric
+ref: 36718abc0fb386770a182c2c01358e1ce3621c75
+containers:
+    - name: nonrtric-plt-servicemanager
+      version: 0.1.2
index 9bac724..934341f 100755 (executable)
@@ -1,7 +1,8 @@
 #!/bin/bash
 ##############################################################################
 #
-#   Copyright (C) 2022: Nordix Foundation
+#   Copyright (C) 2022-2023: Nordix Foundation
+#   Copyright (C) 2023-2024: OpenInfra Foundation Europe
 #
 #   Licensed under the Apache License, Version 2.0 (the "License");
 #   you may not use this file except in compliance with the License.
@@ -28,7 +29,7 @@ go version
 cd capifcore/
 
 # install the go coverage tool helper
-go install github.com/ory/go-acc
+go install github.com/ory/go-acc@v0.2.8
 
 go get github.com/stretchr/testify/mock@v1.7.1
 
index f17eeca..9b9cc34 100644 (file)
@@ -20,4 +20,4 @@
 # By default this file is in the docker build directory,
 # but the location can configured in the JJB template.
 ---
-tag: 1.3.1
+tag: 1.4.0
index 54a7f67..a267acf 100644 (file)
@@ -121,16 +121,28 @@ func join(a, b []publishapi.ServiceAPIDescription) []publishapi.ServiceAPIDescri
 
 // Retrieve all published APIs.
 func (ps *PublishService) GetApfIdServiceApis(ctx echo.Context, apfId string) error {
-       if !ps.serviceRegister.IsPublishingFunctionRegistered(apfId) {
-               errorMsg := fmt.Sprintf("Unable to get the service due to %s api is only available for publishers", apfId)
-               return sendCoreError(ctx, http.StatusNotFound, errorMsg)
-       }
+       ps.lock.Lock()
+       serviceDescriptions, ok := ps.publishedServices[apfId]
+       ps.lock.Unlock()
 
-       serviceDescriptions := ps.publishedServices[apfId]
-       err := ctx.JSON(http.StatusOK, serviceDescriptions)
-       if err != nil {
-               // Something really bad happened, tell Echo that our handler failed
-               return err
+       if ok {
+               err := ctx.JSON(http.StatusOK, serviceDescriptions)
+               if err != nil {
+                       // Something really bad happened, tell Echo that our handler failed
+                       return err
+               }
+       } else {
+               if !ps.serviceRegister.IsPublishingFunctionRegistered(apfId) {
+                       errorMsg := fmt.Sprintf("Unable to get the service due to %s api is only available for publishers", apfId)
+                       return sendCoreError(ctx, http.StatusNotFound, errorMsg)
+               }
+
+               serviceDescriptions = []publishapi.ServiceAPIDescription{}
+               err := ctx.JSON(http.StatusOK, serviceDescriptions)
+               if err != nil {
+                       // Something really bad happened, tell Echo that our handler failed
+                       return err
+               }
        }
        return nil
 }
diff --git a/docs/api-docs.rst b/docs/api-docs.rst
new file mode 100644 (file)
index 0000000..7c74fff
--- /dev/null
@@ -0,0 +1,29 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright (C) 2024 OpenInfra Foundation Europe
+
+.. _api_docs:
+
+========
+API Docs
+========
+
+To view the Open API specs common to Service Manager and CAPIF, please see the following.
+
+.. raw:: html
+
+    <ul>
+    <li><a href="./Provider_Management.html">Provider Management</a></li>
+    <li><a href="./Publish_Service.html">Publish Service</a></li>
+    <li><a href="./Invoker_Management.html">Invoker Management</a></li>
+    <li><a href="./Discover_Service.html">Discover Service</a></li>
+    </ul>
+
+To view the Open API specs supported by CAPIF only, please see below.
+
+.. raw:: html
+
+    <ul>
+    <li><a href="./Events.html">Events</a></li>
+    <li><a href="./Security.html">Security</a></li>
+    </ul>
index b83b074..c89f019 100644 (file)
@@ -6,24 +6,6 @@
 Developer Guide
 ===============
 
-This document provides a quick start for developers of the Non-RT RIC Service Management & Exposure. Additional developer guides are available on the `O-RAN SC NONRTRIC Developer wiki <https://wiki.o-ran-sc.org/display/RICNR/Release+F>`_.
+This document provides a quick start for developers of the Non-RT RIC Service Management & Exposure. Additional developer guides are available on the `O-RAN SC NONRTRIC Developer wiki <https://wiki.o-ran-sc.org/display/RICNR/Release+J>`_.
 
-To build and run the Service Manager implementation, see the README.md file in the "servicemanager" folder. To build and run the CAPIF Core implementation, see the README.md file in the "capifcore" folder. To view the Open API specs common to Service Manager and CAPIF, please see the following.
-
-.. raw:: html
-
-    <ul>
-    <li><a href="./Provider_Management.html">Provider Management</a></li>
-    <li><a href="./Publish_Service.html">Publish Service</a></li>
-    <li><a href="./Invoker_Management.html">Invoker Management</a></li>
-    <li><a href="./Discover_Service.html">Discover Service</a></li>
-    </ul>
-
-To view the Open API specs supported by CAPIF only, please see below.
-
-.. raw:: html
-
-    <ul>
-    <li><a href="./Events.html">Events</a></li>
-    <li><a href="./Security.html">Security</a></li>
-    </ul>
+To build and run the Service Manager implementation, see the README.md file in the "servicemanager" folder. To build and run the CAPIF Core implementation, see the README.md file in the "capifcore" folder.
index 1a586d3..9bd14e1 100644 (file)
@@ -1,6 +1,7 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
 .. SPDX-License-Identifier: CC-BY-4.0
 .. Copyright (C) 2022-2023 Nordix
+.. Copyright (C) 2024 OpenInfra Foundation Europe
 
 Non-RT RIC Service Management and Exposure (SME)
 ================================================
@@ -12,3 +13,4 @@ Non-RT RIC Service Management and Exposure (SME)
    ./overview.rst
    ./developer-guide.rst
    ./release-notes.rst
+   ./api-docs.rst
index d3ce2b2..e6becdb 100644 (file)
@@ -1611,6 +1611,78 @@ ul.nav-tabs {
   "description" : "Represents the API version information."
 };
 
+        defs["Altitude"] = {
+  "maximum" : 32767,
+  "minimum" : -32767,
+  "type" : "number",
+  "description" : "Indicates value of altitude.",
+  "format" : "double"
+};
+        defs["Angle"] = {
+  "maximum" : 360,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of angle."
+};
+        defs["Confidence"] = {
+  "maximum" : 100,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of confidence."
+};
+        defs["DateTime"] = {
+  "type" : "string",
+  "description" : "string with format \"date-time\" as defined in OpenAPI.",
+  "format" : "date-time"
+};
+        defs["Float"] = {
+  "type" : "number",
+  "description" : "string with format 'float' as defined in OpenAPI.",
+  "format" : "float"
+};
+        defs["InnerRadius"] = {
+  "maximum" : 327675,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of the inner radius.",
+  "format" : "int32"
+};
+        defs["Ipv4Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166."
+};
+        defs["Ipv6Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used."
+};
+        defs["Orientation"] = {
+  "maximum" : 180,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of orientation angle."
+};
+        defs["Port"] = {
+  "maximum" : 65535,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer with valid values between 0 and 65535."
+};
+        defs["SupportedFeatures"] = {
+  "pattern" : "^[A-Fa-f0-9]*$",
+  "type" : "string",
+  "description" : "A string used to indicate the features supported by an API that is used as defined in clause  6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in  hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\",  \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in  table 5.2.2-3. The most significant character representing the highest-numbered features shall  appear first in the string, and the character representing features 1 to 4 shall appear last  in the string. The list of features and their numbering (starting with 1) are defined  separately for each API. If the string contains a lower number of characters than there are  defined features for an API, all features that would be represented by characters that are not  present in the string are not supported.\n"
+};
+        defs["Uncertainty"] = {
+  "minimum" : 0,
+  "type" : "number",
+  "description" : "Indicates value of uncertainty.",
+  "format" : "float"
+};
+        defs["Uri"] = {
+  "type" : "string",
+  "description" : "string providing an URI formatted according to IETF RFC 3986."
+};
+
     var errs = {};
   </script>
 
@@ -2337,11 +2409,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2411,11 +2485,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2501,11 +2577,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2591,11 +2669,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2665,11 +2745,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2739,11 +2821,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2813,11 +2897,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2887,11 +2973,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2961,11 +3049,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3035,11 +3125,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3109,11 +3201,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3183,11 +3277,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3245,11 +3341,13 @@ Features supported by the discovered service API indicated by api-name parameter
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4387,7 +4485,7 @@ var JSONSchemaView = (function () {
     // Determine if a schema is an array
     this.isArray = !this.isAny && this.schema && this.schema.type === 'array';
 
-    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf);
+    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf);
 
     // Determine if a schema is a primitive
     this.isPrimitive = !this.isAny && !this.isArray && !this.isObject;
index e024966..752aa9c 100644 (file)
@@ -2015,6 +2015,113 @@ ul.nav-tabs {
   "description" : "Represents the configuration information for the delivery of notifications over Websockets."
 };
 
+        defs["Altitude"] = {
+  "maximum" : 32767,
+  "minimum" : -32767,
+  "type" : "number",
+  "description" : "Indicates value of altitude.",
+  "format" : "double"
+};
+        defs["Angle"] = {
+  "maximum" : 360,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of angle."
+};
+        defs["Confidence"] = {
+  "maximum" : 100,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of confidence."
+};
+        defs["DateTime"] = {
+  "type" : "string",
+  "description" : "string with format \"date-time\" as defined in OpenAPI.",
+  "format" : "date-time"
+};
+        defs["DateTime_1"] = {
+  "type" : "string",
+  "description" : "string with format 'date-time' as defined in OpenAPI.",
+  "format" : "date-time"
+};
+        defs["DurationMs"] = {
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer identifying a period of time in units of milliseconds."
+};
+        defs["DurationSec"] = {
+  "type" : "integer",
+  "description" : "indicating a time in seconds."
+};
+        defs["Float"] = {
+  "type" : "number",
+  "description" : "string with format 'float' as defined in OpenAPI.",
+  "format" : "float"
+};
+        defs["InnerRadius"] = {
+  "maximum" : 327675,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of the inner radius.",
+  "format" : "int32"
+};
+        defs["Ipv4Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166."
+};
+        defs["Ipv4Addr_1"] = {
+  "pattern" : "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$",
+  "type" : "string",
+  "description" : "String identifying a IPv4 address formatted in the 'dotted decimal' notation as defined in RFC 1166.\n",
+  "example" : "198.51.100.1"
+};
+        defs["Ipv6Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used."
+};
+        defs["Link"] = {
+  "type" : "string",
+  "description" : "string formatted according to IETF RFC 3986 identifying a referenced resource."
+};
+        defs["Orientation"] = {
+  "maximum" : 180,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of orientation angle."
+};
+        defs["Port"] = {
+  "maximum" : 65535,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer with valid values between 0 and 65535."
+};
+        defs["SamplingRatio"] = {
+  "maximum" : 100,
+  "minimum" : 1,
+  "type" : "integer",
+  "description" : "Unsigned integer indicating Sampling Ratio (see clauses 4.15.1 of 3GPP TS 23.502), expressed in percent. \n"
+};
+        defs["SupportedFeatures"] = {
+  "pattern" : "^[A-Fa-f0-9]*$",
+  "type" : "string",
+  "description" : "A string used to indicate the features supported by an API that is used as defined in clause  6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in  hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\",  \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in  table 5.2.2-3. The most significant character representing the highest-numbered features shall  appear first in the string, and the character representing features 1 to 4 shall appear last  in the string. The list of features and their numbering (starting with 1) are defined  separately for each API. If the string contains a lower number of characters than there are  defined features for an API, all features that would be represented by characters that are not  present in the string are not supported.\n"
+};
+        defs["Uinteger"] = {
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned Integer, i.e. only value 0 and integers above 0 are permissible."
+};
+        defs["Uncertainty"] = {
+  "minimum" : 0,
+  "type" : "number",
+  "description" : "Indicates value of uncertainty.",
+  "format" : "float"
+};
+        defs["Uri"] = {
+  "type" : "string",
+  "description" : "string providing an URI formatted according to IETF RFC 3986."
+};
+
     var errs = {};
   </script>
 
@@ -2116,7 +2223,9 @@ All rights reserved.
   &quot;supportedFeatures&quot; : &quot;supportedFeatures&quot;,
   &quot;eventReq&quot; : {
     &quot;grpRepTime&quot; : 0,
-    &quot;partitionCriteria&quot; : [ null, null ],
+    &quot;notifMethod&quot; : &quot;PERIODIC&quot;,
+    &quot;partitionCriteria&quot; : [ &quot;TAC&quot;, &quot;TAC&quot; ],
+    &quot;notifFlag&quot; : &quot;ACTIVATE&quot;,
     &quot;monDur&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;,
     &quot;immRep&quot; : true,
     &quot;maxReportNbr&quot; : 0,
@@ -2127,7 +2236,7 @@ All rights reserved.
     &quot;requestWebsocketUri&quot; : true,
     &quot;websocketUri&quot; : &quot;websocketUri&quot;
   },
-  &quot;events&quot; : [ null, null ],
+  &quot;events&quot; : [ &quot;SERVICE_API_AVAILABLE&quot;, &quot;SERVICE_API_AVAILABLE&quot; ],
   &quot;requestTestNotification&quot; : true
 }'
 </code></pre>
@@ -2415,6 +2524,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -2500,11 +2611,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2590,11 +2703,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2664,11 +2779,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2738,11 +2855,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2812,11 +2931,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2886,11 +3007,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2960,11 +3083,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3034,11 +3159,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3108,11 +3235,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3182,11 +3311,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3256,11 +3387,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3318,11 +3451,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3696,11 +3831,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3770,11 +3907,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3860,11 +3999,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3950,11 +4091,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4024,11 +4167,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4098,11 +4243,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4172,11 +4319,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4246,11 +4395,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4320,11 +4471,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4394,11 +4547,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4456,11 +4611,13 @@ Identifier of an individual Events Subscription
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5598,7 +5755,7 @@ var JSONSchemaView = (function () {
     // Determine if a schema is an array
     this.isArray = !this.isAny && this.schema && this.schema.type === 'array';
 
-    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf);
+    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf);
 
     // Determine if a schema is a primitive
     this.isPrimitive = !this.isAny && !this.isArray && !this.isObject;
index bad6278..f87e07a 100644 (file)
@@ -1703,6 +1703,82 @@ ul.nav-tabs {
   "description" : "Represents the configuration information for the delivery of notifications over Websockets."
 };
 
+        defs["Altitude"] = {
+  "maximum" : 32767,
+  "minimum" : -32767,
+  "type" : "number",
+  "description" : "Indicates value of altitude.",
+  "format" : "double"
+};
+        defs["Angle"] = {
+  "maximum" : 360,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of angle."
+};
+        defs["Confidence"] = {
+  "maximum" : 100,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of confidence."
+};
+        defs["DateTime"] = {
+  "type" : "string",
+  "description" : "string with format \"date-time\" as defined in OpenAPI.",
+  "format" : "date-time"
+};
+        defs["Float"] = {
+  "type" : "number",
+  "description" : "string with format 'float' as defined in OpenAPI.",
+  "format" : "float"
+};
+        defs["InnerRadius"] = {
+  "maximum" : 327675,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of the inner radius.",
+  "format" : "int32"
+};
+        defs["Ipv4Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166."
+};
+        defs["Ipv6Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used."
+};
+        defs["Link"] = {
+  "type" : "string",
+  "description" : "string formatted according to IETF RFC 3986 identifying a referenced resource."
+};
+        defs["Orientation"] = {
+  "maximum" : 180,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of orientation angle."
+};
+        defs["Port"] = {
+  "maximum" : 65535,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer with valid values between 0 and 65535."
+};
+        defs["SupportedFeatures"] = {
+  "pattern" : "^[A-Fa-f0-9]*$",
+  "type" : "string",
+  "description" : "A string used to indicate the features supported by an API that is used as defined in clause  6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in  hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\",  \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in  table 5.2.2-3. The most significant character representing the highest-numbered features shall  appear first in the string, and the character representing features 1 to 4 shall appear last  in the string. The list of features and their numbering (starting with 1) are defined  separately for each API. If the string contains a lower number of characters than there are  defined features for an API, all features that would be represented by characters that are not  present in the string are not supported.\n"
+};
+        defs["Uncertainty"] = {
+  "minimum" : 0,
+  "type" : "number",
+  "description" : "Indicates value of uncertainty.",
+  "format" : "float"
+};
+        defs["Uri"] = {
+  "type" : "string",
+  "description" : "string providing an URI formatted according to IETF RFC 3986."
+};
+
     var errs = {};
   </script>
 
@@ -2074,11 +2150,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2148,11 +2226,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2238,11 +2318,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2328,11 +2410,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2402,11 +2486,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2476,11 +2562,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2550,11 +2638,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2624,11 +2714,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2698,11 +2790,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2772,11 +2866,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2834,11 +2930,13 @@ String identifying an individual on-boarded API invoker resource
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2927,15 +3025,18 @@ String identifying an individual on-boarded API invoker resource
     &quot;description&quot; : &quot;description&quot;,
     &quot;apiSuppFeats&quot; : &quot;apiSuppFeats&quot;,
     &quot;aefProfiles&quot; : [ {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -2956,11 +3057,13 @@ String identifying an individual on-boarded API invoker resource
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -2979,10 +3082,12 @@ String identifying an individual on-boarded API invoker resource
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -3028,25 +3133,28 @@ String identifying an individual on-boarded API invoker resource
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
     }, {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -3067,11 +3175,13 @@ String identifying an individual on-boarded API invoker resource
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -3090,10 +3200,12 @@ String identifying an individual on-boarded API invoker resource
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -3139,12 +3251,12 @@ String identifying an individual on-boarded API invoker resource
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
@@ -3165,15 +3277,18 @@ String identifying an individual on-boarded API invoker resource
     &quot;description&quot; : &quot;description&quot;,
     &quot;apiSuppFeats&quot; : &quot;apiSuppFeats&quot;,
     &quot;aefProfiles&quot; : [ {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -3194,11 +3309,13 @@ String identifying an individual on-boarded API invoker resource
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -3217,10 +3334,12 @@ String identifying an individual on-boarded API invoker resource
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -3266,25 +3385,28 @@ String identifying an individual on-boarded API invoker resource
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
     }, {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -3305,11 +3427,13 @@ String identifying an individual on-boarded API invoker resource
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -3328,10 +3452,12 @@ String identifying an individual on-boarded API invoker resource
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -3377,12 +3503,12 @@ String identifying an individual on-boarded API invoker resource
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
@@ -3679,6 +3805,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -3750,11 +3878,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3813,11 +3943,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3876,11 +4008,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3950,11 +4084,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4040,11 +4176,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4130,11 +4268,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4204,11 +4344,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4278,11 +4420,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4352,11 +4496,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4426,11 +4572,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4500,11 +4648,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4574,11 +4724,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4648,11 +4800,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4722,11 +4876,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4796,11 +4952,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4858,11 +5016,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4951,15 +5111,18 @@ $(document).ready(function() {
     &quot;description&quot; : &quot;description&quot;,
     &quot;apiSuppFeats&quot; : &quot;apiSuppFeats&quot;,
     &quot;aefProfiles&quot; : [ {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -4980,11 +5143,13 @@ $(document).ready(function() {
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5003,10 +5168,12 @@ $(document).ready(function() {
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -5052,25 +5219,28 @@ $(document).ready(function() {
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
     }, {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5091,11 +5261,13 @@ $(document).ready(function() {
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5114,10 +5286,12 @@ $(document).ready(function() {
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -5163,12 +5337,12 @@ $(document).ready(function() {
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
@@ -5189,15 +5363,18 @@ $(document).ready(function() {
     &quot;description&quot; : &quot;description&quot;,
     &quot;apiSuppFeats&quot; : &quot;apiSuppFeats&quot;,
     &quot;aefProfiles&quot; : [ {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5218,11 +5395,13 @@ $(document).ready(function() {
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5241,10 +5420,12 @@ $(document).ready(function() {
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -5290,25 +5471,28 @@ $(document).ready(function() {
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
     }, {
+      &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
       &quot;securityMethods&quot; : [ null, null ],
       &quot;versions&quot; : [ {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5329,11 +5513,13 @@ $(document).ready(function() {
       }, {
         &quot;apiVersion&quot; : &quot;apiVersion&quot;,
         &quot;custOperations&quot; : [ {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         }, {
-          &quot;operations&quot; : [ null, null ],
+          &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+          &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
           &quot;description&quot; : &quot;description&quot;,
           &quot;custOpName&quot; : &quot;custOpName&quot;
         } ],
@@ -5352,10 +5538,12 @@ $(document).ready(function() {
         } ],
         &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
       } ],
+      &quot;dataFormat&quot; : &quot;JSON&quot;,
       &quot;domainName&quot; : &quot;domainName&quot;,
       &quot;aefLocation&quot; : {
         &quot;dcId&quot; : &quot;dcId&quot;,
         &quot;geoArea&quot; : {
+          &quot;shape&quot; : &quot;POINT&quot;,
           &quot;point&quot; : {
             &quot;lon&quot; : 36.988422590534526,
             &quot;lat&quot; : -75.5850925717018
@@ -5401,12 +5589,12 @@ $(document).ready(function() {
       &quot;aefId&quot; : &quot;aefId&quot;,
       &quot;interfaceDescriptions&quot; : [ {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       }, {
         &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-        &quot;securityMethods&quot; : [ null, null ],
+        &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
         &quot;port&quot; : 9606,
         &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
       } ]
@@ -5661,6 +5849,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -5746,11 +5936,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5824,11 +6016,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5898,11 +6092,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5972,11 +6168,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6046,11 +6244,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6120,11 +6320,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6194,11 +6396,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6268,11 +6472,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6342,11 +6548,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6416,11 +6624,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6490,11 +6700,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6564,11 +6776,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6626,11 +6840,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6978,6 +7194,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -7050,11 +7268,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7112,11 +7332,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7186,11 +7408,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7276,11 +7500,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7366,11 +7592,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7440,11 +7668,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7514,11 +7744,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7588,11 +7820,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7662,11 +7896,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7736,11 +7972,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7810,11 +8048,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7884,11 +8124,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7958,11 +8200,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8032,11 +8276,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8094,11 +8340,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9236,7 +9484,7 @@ var JSONSchemaView = (function () {
     // Determine if a schema is an array
     this.isArray = !this.isAny && this.schema && this.schema.type === 'array';
 
-    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf);
+    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf);
 
     // Determine if a schema is a primitive
     this.isPrimitive = !this.isAny && !this.isArray && !this.isObject;
index 3ace452..32183da 100644 (file)
@@ -993,6 +993,16 @@ ul.nav-tabs {
   "description" : "Represents registration information of an individual API provider domain function.\n"
 };
 
+        defs["SupportedFeatures"] = {
+  "pattern" : "^[A-Fa-f0-9]*$",
+  "type" : "string",
+  "description" : "A string used to indicate the features supported by an API that is used as defined in clause  6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in  hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\",  \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in  table 5.2.2-3. The most significant character representing the highest-numbered features shall  appear first in the string, and the character representing features 1 to 4 shall appear last  in the string. The list of features and their numbering (starting with 1) are defined  separately for each API. If the string contains a lower number of characters than there are  defined features for an API, all features that would be represented by characters that are not  present in the string are not supported.\n"
+};
+        defs["Uri"] = {
+  "type" : "string",
+  "description" : "string providing an URI formatted according to IETF RFC 3986."
+};
+
     var errs = {};
   </script>
 
@@ -1094,14 +1104,16 @@ All rights reserved.
     &quot;regInfo&quot; : {
       &quot;apiProvCert&quot; : &quot;apiProvCert&quot;,
       &quot;apiProvPubKey&quot; : &quot;apiProvPubKey&quot;
-    }
+    },
+    &quot;apiProvFuncRole&quot; : &quot;AEF&quot;
   }, {
     &quot;apiProvFuncId&quot; : &quot;apiProvFuncId&quot;,
     &quot;apiProvFuncInfo&quot; : &quot;apiProvFuncInfo&quot;,
     &quot;regInfo&quot; : {
       &quot;apiProvCert&quot; : &quot;apiProvCert&quot;,
       &quot;apiProvPubKey&quot; : &quot;apiProvPubKey&quot;
-    }
+    },
+    &quot;apiProvFuncRole&quot; : &quot;AEF&quot;
   } ],
   &quot;failReason&quot; : &quot;failReason&quot;,
   &quot;regSec&quot; : &quot;regSec&quot;,
@@ -1353,6 +1365,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -1438,11 +1452,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1528,11 +1544,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1602,11 +1620,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1676,11 +1696,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1750,11 +1772,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1824,11 +1848,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1898,11 +1924,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1972,11 +2000,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2046,11 +2076,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2120,11 +2152,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2194,11 +2228,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2256,11 +2292,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2599,11 +2637,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2673,11 +2713,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2763,11 +2805,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2853,11 +2897,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2927,11 +2973,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3001,11 +3049,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3075,11 +3125,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3149,11 +3201,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3223,11 +3277,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3297,11 +3353,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3359,11 +3417,13 @@ String identifying an registered API provider domain resource.
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3432,14 +3492,16 @@ String identifying an registered API provider domain resource.
     &quot;regInfo&quot; : {
       &quot;apiProvCert&quot; : &quot;apiProvCert&quot;,
       &quot;apiProvPubKey&quot; : &quot;apiProvPubKey&quot;
-    }
+    },
+    &quot;apiProvFuncRole&quot; : &quot;AEF&quot;
   }, {
     &quot;apiProvFuncId&quot; : &quot;apiProvFuncId&quot;,
     &quot;apiProvFuncInfo&quot; : &quot;apiProvFuncInfo&quot;,
     &quot;regInfo&quot; : {
       &quot;apiProvCert&quot; : &quot;apiProvCert&quot;,
       &quot;apiProvPubKey&quot; : &quot;apiProvPubKey&quot;
-    }
+    },
+    &quot;apiProvFuncRole&quot; : &quot;AEF&quot;
   } ],
   &quot;failReason&quot; : &quot;failReason&quot;,
   &quot;regSec&quot; : &quot;regSec&quot;,
@@ -3734,6 +3796,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -3805,11 +3869,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3867,11 +3933,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3941,11 +4009,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4031,11 +4101,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4121,11 +4193,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4195,11 +4269,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4269,11 +4345,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4343,11 +4421,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4417,11 +4497,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4491,11 +4573,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4565,11 +4649,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4639,11 +4725,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4713,11 +4801,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4787,11 +4877,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4849,11 +4941,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5201,6 +5295,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -5273,11 +5369,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5335,11 +5433,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5409,11 +5509,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5499,11 +5601,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5589,11 +5693,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5663,11 +5769,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5737,11 +5845,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5811,11 +5921,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5885,11 +5997,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5959,11 +6073,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6033,11 +6149,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6107,11 +6225,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6181,11 +6301,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6255,11 +6377,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6317,11 +6441,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7459,7 +7585,7 @@ var JSONSchemaView = (function () {
     // Determine if a schema is an array
     this.isArray = !this.isAny && this.schema && this.schema.type === 'array';
 
-    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf);
+    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf);
 
     // Determine if a schema is a primitive
     this.isPrimitive = !this.isAny && !this.isArray && !this.isObject;
index bf70259..e34f80a 100644 (file)
@@ -1630,6 +1630,78 @@ ul.nav-tabs {
   "description" : "Represents the API version information."
 };
 
+        defs["Altitude"] = {
+  "maximum" : 32767,
+  "minimum" : -32767,
+  "type" : "number",
+  "description" : "Indicates value of altitude.",
+  "format" : "double"
+};
+        defs["Angle"] = {
+  "maximum" : 360,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of angle."
+};
+        defs["Confidence"] = {
+  "maximum" : 100,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of confidence."
+};
+        defs["DateTime"] = {
+  "type" : "string",
+  "description" : "string with format \"date-time\" as defined in OpenAPI.",
+  "format" : "date-time"
+};
+        defs["Float"] = {
+  "type" : "number",
+  "description" : "string with format 'float' as defined in OpenAPI.",
+  "format" : "float"
+};
+        defs["InnerRadius"] = {
+  "maximum" : 327675,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of the inner radius.",
+  "format" : "int32"
+};
+        defs["Ipv4Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166."
+};
+        defs["Ipv6Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used."
+};
+        defs["Orientation"] = {
+  "maximum" : 180,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Indicates value of orientation angle."
+};
+        defs["Port"] = {
+  "maximum" : 65535,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer with valid values between 0 and 65535."
+};
+        defs["SupportedFeatures"] = {
+  "pattern" : "^[A-Fa-f0-9]*$",
+  "type" : "string",
+  "description" : "A string used to indicate the features supported by an API that is used as defined in clause  6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in  hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\",  \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in  table 5.2.2-3. The most significant character representing the highest-numbered features shall  appear first in the string, and the character representing features 1 to 4 shall appear last  in the string. The list of features and their numbering (starting with 1) are defined  separately for each API. If the string contains a lower number of characters than there are  defined features for an API, all features that would be represented by characters that are not  present in the string are not supported.\n"
+};
+        defs["Uncertainty"] = {
+  "minimum" : 0,
+  "type" : "number",
+  "description" : "Indicates value of uncertainty.",
+  "format" : "float"
+};
+        defs["Uri"] = {
+  "type" : "string",
+  "description" : "string providing an URI formatted according to IETF RFC 3986."
+};
+
     var errs = {};
   </script>
 
@@ -2029,11 +2101,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2103,11 +2177,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2193,11 +2269,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2283,11 +2361,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2357,11 +2437,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2431,11 +2513,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2505,11 +2589,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2579,11 +2665,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2653,11 +2741,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2727,11 +2817,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2801,11 +2893,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2863,11 +2957,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2941,15 +3037,18 @@ pub fn main() {
   &quot;description&quot; : &quot;description&quot;,
   &quot;apiSuppFeats&quot; : &quot;apiSuppFeats&quot;,
   &quot;aefProfiles&quot; : [ {
+    &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
     &quot;securityMethods&quot; : [ null, null ],
     &quot;versions&quot; : [ {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -2970,11 +3069,13 @@ pub fn main() {
     }, {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -2993,10 +3094,12 @@ pub fn main() {
       } ],
       &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
     } ],
+    &quot;dataFormat&quot; : &quot;JSON&quot;,
     &quot;domainName&quot; : &quot;domainName&quot;,
     &quot;aefLocation&quot; : {
       &quot;dcId&quot; : &quot;dcId&quot;,
       &quot;geoArea&quot; : {
+        &quot;shape&quot; : &quot;POINT&quot;,
         &quot;point&quot; : {
           &quot;lon&quot; : 36.988422590534526,
           &quot;lat&quot; : -75.5850925717018
@@ -3042,25 +3145,28 @@ pub fn main() {
     &quot;aefId&quot; : &quot;aefId&quot;,
     &quot;interfaceDescriptions&quot; : [ {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     }, {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     } ]
   }, {
+    &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
     &quot;securityMethods&quot; : [ null, null ],
     &quot;versions&quot; : [ {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -3081,11 +3187,13 @@ pub fn main() {
     }, {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -3104,10 +3212,12 @@ pub fn main() {
       } ],
       &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
     } ],
+    &quot;dataFormat&quot; : &quot;JSON&quot;,
     &quot;domainName&quot; : &quot;domainName&quot;,
     &quot;aefLocation&quot; : {
       &quot;dcId&quot; : &quot;dcId&quot;,
       &quot;geoArea&quot; : {
+        &quot;shape&quot; : &quot;POINT&quot;,
         &quot;point&quot; : {
           &quot;lon&quot; : 36.988422590534526,
           &quot;lat&quot; : -75.5850925717018
@@ -3153,12 +3263,12 @@ pub fn main() {
     &quot;aefId&quot; : &quot;aefId&quot;,
     &quot;interfaceDescriptions&quot; : [ {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     }, {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     } ]
@@ -3450,6 +3560,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -3536,11 +3648,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3626,11 +3740,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3700,11 +3816,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3774,11 +3892,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3848,11 +3968,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3922,11 +4044,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3996,11 +4120,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4070,11 +4196,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4144,11 +4272,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4218,11 +4348,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4292,11 +4424,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4354,11 +4488,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4725,11 +4861,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4799,11 +4937,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4889,11 +5029,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4979,11 +5121,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5053,11 +5197,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5127,11 +5273,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5201,11 +5349,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5275,11 +5425,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5349,11 +5501,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5423,11 +5577,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5485,11 +5641,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5878,11 +6036,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5952,11 +6112,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6042,11 +6204,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6132,11 +6296,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6206,11 +6372,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6280,11 +6448,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6354,11 +6524,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6428,11 +6600,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6502,11 +6676,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6576,11 +6752,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6650,11 +6828,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6712,11 +6892,13 @@ pub fn main() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6790,15 +6972,18 @@ pub fn main() {
   &quot;description&quot; : &quot;description&quot;,
   &quot;apiSuppFeats&quot; : &quot;apiSuppFeats&quot;,
   &quot;aefProfiles&quot; : [ {
+    &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
     &quot;securityMethods&quot; : [ null, null ],
     &quot;versions&quot; : [ {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -6819,11 +7004,13 @@ pub fn main() {
     }, {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -6842,10 +7029,12 @@ pub fn main() {
       } ],
       &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
     } ],
+    &quot;dataFormat&quot; : &quot;JSON&quot;,
     &quot;domainName&quot; : &quot;domainName&quot;,
     &quot;aefLocation&quot; : {
       &quot;dcId&quot; : &quot;dcId&quot;,
       &quot;geoArea&quot; : {
+        &quot;shape&quot; : &quot;POINT&quot;,
         &quot;point&quot; : {
           &quot;lon&quot; : 36.988422590534526,
           &quot;lat&quot; : -75.5850925717018
@@ -6891,25 +7080,28 @@ pub fn main() {
     &quot;aefId&quot; : &quot;aefId&quot;,
     &quot;interfaceDescriptions&quot; : [ {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     }, {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     } ]
   }, {
+    &quot;protocol&quot; : &quot;HTTP_1_1&quot;,
     &quot;securityMethods&quot; : [ null, null ],
     &quot;versions&quot; : [ {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -6930,11 +7122,13 @@ pub fn main() {
     }, {
       &quot;apiVersion&quot; : &quot;apiVersion&quot;,
       &quot;custOperations&quot; : [ {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       }, {
-        &quot;operations&quot; : [ null, null ],
+        &quot;operations&quot; : [ &quot;GET&quot;, &quot;GET&quot; ],
+        &quot;commType&quot; : &quot;REQUEST_RESPONSE&quot;,
         &quot;description&quot; : &quot;description&quot;,
         &quot;custOpName&quot; : &quot;custOpName&quot;
       } ],
@@ -6953,10 +7147,12 @@ pub fn main() {
       } ],
       &quot;expiry&quot; : &quot;2000-01-23T04:56:07.000+00:00&quot;
     } ],
+    &quot;dataFormat&quot; : &quot;JSON&quot;,
     &quot;domainName&quot; : &quot;domainName&quot;,
     &quot;aefLocation&quot; : {
       &quot;dcId&quot; : &quot;dcId&quot;,
       &quot;geoArea&quot; : {
+        &quot;shape&quot; : &quot;POINT&quot;,
         &quot;point&quot; : {
           &quot;lon&quot; : 36.988422590534526,
           &quot;lat&quot; : -75.5850925717018
@@ -7002,12 +7198,12 @@ pub fn main() {
     &quot;aefId&quot; : &quot;aefId&quot;,
     &quot;interfaceDescriptions&quot; : [ {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     }, {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 9606,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     } ]
@@ -7330,6 +7526,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -7401,11 +7599,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7463,11 +7663,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7537,11 +7739,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7627,11 +7831,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7717,11 +7923,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7791,11 +7999,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7865,11 +8075,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7939,11 +8151,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8013,11 +8227,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8087,11 +8303,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8161,11 +8379,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8235,11 +8455,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8309,11 +8531,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8383,11 +8607,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8445,11 +8671,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8828,6 +9056,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -8900,11 +9130,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8962,11 +9194,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9036,11 +9270,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9126,11 +9362,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9216,11 +9454,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9290,11 +9530,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9364,11 +9606,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9438,11 +9682,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9512,11 +9758,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9586,11 +9834,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9660,11 +9910,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9734,11 +9986,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9808,11 +10062,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9882,11 +10138,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9944,11 +10202,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -11086,7 +11346,7 @@ var JSONSchemaView = (function () {
     // Determine if a schema is an array
     this.isArray = !this.isAny && this.schema && this.schema.type === 'array';
 
-    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf);
+    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf);
 
     // Determine if a schema is a primitive
     this.isPrimitive = !this.isAny && !this.isArray && !this.isObject;
index e0ac00b..f04aa46 100644 (file)
@@ -1143,6 +1143,50 @@ ul.nav-tabs {
   "description" : "Represents the configuration information for the delivery of notifications over Websockets."
 };
 
+        defs["DurationSec"] = {
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer identifying a period of time in units of seconds."
+};
+        defs["Fqdn"] = {
+  "maxLength" : 253,
+  "minLength" : 4,
+  "pattern" : "^([0-9A-Za-z]([-0-9A-Za-z]{0,61}[0-9A-Za-z])?\\.)+[A-Za-z]{2,63}\\.?$",
+  "type" : "string",
+  "description" : "Fully Qualified Domain Name"
+};
+        defs["Ipv4Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv4 address formatted in the \"dotted decimal\" notation as defined in IETF RFC 1166."
+};
+        defs["Ipv6Addr"] = {
+  "type" : "string",
+  "description" : "string identifying a Ipv6 address formatted according to clause 4 in IETF RFC 5952. The mixed Ipv4 Ipv6 notation according to clause 5 of IETF RFC 5952 shall not be used."
+};
+        defs["Link"] = {
+  "type" : "string",
+  "description" : "string formatted according to IETF RFC 3986 identifying a referenced resource."
+};
+        defs["Port"] = {
+  "maximum" : 65535,
+  "minimum" : 0,
+  "type" : "integer",
+  "description" : "Unsigned integer with valid values between 0 and 65535."
+};
+        defs["SupportedFeatures"] = {
+  "pattern" : "^[A-Fa-f0-9]*$",
+  "type" : "string",
+  "description" : "A string used to indicate the features supported by an API that is used as defined in clause  6.6 in 3GPP TS 29.500. The string shall contain a bitmask indicating supported features in  hexadecimal representation Each character in the string shall take a value of \"0\" to \"9\",  \"a\" to \"f\" or \"A\" to \"F\" and shall represent the support of 4 features as described in  table 5.2.2-3. The most significant character representing the highest-numbered features shall  appear first in the string, and the character representing features 1 to 4 shall appear last  in the string. The list of features and their numbering (starting with 1) are defined  separately for each API. If the string contains a lower number of characters than there are  defined features for an API, all features that would be represented by characters that are not  present in the string are not supported.\n"
+};
+        defs["Uri"] = {
+  "type" : "string",
+  "description" : "String providing an URI formatted according to RFC 3986."
+};
+        defs["Uri_1"] = {
+  "type" : "string",
+  "description" : "string providing an URI formatted according to IETF RFC 3986."
+};
+
     var errs = {};
   </script>
 
@@ -1673,11 +1717,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1747,11 +1793,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1837,11 +1885,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -1927,11 +1977,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2001,11 +2053,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2075,11 +2129,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2149,11 +2205,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2223,11 +2281,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2297,11 +2357,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2371,11 +2433,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2445,11 +2509,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2519,11 +2585,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2593,11 +2661,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2655,11 +2725,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -2998,11 +3070,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3072,11 +3146,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3162,11 +3238,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3252,11 +3330,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3326,11 +3406,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3400,11 +3482,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3474,11 +3558,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3548,11 +3634,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3622,11 +3710,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3696,11 +3786,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3758,11 +3850,13 @@ Identifier of an individual API invoker
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -3826,6 +3920,7 @@ Identifier of an individual API invoker
  "https://example.com/capif-security/v1/trustedInvokers/{apiInvokerId}/delete" \
  -d '{
   &quot;apiInvokerId&quot; : &quot;apiInvokerId&quot;,
+  &quot;cause&quot; : &quot;OVERLIMIT_USAGE&quot;,
   &quot;aefId&quot; : &quot;aefId&quot;,
   &quot;apiIds&quot; : [ &quot;apiIds&quot;, &quot;apiIds&quot; ]
 }'
@@ -4106,6 +4201,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -4165,11 +4262,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4239,11 +4338,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4329,11 +4430,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4419,11 +4522,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4493,11 +4598,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4567,11 +4674,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4641,11 +4750,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4715,11 +4826,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4789,11 +4902,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4863,11 +4978,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -4937,11 +5054,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5011,11 +5130,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5085,11 +5206,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5147,11 +5270,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5603,11 +5728,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5677,11 +5804,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5767,11 +5896,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5857,11 +5988,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -5931,11 +6064,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6005,11 +6140,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6079,11 +6216,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6153,11 +6292,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6227,11 +6368,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6301,11 +6444,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6375,11 +6520,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6449,11 +6596,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6511,11 +6660,13 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -6585,7 +6736,7 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
     &quot;authorizationInfo&quot; : &quot;authorizationInfo&quot;,
     &quot;interfaceDetails&quot; : {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 5248,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     },
@@ -6597,7 +6748,7 @@ When set to &#39;true&#39;, it indicates the CAPIF core function to send the aut
     &quot;authorizationInfo&quot; : &quot;authorizationInfo&quot;,
     &quot;interfaceDetails&quot; : {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 5248,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     },
@@ -6897,6 +7048,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -6982,11 +7135,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7072,11 +7227,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7146,11 +7303,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7220,11 +7379,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7294,11 +7455,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7368,11 +7531,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7442,11 +7607,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7516,11 +7683,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7590,11 +7759,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7664,11 +7835,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7738,11 +7911,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7800,11 +7975,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -7874,7 +8051,7 @@ $(document).ready(function() {
     &quot;authorizationInfo&quot; : &quot;authorizationInfo&quot;,
     &quot;interfaceDetails&quot; : {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 5248,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     },
@@ -7886,7 +8063,7 @@ $(document).ready(function() {
     &quot;authorizationInfo&quot; : &quot;authorizationInfo&quot;,
     &quot;interfaceDetails&quot; : {
       &quot;ipv6Addr&quot; : &quot;ipv6Addr&quot;,
-      &quot;securityMethods&quot; : [ null, null ],
+      &quot;securityMethods&quot; : [ &quot;PSK&quot;, &quot;PSK&quot; ],
       &quot;port&quot; : 5248,
       &quot;ipv4Addr&quot; : &quot;ipv4Addr&quot;
     },
@@ -8186,6 +8363,8 @@ $(document).ready(function() {
   }
   if (schema.$ref != null) {
     schema = defsParser.$refs.get(schema.$ref);
+  } else if (schema.items != null && schema.items.$ref != null) {
+    schema.items = defsParser.$refs.get(schema.items.$ref);
   } else {
     schemaWrapper.definitions = Object.assign({}, defs);
     $RefParser.dereference(schemaWrapper).catch(function(err) {
@@ -8257,11 +8436,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8331,11 +8512,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8421,11 +8604,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8511,11 +8696,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8585,11 +8772,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8659,11 +8848,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8733,11 +8924,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8807,11 +9000,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8881,11 +9076,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -8955,11 +9152,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9029,11 +9228,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9103,11 +9304,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9177,11 +9380,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -9239,11 +9444,13 @@ $(document).ready(function() {
                                       }
                                       if (schema.$ref != null) {
                                         schema = defsParser.$refs.get(schema.$ref);
-                                        Object.keys(schema.properties).forEach( (item) => {
-                                          if (schema.properties[item].$ref != null) {
-                                            schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
-                                          }
-                                        });
+                                        if (schema.properties != null) {
+                                          Object.keys(schema.properties).forEach( (item) => {
+                                            if (schema.properties[item].$ref != null) {
+                                              schema.properties[item] = defsParser.$refs.get(schema.properties[item].$ref);
+                                            }
+                                          });
+                                        }
                                       } else if (schema.items != null && schema.items.$ref != null) {
                                         schema.items = defsParser.$refs.get(schema.items.$ref);
                                       } else {
@@ -10381,7 +10588,7 @@ var JSONSchemaView = (function () {
     // Determine if a schema is an array
     this.isArray = !this.isAny && this.schema && this.schema.type === 'array';
 
-    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneof || this.schema.allOf);
+    this.isObject = this.schema && (this.schema.type === 'object' || this.schema.properties || this.schema.anyOf || this.schema.oneOf || this.schema.allOf);
 
     // Determine if a schema is a primitive
     this.isPrimitive = !this.isAny && !this.isArray && !this.isObject;
index c9b42aa..18fc2bb 100644 (file)
@@ -118,7 +118,7 @@ Service Manager Deployment
 
 Postman
 *******
-A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json.
+A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json
 
 
 *************
index f620893..b8b51d0 100644 (file)
@@ -4,41 +4,51 @@
 .. Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved.
 
 =============
-Release-Notes
+Release Notes
 =============
 
 
 This document provides the release notes for the Non-RT RIC Service Management & Exposure (SME).
 
-Version history SME CAPIFcore
-=============================
+Version history SME Service Manager
+===================================
 
 +------------+----------+------------------+--------------------------------------+
 | **Date**   | **Ver.** | **Author**       | **Comment**                          |
 |            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
-| 2022-12-14 | 1.0.0    | Henrik Andersson | G Release                            |
-|            |          |                  | Initial version of Capifcore         |
+| 2024-06-26 | 0.1.2    |  Denis G Noonan  | J Release (Service Manager)          |
+|            |          |                  | Initial version of Service Manager   |
 |            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
-| 2023-02-10 | 1.0.1    | Yennifer Chacon  | G Maintenance                        |
-|            |          |                  | Release                              |
+| TBA        | TBA      |  Denis G Noonan  | Service Manager includes support for |
+|            |          |                  | dynamic URIs, multiple interface     |
+|            |          |                  | descriptions, and improved schema    |
+|            |          |                  | validation.                          |
++------------+----------+------------------+--------------------------------------+
+
+Version history SME CAPIFCore
+=============================
+
 +------------+----------+------------------+--------------------------------------+
-| 2023-06-16 | 1.1.0    | Yennifer Chacon  | H Release                            |
+| **Date**   | **Ver.** | **Author**       | **Comment**                          |
 |            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
-| 2023-12-15 | 1.2.0    | John Keeney      | I Release                            |
+| 2022-12-14 | 1.0.0    | Henrik Andersson | G Release                            |
+|            |          |                  | Initial version of CapifCore         |
 |            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
-
-Version history SME Service Manager
-===================================
-
+| 2023-02-10 | 1.0.1    | Yennifer Chacon  | G Maintenance Release (CapifCore)    |
+|            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
-| **Date**   | **Ver.** | **Author**       | **Comment**                          |
+| 2023-06-16 | 1.1.0    | Yennifer Chacon  | H Release (CapifCore)                |
+|            |          |                  |                                      |
++------------+----------+------------------+--------------------------------------+
+| 2023-12-15 | 1.2.0    | John Keeney      | I Release (CapifCore)                |
 |            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
-| TBA        |          |                  | Initial release of Service Manager   |
+| 2024-06-26 | 1.3.1    | John Keeney      | J Release (CapifCore)                |
+|            |          |                  |                                      |
 +------------+----------+------------------+--------------------------------------+
 
 Release Data
@@ -100,7 +110,7 @@ H Release
 | **Release date**            | 2023-06-16                                        |
 |                             |                                                   |
 +-----------------------------+---------------------------------------------------+
-| **Purpose of the delivery** | nonrtric-plt-capifcore:1.1.0                      |
+| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-capifcore:1.1.0             |
 |                             |    Add more CAPIF core functions and APIs         |
 |                             |                                                   |
 +-----------------------------+---------------------------------------------------+
@@ -121,7 +131,47 @@ I Release
 | **Release date**            | 2023-12-15                                        |
 |                             |                                                   |
 +-----------------------------+---------------------------------------------------+
-| **Purpose of the delivery** | nonrtric-plt-capifcore:1.2.0                      |
+| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-capifcore:1.2.0             |
 |                             |    Add more CAPIF core functions and APIs         |
 |                             |                                                   |
 +-----------------------------+---------------------------------------------------+
+
+J Release
+---------
++-----------------------------+---------------------------------------------------+
+| **Project**                 | Non-RT RIC Service Manager                        |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Repo/commit-ID**          | nonrtric/plt/sme/                                 |
+|                             | 36718abc0fb386770a182c2c01358e1ce3621c75          |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Release designation**     | J release                                         |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Release date**            | 2024-06-26                                        |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-servicemanager:0.1.2        |
+|                             |    First release of NONRTRIC Service Manager      |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+
++-----------------------------+---------------------------------------------------+
+| **Project**                 | Non-RT RIC CAPIF Core                             |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Repo/commit-ID**          | nonrtric/plt/sme/                                 |
+|                             | 36718abc0fb386770a182c2c01358e1ce3621c75          |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Release designation**     | J release                                         |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Release date**            | 2024-06-26                                        |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
+| **Purpose of the delivery** | o-ran-sc/nonrtric-plt-capifcore:1.3.1             |
+|                             |    Small updates & improvements                   |
+|                             |                                                   |
++-----------------------------+---------------------------------------------------+
index 1d3c4ef..c5d5b32 100644 (file)
@@ -8,7 +8,7 @@ KONG_CONTROL_PLANE_PORT=<port number>
 KONG_DATA_PLANE_IPV4=<host string>
 KONG_DATA_PLANE_PORT=<port number>
 CAPIF_PROTOCOL=<http or https protocol scheme>
-CAPIF_IPV4=<host>
+CAPIF_IPV4=<host string>
 CAPIF_PORT=<port number>
 LOG_LEVEL=<Trace, Debug, Info, Warning, Error, Fatal or Panic>
 SERVICE_MANAGER_PORT=<port number>
index 4be8951..c322bae 100644 (file)
@@ -3,7 +3,7 @@
 ========================LICENSE_START=================================
 O-RAN-SC
 %%
-Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved
 %%
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ export SERVICE_MANAGER_ENV=development
 
 ### CAPIFcore and Kong
 
-We also need Kong and CAPIFcore to be running. Please see the examples in the `deploy` folder. You can also use https://gerrit.o-ran-sc.org/r/it/dep for deployment. Please see the notes at https://wiki.o-ran-sc.org/display/RICNR/%5BWIP%5D+Service+Manager.
+We also need Kong and CAPIFcore to be running. Please see the examples in the `deploy` folder. You can also use https://gerrit.o-ran-sc.org/r/it/dep for deployment. Please see the notes at https://wiki.o-ran-sc.org/display/RICNR/Release+J%3A+Service+Manager
 
 ## Build
 
@@ -145,4 +145,63 @@ The additional env file needs to exist in the sme/servicemanager folder so that
 
 ## Postman
 
-A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json.
\ No newline at end of file
+A Postman collection has been included in this repo at sme/postman/ServiceManager.postman_collection.json.
+
+## Interface Descriptions
+
+To distinguish between multiple interface descriptions, Service Manager prepends the port number and a hash code to the URL path.
+
+## Static and Dynamic Routes
+
+We can specify either static or dynamic routes. Static routing defines a route when there is a single route for traffic to reach a destination. Dynamic routing allows us to specify path parameters. In this config file, we specify path parameters using regular expressions.
+
+Kong uses the regex definition from the [Rust programming language](https://docs.rs/regex/latest/regex/) to specify the regular expression (regex) that describes the path parameters, [Kong regex](https://docs.konghq.com/gateway/latest/key-concepts/routes/#regular-expressions).
+
+An example of a static path is as follows. This is the straightforward case.
+
+```http
+   /rapps
+```
+
+An example of a dynamic path is
+
+```http
+   ~/rapps/(?<rappId>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)
+```
+
+Our dynamic path starts with a ~ character. In this example, we have a path parameter that is described by a regex capture group called rappId. The regex describes a word made of mixed-case alphanumeric characters optionally followed by one or more sets of a dash or underscore together with another word.
+
+When the Service Manager client calls a dynamic API, we call the URL without the '~'. Kong substitutes the path parameter according to the rules specified in the regex. Therefore, we can call the above example by using
+
+```http
+   /rapps/my-rApp-id
+```
+
+as the URL where my-rApp-id is the rApp id of in the rApp Manager. The name my-rApp-id has to match the regex shown above.
+
+It is required to name the capture group in this YAML config file. The capture group name is used by Service Manager when creating a Kong Request Transformer plugin. We can specify multiple capture groups in a URL if there are multiple path parameters in the API path.
+
+We create a Kong Request Transformer plugin with .data[].config.replace, as in the following example curl with abridged response.
+
+```sh
+curl -X GET http://oran-nonrtric-kong-admin.nonrtric.svc.cluster.local:8001/plugins
+```
+
+```json
+{
+  "body": [],
+  "uri": "/rapps/$(uri_captures[\"rappId\"])",
+  "headers": [],
+  "querystring": []
+}
+```
+
+In our example, this allows Kong to match /rapps/my-rApp-id.
+
+The Service Manager uses the following regex to search and replace the YAML file regexes.
+
+```regex
+/\(\?<([^>]+)>([^\/]+)/
+```
+
+Please note that the example path, /rapps/my-rApp-id, is not terminated by a '/'. Service Manager adds a '/' for internal matching. This made the regex easier to develop. Service Manager will match on /rapps/my-rApp-id/ for this case.
index 963e3aa..bcc6481 100755 (executable)
@@ -25,9 +25,10 @@ echo "--> build-servicemanager-ubuntu.sh"
 export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
 export GO111MODULE=on
 go version
+cd servicemanager/
 
 # Get the go coverage tool helper
-go install github.com/ory/go-acc
+go install github.com/ory/go-acc@v0.2.8
 go get github.com/stretchr/testify/mock@v1.7.1
 go-acc ./... --ignore mockkong,common,discoverserviceapi,invokermanagementapi,publishserviceapi,providermanagementapi
 
index ced992f..fdabad8 100644 (file)
@@ -19,4 +19,4 @@
 # By default this file is in the docker build directory,
 # but the location can configured in the JJB template.
 ---
-tag: 0.1.2
+tag: 0.2.0
index ab6ae85..3b6fa81 100644 (file)
@@ -731,16 +731,14 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]
 func getServiceAPIDescription(aefId string, apiName string, apiCategory string, apiVersion string, protocol *publishapi.Protocol, dataFormat *publishapi.DataFormat, description string, testServiceIpv4 common29122.Ipv4Addr, testServicePort common29122.Port, commType publishapi.CommunicationType) publishapi.ServiceAPIDescription {
        domainName := "Kong"
        otherDomainName := "otherDomain"
-
        var otherProtocol publishapi.Protocol = "HTTP_2"
+       var DataFormatOther publishapi.DataFormat = "OTHER"
 
        categoryPointer := &apiCategory
        if apiCategory == "" {
                categoryPointer = nil
        }
 
-       var DataFormatOther publishapi.DataFormat = "OTHER"
-
        return publishapi.ServiceAPIDescription{
                AefProfiles: &[]publishapi.AefProfile{
                        {
@@ -775,6 +773,15 @@ func getServiceAPIDescription(aefId string, apiName string, apiCategory string,
                        },
                        {
                                AefId:      aefId, // "otherAefId"
+                               InterfaceDescriptions: &[]publishapi.InterfaceDescription{
+                                       {
+                                               Ipv4Addr: &testServiceIpv4,
+                                               Port:     &testServicePort,
+                                               SecurityMethods: &[]publishapi.SecurityMethod{
+                                                       "PSK",
+                                               },
+                                       },
+                               },
                                DomainName: &otherDomainName,
                                Protocol:   &otherProtocol,
                                DataFormat: &DataFormatOther,
index f08b1d7..315772e 100644 (file)
@@ -21,6 +21,8 @@
 package envreader
 
 import (
+       "fmt"
+       "net/url"
        "os"
        "path/filepath"
        "runtime"
@@ -75,6 +77,14 @@ func (r *RealConfigReader) ReadDotEnv() (map[string]string, map[string]int, erro
        logConfig(myEnv, envFile)
 
        myPorts, err := createMapPorts(myEnv)
+       if err == nil {
+               err = validateEnv(myEnv)
+       }
+
+       if err == nil {
+               err = validateUrls(myEnv, myPorts)
+       }
+
        return myEnv, myPorts, err
 }
 
@@ -110,31 +120,98 @@ func logConfig(myEnv map[string]string, envFile string) {
        log.Infof("TEST_SERVICE_PORT %s", myEnv["TEST_SERVICE_PORT"])
 }
 
+func validateUrls(myEnv map[string]string, myPorts map[string]int) error {
+       capifProtocol := myEnv["CAPIF_PROTOCOL"]
+       capifIPv4 := myEnv["CAPIF_IPV4"]
+       capifPort := myPorts["CAPIF_PORT"]
+       capifcoreUrl := fmt.Sprintf("%s://%s:%d", capifProtocol, capifIPv4, capifPort)
+
+       kongProtocol := myEnv["KONG_PROTOCOL"]
+       kongControlPlaneIPv4 := myEnv["KONG_CONTROL_PLANE_IPV4"]
+       kongControlPlanePort := myPorts["KONG_CONTROL_PLANE_PORT"]
+       kongControlPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongControlPlaneIPv4, kongControlPlanePort)
+
+       kongDataPlaneIPv4 := myEnv["KONG_DATA_PLANE_IPV4"]
+       kongDataPlanePort := myPorts["KONG_DATA_PLANE_PORT"]
+       kongDataPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongDataPlaneIPv4, kongDataPlanePort)
+
+       log.Infof("Capifcore URL %s", capifcoreUrl)
+       log.Infof("Kong Control Plane URL %s", kongControlPlaneURL)
+       log.Infof("Kong Data Plane URL %s", kongDataPlaneURL)
+
+       // Very basic checks
+       _, err := url.ParseRequestURI(capifcoreUrl)
+       if err != nil {
+               err = fmt.Errorf("error parsing Capifcore URL: %s", err)
+               return err
+       }
+       _, err = url.ParseRequestURI(kongControlPlaneURL)
+       if err != nil {
+               err = fmt.Errorf("error parsing Kong Control Plane URL: %s", err)
+               return err
+       }
+       _, err = url.ParseRequestURI(kongDataPlaneURL)
+       if err != nil {
+               err = fmt.Errorf("error parsing Kong Data Plane URL: %s", err)
+               return err
+       }
+
+       return nil
+}
+
+func validateEnv(myEnv map[string]string) error {
+       var err error = nil
+
+       kongDomain := myEnv["KONG_DOMAIN"]
+       kongProtocol := myEnv["KONG_PROTOCOL"]
+       kongControlPlaneIPv4 := myEnv["KONG_CONTROL_PLANE_IPV4"]
+       kongDataPlaneIPv4 := myEnv["KONG_DATA_PLANE_IPV4"]
+       capifProtocol := myEnv["CAPIF_PROTOCOL"]
+       capifIPv4 := myEnv["CAPIF_IPV4"]
+
+       if kongDomain == "" || kongDomain == "<string>" {
+               err = fmt.Errorf("error loading KONG_DOMAIN from .env file: %s", kongDomain)
+       } else if kongProtocol == "" || kongProtocol == "<http or https protocol scheme>" {
+               err = fmt.Errorf("error loading KONG_PROTOCOL from .env file: %s", kongProtocol)
+       } else if kongControlPlaneIPv4 == "" || kongControlPlaneIPv4 == "<host string>" {
+               err = fmt.Errorf("error loading KONG_CONTROL_PLANE_IPV4 from .env file: %s", kongControlPlaneIPv4)
+       } else if kongDataPlaneIPv4 == "" || kongDataPlaneIPv4 == "<host string>" {
+               err = fmt.Errorf("error loading KONG_DATA_PLANE_IPV4 from .env file: %s", kongDataPlaneIPv4)
+       } else if capifProtocol == "" || capifProtocol == "<http or https protocol scheme>" {
+               err = fmt.Errorf("error loading CAPIF_PROTOCOL from .env file: %s", capifProtocol)
+       } else if capifIPv4 == "" || capifIPv4 == "<host string>" || capifIPv4 == "<host>" {
+               err = fmt.Errorf("error loading CAPIF_IPV4 from .env file: %s", capifIPv4)
+       }
+       // TEST_SERVICE_IPV4 is used only by the unit tests and are validated in the unit tests.
+
+       return err
+}
+
 func createMapPorts(myEnv map[string]string) (map[string]int, error) {
     myPorts := make(map[string]int)
        var err error
 
        myPorts["KONG_DATA_PLANE_PORT"], err = strconv.Atoi(myEnv["KONG_DATA_PLANE_PORT"])
        if err != nil {
-               log.Fatalf("error loading KONG_DATA_PLANE_PORT from .env file: %s", err)
+               err = fmt.Errorf("error loading KONG_DATA_PLANE_PORT from .env file: %s", err)
                return nil, err
        }
 
        myPorts["KONG_CONTROL_PLANE_PORT"], err = strconv.Atoi(myEnv["KONG_CONTROL_PLANE_PORT"])
        if err != nil {
-               log.Fatalf("error loading KONG_CONTROL_PLANE_PORT from .env file: %s", err)
+               err = fmt.Errorf("error loading KONG_CONTROL_PLANE_PORT from .env file: %s", err)
                return nil, err
        }
 
        myPorts["CAPIF_PORT"], err = strconv.Atoi(myEnv["CAPIF_PORT"])
        if err != nil {
-               log.Fatalf("error loading CAPIF_PORT from .env file: %s", err)
+               err = fmt.Errorf("error loading CAPIF_PORT from .env file: %s", err)
                return nil, err
        }
 
        myPorts["SERVICE_MANAGER_PORT"], err = strconv.Atoi(myEnv["SERVICE_MANAGER_PORT"])
        if err != nil {
-               log.Fatalf("error loading SERVICE_MANAGER_PORT from .env file: %s", err)
+               err = fmt.Errorf("error loading SERVICE_MANAGER_PORT from .env file: %s", err)
                return nil, err
        }
 
@@ -142,7 +219,7 @@ func createMapPorts(myEnv map[string]string) (map[string]int, error) {
        if myEnv["TEST_SERVICE_PORT"] != "" {
                myPorts["TEST_SERVICE_PORT"], err = strconv.Atoi(myEnv["TEST_SERVICE_PORT"])
                if err != nil {
-                       log.Fatalf("error loading TEST_SERVICE_PORT from .env file: %s", err)
+                       err = fmt.Errorf("error loading TEST_SERVICE_PORT from .env file: %s", err)
                        return nil, err
                }
        }
index 4031827..d042cd0 100644 (file)
@@ -103,10 +103,18 @@ func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) e
                        ps.KongDataPlaneIPv4,
                        ps.KongDataPlanePort,
                        apfId)
-       if (err != nil) || (statusCode != http.StatusCreated) {
-               // We can return with http.StatusForbidden if there is a http.StatusConflict detected by Kong
+
+       log.Trace("After RegisterKong")
+
+       if err != nil {
                msg := err.Error()
-               log.Errorf("error on RegisterKong %s", msg)
+               log.Errorf("PostApfIdServiceApis, error on RegisterKong %s", msg)
+               return sendCoreError(ctx, statusCode, msg)
+       }
+       if  statusCode != http.StatusCreated {
+               // We can return with http.StatusForbidden if there is a http.StatusConflict detected by Kong
+               msg := "error detected by Kong"
+               log.Errorf(msg)
                return sendCoreError(ctx, statusCode, msg)
        }
 
index c42cba7..eb33c38 100644 (file)
@@ -202,6 +202,24 @@ func capifCleanUp() {
        result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager)
        assert.Equal(t, http.StatusNoContent, result.Code())
 
+       apiName = "helloworld-v1"
+       apiId = "api_id_" + apiName
+
+       result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager)
+       assert.Equal(t, http.StatusNoContent, result.Code())
+
+       apiName = "helloworld-v1-id"
+       apiId = "api_id_" + apiName
+
+       result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager)
+       assert.Equal(t, http.StatusNoContent, result.Code())
+
+       apiName = "helloworld-no-version"
+       apiId = "api_id_" + apiName
+
+       result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+apiId).Go(t, eServiceManager)
+       assert.Equal(t, http.StatusNoContent, result.Code())
+
        // Delete the provider
        domainID := "domain_id_Kong"
        result = testutil.NewRequest().Delete("/api-provider-management/v1/registrations/"+domainID).Go(t, eServiceManager)
@@ -262,7 +280,11 @@ func TestPostUnpublishedServiceWithUnregisteredPublisher(t *testing.T) {
        assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing")
 
        apiName := "apiName"
-       newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort)
+       apiVersion := "v1"
+       resourceName := "helloworld"
+       uri := "/helloworld"
+
+       newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri)
 
        // Attempt to publish a service for provider
        result = testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager)
@@ -288,7 +310,7 @@ func TestRegisterValidProvider(t *testing.T) {
        assert.NoError(t, err, "error unmarshaling response")
 }
 
-func TestPublishUnpublishService(t *testing.T) {
+func TestPublishUnpublishServiceMissingInterface(t *testing.T) {
        apfId := "APF_id_rApp_Kong_as_APF"
        apiName := "apiName"
 
@@ -330,12 +352,38 @@ func TestPublishUnpublishService(t *testing.T) {
        err = result.UnmarshalJsonToObject(&resultError)
        assert.NoError(t, err, "error unmarshaling response")
 
-       assert.Contains(t, *resultError.Cause, "cannot read interfaceDescription")
+       assert.Contains(t, *resultError.Cause, "cannot read InterfaceDescriptions")
+}
+
+
+func TestPublishUnpublishWithoutVersionId(t *testing.T) {
+       apfId := "APF_id_rApp_Kong_as_APF"
+
+       myEnv, myPorts, err := mockConfigReader.ReadDotEnv()
+       assert.Nil(t, err, "error reading env file")
+
+       testServiceIpv4 := common29122.Ipv4Addr(myEnv["TEST_SERVICE_IPV4"])
+       testServicePort := common29122.Port(myPorts["TEST_SERVICE_PORT"])
+
+       assert.NotEmpty(t, testServiceIpv4, "TEST_SERVICE_IPV4 is required in .env file for unit testing")
+       assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing")
+
+       apiVersion := "v1"
+       resourceName := "helloworld"
+       uri := "/helloworld"
+       apiName := "helloworld-v1"
+
+       aefId := "AEF_id_rApp_Kong_as_AEF"
+       namespace := "namespace"
+       repoName := "repoName"
+       chartName := "chartName"
+       releaseName := "releaseName"
+       description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName)
 
-       newServiceDescription = getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort)
+       newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri)
 
        // Publish a service for provider
-       result = testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager)
+       result := testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager)
        assert.Equal(t, http.StatusCreated, result.Code())
 
        if result.Code() != http.StatusCreated {
@@ -374,30 +422,184 @@ func TestPublishUnpublishService(t *testing.T) {
        assert.Equal(t, kongDataPlaneIPv4, resultServiceIpv4)
        assert.Equal(t, kongDataPlanePort, resultServicePort)
 
-       // Publish the same service again should result in Forbidden
-       newServiceDescription.ApiId = &newApiId
-       result = testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager)
-       assert.Equal(t, http.StatusForbidden, result.Code())
+       // Check Versions structure
+       version := aefProfile.Versions[0]
+       assert.Equal(t, "v1", version.ApiVersion)
 
-       err = result.UnmarshalBodyToObject(&resultError)
+       resource := (*version.Resources)[0]
+       communicationType := publishapi.CommunicationType("REQUEST_RESPONSE")
+       assert.Equal(t, communicationType, resource.CommType)
+
+       assert.Equal(t, 1, len(*resource.Operations))
+       var operation publishapi.Operation = "GET"
+       assert.Equal(t, operation, (*resource.Operations)[0])
+       assert.Equal(t, "helloworld", resource.ResourceName)
+       assert.Equal(t, "/helloworld-v1/port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/helloworld", resource.Uri)
+}
+
+func TestPublishUnpublishVersionId(t *testing.T) {
+       apfId := "APF_id_rApp_Kong_as_APF"
+
+       myEnv, myPorts, err := mockConfigReader.ReadDotEnv()
+       assert.Nil(t, err, "error reading env file")
+
+       testServiceIpv4 := common29122.Ipv4Addr(myEnv["TEST_SERVICE_IPV4"])
+       testServicePort := common29122.Port(myPorts["TEST_SERVICE_PORT"])
+
+       assert.NotEmpty(t, testServiceIpv4, "TEST_SERVICE_IPV4 is required in .env file for unit testing")
+       assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing")
+
+       apiVersion := "v1"
+       resourceName := "helloworld-id"
+       uri := "~/helloworld/(?<helloworld-id>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)"
+       apiName := "helloworld-v1-id"
+
+       aefId := "AEF_id_rApp_Kong_as_AEF"
+       namespace := "namespace"
+       repoName := "repoName"
+       chartName := "chartName"
+       releaseName := "releaseName"
+       description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName)
+
+       newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri)
+
+       // Publish a service for provider
+       result := testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager)
+       assert.Equal(t, http.StatusCreated, result.Code())
+
+       if result.Code() != http.StatusCreated {
+               log.Fatalf("failed to publish the service with HTTP result code %d", result.Code())
+               return
+       }
+
+       var resultService publishapi.ServiceAPIDescription
+       err = result.UnmarshalJsonToObject(&resultService)
        assert.NoError(t, err, "error unmarshaling response")
-       assert.Contains(t, *resultError.Cause, "already published")
-       assert.Equal(t, http.StatusForbidden, *resultError.Status)
+       newApiId := "api_id_" + apiName
+       assert.Equal(t, newApiId, *resultService.ApiId)
 
-       // Delete the service
-       result = testutil.NewRequest().Delete("/published-apis/v1/"+apfId+"/service-apis/"+newApiId).Go(t, eServiceManager)
-       assert.Equal(t, http.StatusNoContent, result.Code())
+       assert.Equal(t, "http://example.com/published-apis/v1/"+apfId+"/service-apis/"+*resultService.ApiId, result.Recorder.Header().Get(echo.HeaderLocation))
 
-       // Check no services published
-       result = testutil.NewRequest().Get("/published-apis/v1/"+apfId+"/service-apis").Go(t, eServiceManager)
+       // Check that the service is published for the provider
+       result = testutil.NewRequest().Get("/published-apis/v1/"+apfId+"/service-apis/"+newApiId).Go(t, eServiceManager)
        assert.Equal(t, http.StatusOK, result.Code())
 
-       // Parse JSON from the response body
-       err = result.UnmarshalJsonToObject(&resultServices)
+       err = result.UnmarshalJsonToObject(&resultService)
        assert.NoError(t, err, "error unmarshaling response")
+       assert.Equal(t, newApiId, *resultService.ApiId)
+
+       aefProfile := (*resultService.AefProfiles)[0]
+       interfaceDescription := (*aefProfile.InterfaceDescriptions)[0]
+
+       resultServiceIpv4 := *interfaceDescription.Ipv4Addr
+       resultServicePort := *interfaceDescription.Port
+
+       kongDataPlaneIPv4 := common29122.Ipv4Addr(myEnv["KONG_DATA_PLANE_IPV4"])
+       kongDataPlanePort := common29122.Port(myPorts["KONG_DATA_PLANE_PORT"])
+
+       assert.NotEmpty(t, kongDataPlaneIPv4, "KONG_DATA_PLANE_IPV4 is required in .env file for unit testing")
+       assert.NotZero(t, kongDataPlanePort, "KONG_DATA_PLANE_PORT is required in .env file for unit testing")
+
+       assert.Equal(t, kongDataPlaneIPv4, resultServiceIpv4)
+       assert.Equal(t, kongDataPlanePort, resultServicePort)
+
+       // Check Versions structure
+       version := aefProfile.Versions[0]
+       assert.Equal(t, "v1", version.ApiVersion)
+
+       resource := (*version.Resources)[0]
+       communicationType := publishapi.CommunicationType("REQUEST_RESPONSE")
+       assert.Equal(t, communicationType, resource.CommType)
+
+       assert.Equal(t, 1, len(*resource.Operations))
+       var operation publishapi.Operation = "GET"
+       assert.Equal(t, operation, (*resource.Operations)[0])
+
+       assert.Equal(t, "helloworld-id", resource.ResourceName)
+       assert.Equal(t, "~/helloworld-v1-id/port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/helloworld/v1/(?<helloworld-id>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)", resource.Uri)
+}
+
+func TestPublishUnpublishServiceNoVersionWithId(t *testing.T) {
+       apfId := "APF_id_rApp_Kong_as_APF"
+
+       myEnv, myPorts, err := mockConfigReader.ReadDotEnv()
+       assert.Nil(t, err, "error reading env file")
+
+       testServiceIpv4 := common29122.Ipv4Addr(myEnv["TEST_SERVICE_IPV4"])
+       testServicePort := common29122.Port(myPorts["TEST_SERVICE_PORT"])
+
+       assert.NotEmpty(t, testServiceIpv4, "TEST_SERVICE_IPV4 is required in .env file for unit testing")
+       assert.NotZero(t, testServicePort, "TEST_SERVICE_PORT is required in .env file for unit testing")
+
+       apiVersion := ""
+       resourceName := "helloworld-no-version"
+       uri := "~/helloworld/(?<helloworld-id>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)"
+       apiName := "helloworld-no-version"
+
+       aefId := "AEF_id_rApp_Kong_as_AEF"
+       namespace := "namespace"
+       repoName := "repoName"
+       chartName := "chartName"
+       releaseName := "releaseName"
+       description := fmt.Sprintf("Description,%s,%s,%s,%s", namespace, repoName, chartName, releaseName)
+
+       newServiceDescription := getServiceAPIDescription(aefId, apiName, description, testServiceIpv4, testServicePort, apiVersion, resourceName, uri)
+
+       // Publish a service for provider
+       result := testutil.NewRequest().Post("/published-apis/v1/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, eServiceManager)
+       assert.Equal(t, http.StatusCreated, result.Code())
+
+       if result.Code() != http.StatusCreated {
+               log.Fatalf("failed to publish the service with HTTP result code %d", result.Code())
+               return
+       }
+
+       var resultService publishapi.ServiceAPIDescription
+       err = result.UnmarshalJsonToObject(&resultService)
+       assert.NoError(t, err, "error unmarshaling response")
+       newApiId := "api_id_" + apiName
+       assert.Equal(t, newApiId, *resultService.ApiId)
+
+       assert.Equal(t, "http://example.com/published-apis/v1/"+apfId+"/service-apis/"+*resultService.ApiId, result.Recorder.Header().Get(echo.HeaderLocation))
+
+       // Check that the service is published for the provider
+       result = testutil.NewRequest().Get("/published-apis/v1/"+apfId+"/service-apis/"+newApiId).Go(t, eServiceManager)
+       assert.Equal(t, http.StatusOK, result.Code())
+
+       err = result.UnmarshalJsonToObject(&resultService)
+       assert.NoError(t, err, "error unmarshaling response")
+       assert.Equal(t, newApiId, *resultService.ApiId)
+
+       aefProfile := (*resultService.AefProfiles)[0]
+       interfaceDescription := (*aefProfile.InterfaceDescriptions)[0]
+
+       resultServiceIpv4 := *interfaceDescription.Ipv4Addr
+       resultServicePort := *interfaceDescription.Port
+
+       kongDataPlaneIPv4 := common29122.Ipv4Addr(myEnv["KONG_DATA_PLANE_IPV4"])
+       kongDataPlanePort := common29122.Port(myPorts["KONG_DATA_PLANE_PORT"])
+
+       assert.NotEmpty(t, kongDataPlaneIPv4, "KONG_DATA_PLANE_IPV4 is required in .env file for unit testing")
+       assert.NotZero(t, kongDataPlanePort, "KONG_DATA_PLANE_PORT is required in .env file for unit testing")
+
+       assert.Equal(t, kongDataPlaneIPv4, resultServiceIpv4)
+       assert.Equal(t, kongDataPlanePort, resultServicePort)
+
+       // Check Versions structure
+       version := aefProfile.Versions[0]
+       assert.Equal(t, "", version.ApiVersion)
+
+       resource := (*version.Resources)[0]
+       communicationType := publishapi.CommunicationType("REQUEST_RESPONSE")
+       assert.Equal(t, communicationType, resource.CommType)
+
+       assert.Equal(t, 1, len(*resource.Operations))
+       var operation publishapi.Operation = "GET"
+       assert.Equal(t, operation, (*resource.Operations)[0])
+
+       assert.Equal(t, "helloworld-no-version", resource.ResourceName)
+       assert.Equal(t, "~/helloworld-no-version/port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/helloworld/(?<helloworld-id>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)", resource.Uri)
 
-       // Check if the parsed array is empty
-       assert.Zero(t, len(resultServices))
        capifCleanUp()
 }
 
@@ -449,7 +651,16 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]
        return err
 }
 
-func getServiceAPIDescription(aefId, apiName, description string, testServiceIpv4 common29122.Ipv4Addr, testServicePort common29122.Port) publishapi.ServiceAPIDescription {
+func getServiceAPIDescription(
+       aefId string,
+       apiName string,
+       description string,
+       testServiceIpv4 common29122.Ipv4Addr,
+       testServicePort common29122.Port,
+       apiVersion string,
+       resourceName string,
+       uri string) publishapi.ServiceAPIDescription {
+
        domainName := "Kong"
        var protocol publishapi.Protocol = "HTTP_1_1"
 
@@ -470,15 +681,15 @@ func getServiceAPIDescription(aefId, apiName, description string, testServiceIpv
                                Protocol:   &protocol,
                                Versions: []publishapi.Version{
                                        {
-                                               ApiVersion: "v1",
+                                               ApiVersion: apiVersion,
                                                Resources: &[]publishapi.Resource{
                                                        {
                                                                CommType: "REQUEST_RESPONSE",
                                                                Operations: &[]publishapi.Operation{
                                                                        "GET",
                                                                },
-                                                               ResourceName: "helloworld",
-                                                               Uri:          "/helloworld",
+                                                               ResourceName: resourceName,
+                                                               Uri:          uri,
                                                        },
                                                },
                                        },
index d7246bd..ac84c0d 100644 (file)
@@ -25,9 +25,12 @@ import (
        "fmt"
        "net/http"
        "net/url"
+       "regexp"
+       "strconv"
        "strings"
 
        resty "github.com/go-resty/resty/v2"
+       "github.com/google/uuid"
        log "github.com/sirupsen/logrus"
 
        common29122 "oransc.org/nonrtric/servicemanager/internal/common29122"
@@ -56,7 +59,7 @@ func (sd *ServiceAPIDescription) RegisterKong(
        )
        kongControlPlaneURL := fmt.Sprintf("%s://%s:%d", kongProtocol, kongControlPlaneIPv4, kongControlPlanePort)
 
-       statusCode, err = sd.createKongRoutes(kongControlPlaneURL, apfId)
+       statusCode, err = sd.createKongInterfaceDescriptions(kongControlPlaneURL, apfId)
        if (err != nil) || (statusCode != http.StatusCreated) {
                return statusCode, err
        }
@@ -67,109 +70,338 @@ func (sd *ServiceAPIDescription) RegisterKong(
        return statusCode, nil
 }
 
-func (sd *ServiceAPIDescription) createKongRoutes(kongControlPlaneURL string, apfId string) (int, error) {
-       log.Trace("entering createKongRoutes")
+func (sd *ServiceAPIDescription) createKongInterfaceDescriptions(kongControlPlaneURL string, apfId string) (int, error) {
+       log.Trace("entering createKongInterfaceDescriptions")
+
        var (
                statusCode int
                err        error
        )
-
        client := resty.New()
+       outputUris := []string{}
+
+       if sd == nil  {
+               err = errors.New("cannot read ServiceAPIDescription")
+               log.Errorf(err.Error())
+               return http.StatusBadRequest, err
+       }
+
+       if (sd.AefProfiles == nil) || (len(*sd.AefProfiles) < 1) {
+               err = errors.New("cannot read AefProfiles")
+               log.Errorf(err.Error())
+               return http.StatusBadRequest, err
+       }
 
        profiles := *sd.AefProfiles
        for _, profile := range profiles {
-               log.Debugf("createKongRoutes, AefId %s", profile.AefId)
+               log.Debugf("createKongInterfaceDescriptions, AefId %s", profile.AefId)
+
+               if (profile.Versions == nil) || (len(profile.Versions) < 1) {
+                       err := errors.New("cannot read Versions")
+                       log.Errorf(err.Error())
+                       return http.StatusBadRequest, err
+               }
+
                for _, version := range profile.Versions {
-                       log.Debugf("createKongRoutes, apiVersion \"%s\"", version.ApiVersion)
-                       for _, resource := range *version.Resources {
-                               statusCode, err = sd.createKongRoute(kongControlPlaneURL, client, resource, apfId, profile.AefId, version.ApiVersion)
-                               if (err != nil) || (statusCode != http.StatusCreated) {
-                                       return statusCode, err
+                       log.Debugf("createKongInterfaceDescriptions, apiVersion \"%s\"", version.ApiVersion)
+
+                       if (profile.InterfaceDescriptions == nil) || (len(*profile.InterfaceDescriptions) < 1) {
+                               err := errors.New("cannot read InterfaceDescriptions")
+                               log.Errorf(err.Error())
+                               return http.StatusBadRequest, err
+                       }
+
+                       for _, interfaceDescription := range *profile.InterfaceDescriptions {
+                               log.Debugf("createKongInterfaceDescriptions, Ipv4Addr %s", *interfaceDescription.Ipv4Addr)
+                               log.Debugf("createKongInterfaceDescriptions, Port %d", *interfaceDescription.Port)
+                               if uint(*interfaceDescription.Port) > 65535 {
+                                       err := errors.New("invalid Port")
+                                       log.Errorf(err.Error())
+                                       return http.StatusBadRequest, err
+                               }
+
+                               if interfaceDescription.SecurityMethods == nil {
+                                       err := errors.New("cannot read SecurityMethods")
+                                       log.Errorf(err.Error())
+                                       return http.StatusBadRequest, err
+                               }
+
+                               for _, securityMethod := range *interfaceDescription.SecurityMethods {
+                                       log.Debugf("createKongInterfaceDescriptions, SecurityMethod %s", securityMethod)
+
+                                       if (securityMethod != SecurityMethodOAUTH) && (securityMethod != SecurityMethodPKI) && (securityMethod != SecurityMethodPSK) {
+                                               msg := fmt.Sprintf("invalid SecurityMethod %s", securityMethod)
+                                               err := errors.New(msg)
+                                               log.Errorf(err.Error())
+                                               return http.StatusBadRequest, err
+                                       }
+                               }
+
+                               if (version.Resources == nil) || (len(*version.Resources) < 1) {
+                                       err := errors.New("cannot read Resources")
+                                       log.Errorf(err.Error())
+                                       return http.StatusBadRequest, err
+                               }
+
+                               for _, resource := range *version.Resources {
+                                       var specUri string
+                                       specUri, statusCode, err = sd.createKongServiceRoutePrecheck(kongControlPlaneURL, client, interfaceDescription, resource, apfId, profile.AefId, version.ApiVersion)
+                                       if (err != nil) || (statusCode != http.StatusCreated) {
+                                               return statusCode, err
+                                       }
+                                       log.Debugf("createKongInterfaceDescriptions, specUri %s", specUri)
+                                       outputUris = append(outputUris, specUri)
+                                       log.Tracef("createKongInterfaceDescriptions, len(outputUris) %d", len(outputUris))
+                                       log.Tracef("createKongInterfaceDescriptions, outputUris %v", outputUris)
+                               }
+                       }
+               }
+       }
+
+       // Our list of returned resources has the new resource with the hash code and version number
+       m := 0
+       for i, profile := range profiles {
+               for j, version := range profile.Versions {
+                       var newResources []Resource
+                       for range *profile.InterfaceDescriptions {
+                               log.Tracef("createKongInterfaceDescriptions, range over *profile.InterfaceDescriptions")
+                               for _, resource := range *version.Resources {
+                                       log.Tracef("createKongInterfaceDescriptions, m %d outputUris[m] %s", m, outputUris[m])
+                                       resource.Uri = outputUris[m]
+                                       m = m + 1
+                                       // Build a new list of resources with updated uris
+                                       newResources = append(newResources, resource)
+                                       log.Tracef("createKongInterfaceDescriptions, newResources %v", newResources)
                                }
                        }
+                       // Swap over to the new list of uris
+                       *profiles[i].Versions[j].Resources = newResources
+                       log.Tracef("createKongInterfaceDescriptions, assigned *profiles[i].Versions[j].Resources %v", *profiles[i].Versions[j].Resources)
                }
        }
+       log.Tracef("exiting createKongInterfaceDescriptions statusCode %d", statusCode)
+
        return statusCode, nil
 }
 
-func (sd *ServiceAPIDescription) createKongRoute(
+func (sd *ServiceAPIDescription) createKongServiceRoutePrecheck(
                kongControlPlaneURL string,
                client *resty.Client,
+               interfaceDescription InterfaceDescription,
                resource Resource,
                apfId string,
                aefId string,
-               apiVersion string ) (int, error) {
-       log.Trace("entering createKongRoute")
+               apiVersion string ) (string, int, error) {
+       log.Trace("entering createKongServiceRoutePrecheck")
+       log.Debugf("createKongServiceRoutePrecheck, aefId %s", aefId)
 
-       resourceName := resource.ResourceName
-       apiId := *sd.ApiId
+       if (resource.Operations == nil) || (len(*resource.Operations) < 1) {
+               err := errors.New("cannot read Resource.Operations")
+               log.Errorf(err.Error())
+               return "", http.StatusBadRequest, err
+       }
 
-       tags := buildTags(apfId, aefId, apiId, apiVersion, resourceName)
-       log.Debugf("createKongRoute, tags %s", tags)
+       log.Debugf("createKongServiceRoutePrecheck, resource.Uri %s", resource.Uri)
+       if resource.Uri == "" {
+               err := errors.New("cannot read Resource.Uri")
+               log.Errorf(err.Error())
+               return "", http.StatusBadRequest, err
+       }
 
-       serviceName := apiId + "_" + resourceName
-       routeName := serviceName
+       log.Debugf("createKongServiceRoutePrecheck, ResourceName %v", resource.ResourceName)
 
-       log.Debugf("createKongRoute, serviceName %s", serviceName)
-       log.Debugf("createKongRoute, routeName %s", routeName)
-       log.Debugf("createKongRoute, aefId %s", aefId)
+       if resource.ResourceName == "" {
+               err := errors.New("cannot read Resource.ResourceName")
+               log.Errorf(err.Error())
+               return "", http.StatusBadRequest, err
+       }
 
-       uri := buildUriWithVersion(apiVersion, resource.Uri)
-       log.Debugf("createKongRoute, uri %s", uri)
+       if (resource.CommType != CommunicationTypeREQUESTRESPONSE) && (resource.CommType != CommunicationTypeSUBSCRIBENOTIFY) {
+               err := errors.New("invalid Resource.CommType")
+               log.Errorf(err.Error())
+               return "", http.StatusBadRequest, err
+       }
 
-       statusCode, err := sd.createKongService(kongControlPlaneURL, serviceName, uri, tags)
-       if (err != nil) || (statusCode != http.StatusCreated) {
-               return statusCode, err
+       specUri := resource.Uri
+       kongRegexUri, _ := deriveKongPattern(resource.Uri)
+
+       specUri, statusCode, err := sd.createKongServiceRoute(kongControlPlaneURL, client, interfaceDescription, kongRegexUri, specUri, apfId, aefId, apiVersion, resource)
+       if (err != nil) || ((statusCode != http.StatusCreated) ) {
+               // We carry on if we tried to create a duplicate service. We depend on Kong route matching.
+               return specUri, statusCode, err
        }
 
-       kongRoutesURL := kongControlPlaneURL + "/services/" + serviceName + "/routes"
+       return specUri, statusCode, err
+}
+
+func insertVersion(version string, route string) string {
+       versionedRoute := route
+
+       if version != "" {
+               sep := "/"
+               n := 3
 
-       // Define the route information for Kong
-       kongRouteInfo := map[string]interface{}{
-               "name":       routeName,
-               "paths":      []string{uri},
-               "methods":    resource.Operations,
-               "tags":       tags,
-               "strip_path": true,
+               foundRegEx := false
+               if strings.HasPrefix(route, "~") {
+                       log.Debug("insertVersion, found regex prefix")
+                       foundRegEx = true
+                       route = strings.TrimPrefix(route, "~")
+               }
+
+               log.Debugf("insertVersion route %s", route)
+               split := strings.SplitAfterN(route, sep, n)
+               log.Debugf("insertVersion split %q", split)
+
+               versionedRoute = split[0]
+               if len(split) == 2 {
+                       versionedRoute = split[0] + split[1]
+               } else if len(split) > 2 {
+                       versionedRoute = split[0] + split[1] + version + sep + split[2]
+               }
+
+               if foundRegEx {
+                       versionedRoute = "~" + versionedRoute
+               }
+       }
+       log.Debugf("insertVersion versionedRoute %s", versionedRoute)
+
+       return versionedRoute
+}
+
+func (sd *ServiceAPIDescription) createKongServiceRoute(
+               kongControlPlaneURL string,
+               client *resty.Client,
+               interfaceDescription InterfaceDescription,
+               kongRegexUri string,
+               specUri string,
+               apfId string,
+               aefId string,
+               apiVersion string,
+               resource Resource) (string, int, error) {
+       log.Tracef("entering createKongServiceRoute")
+
+       var (
+               statusCode int
+               err error
+       )
+
+       kongControlPlaneURLParsed, err := url.Parse(kongControlPlaneURL)
+       if err != nil {
+               return "", http.StatusInternalServerError, err
+       }
+       log.Debugf("createKongServiceRoute, kongControlPlaneURL %s", kongControlPlaneURL)
+       log.Debugf("createKongServiceRoute, kongControlPlaneURLParsed.Scheme %s", kongControlPlaneURLParsed.Scheme)
+
+       log.Debugf("createKongServiceRoute, kongRegexUri %s", kongRegexUri)
+       log.Debugf("createKongServiceRoute, specUri %s", specUri)
+
+       kongRegexUri = insertVersion(apiVersion, kongRegexUri)
+       kongServiceUri := kongRegexUri
+       log.Debugf("createKongServiceRoute, kongServiceUri after insertVersion, %s", kongServiceUri)
+
+       specUri = insertVersion(apiVersion, specUri)
+       log.Debugf("createKongServiceRoute, specUri after insertVersion, %s", specUri)
+
+       if strings.HasPrefix(kongServiceUri, "~") {
+               log.Debug("createKongServiceRoute, found regex prefix")
+
+               // For our Kong Service path, we omit the leading ~ and take the path up to the regex, not including the '('
+               kongServiceUri = kongServiceUri[1:]
+               index := strings.Index(kongServiceUri, "(?")
+               if (index != -1 ) {
+                       kongServiceUri = kongServiceUri[:index]
+               } else {
+                       log.Errorf("createKongServiceRoute, regex characters '(?' not found in the regex %s", kongServiceUri)
+                       return "", http.StatusBadRequest, err
+               }
+       } else {
+               log.Debug("createKongServiceRoute, no regex prefix found")
+       }
+       log.Debugf("createKongServiceRoute, kongServiceUri, path up to regex %s", kongServiceUri)
+
+       ipv4Addr := *interfaceDescription.Ipv4Addr
+       port := *interfaceDescription.Port
+
+       portAsInt := int(port)
+       interfaceDescriptionSeed := string(ipv4Addr) + strconv.Itoa(portAsInt)
+       interfaceDescUuid := uuid.NewSHA1(uuid.NameSpaceURL, []byte(interfaceDescriptionSeed))
+       uriPrefix := "port-" + strconv.Itoa(portAsInt) + "-hash-" + interfaceDescUuid.String()
+
+       resourceName := resource.ResourceName
+
+       apiId := *sd.ApiId
+       kongServiceName := apiId + "-" + resourceName
+       kongServiceNamePrefix := kongServiceName + "-" + uriPrefix
+
+       log.Debugf("createKongServiceRoute, kongServiceName %s", kongServiceName)
+       log.Debugf("createKongServiceRoute, kongServiceNamePrefix %s", kongServiceNamePrefix)
+
+       tags := buildTags(apfId, aefId, apiId, apiVersion, resourceName)
+       log.Debugf("createKongServiceRoute, tags %s", tags)
+
+       kongServiceInfo := map[string]interface{}{
+               "host":     ipv4Addr,
+               "name":     kongServiceNamePrefix,
+               "port":     port,
+               "protocol": kongControlPlaneURLParsed.Scheme,
+               "path":     kongServiceUri,
+               "tags":     tags,
        }
 
+       // Kong admin API endpoint for creating a service
+       kongServicesURL := kongControlPlaneURL + "/services"
+
        // Make the POST request to create the Kong service
        resp, err := client.R().
                SetHeader("Content-Type", "application/json").
-               SetBody(kongRouteInfo).
-               Post(kongRoutesURL)
+               SetBody(kongServiceInfo).
+               Post(kongServicesURL)
 
        // Check for errors in the request
        if err != nil {
-               log.Debugf("createKongRoute POST Error: %v", err)
-               return resp.StatusCode(), err
+               log.Errorf("createKongServiceRoute, Request Error: %v", err)
+               return "", http.StatusInternalServerError, err
        }
 
        // Check the response status code
-       if resp.StatusCode() == http.StatusCreated {
-               log.Infof("kong route %s created successfully", routeName)
+       statusCode = resp.StatusCode()
+       if statusCode == http.StatusCreated {
+               log.Infof("kong service %s created successfully", kongServiceNamePrefix)
+       } else if resp.StatusCode() == http.StatusConflict {
+               log.Errorf("kong service already exists. Status code: %d", resp.StatusCode())
+               err = fmt.Errorf("service with identical apiName is already published") // for compatibilty with Capif error message on a duplicate service
+               statusCode = http.StatusForbidden                                       // for compatibilty with the spec, TS29222_CAPIF_Publish_Service_API
        } else {
-               log.Debugf("kongRoutesURL %s", kongRoutesURL)
-               err = fmt.Errorf("error creating Kong route. Status code: %d", resp.StatusCode())
-               log.Error(err.Error())
+               err = fmt.Errorf("error creating Kong service. Status code: %d", resp.StatusCode())
+       }
+       if err != nil {
+               log.Errorf(err.Error())
                log.Errorf("response body: %s", resp.Body())
-               return resp.StatusCode(), err
+               return "", statusCode, err
        }
 
-       return resp.StatusCode(), nil
-}
+       // Create matching route
+       routeName := kongServiceNamePrefix
 
-func buildUriWithVersion(apiVersion string, uri string) string {
-       if apiVersion != "" {
-               if apiVersion[0] != '/' {
-                       apiVersion = "/" + apiVersion
-               }
-               if apiVersion[len(apiVersion)-1] != '/' && uri[0] != '/' {
-                       apiVersion = apiVersion + "/"
-               }
-               uri = apiVersion + uri
+       kongRouteUri := prependUri(uriPrefix, kongRegexUri)
+       log.Debugf("createKongServiceRoute, kongRouteUri with uriPrefix %s", kongRouteUri)
+
+       kongRouteUri = prependUri(sd.ApiName, kongRouteUri)
+       log.Debugf("createKongServiceRoute, kongRouteUri with apiName %s", kongRouteUri)
+
+       specUri = prependUri(uriPrefix, specUri)
+       log.Debugf("createKongServiceRoute, specUri with uriPrefix %s", specUri)
+
+       specUri = prependUri(sd.ApiName, specUri)
+       log.Debugf("createKongServiceRoute, specUri with apiName %s", specUri)
+
+       statusCode, err = sd.createRouteForService(kongControlPlaneURL, client, resource, routeName, kongRouteUri, kongRegexUri, tags)
+       if err != nil {
+               log.Errorf(err.Error())
+               return kongRouteUri, statusCode, err
        }
-       return uri
+
+       return specUri, statusCode, err
 }
 
 func buildTags(apfId string, aefId string, apiId string, apiVersion string, resourceName string) []string  {
@@ -191,88 +423,223 @@ func buildTags(apfId string, aefId string, apiId string, apiVersion string, reso
        return tagsSlice
 }
 
-func (sd *ServiceAPIDescription) createKongService(kongControlPlaneURL string, kongServiceName string, kongServiceUri string, tags []string) (int, error) {
-       log.Tracef("entering createKongService")
-       log.Tracef("createKongService, kongServiceName %s", kongServiceName)
+func prependUri(prependUri string, uri string) string {
+       if prependUri != "" {
+               trimmedUri := uri
+               foundRegEx := false
+               if strings.HasPrefix(uri, "~") {
+                       log.Debug("prependUri, found regex prefix")
+                       foundRegEx = true
+                       trimmedUri = strings.TrimPrefix(uri, "~")
+                       log.Debugf("prependUri, TrimPrefix trimmedUri %s", trimmedUri)
+               }
 
-       // Define the service information for Kong
-       firstAEFProfileIpv4Addr, firstAEFProfilePort, err := sd.findFirstAEFProfile()
-       if err != nil {
-               return http.StatusBadRequest, err
+               if prependUri[0] != '/' {
+                       prependUri = "/" + prependUri
+               }
+               if prependUri[len(prependUri)-1] != '/' && trimmedUri[0] != '/' {
+                       prependUri = prependUri + "/"
+               }
+               uri = prependUri + trimmedUri
+               if foundRegEx {
+                       uri = "~" + uri
+               }
        }
+       return uri
+}
 
-       kongControlPlaneURLParsed, err := url.Parse(kongControlPlaneURL)
-       if err != nil {
-               return http.StatusInternalServerError, err
+func (sd *ServiceAPIDescription) createRouteForService(
+               kongControlPlaneURL string,
+               client *resty.Client,
+               resource Resource,
+               routeName string,
+               kongRouteUri string,
+               kongRegexUri string,
+               tags []string) (int, error)  {
+
+       log.Debugf("createRouteForService, kongRouteUri %s", kongRouteUri)
+
+       // Create a url.Values map to hold the form data
+       data := url.Values{}
+       data.Set("strip_path", "true")
+       log.Debugf("createRouteForService, strip_path %s", data.Get("strip_path"))
+       data.Set("name", routeName)
+
+       routeUriPaths := []string{kongRouteUri}
+       for _, path := range routeUriPaths {
+               log.Debugf("createRouteForService, path %s", path)
+               data.Add("paths", path)
        }
-       log.Debugf("kongControlPlaneURL %s", kongControlPlaneURL)
-       log.Debugf("kongControlPlaneURLParsed.Scheme %s", kongControlPlaneURLParsed.Scheme)
 
-       kongServiceInfo := map[string]interface{}{
-               "host":     firstAEFProfileIpv4Addr,
-               "name":     kongServiceName,
-               "port":     firstAEFProfilePort,
-               "protocol": kongControlPlaneURLParsed.Scheme,
-               "path":     kongServiceUri,
-               "tags":     tags,
+       for _, tag := range tags {
+               log.Debugf("createRouteForService, tag %s", tag)
+               data.Add("tags", tag)
        }
 
-       // Kong admin API endpoint for creating a service
-       kongServicesURL := kongControlPlaneURL + "/services"
+       for _, op := range *resource.Operations {
+               log.Debugf("createRouteForService, op %s", string(op))
+               data.Add("methods", string(op))
+       }
 
-       // Create a new Resty client
-       client := resty.New()
+       // Encode the data to application/x-www-form-urlencoded format
+       encodedData := data.Encode()
 
        // Make the POST request to create the Kong service
+       serviceName := routeName
+       kongRoutesURL := kongControlPlaneURL + "/services/" + serviceName + "/routes"
        resp, err := client.R().
-               SetHeader("Content-Type", "application/json").
-               SetBody(kongServiceInfo).
-               Post(kongServicesURL)
+               SetHeader("Content-Type", "application/x-www-form-urlencoded").
+               SetBody(strings.NewReader(encodedData)).
+               Post(kongRoutesURL)
 
        // Check for errors in the request
        if err != nil {
-               log.Errorf("create Kong Service Request Error: %v", err)
-               return http.StatusInternalServerError, err
+               log.Debugf("createRouteForService POST Error: %v", err)
+               return resp.StatusCode(), err
        }
 
        // Check the response status code
-       statusCode := resp.StatusCode()
-       if statusCode == http.StatusCreated {
-               log.Infof("kong service %s created successfully", kongServiceName)
-       } else if resp.StatusCode() == http.StatusConflict {
-               log.Errorf("kong service already exists. Status code: %d", resp.StatusCode())
-               err = fmt.Errorf("service with identical apiName is already published") // for compatibilty with Capif error message on a duplicate service
-               statusCode = http.StatusForbidden                                       // for compatibilty with the spec, TS29222_CAPIF_Publish_Service_API
+       if resp.StatusCode() == http.StatusCreated {
+               log.Infof("kong route %s created successfully", routeName)
+
+               index := strings.Index(kongRegexUri, "(?")
+               if index != -1 {
+                       log.Debugf("createRouteForService, found regex in %s", kongRegexUri)
+                       requestTransformerUri := strings.TrimPrefix(kongRegexUri, "~")
+                       log.Debugf("createRouteForService, requestTransformerUri %s", requestTransformerUri)
+
+                       statusCode, err := sd.createRequestTransformer(kongControlPlaneURL, client, routeName, requestTransformerUri)
+                       if (err != nil) || ((statusCode != http.StatusCreated) && (statusCode != http.StatusForbidden)) {
+                               return statusCode, err
+                       }
+               } else {
+                       log.Debug("createRouteForService, no variable name found")
+               }
        } else {
-               err = fmt.Errorf("error creating Kong service. Status code: %d", resp.StatusCode())
+               log.Debugf("kongRoutesURL %s", kongRoutesURL)
+               err = fmt.Errorf("error creating Kong route. Status code: %d", resp.StatusCode())
+               log.Error(err.Error())
+               log.Errorf("response body: %s", resp.Body())
+               return resp.StatusCode(), err
+       }
+
+       return resp.StatusCode(), nil
+}
+
+func (sd *ServiceAPIDescription) createRequestTransformer(
+       kongControlPlaneURL string,
+       client *resty.Client,
+       routeName string,
+       routePattern string) (int, error) {
+
+       log.Trace("entering createRequestTransformer")
+
+       // Make the POST request to create the Kong Request Transformer
+       kongRequestTransformerURL := kongControlPlaneURL + "/routes/" + routeName + "/plugins"
+
+       transformPattern, _ := deriveTransformPattern(routePattern)
+
+       // Create the form data
+       formData := url.Values{
+               "name":                  {"request-transformer"},
+               "config.replace.uri":    {transformPattern},
        }
+       encodedData := formData.Encode()
+
+       // Create a new HTTP POST request
+       resp, err := client.R().
+               SetHeader("Content-Type", "application/x-www-form-urlencoded").
+               SetBody(strings.NewReader(encodedData)).
+               Post(kongRequestTransformerURL)
+
+       // Check for errors in the request
        if err != nil {
-               log.Errorf(err.Error())
+               log.Debugf("createRequestTransformer POST Error: %v", err)
+               return resp.StatusCode(), err
+       }
+
+       // Check the response status code
+       if resp.StatusCode() == http.StatusCreated {
+               log.Infof("kong request transformer for route %s created successfully", routeName)
+       } else {
+               log.Debugf("kongRequestTransformerURL %s", kongRequestTransformerURL)
+               err = fmt.Errorf("error creating Kong request transformer. Status code: %d", resp.StatusCode())
+               log.Error(err.Error())
                log.Errorf("response body: %s", resp.Body())
+               return resp.StatusCode(), err
        }
 
-       return statusCode, err
+       return resp.StatusCode(), nil
 }
 
-func (sd *ServiceAPIDescription) findFirstAEFProfile() (common29122.Ipv4Addr, common29122.Port, error) {
-       log.Tracef("entering findFirstAEFProfile")
-       var aefProfile AefProfile
-       if *sd.AefProfiles != nil {
-               aefProfile = (*sd.AefProfiles)[0]
+// Function to derive the transform pattern from the route pattern
+func deriveKongPattern(routePattern string) (string, error) {
+       log.Trace("entering deriveKongPattern")
+       log.Debugf("deriveKongPattern routePattern %s", routePattern)
+
+       // Regular expression to match variable names
+       re := regexp.MustCompile(`\{([a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)\}`)
+       log.Debugf("deriveKongPattern MustCompile %v", re)
+
+       // Find all matches in the route pattern
+       matches := re.FindAllStringSubmatch(routePattern, -1)
+       log.Debugf("deriveKongPattern FindAllStringSubmatch %v", re)
+
+       transformPattern := routePattern
+       for _, match := range matches {
+               // match[0] is the full match with braces
+               // match[1] is the uri variable name
+               log.Debugf("deriveKongPattern match %v", match)
+               log.Debugf("deriveKongPattern match[0] %v", match[0])
+               log.Debugf("deriveKongPattern match[1] %v", match[1])
+               placeholder := fmt.Sprintf("(?<%s>[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*)", match[1])
+               // Replace the variable with the Kong regex placeholder
+               transformPattern = strings.Replace(transformPattern, match[0], placeholder, 1)
        }
-       if (*sd.AefProfiles == nil) || (aefProfile.InterfaceDescriptions == nil) {
-               err := errors.New("cannot read interfaceDescription")
-               log.Errorf(err.Error())
-               return "", common29122.Port(0), err
+       log.Debugf("deriveKongPattern transformPattern %s", transformPattern)
+
+       if len(matches) != 0 {
+               transformPattern = "~" + transformPattern
+               log.Debugf("deriveKongPattern transformPattern with prefix %s", transformPattern)
+       }
+
+       return transformPattern, nil
+}
+
+
+// Function to derive the transform pattern from the route pattern
+func deriveTransformPattern(routePattern string) (string, error) {
+       log.Trace("entering deriveTransformPattern")
+       log.Debugf("deriveTransformPattern routePattern %s", routePattern)
+
+       // Append a slash to handle an edge case for matching a trailing capture group.
+       appendedSlash := false
+       if routePattern[len(routePattern)-1] != '/' {
+               routePattern = routePattern + "/"
+               appendedSlash = true
+               log.Debugf("deriveTransformPattern, append / routePattern %s", routePattern)
        }
 
-       interfaceDescription := (*aefProfile.InterfaceDescriptions)[0]
-       firstIpv4Addr := *interfaceDescription.Ipv4Addr
-       firstPort := *interfaceDescription.Port
+       // Regular expression to match named capture groups
+       re := regexp.MustCompile(`\(\?<([^>]+)>([^\/]+)`)
+       // Find all matches in the route pattern
+       matches := re.FindAllStringSubmatch(routePattern, -1)
+
+       transformPattern := routePattern
+       for _, match := range matches {
+               // match[0] is the full match, match[1] is the capture group name, match[2] is the pattern
+               placeholder := fmt.Sprintf("$(uri_captures[\"%s\"])", match[1])
+               // Replace the capture group with the corresponding placeholder
+               transformPattern = strings.Replace(transformPattern, match[0], placeholder, 1)
+       }
+       log.Debugf("deriveTransformPattern transformPattern %s", transformPattern)
 
-       log.Debugf("findFirstAEFProfile firstIpv4Addr %s firstPort %d", firstIpv4Addr, firstPort)
+       if appendedSlash {
+               transformPattern = strings.TrimSuffix(transformPattern, "/")
+               log.Debugf("deriveTransformPattern, remove / transformPattern %s", transformPattern)
+       }
 
-       return firstIpv4Addr, firstPort, nil
+       return transformPattern, nil
 }
 
 // Update our exposures to point to Kong by replacing in incoming interface description with Kong interface descriptions.
index 5b949aa..d0fbe4f 100644 (file)
@@ -48,8 +48,9 @@ import (
 func main() {
        realConfigReader := &envreader.RealConfigReader{}
        myEnv, myPorts, err := realConfigReader.ReadDotEnv()
+
        if err != nil {
-               log.Fatal("error loading environment file")
+               log.Fatalf("error loading environment file, %v", err)
                return
        }
 
@@ -87,7 +88,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]
        // Register ProviderManagement
        providerManagerSwagger, err := providermanagementapi.GetSwagger()
        if err != nil {
-               log.Fatalf("error loading ProviderManagement swagger spec\n: %s", err)
+               log.Fatalf("error loading ProviderManagement swagger spec\n: %v", err)
                return err
        }
        providerManagerSwagger.Servers = nil
@@ -99,7 +100,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]
        // Register PublishService
        publishServiceSwagger, err := publishserviceapi.GetSwagger()
        if err != nil {
-               log.Fatalf("error loading PublishService swagger spec\n: %s", err)
+               log.Fatalf("error loading PublishService swagger spec\n: %v", err)
                return err
        }
        publishServiceSwagger.Servers = nil
@@ -116,7 +117,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]
        // Register InvokerManagement
        invokerManagerSwagger, err := invokermanagementapi.GetSwagger()
        if err != nil {
-               log.Fatalf("error loading InvokerManagement swagger spec\n: %s", err)
+               log.Fatalf("error loading InvokerManagement swagger spec\n: %v", err)
                return err
        }
        invokerManagerSwagger.Servers = nil
@@ -128,7 +129,7 @@ func registerHandlers(e *echo.Echo, myEnv map[string]string, myPorts map[string]
        // Register DiscoverService
        discoverServiceSwagger, err := discoverserviceapi.GetSwagger()
        if err != nil {
-               log.Fatalf("error loading DiscoverService swagger spec\n: %s", err)
+               log.Fatalf("error loading DiscoverService swagger spec\n: %v", err)
                return err
        }
 
@@ -155,7 +156,7 @@ func keepServerAlive() {
 }
 
 func hello(c echo.Context) error {
-       return c.String(http.StatusOK, "Hello, World!")
+       return c.String(http.StatusOK, "Hello World, from Service Manager!")
 }
 
 func getSwagger(c echo.Context) error {
index 14acd57..8191c03 100644 (file)
@@ -85,6 +85,238 @@ func RegisterHandlers(e *echo.Echo) {
                return c.String(http.StatusCreated, string(body))
        })
 
+       e.POST("/services/api_id_apiName_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-v1-id_helloworld-id-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-v1_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_helloworld-v1-id_helloworld-id-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-no-version_helloworld-no-version-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_helloworld-no-version_helloworld-no-version-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName1_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName2_helloworld-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName1_app-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName2_app-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-v1-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-v1-id-helloworld-id-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_helloworld-v1-id-helloworld-id-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-no-version-helloworld-no-version-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_helloworld-no-version-helloworld-no-version-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName1-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName1-app-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName2-helloworld-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName2-app-port-30951-hash-04478a3a-d0ef-5a05-a575-db5ee2e33403/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName_helloworld-id/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_apiName_helloworld-no-version/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-v1-id_helloworld-id/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-v1_helloworld/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/services/api_id_helloworld-no-version_helloworld-no-version/routes", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_apiName_helloworld-id/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_apiName_helloworld-no-version/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_helloworld-v1-id_helloworld-id/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
+       e.POST("/routes/api_id_helloworld-no-version_helloworld-no-version/plugins", func(c echo.Context) error {
+               body, err := io.ReadAll(c.Request().Body)
+               if err != nil {
+                       return c.String(http.StatusInternalServerError, "Error reading request body")
+               }
+               return c.String(http.StatusCreated, string(body))
+       })
+
        e.GET("/services", func(c echo.Context) error {
                return c.String(http.StatusOK, "{}")
        })
@@ -132,4 +364,45 @@ func RegisterHandlers(e *echo.Echo) {
        e.DELETE("/services/api_id_apiName2_app", func(c echo.Context) error {
                return c.NoContent(http.StatusNoContent)
        })
-}
\ No newline at end of file
+
+       e.DELETE("/routes/api_id_apiName_helloworld-id", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/routes/api_id_apiName_helloworld-no-version", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/routes/api_id_helloworld-v1_helloworld", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/services/api_id_apiName_helloworld-id", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/services/api_id_apiName_helloworld-no-version", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/services/api_id_helloworld-v1_helloworld", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("routes/api_id_helloworld-no-version_helloworld-no-version", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("services/api_id_helloworld-no-version_helloworld-no-version", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/routes/api_id_helloworld-v1-id_helloworld-id", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+       e.DELETE("/services/api_id_helloworld-v1-id_helloworld-id", func(c echo.Context) error {
+               return c.NoContent(http.StatusNoContent)
+       })
+
+}