[juneau] branch master updated: Swagger UI enhancements.
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 b1d8df4 Swagger UI enhancements. b1d8df4 is described below commit b1d8df48176cddbdf7d2a92bf454e0589af92cfa Author: JamesBognar AuthorDate: Sun Apr 15 14:27:11 2018 -0400 Swagger UI enhancements. --- .../apache/juneau/jena/RdfBeanPropertyMeta.java| 16 +- .../org/apache/juneau/jena/RdfParserSession.java | 7 +- .../apache/juneau/jena/RdfSerializerSession.java | 67 ++-- .../apache/juneau/html/HtmlBeanPropertyMeta.java | 33 ++ .../java/org/apache/juneau/html/HtmlClassMeta.java | 18 + .../apache/juneau/html/HtmlSerializerSession.java | 90 +++-- .../java/org/apache/juneau/html/HtmlWriter.java| 2 +- .../org/apache/juneau/html/annotation/Html.java| 1 - .../apache/juneau/html/annotation/HtmlFormat.java | 12 + .../java/org/apache/juneau/internal/AsciiSet.java | 12 + .../org/apache/juneau/internal/ObjectUtils.java| 3 +- .../org/apache/juneau/internal/StringUtils.java| 84 - .../jsonschema/JsonSchemaBeanPropertyMeta.java | 13 + .../org/apache/juneau/xml/XmlBeanPropertyMeta.java | 9 + .../apache/juneau/xml/XmlSerializerSession.java| 44 ++- .../main/java/org/apache/juneau/xml/XmlUtils.java | 2 +- .../xmlschema/XmlSchemaSerializerSession.java | 4 +- juneau-doc/src/main/javadoc/overview.html | 26 +- juneau-examples/juneau-examples-rest/examples.cfg | 15 +- .../juneau/examples/rest/JsonSchemaResource.java | 22 +- .../apache/juneau/examples/rest/RootResources.java | 1 - .../juneau/examples/rest/SqlQueryResource.java | 34 +- .../juneau/examples/rest/StaticFilesResource.java | 83 .../juneau/examples/rest/TempDirResource.java | 9 +- .../examples/rest/UrlEncodedFormResource.java | 13 +- .../src/main/resources/examples.cfg| 147 .../examples/rest/JsonSchemaResource_example.json | 50 ++- .../examples/rest/TestMultiPartFormPostsTest.java | 2 +- .../microservice/resources/ConfigResource.java | 233 ++-- .../microservice/resources/DirectoryResource.java | 293 +++--- .../microservice/resources/LogsResource.java | 420 +++-- .../my-microservice.cfg| 16 +- .../apache/juneau/rest/BasicRestInfoProvider.java | 4 +- 33 files changed, 926 insertions(+), 859 deletions(-) diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java index dd1de16..d1054de 100644 --- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java +++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java @@ -12,8 +12,6 @@ // *** package org.apache.juneau.jena; -import static org.apache.juneau.jena.RdfCollectionFormat.*; - import java.util.*; import org.apache.juneau.*; @@ -26,7 +24,13 @@ import org.apache.juneau.xml.*; */ public class RdfBeanPropertyMeta extends BeanPropertyMetaExtended { - private RdfCollectionFormat collectionFormat = DEFAULT; + /** +* Default instance. +*/ + public static final RdfBeanPropertyMeta DEFAULT = new RdfBeanPropertyMeta(); + + + private RdfCollectionFormat collectionFormat = RdfCollectionFormat.DEFAULT; private Namespace namespace = null; private boolean isBeanUri; @@ -42,7 +46,7 @@ public class RdfBeanPropertyMeta extends BeanPropertyMetaExtended { List schemas = bpm.findAnnotations(RdfSchema.class); for (Rdf rdf : rdfs) { - if (collectionFormat == DEFAULT) + if (collectionFormat == RdfCollectionFormat.DEFAULT) collectionFormat = rdf.collectionFormat(); if (rdf.beanUri()) isBeanUri = true; @@ -50,6 +54,10 @@ public class RdfBeanPropertyMeta extends BeanPropertyMetaExtended { namespace = RdfUtils.findNamespace(rdfs, schemas); } + + private RdfBeanPropertyMeta() { + super(null); + } /** * Returns the RDF collection format of this property from the {@link Rdf#collectionFormat} annotation on this bean diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java index 3eff76c..5387a91 100644 --- a/juneau-core/juneau-marshall-rdf/src/main/
[juneau] branch master updated: Swagger UI enhancements.
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 a75b7f9 Swagger UI enhancements. a75b7f9 is described below commit a75b7f976eb12a18dd928f440caeed9175e21203 Author: JamesBognar AuthorDate: Sat Apr 14 15:33:51 2018 -0400 Swagger UI enhancements. --- .../org/apache/juneau/config/vars/ConfigVar.java | 2 +- .../org/apache/juneau/dto/swagger/ui/SwaggerUI.css | 1 + .../src/main/java/org/apache/juneau/ClassMeta.java | 6 ++ .../org/apache/juneau/svl/VarResolverSession.java | 5 +- juneau-doc/src/main/javadoc/overview.html | 2 +- .../files/htdocs/styles/SwaggerUI.css | 1 + .../juneau/examples/rest/AtomFeedResource.java | 23 ++-- .../examples/rest/AtomFeedResource_example.json| 116 + .../files/htdocs/styles/SwaggerUI.css | 1 + .../apache/juneau/rest/BasicRestInfoProvider.java | 8 +- .../org/apache/juneau/rest/RestContextBuilder.java | 5 +- .../java/org/apache/juneau/rest/vars/FileVar.java | 16 ++- .../apache/juneau/rest/vars/LocalizationVar.java | 2 +- .../juneau/rest/vars/RequestAttributeVar.java | 2 +- .../juneau/rest/vars/RequestFormDataVar.java | 2 +- .../apache/juneau/rest/vars/RequestHeaderVar.java | 2 +- .../apache/juneau/rest/vars/RequestPathVar.java| 2 +- .../apache/juneau/rest/vars/RequestQueryVar.java | 2 +- .../org/apache/juneau/rest/vars/RequestVar.java| 2 +- .../org/apache/juneau/rest/vars/RestInfoVar.java | 2 +- .../juneau/rest/vars/SerializedRequestAttrVar.java | 2 +- .../juneau/rest/vars/ServletInitParamVar.java | 2 +- .../java/org/apache/juneau/rest/vars/UrlVar.java | 2 +- .../org/apache/juneau/rest/vars/WidgetVar.java | 2 +- 24 files changed, 135 insertions(+), 75 deletions(-) diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java index f6eebc8..c7e0829 100644 --- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java +++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java @@ -68,6 +68,6 @@ public class ConfigVar extends DefaultingVar { @Override /* Var */ public String resolve(VarResolverSession session, String key) { - return session.getSessionObject(Config.class, SESSION_config).getString(key); + return session.getSessionObject(Config.class, SESSION_config, true).getString(key); } } diff --git a/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css b/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css index 7a80655..b118da2 100644 --- a/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css +++ b/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css @@ -281,6 +281,7 @@ td.parameter-value, td.response-value { max-width: 800px; max-height: 800px; text-overflow: auto; + overflow: auto; } .op-block-contents .example.active { diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java index 57132de..a3e6ddc 100644 --- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java +++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java @@ -1013,6 +1013,12 @@ public final class ClassMeta implements Type { if (isCollectionOrArray() && StringUtils.isObjectList(s, false)) return JsonParser.DEFAULT.parse(s, this); } + if (example instanceof Map && isMapOrBean()) { + return JsonParser.DEFAULT.parse(JsonSerializer.DEFAULT_LAX_READABLE.toString(example), this); + } + if (example instanceof Collection && isCollectionOrArray()) { + return JsonParser.DEFAULT.parse(JsonSerializer.DEFAULT_LAX_READABLE.serialize(example), this); + } } if (exampleMethod != null) return (T)invokeMethodFuzzy(exampleMethod, null, session); diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java index a553b0d..32b69c4 100644 --- a/juneau-core/juneau-svl/src
[juneau] branch master updated: Swagger UI enhancements.
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 c836d34 Swagger UI enhancements. c836d34 is described below commit c836d34caef1eeb2112be2d2a291e82668a3f6fe Author: JamesBognar AuthorDate: Sat Apr 14 14:21:34 2018 -0400 Swagger UI enhancements. --- .../apache/juneau/html/HtmlDocTemplateBasic.java | 43 --- juneau-doc/src/main/javadoc/overview.html | 12 ++ .../examples/rest/SampleRemoteableServlet.java | 68 --- .../microservice/resources/DirectoryResource.java | 29 +++-- .../apache/juneau/rest/test/HtmlDocResource.java | 1 + .../java/org/apache/juneau/rest/RequestBody.java | 14 +++ .../org/apache/juneau/rest/RestParamDefaults.java | 26 .../org/apache/juneau/rest/annotation/HtmlDoc.java | 4 +- .../juneau/rest/remoteable/RemoteableServlet.java | 136 + 9 files changed, 178 insertions(+), 155 deletions(-) diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java index dfc74b1..731d394 100644 --- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java +++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java @@ -109,32 +109,31 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate { @Override /* HtmlDocTemplate */ public void nav(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception { + String[] links = session.getNavLinks(); + if (links.length > 0 && ! ArrayUtils.contains("NONE", links)) { + w.sTag(3, "ol").nl(3); + for (String l : links) { + w.sTag(4, "li"); + if (l.matches("(?s)\\S+\\:.*")) { + int i = l.indexOf(':'); + String key = l.substring(0, i); + String val = l.substring(i+1).trim(); + if (val.startsWith("<")) + w.nl(4).appendln(5, val); + else + w.oTag("a").attr("href", session.resolveUri(val), true).cTag().text(key, true).eTag("a"); + w.eTag("li").nl(4); + } else { + w.nl(4).appendln(5, l); + w.eTag(4, "li").nl(4); + } + } + w.eTag(3, "ol").nl(3); + } String[] nav = session.getNav(); if (nav.length > 0) { for (int i = 0; i < nav.length; i++) w.sIf(i > 0).appendln(3, nav[i]); - } else { - String[] links = session.getNavLinks(); - if (links.length > 0) { - w.sTag(3, "ol").nl(3); - for (String l : links) { - w.sTag(4, "li"); - if (l.matches("(?s)\\S+\\:.*")) { - int i = l.indexOf(':'); - String key = l.substring(0, i); - String val = l.substring(i+1).trim(); - if (val.startsWith("<")) - w.nl(4).appendln(5, val); - else - w.oTag("a").attr("href", session.resolveUri(val), true).cTag().text(key, true).eTag("a"); - w.eTag("li").nl(4); - } else { - w.nl(4).appendln(5, l); - w.eTag(4, "li").nl(4); - } - } - w.eTag(3, "ol").nl(3); - } } } diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html index 7f3922d..7313a9e 100644 --- a/juneau-doc/src/main/javadoc/overview.html +++ b/juneau-doc/src/main/javadoc/overview.html @@ -11537,6 +11537,8 @@ {@link org.apache.juneau.rest.RestLogger} - Logge
[juneau] branch master updated: Swagger UI enhancements.
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 a0845cb Swagger UI enhancements. a0845cb is described below commit a0845cb4e677267af4ff080ca2f6c7c487dc3fd7 Author: JamesBognar AuthorDate: Thu Apr 12 14:54:34 2018 -0400 Swagger UI enhancements. --- .../apache/juneau/examples/rest/DirectoryResource.java | 11 +-- .../juneau/examples/rest/SampleRemoteableServlet.java| 16 +--- .../java/org/apache/juneau/rest/BasicRestServlet.java| 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java index 86477aa..4db5a15 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java @@ -101,7 +101,12 @@ public class DirectoryResource extends BasicRestServlet { path="/*", summary="Get file or directory information", description="Returns information about a file or directory.", - converters={Queryable.class} + converters={Queryable.class}, + swagger={ + "parameters:[", +Queryable.SWAGGER_PARAMS, + "]" + } ) public Object doGet(RestRequest req, RequestProperties properties) throws NotFound, InternalServerError { @@ -140,7 +145,7 @@ public class DirectoryResource extends BasicRestServlet { description="Delete a file on the file system.", guards=AdminGuard.class ) - public Object doDelete(RestRequest req) throws MethodNotAllowed { + public Object doDelete(RestRequest req) throws MethodNotAllowed, Forbidden { if (! allowDeletes) throw new MethodNotAllowed("DELETE not enabled"); @@ -150,6 +155,7 @@ public class DirectoryResource extends BasicRestServlet { if (req.getHeader("Accept").contains("text/html")) return new Redirect(); + return "File deleted"; } @@ -176,6 +182,7 @@ public class DirectoryResource extends BasicRestServlet { if (req.getContentType().contains("html")) return new Redirect(parentSubPath); + return "File added"; } diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java index 7418523..c62fd99 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SampleRemoteableServlet.java @@ -79,7 +79,11 @@ public class SampleRemoteableServlet extends RemoteableServlet { //- @Override /* RemoteableServlet */ - @RestMethod(name=GET, path="/", + @RestMethod( + name=GET, + path="/", + summary="List of available remoteable interfaces", + description="Shows a list of the interfaces registered with this remoteable servlet.", htmldoc=@HtmlDoc( aside={ "", @@ -97,7 +101,10 @@ public class SampleRemoteableServlet extends RemoteableServlet { } @Override /* RemoteableServlet */ - @RestMethod(name=GET, path="/{javaInterface}", summary="List of available methods on $RP{javaInterface}.", + @RestMethod( + name=GET, + path="/{javaInterface}", + summary="List of available methods on $CO{{$RP{javaInterface},an interface}", htmldoc=@HtmlDoc( aside={ "", @@ -112,7 +119,10 @@ public class SampleRemoteableServlet extends RemoteableServlet { } @Override /* RemoteableServlet */ - @RestMethod(name=GET, path="/{javaInterface}/{javaMethod}", summary="Form entry for method $RP{javaMethod} on interface $RP{javaInterface}", + @RestMethod( + name=GET, + path="/{javaInterface}/{javaMethod}", + summary="Form entry for
[juneau] branch master updated: Swagger UI enhancements.
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 616513c Swagger UI enhancements. 616513c is described below commit 616513cc80c86614f57787689c52bddb013e4f87 Author: JamesBognar AuthorDate: Wed Apr 11 18:51:52 2018 -0400 Swagger UI enhancements. --- .../apache/juneau/dto/swagger/ui/SwaggerUI.java| 4 +- .../juneau/examples/rest/DirectoryResource.java| 27 +-- .../examples/rest/SystemPropertiesResource.java| 21 .../examples/rest/petstore/PetStoreResource.java | 56 -- .../apache/juneau/rest/BasicRestInfoProvider.java | 3 +- .../juneau/rest/converters/Introspectable.java | 10 +++- .../apache/juneau/rest/converters/Queryable.java | 14 +- 7 files changed, 90 insertions(+), 45 deletions(-) diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java index 38d6ef0..3a026e1 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java @@ -311,13 +311,13 @@ public class SwaggerUI extends PojoSwap { select.child(option("model","model")); div.child(div(si.copy().resolveRefs(s.swagger, new ArrayDeque(), s.resolveRefsMaxDepth))._class("model active").attr("data-name", "model")); } - + if (examples != null) { for (Map.Entry e : examples.entrySet()) { String name = e.getKey(); String value = e.getValue().toString(); select.child(option(name, name)); - div.child(div(value.replaceAll("\\n", "\n"))._class("example").attr("data-name", name)); + div.child(div(value.replaceAll("\\n", "\n"))._class("example" + (si == null ? " active" : "")).attr("data-name", name)); } } diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java index 7e676c3..86477aa 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java @@ -136,6 +136,8 @@ public class DirectoryResource extends BasicRestServlet { @RestMethod( name=DELETE, path="/*", + summary="Delete file", + description="Delete a file on the file system.", guards=AdminGuard.class ) public Object doDelete(RestRequest req) throws MethodNotAllowed { @@ -151,9 +153,14 @@ public class DirectoryResource extends BasicRestServlet { return "File deleted"; } - /** PUT request handler */ - @RestMethod(name=PUT, path="/*", guards=AdminGuard.class) - public Object doPut(RestRequest req) throws MethodNotAllowed, InternalServerError { + @RestMethod( + name=PUT, + path="/*", + summary="Upload file", + description="Uploads a file to the file system.", + guards=AdminGuard.class + ) + public Object doPut(RestRequest req) throws MethodNotAllowed, InternalServerError, Forbidden { if (! allowPuts) throw new MethodNotAllowed("PUT not enabled"); @@ -174,7 +181,12 @@ public class DirectoryResource extends BasicRestServlet { /** VIEW request handler (overloaded GET for viewing file contents) */ @SuppressWarnings("resource") - @RestMethod(name="VIEW", path="/*") + @RestMethod( + name="VIEW", + path="/*", + summary="View file", + description="Views the contents of a file as plain text." + ) public void doView(RestRequest req, RestResponse res) throws MethodNotAllowed, NotFound { if (! allowViews) @@ -194,7 +206,12 @@ public class DirectoryResource extends BasicRestServlet { /** DOWNLOAD request handler (overloaded GET for downloading file contents) */ @SuppressWarnings("resource") - @RestMethod(name="DOWNLOAD") + @RestMethod( + name="DOWNLOAD", + path="/*", + summary="Download file", + description="Download the contents of a file as an oct
[juneau] branch master updated: Swagger UI enhancements.
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 92cf198 Swagger UI enhancements. 92cf198 is described below commit 92cf198583d6bed40f2028a4c6d40d9b257834d0 Author: JamesBognar AuthorDate: Sun Apr 8 20:35:09 2018 -0400 Swagger UI enhancements. --- .../apache/juneau/dto/swagger/ui/SwaggerUI.java| 9 -- .../examples/rest/MethodExampleResource.java | 36 -- .../microservice/resources/ConfigResource.java | 4 +-- .../apache/juneau/rest/BasicRestInfoProvider.java | 6 ++-- .../apache/juneau/rest/annotation/RestMethod.java | 2 +- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java index 5697d16..4a08001 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java @@ -68,6 +68,8 @@ public class SwaggerUI extends PojoSwap { static final ClasspathResourceManager RESOURCES = new ClasspathResourceManager(SwaggerUI.class); + private static final Set STANDARD_METHODS = new ASet().appendAll("get", "put", "post", "delete", "options"); + @Override public MediaType[] forMediaTypes() { return new MediaType[] {MediaType.HTML}; @@ -193,9 +195,12 @@ public class SwaggerUI extends PojoSwap { } private Div opBlock(Session s, String path, String opName, Operation op) { - String opNameLc = op.isDeprecated() ? "deprecated" : opName.toLowerCase(); - return div()._class("op-block op-block-closed " + opNameLc).children( + String opClass = op.isDeprecated() ? "deprecated" : opName.toLowerCase(); + if (! STANDARD_METHODS.contains(opClass)) + opClass = "other"; + + return div()._class("op-block op-block-closed " + opClass).children( opBlockSummary(path, opName, op), div(tableContainer(s, op))._class("op-block-contents") ); diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java index bcfa53b..ecbcb63 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java @@ -49,7 +49,7 @@ public class MethodExampleResource extends BasicRestServlet { private static final String SAMPLE_UUID_STRING = "----"; /** Example GET request that redirects to our example method */ - @RestMethod(name=GET, path="/") + @RestMethod(name=GET, path="/", summary="Top-level page") public ResourceDescription[] doExample() throws Exception { return new ResourceDescription[] { new ResourceDescription( @@ -67,11 +67,11 @@ public class MethodExampleResource extends BasicRestServlet { }; } - /** -* Methodology #1 - GET request using annotated attributes. -* This approach uses annotated parameters for retrieving input. -*/ - @RestMethod(name=GET, path="/example1/{p1}/{p2}/{p3}/*") + @RestMethod( + name=GET, path="/example1/{p1}/{p2}/{p3}/*", + summary="GET request using annotated attributes", + description="This approach uses annotated parameters for retrieving input." + ) public Map example1( @Method String method, // HTTP method. @Path String p1,// Path variables. @@ -101,11 +101,11 @@ public class MethodExampleResource extends BasicRestServlet { .append("header-doNotTrack", doNotTrack); } - /** -* Methodology #2 - GET request using methods on RestRequest and RestResponse. -* This approach uses low-level request/response objects to perform the same as above. -*/ - @RestMethod(name=GET, path="/example2/{p1}/{p2}/{p3}/*") + @RestMethod( + name=GET, path="/example2/{p1}/{p2}/{p3}/*", + summary="GET request using methods on RestRequest and RestResponse", + description="This approach uses low-level request/response objects to p
[juneau] branch master updated: Swagger UI enhancements.
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 d666a02 Swagger UI enhancements. d666a02 is described below commit d666a02e2aa08693c69a69dcc782f380deed8071 Author: JamesBognar AuthorDate: Sun Apr 8 14:54:57 2018 -0700 Swagger UI enhancements. --- .../org/apache/juneau/dto/swagger/SwaggerTest.java | 8 +- .../apache/juneau/dto/swagger/OperationMap.java| 68 +-- .../org/apache/juneau/dto/swagger/Swagger.java | 40 +--- .../apache/juneau/dto/swagger/ui/SwaggerUI.java| 3 +- .../jsonschema/JsonSchemaSerializerSession.java| 3 + juneau-doc/src/main/javadoc/overview.html | 4 +- .../examples/rest/SystemPropertiesResource.java| 117 ++-- .../rest/petstore/IdConflictException.java | 2 +- .../rest/petstore/IdNotFoundException.java | 2 +- .../examples/rest/petstore/InvalidIdException.java | 2 +- .../rest/petstore/InvalidTagException.java | 2 +- .../rest/petstore/InvalidUsernameException.java| 2 +- .../examples/rest/petstore/LoginException.java | 2 +- .../examples/rest/petstore/PetStoreResource.java | 166 .../apache/juneau/rest/test/HeadersResource.java | 2 +- .../apache/juneau/rest/BasicRestCallHandler.java | 4 +- .../apache/juneau/rest/BasicRestInfoProvider.java | 120 +++- .../main/java/org/apache/juneau/rest/Redirect.java | 2 +- .../java/org/apache/juneau/rest/RestContext.java | 54 -- .../org/apache/juneau/rest/RestContextBuilder.java | 4 +- .../org/apache/juneau/rest/RestJavaMethod.java | 28 ++- .../rest/{RestParam.java => RestMethodParam.java} | 6 +- .../org/apache/juneau/rest/RestMethodReturn.java | 62 +- .../org/apache/juneau/rest/RestMethodThrown.java | 61 +- .../org/apache/juneau/rest/RestParamDefaults.java | 212 ++--- .../{RestStatus.java => ResponseInfo.java} | 36 +++- .../juneau/rest/annotation/RestResource.java | 2 +- 27 files changed, 605 insertions(+), 409 deletions(-) diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java index 06fa9ab..95553e5 100644 --- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java +++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java @@ -287,11 +287,11 @@ public class SwaggerTest { public void testSetPaths() { Swagger t = new Swagger(); - t.setPaths(new AMap>().append("foo", new AMap().append("bar",operation().summary("baz"; + t.setPaths(new AMap().append("foo", new OperationMap().append("bar",operation().summary("baz"; assertObjectEquals("{foo:{bar:{summary:'baz'}}}", t.getPaths()); assertType(Map.class, t.getPaths()); - t.setPaths(new AMap>()); + t.setPaths(new AMap()); assertObjectEquals("{}", t.getPaths()); assertType(Map.class, t.getPaths()); @@ -306,11 +306,11 @@ public class SwaggerTest { public void testAddPaths() { Swagger t = new Swagger(); - t.addPaths(new AMap>().append("foo", new AMap().append("bar",operation().summary("baz"; + t.addPaths(new AMap().append("foo", new OperationMap().append("bar",operation().summary("baz"; assertObjectEquals("{foo:{bar:{summary:'baz'}}}", t.getPaths()); assertType(Map.class, t.getPaths()); - t.addPaths(new AMap>()); + t.addPaths(new AMap()); assertObjectEquals("{foo:{bar:{summary:'baz'}}}", t.getPaths()); assertType(Map.class, t.getPaths()); diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdConflictException.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java similarity index 50% copy from juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdConflictException.java copy to juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java index a69bd25..f7cae77 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/IdConflictException.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java @@ -10,25 +10,71 @@ // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the* // * specific language
[juneau] branch master updated: Swagger UI enhancements.
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 2316e40 Swagger UI enhancements. 2316e40 is described below commit 2316e4075b98c0a2e9c5186923423ecac0a4565f Author: JamesBognar AuthorDate: Sun Apr 8 06:33:27 2018 -0700 Swagger UI enhancements. --- .../org/apache/juneau/dto/swagger/HeaderInfo.java | 12 ++-- .../java/org/apache/juneau/dto/swagger/Items.java | 39 +-- .../apache/juneau/dto/swagger/ParameterInfo.java | 10 ++- .../apache/juneau/dto/swagger/ResponseInfo.java| 10 ++- .../org/apache/juneau/dto/swagger/SchemaInfo.java | 16 +++-- .../apache/juneau/dto/swagger/ui/SwaggerUI.java| 81 +- .../jsonschema/JsonSchemaSerializerSession.java| 17 ++--- .../examples/rest/petstore/PetStoreResource.java | 6 ++ .../apache/juneau/rest/BasicRestInfoProvider.java | 4 +- 9 files changed, 144 insertions(+), 51 deletions(-) diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java index 98bd49c..e4316fa 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/HeaderInfo.java @@ -1142,23 +1142,27 @@ public class HeaderInfo extends SwaggerElement { * * @param swagger The swagger document containing the definitions. * @param refStack Keeps track of previously-visited references so that we don't cause recursive loops. +* @param maxDepth +* The maximum depth to resolve references. +* After that level is reached, $ref references will be left alone. +* Useful if you have very complex models and you don't want your swagger page to be overly-complex. * @return * This object with references resolved. * May or may not be the same object. */ - public HeaderInfo resolveRefs(Swagger swagger, Deque refStack) { + public HeaderInfo resolveRefs(Swagger swagger, Deque refStack, int maxDepth) { if (ref != null) { - if (refStack.contains(ref) || refStack.size() > 2) + if (refStack.contains(ref) || refStack.size() >= maxDepth) return this; refStack.addLast(ref); - HeaderInfo r = swagger.findRef(ref, HeaderInfo.class).resolveRefs(swagger, refStack); + HeaderInfo r = swagger.findRef(ref, HeaderInfo.class).resolveRefs(swagger, refStack, maxDepth); refStack.removeLast(); return r; } if (items != null) - items = items.resolveRefs(swagger, refStack); + items = items.resolveRefs(swagger, refStack, maxDepth); return this; } diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java index 35c63bf..544c492 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Items.java @@ -1115,26 +1115,55 @@ public class Items extends SwaggerElement { * * @param swagger The swagger document containing the definitions. * @param refStack Keeps track of previously-visited references so that we don't cause recursive loops. +* @param maxDepth +* The maximum depth to resolve references. +* After that level is reached, $ref references will be left alone. +* Useful if you have very complex models and you don't want your swagger page to be overly-complex. * @return * This object with references resolved. * May or may not be the same object. */ - public Items resolveRefs(Swagger swagger, Deque refStack) { + public Items resolveRefs(Swagger swagger, Deque refStack, int maxDepth) { if (ref != null) { - if (refStack.contains(ref) || refStack.size() > 2) + if (refStack.contains(ref) || refStack.size() >= maxDepth) return this; refStack.addLast(ref); - Items r = swagger.findRef(ref, Items.class).resolveRefs(swagger, refStack); + Items r = swagger.findRef(ref, Items.class).resolveRefs(swagger, refStack, maxDepth); refStack.removeLast();
[juneau] branch master updated: Swagger UI enhancements.
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 5a9e0fc Swagger UI enhancements. 5a9e0fc is described below commit 5a9e0fc85a8d94d4780239f964beae5486473a72 Author: JamesBognar AuthorDate: Fri Apr 6 09:02:23 2018 -0400 Swagger UI enhancements. --- .../org/apache/juneau/dto/swagger/Swagger.java | 18 +++ .../apache/juneau/dto/swagger/SwaggerElement.java | 62 +- .../apache/juneau/dto/swagger/ui/SwaggerUI.java| 36 - .../org/apache/juneau/dto/swagger/ui/SwaggerUI.css | 33 ++-- .../src/main/java/org/apache/juneau/ClassMeta.java | 9 .../apache/juneau/rest/BasicRestInfoProvider.java | 54 +-- .../org/apache/juneau/rest/BasicRestServlet.java | 7 +++ 7 files changed, 172 insertions(+), 47 deletions(-) diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java index 27afa97..004eaa8 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java @@ -765,6 +765,15 @@ public class Swagger extends SwaggerElement { } /** +* Convenience method for testing whether this Swagger has one or more definitions defined. +* +* @return true if this Swagger has one or more definitions defined. +*/ + public boolean hasDefinitions() { + return definitions != null && ! definitions.isEmpty(); + } + + /** * Bean property getter: parameters. * * @@ -1201,6 +1210,15 @@ public class Swagger extends SwaggerElement { } /** +* Convenience method for testing whether this Swagger has one or more tags defined. +* +* @return true if this Swagger has one or more tags defined. +*/ + public boolean hasTags() { + return tags != null && ! tags.isEmpty(); + } + + /** * Bean property getter: externalDocs. * * diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java index b5aef00..aca2626 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java @@ -18,6 +18,7 @@ import java.util.*; import org.apache.juneau.annotation.*; import org.apache.juneau.json.*; +import org.apache.juneau.utils.*; /** * Root class for all Swagger beans. @@ -73,28 +74,6 @@ public abstract class SwaggerElement { } /** -* The map used to store 'extra' properties on the swagger element. -* -* -* For example, the "$ref" field is not a part of the Swagger doc, but is often -* found since it is a part of the JSON-Schema spec. -* This map allows you to store such properties. -* -* -* This map is lazy-created once this method is called. -* -* @return -* The extra properties map. -* It's an instance of {@link LinkedHashMap}. -*/ - @BeanProperty("*") - public Map getExtraProperties() { - if (extra == null || extra.isEmpty()) - return null; - return extra; - } - - /** * Generic property getter. * * @@ -109,11 +88,27 @@ public abstract class SwaggerElement { return null; switch (property) { case "strict": return toType(isStrict(), type); - default: return extra == null ? null : toType(getExtraProperties().get(property), type); + default: return toType(get(property), type); } }; /** +* Generic property getter. +* +* +* Can be used to retrieve non-standard Swagger fields such as "$ref". +* +* @param property The property name to retrieve. +* @return The property value, or null if the property does not exist or is not set. +*/ + @BeanProperty("*") + public Object get(String property) { + if (property == null || extra == null) + return null; + return extra.get(property); + }; + + /** * Generic property setter. * * @@ -138,12 +133,29 @@ public abstract class SwaggerElement { } /
[juneau] branch master updated: Swagger UI enhancements.
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 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)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/ju
[juneau] branch master updated: Swagger UI enhancements.
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 69f4dd1 Swagger UI enhancements. 69f4dd1 is described below commit 69f4dd14f3a764c0f6b8180b3e3e47ffd1dab460 Author: JamesBognar AuthorDate: Sun Mar 25 17:26:08 2018 -0400 Swagger UI enhancements. --- .../apache/juneau/dto/swagger/ui/SwaggerUI.java| 8 +- .../examples/rest/petstore/PetStoreResource.java | 8 +- .../examples/rest/petstore/PetStoreResource.json | 113 ++--- .../juneau/examples/rest/RootContentTest.java | 4 +- .../apache/juneau/rest/widget/MenuItemWidget.java | 2 +- .../org/apache/juneau/rest/styles/light.css| 7 ++ .../org/apache/juneau/rest/styles/original.css | 7 ++ 7 files changed, 37 insertions(+), 112 deletions(-) diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java index 2f86fde..8e93cf3 100644 --- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java +++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java @@ -20,6 +20,7 @@ import org.apache.juneau.*; import org.apache.juneau.dto.html5.*; import org.apache.juneau.dto.swagger.*; import org.apache.juneau.http.*; +import org.apache.juneau.internal.*; import org.apache.juneau.transform.*; import org.apache.juneau.utils.*; @@ -69,8 +70,11 @@ public class SwaggerUI extends PojoSwap { if (info.hasVersion()) table.child(tr(th("Version:"),td(info.getVersion(; - if (info.hasTermsOfService()) - table.child(tr(th("Terms of Service:"),td(a(info.getTermsOfService(), info.getTermsOfService(); + if (info.hasTermsOfService()) { + String tos = info.getTermsOfService(); + Object child = StringUtils.isUri(tos) ? a(tos, tos) : tos; + table.child(tr(th("Terms of Service:"),td(child))); + } Contact c = info.getContact(); if (c != null) { diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java index 1a385e1..8e595f4 100644 --- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java +++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java @@ -26,9 +26,8 @@ import org.apache.juneau.rest.widget.*; path="/petstore2", title="Swagger Petstore", description= - "This is a sample server Petstore server." - + "You can find out more about Swagger at http://swagger.io or on irc.freenode.net#swagger." - + "For this sample, you can use the api key `special-key` to test the authorization filters.", + "This is a sample server Petstore server based on the Petstore sample at Swagger.io." + + "You can find out more about Swagger at http://swagger.io.", htmldoc=@HtmlDoc( widgets={ ContentTypeMenuItem.class, @@ -50,7 +49,7 @@ public class PetStoreResource extends BasicRestServletJena { @RestMethod( name="GET", path="/", - summary="Top-level page" + summary="Navigation page" ) public ResourceDescription[] getTopPage() { return new ResourceDescription[] { @@ -123,7 +122,6 @@ public class PetStoreResource extends BasicRestServletJena { swagger={ "tags:['pet'],", "parameters:[", -// "{ in:'body', description:'Pet object that needs to be added to the store', required:true, schema:{ $ref:'#/definitions/Pet'} }", "{ in:'body', description:'Pet object that needs to be added to the store', required:true }", "],", "responses:{", diff --git a/juneau-examples/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/petstore/PetStoreResource.json b/juneau-examples/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/petstore/PetStoreResource.json index f525b66..abf4395 100644 --- a/juneau-examples/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/petstore/PetStoreRe