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 5f19e4b  Swagger UI enhancements.
5f19e4b is described below

commit 5f19e4b2c166b6afefe1e4be87afc0c609e94c50
Author: JamesBognar <[email protected]>
AuthorDate: Tue Apr 3 18:24:34 2018 -0400

    Swagger UI enhancements.
---
 .../java/org/apache/juneau/BeanPropertyMeta.java    |  9 +++++++--
 .../jsonschema/JsonSchemaSerializerSession.java     | 12 +++++++++++-
 .../apache/juneau/rest/BasicRestInfoProvider.java   | 21 ++++++++-------------
 3 files changed, 26 insertions(+), 16 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 4037122..1644c7e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -642,11 +642,16 @@ public final class BeanPropertyMeta {
 
                                                        if 
(propertyClass.isInstance(valueMap)) {
                                                                if (! 
valueType.isObject()) {
+                                                                       boolean 
needsConversion = false;
                                                                        for 
(Map.Entry e : (Set<Map.Entry>)valueMap.entrySet()) {
                                                                                
Object v = e.getValue();
-                                                                               
if (v != null && ! valueType.getInnerClass().isInstance(v)) 
-                                                                               
        v = session.convertToType(v, valueType);
+                                                                               
if (v != null && ! valueType.getInnerClass().isInstance(v)) {
+                                                                               
        needsConversion = true;
+                                                                               
        break;
+                                                                               
}
                                                                        }
+                                                                       if 
(needsConversion)
+                                                                               
valueMap = (Map)session.convertToType(valueMap, rawTypeMeta);
                                                                }
                                                                
invokeSetter(bean, pName, valueMap);
                                                                return r;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaSerializerSession.java
index ea39466..af574af 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaSerializerSession.java
@@ -113,8 +113,18 @@ public class JsonSchemaSerializerSession extends 
JsonSerializerSession {
 
                boolean useDef = useBeanDefs && sType.isBean() && pNames == 
null;
                
-               if (useDef && defs.containsKey(getBeanDefId(sType))) 
+               if (useDef && defs.containsKey(getBeanDefId(sType))) {
+                       ObjectMap schema = defs.get(getBeanDefId(sType));
+                       
+                       // If we previously encountered this bean in a 
collection/array, then it may not have
+                       // the example and description associated with it, so 
add it now.
+                       if (! schema.containsKey("example")) 
+                               schema.appendIf(true, true, true, "example", 
getExample(sType, BEAN, exampleAdded));
+                       if (! schema.containsKey("description")) 
+                               schema.appendIf(true, true, true, 
"description", getDescription(sType, BEAN, exampleAdded));
+                       
                        return new ObjectMap().append("$ref", 
getBeanDefUri(sType));
+               }
                
                ObjectMap ds = 
defaultSchemas.get(sType.getInnerClass().getName());
                if (ds != null && ds.containsKey("type")) 
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 6aec374..f907702 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
@@ -382,7 +382,7 @@ public class BasicRestInfoProvider implements 
RestInfoProvider {
                                        param.put("required", true);
                                
                                param.put("schema", getSchema(req, 
param.getObjectMap("schema", true), js, mp.getType()));
-                               addXExamples(req, sm, omSwagger, param, 
in.toString(), js, mp.getType());
+                               addXExamples(req, sm, param, in.toString(), js, 
mp.getType());
                        }
                        
                        if (! paramMap.isEmpty())
@@ -417,7 +417,7 @@ public class BasicRestInfoProvider implements 
RestInfoProvider {
                        ObjectMap okResponse = responses.getObjectMap("200");
                        
                        okResponse.put("schema", getSchema(req, 
okResponse.getObjectMap("schema", true), js, m.getGenericReturnType()));
-                       addXExamples(req, sm, omSwagger, okResponse, "ok", js, 
m.getGenericReturnType());
+                       addXExamples(req, sm, okResponse, "ok", js, 
m.getGenericReturnType());
                        
                        if (responses.isEmpty())
                                op.remove("responses");
@@ -465,18 +465,15 @@ public class BasicRestInfoProvider implements 
RestInfoProvider {
                if (schema.containsKey("type") || schema.containsKey("$ref")) 
                        return schema;
                
-               if (cm.isBean() && js.isUseBeanDefs()) 
-                       schema.put("$ref", js.getBeanDefUri(cm));
-               else
-                       schema.putAll(js.getSchema(cm));
+               schema.putAll(js.getSchema(cm));
 
                return schema;
        }
        
        
-       private void addXExamples(RestRequest req, RestJavaMethod sm, ObjectMap 
swagger, ObjectMap m, String in, JsonSchemaSerializerSession js, Type type) 
throws Exception {
+       private void addXExamples(RestRequest req, RestJavaMethod sm, ObjectMap 
m, String in, JsonSchemaSerializerSession js, Type type) throws Exception {
                
-               ObjectMap schema = resolve(m.getObjectMap("schema"));
+               ObjectMap schema = resolve(js, m.getObjectMap("schema"));
                if (schema == null)
                        return;
 
@@ -516,15 +513,13 @@ public class BasicRestInfoProvider implements 
RestInfoProvider {
                        m.put(examplesKey, examples);
        }
        
-       private ObjectMap resolve(ObjectMap m) {
+       private ObjectMap resolve(JsonSchemaSerializerSession js, ObjectMap m) {
                if (m == null)
                        return null;
                if (m.containsKey("$ref")) {
                        String ref = m.getString("$ref");
-                       if (ref.startsWith("#/definitions/")) {
-                               ref = ref.substring(1);
-                               return m.getAt(ref, ObjectMap.class);
-                       }
+                       if (ref.startsWith("#/definitions/")) 
+                               return js.getBeanDefs().get(ref.substring(14));
                }
                return m;
        }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to