This is an automated email from the ASF dual-hosted git repository. jamesbognar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push: new 9cdc327 BasicRestInfoProvider refactor. 9cdc327 is described below commit 9cdc327b7026634f8c8d10cea1c528f699d0d0f3 Author: JamesBognar <jamesbog...@apache.org> AuthorDate: Wed Aug 1 22:12:21 2018 -0400 BasicRestInfoProvider refactor. --- .../apache/juneau/rest/BasicRestInfoProvider.java | 470 +++++++++++---------- 1 file changed, 257 insertions(+), 213 deletions(-) diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java index 07ad487..d189ba0 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java @@ -396,6 +396,7 @@ public class BasicRestInfoProvider implements RestInfoProvider { for (RestMethodParam mp : context.getRestMethodParams(m)) { RestParamType in = mp.getParamType(); + int index = mp.index; if (in.isAny(BODY, QUERY, FORM_DATA, HEADER, PATH)) { @@ -408,28 +409,25 @@ public class BasicRestInfoProvider implements RestInfoProvider { if (in != BODY) param.append("name", mp.name); - if (in == BODY) { - for (Body a : getAnnotationsParentFirst(Body.class, mp.method, mp.index)) - merge(param, a, vr, "ParameterInfo on class {0} method {1}", c, m); - - } else if (in == QUERY) { - for (Query a : getAnnotationsParentFirst(Query.class, mp.method, mp.index)) - merge(param, a, vr, "ParameterInfo on class {0} method {1}", c, m); - - } else if (in == FORM_DATA) { - for (FormData a : getAnnotationsParentFirst(FormData.class, mp.method, mp.index)) - merge(param, a, vr, "ParameterInfo on class {0} method {1}", c, m); - - } else if (in == HEADER) { - for (Header a : getAnnotationsParentFirst(Header.class, mp.method, mp.index)) - merge(param, a, vr, "ParameterInfo on class {0} method {1}", c, m); - - } else if (in == PATH) { - for (Path a : getAnnotationsParentFirst(Path.class, mp.method, mp.index)) - merge(param, a, vr, "ParameterInfo on class {0} method {1}", c, m); - - } else { - throw new RuntimeException(); + try { + if (in == BODY) { + for (Body a : getAnnotationsParentFirst(Body.class, mp.method, mp.index)) + merge(param, a, vr); + } else if (in == QUERY) { + for (Query a : getAnnotationsParentFirst(Query.class, mp.method, mp.index)) + merge(param, a, vr); + } else if (in == FORM_DATA) { + for (FormData a : getAnnotationsParentFirst(FormData.class, mp.method, mp.index)) + merge(param, a, vr); + } else if (in == HEADER) { + for (Header a : getAnnotationsParentFirst(Header.class, mp.method, mp.index)) + merge(param, a, vr); + } else if (in == PATH) { + for (Path a : getAnnotationsParentFirst(Path.class, mp.method, mp.index)) + merge(param, a, vr); + } + } catch (ParseException e) { + throw new SwaggerException(e, "Malformed swagger JSON object encountered in {0} class {1} method {2} parameter {3}", in, c, m, index); } if (! param.containsKey("schema")) @@ -439,9 +437,7 @@ public class BasicRestInfoProvider implements RestInfoProvider { param.put("required", true); addXExamples(req, sm, param, in.toString(), js, mp.getType()); - } - } if (! paramMap.isEmpty()) @@ -1362,205 +1358,181 @@ public class BasicRestInfoProvider implements RestInfoProvider { return om.modifiable(); } - private static ObjectMap merge(ObjectMap om, Body a, VarResolverSession vr, String location, Object...args) throws SwaggerException { - try { - if (empty(a)) - return om; - om = newMap(om); - if (a.value().length > 0) - om.putAll(parseMap(vr, a.value())); - if (a.api().length > 0) - om.putAll(parseMap(vr, a.api())); - return om - .appendSkipEmpty("description", resolve(vr, a.description())) - .appendSkipEmpty("x-example", resolve(vr, a.example())) - .appendSkipEmpty("x-examples", parseMap(vr, a.examples())) - .appendSkipFalse("required", a.required()) - .appendSkipEmpty("schema", merge(om.getObjectMap("schema"), a.schema(), vr, location, args)) - ; - } catch (ParseException e) { - throw new SwaggerException(e, "Malformed swagger JSON object encountered in " + location + ".", args); - } + private static ObjectMap merge(ObjectMap om, Body a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.value().length > 0) + om.putAll(parseMap(vr, a.value())); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipEmpty("x-examples", parseMap(vr, a.examples())) + .appendSkipFalse("required", a.required()) + .appendSkipEmpty("schema", merge(om.getObjectMap("schema"), a.schema(), vr)) + ; } - private static ObjectMap merge(ObjectMap om, Query a, VarResolverSession vr, String location, Object...args) throws SwaggerException { - try { - if (empty(a)) - return om; - om = newMap(om); - if (a.api().length > 0) - om.putAll(parseMap(vr, a.api())); - return om - .appendSkipFalse("allowEmptyValue", a.allowEmptyValue()) - .appendSkipEmpty("collectionFormat", a.collectionFormat()) - .appendSkipEmpty("default", joinnl(a._default())) - .appendSkipEmpty("description", resolve(vr, a.description())) - .appendSkipEmpty("enum", toSet(a._enum(), vr)) - .appendSkipEmpty("x-example", resolve(vr, a.example())) - .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) - .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) - .appendSkipEmpty("format", a.format()) - .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) - .appendSkipEmpty("maximum", a.maximum()) - .appendSkipMinusOne("maxItems", a.maxItems()) - .appendSkipMinusOne("maxLength", a.maxLength()) - .appendSkipEmpty("minimum", a.minimum()) - .appendSkipMinusOne("minItems", a.minItems()) - .appendSkipMinusOne("minLength", a.minLength()) - .appendSkipEmpty("multipleOf", a.multipleOf()) - .appendSkipEmpty("pattern", a.pattern()) - .appendSkipFalse("required", a.required()) - .appendSkipEmpty("type", a.type()) - .appendSkipFalse("uniqueItems", a.uniqueItems()) - ; - } catch (ParseException e) { - throw new SwaggerException(e, "Malformed swagger JSON object encountered in " + location + ".", args); - } + private static ObjectMap merge(ObjectMap om, Query a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipFalse("allowEmptyValue", a.allowEmptyValue()) + .appendSkipEmpty("collectionFormat", a.collectionFormat()) + .appendSkipEmpty("default", joinnl(a._default())) + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("enum", toSet(a._enum(), vr)) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) + .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) + .appendSkipEmpty("format", a.format()) + .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) + .appendSkipEmpty("maximum", a.maximum()) + .appendSkipMinusOne("maxItems", a.maxItems()) + .appendSkipMinusOne("maxLength", a.maxLength()) + .appendSkipEmpty("minimum", a.minimum()) + .appendSkipMinusOne("minItems", a.minItems()) + .appendSkipMinusOne("minLength", a.minLength()) + .appendSkipEmpty("multipleOf", a.multipleOf()) + .appendSkipEmpty("pattern", a.pattern()) + .appendSkipFalse("required", a.required()) + .appendSkipEmpty("type", a.type()) + .appendSkipFalse("uniqueItems", a.uniqueItems()) + ; } - private static ObjectMap merge(ObjectMap om, FormData a, VarResolverSession vr, String location, Object...args) throws SwaggerException { - try { - if (empty(a)) - return om; - om = newMap(om); - if (a.api().length > 0) - om.putAll(parseMap(vr, a.api())); - return om - .appendSkipFalse("allowEmptyValue", a.allowEmptyValue()) - .appendSkipEmpty("collectionFormat", a.collectionFormat()) - .appendSkipEmpty("default", joinnl(a._default())) - .appendSkipEmpty("description", resolve(vr, a.description())) - .appendSkipEmpty("enum", toSet(a._enum(), vr)) - .appendSkipEmpty("x-example", resolve(vr, a.example())) - .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) - .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) - .appendSkipEmpty("format", a.format()) - .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) - .appendSkipEmpty("maximum", a.maximum()) - .appendSkipMinusOne("maxItems", a.maxItems()) - .appendSkipMinusOne("maxLength", a.maxLength()) - .appendSkipEmpty("minimum", a.minimum()) - .appendSkipMinusOne("minItems", a.minItems()) - .appendSkipMinusOne("minLength", a.minLength()) - .appendSkipEmpty("multipleOf", a.multipleOf()) - .appendSkipEmpty("pattern", a.pattern()) - .appendSkipFalse("required", a.required()) - .appendSkipEmpty("type", a.type()) - .appendSkipFalse("uniqueItems", a.uniqueItems()) - ; - } catch (ParseException e) { - throw new SwaggerException(e, "Malformed swagger JSON object encountered in " + location + ".", args); - } + private static ObjectMap merge(ObjectMap om, FormData a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipFalse("allowEmptyValue", a.allowEmptyValue()) + .appendSkipEmpty("collectionFormat", a.collectionFormat()) + .appendSkipEmpty("default", joinnl(a._default())) + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("enum", toSet(a._enum(), vr)) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) + .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) + .appendSkipEmpty("format", a.format()) + .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) + .appendSkipEmpty("maximum", a.maximum()) + .appendSkipMinusOne("maxItems", a.maxItems()) + .appendSkipMinusOne("maxLength", a.maxLength()) + .appendSkipEmpty("minimum", a.minimum()) + .appendSkipMinusOne("minItems", a.minItems()) + .appendSkipMinusOne("minLength", a.minLength()) + .appendSkipEmpty("multipleOf", a.multipleOf()) + .appendSkipEmpty("pattern", a.pattern()) + .appendSkipFalse("required", a.required()) + .appendSkipEmpty("type", a.type()) + .appendSkipFalse("uniqueItems", a.uniqueItems()) + ; } - private static ObjectMap merge(ObjectMap om, Header a, VarResolverSession vr, String location, Object...args) throws SwaggerException { - try { - if (empty(a)) - return om; - om = newMap(om); - if (a.api().length > 0) - om.putAll(parseMap(vr, a.api())); - return om - .appendSkipEmpty("collectionFormat", a.collectionFormat()) - .appendSkipEmpty("default", joinnl(a._default())) - .appendSkipEmpty("description", resolve(vr, a.description())) - .appendSkipEmpty("enum", toSet(a._enum(), vr)) - .appendSkipEmpty("x-example", resolve(vr, a.example())) - .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) - .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) - .appendSkipEmpty("format", a.format()) - .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) - .appendSkipEmpty("maximum", a.maximum()) - .appendSkipMinusOne("maxItems", a.maxItems()) - .appendSkipMinusOne("maxLength", a.maxLength()) - .appendSkipEmpty("minimum", a.minimum()) - .appendSkipMinusOne("minItems", a.minItems()) - .appendSkipMinusOne("minLength", a.minLength()) - .appendSkipEmpty("multipleOf", a.multipleOf()) - .appendSkipEmpty("pattern", a.pattern()) - .appendSkipFalse("required", a.required()) - .appendSkipEmpty("type", a.type()) - .appendSkipFalse("uniqueItems", a.uniqueItems()) - ; - } catch (ParseException e) { - throw new SwaggerException(e, "Malformed swagger JSON object encountered in " + location + ".", args); - } + private static ObjectMap merge(ObjectMap om, Header a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipEmpty("collectionFormat", a.collectionFormat()) + .appendSkipEmpty("default", joinnl(a._default())) + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("enum", toSet(a._enum(), vr)) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) + .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) + .appendSkipEmpty("format", a.format()) + .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) + .appendSkipEmpty("maximum", a.maximum()) + .appendSkipMinusOne("maxItems", a.maxItems()) + .appendSkipMinusOne("maxLength", a.maxLength()) + .appendSkipEmpty("minimum", a.minimum()) + .appendSkipMinusOne("minItems", a.minItems()) + .appendSkipMinusOne("minLength", a.minLength()) + .appendSkipEmpty("multipleOf", a.multipleOf()) + .appendSkipEmpty("pattern", a.pattern()) + .appendSkipFalse("required", a.required()) + .appendSkipEmpty("type", a.type()) + .appendSkipFalse("uniqueItems", a.uniqueItems()) + ; } - private static ObjectMap merge(ObjectMap om, Path a, VarResolverSession vr, String location, Object...args) throws SwaggerException { - try { - if (empty(a)) - return om; - om = newMap(om); - if (a.api().length > 0) - om.putAll(parseMap(vr, a.api())); - return om - .appendSkipEmpty("collectionFormat", a.collectionFormat()) - .appendSkipEmpty("description", resolve(vr, a.description())) - .appendSkipEmpty("enum", toSet(a._enum(), vr)) - .appendSkipEmpty("x-example", resolve(vr, a.example())) - .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) - .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) - .appendSkipEmpty("format", a.format()) - .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) - .appendSkipEmpty("maximum", a.maximum()) - .appendSkipMinusOne("maxLength", a.maxLength()) - .appendSkipEmpty("minimum", a.minimum()) - .appendSkipMinusOne("minLength", a.minLength()) - .appendSkipEmpty("multipleOf", a.multipleOf()) - .appendSkipEmpty("pattern", a.pattern()) - .appendSkipEmpty("type", a.type()) - ; - } catch (ParseException e) { - throw new SwaggerException(e, "Malformed swagger JSON object encountered in " + location + ".", args); - } + private static ObjectMap merge(ObjectMap om, Path a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipEmpty("collectionFormat", a.collectionFormat()) + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("enum", toSet(a._enum(), vr)) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) + .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) + .appendSkipEmpty("format", a.format()) + .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) + .appendSkipEmpty("maximum", a.maximum()) + .appendSkipMinusOne("maxLength", a.maxLength()) + .appendSkipEmpty("minimum", a.minimum()) + .appendSkipMinusOne("minLength", a.minLength()) + .appendSkipEmpty("multipleOf", a.multipleOf()) + .appendSkipEmpty("pattern", a.pattern()) + .appendSkipEmpty("type", a.type()) + ; } - private static ObjectMap merge(ObjectMap om, Schema a, VarResolverSession vr, String location, Object...args) throws SwaggerException { - try { - if (empty(a)) - return om; - om = newMap(om); - if (a.value().length > 0) - om.putAll(parseMap(vr, a.value())); - return om - .appendSkipEmpty("additionalProperties", toObjectMap(a.additionalProperties(), vr)) - .appendSkipEmpty("allOf", joinnl(a.allOf())) - .appendSkipEmpty("collectionFormat", a.collectionFormat()) - .appendSkipEmpty("default", joinnl(a._default())) - .appendSkipEmpty("discriminator", a.discriminator()) - .appendSkipEmpty("description", resolve(vr, a.description())) - .appendSkipEmpty("enum", toSet(a._enum(), vr)) - .appendSkipEmpty("x-example", resolve(vr, a.example())) - .appendSkipEmpty("examples", parseMap(vr, a.examples())) - .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) - .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) - .appendSkipEmpty("externalDocs", merge(om.getObjectMap("externalDocs"), a.externalDocs(), vr)) - .appendSkipEmpty("format", a.format()) - .appendSkipEmpty("ignore", a.ignore() ? "true" : null) - .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) - .appendSkipEmpty("maximum", a.maximum()) - .appendSkipMinusOne("maxItems", a.maxItems()) - .appendSkipMinusOne("maxLength", a.maxLength()) - .appendSkipMinusOne("maxProperties", a.maxProperties()) - .appendSkipEmpty("minimum", a.minimum()) - .appendSkipMinusOne("minItems", a.minItems()) - .appendSkipMinusOne("minLength", a.minLength()) - .appendSkipMinusOne("minProperties", a.minProperties()) - .appendSkipEmpty("multipleOf", a.multipleOf()) - .appendSkipEmpty("pattern", a.pattern()) - .appendSkipEmpty("properties", toObjectMap(a.properties(), vr)) - .appendSkipFalse("readOnly", a.readOnly()) - .appendSkipFalse("required", a.required()) - .appendSkipEmpty("title", a.title()) - .appendSkipEmpty("type", a.type()) - .appendSkipFalse("uniqueItems", a.uniqueItems()) - .appendSkipEmpty("xml", joinnl(a.xml())) - .appendSkipEmpty("$ref", a.$ref()) - ; - } catch (ParseException e) { - throw new SwaggerException(e, "Malformed swagger JSON object encountered in " + location + ".", args); - } + private static ObjectMap merge(ObjectMap om, Schema a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.value().length > 0) + om.putAll(parseMap(vr, a.value())); + return om + .appendSkipEmpty("additionalProperties", toObjectMap(a.additionalProperties(), vr)) + .appendSkipEmpty("allOf", joinnl(a.allOf())) + .appendSkipEmpty("collectionFormat", a.collectionFormat()) + .appendSkipEmpty("default", joinnl(a._default())) + .appendSkipEmpty("discriminator", a.discriminator()) + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("enum", toSet(a._enum(), vr)) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipEmpty("examples", parseMap(vr, a.examples())) + .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) + .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) + .appendSkipEmpty("externalDocs", merge(om.getObjectMap("externalDocs"), a.externalDocs(), vr)) + .appendSkipEmpty("format", a.format()) + .appendSkipEmpty("ignore", a.ignore() ? "true" : null) + .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) + .appendSkipEmpty("maximum", a.maximum()) + .appendSkipMinusOne("maxItems", a.maxItems()) + .appendSkipMinusOne("maxLength", a.maxLength()) + .appendSkipMinusOne("maxProperties", a.maxProperties()) + .appendSkipEmpty("minimum", a.minimum()) + .appendSkipMinusOne("minItems", a.minItems()) + .appendSkipMinusOne("minLength", a.minLength()) + .appendSkipMinusOne("minProperties", a.minProperties()) + .appendSkipEmpty("multipleOf", a.multipleOf()) + .appendSkipEmpty("pattern", a.pattern()) + .appendSkipEmpty("properties", toObjectMap(a.properties(), vr)) + .appendSkipFalse("readOnly", a.readOnly()) + .appendSkipFalse("required", a.required()) + .appendSkipEmpty("title", a.title()) + .appendSkipEmpty("type", a.type()) + .appendSkipFalse("uniqueItems", a.uniqueItems()) + .appendSkipEmpty("xml", joinnl(a.xml())) + .appendSkipEmpty("$ref", a.$ref()) + ; } private static ObjectMap merge(ObjectMap om, ExternalDocs a, VarResolverSession vr) throws ParseException { @@ -1631,6 +1603,78 @@ public class BasicRestInfoProvider implements RestInfoProvider { ; } + private static ObjectMap merge(ObjectMap om, ResponseBody a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipEmpty("examples", joinnl(a.examples())) + .appendSkipEmpty("schema", merge(om.getObjectMap("schema"), a.schema(), vr)) + ; + } + + private static ObjectMap merge(ObjectMap om, Response a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipEmpty("examples", joinnl(a.examples())) + .appendSkipEmpty("headers", merge(om.getObjectMap("headers"), a.headers(), vr)) + .appendSkipEmpty("schema", merge(om.getObjectMap("schema"), a.schema(), vr)) + ; + } + + private static ObjectMap merge(ObjectMap om, ResponseHeader[] a, VarResolverSession vr) throws ParseException { + if (a.length == 0) + return om; + om = newMap(om); + for (ResponseHeader aa : a) { + String name = StringUtils.firstNonEmpty(aa.name(), aa.value()); + if (isEmpty(name)) + throw new RuntimeException("@ResponseHeader used without name or value."); + om.getObjectMap(name, true).putAll(merge(null, aa, vr)); + } + return om; + } + + private static ObjectMap merge(ObjectMap om, ResponseHeader a, VarResolverSession vr) throws ParseException { + if (empty(a)) + return om; + om = newMap(om); + if (a.api().length > 0) + om.putAll(parseMap(vr, a.api())); + return om + .appendSkipEmpty("collectionFormat", a.collectionFormat()) + .appendSkipEmpty("default", joinnl(a._default())) + .appendSkipEmpty("description", resolve(vr, a.description())) + .appendSkipEmpty("enum", toSet(a._enum(), vr)) + .appendSkipEmpty("x-example", resolve(vr, a.example())) + .appendSkipFalse("exclusiveMaximum", a.exclusiveMaximum()) + .appendSkipFalse("exclusiveMinimum", a.exclusiveMinimum()) + .appendSkipEmpty("format", a.format()) + .appendSkipEmpty("items", merge(om.getObjectMap("items"), a.items(), vr)) + .appendSkipEmpty("maximum", a.maximum()) + .appendSkipMinusOne("maxItems", a.maxItems()) + .appendSkipMinusOne("maxLength", a.maxLength()) + .appendSkipMinusOne("maxItems", a.maxItems()) + .appendSkipEmpty("minimum", a.minimum()) + .appendSkipMinusOne("minItems", a.minItems()) + .appendSkipMinusOne("minLength", a.minLength()) + .appendSkipEmpty("multipleOf", a.multipleOf()) + .appendSkipEmpty("pattern", a.pattern()) + .appendSkipEmpty("type", a.type()) + .appendSkipFalse("uniqueItems", a.uniqueItems()) + .appendSkipEmpty("$ref", a.$ref()) + ; + } + private static ObjectMap toObjectMap(String[] ss, VarResolverSession vr) throws ParseException { if (ss.length == 0) return null;