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 00c347788 Split up openapi modules into swagger-v2 and openapi-v3.
00c347788 is described below

commit 00c347788a33d65ea56c99c6ab7ece49e46908dd
Author: James Bognar <[email protected]>
AuthorDate: Tue Sep 30 17:25:09 2025 -0400

    Split up openapi modules into swagger-v2 and openapi-v3.
---
 .../pom.xml                                        |   4 +-
 .../apache/juneau/bean/openapi/ui/OpenApiUI.java   |   0
 .../juneau/bean/openapi/ui/package-info.java       |   0
 .../org/apache/juneau/bean/openapi3/Callback.java  |   0
 .../apache/juneau/bean/openapi3/Components.java    |   0
 .../org/apache/juneau/bean/openapi3/Contact.java   |   0
 .../apache/juneau/bean/openapi3/Discriminator.java |   0
 .../org/apache/juneau/bean/openapi3/Encoding.java  |   0
 .../org/apache/juneau/bean/openapi3/Example.java   |   0
 .../bean/openapi3/ExternalDocumentation.java       |   0
 .../apache/juneau/bean/openapi3/HeaderInfo.java    |   0
 .../java/org/apache/juneau/bean/openapi3/Info.java |   0
 .../org/apache/juneau/bean/openapi3/Items.java     |   0
 .../org/apache/juneau/bean/openapi3/License.java   |   0
 .../java/org/apache/juneau/bean/openapi3/Link.java |   0
 .../org/apache/juneau/bean/openapi3/MediaType.java |   0
 .../org/apache/juneau/bean/openapi3/OAuthFlow.java |   0
 .../apache/juneau/bean/openapi3/OAuthFlows.java    |   0
 .../org/apache/juneau/bean/openapi3/OpenApi.java   |   0
 .../juneau/bean/openapi3/OpenApiBuilder.java       |   0
 .../juneau/bean/openapi3/OpenApiElement.java       |   0
 .../org/apache/juneau/bean/openapi3/Operation.java |   0
 .../org/apache/juneau/bean/openapi3/Parameter.java |   0
 .../org/apache/juneau/bean/openapi3/PathItem.java  |   0
 .../juneau/bean/openapi3/RequestBodyInfo.java      |   0
 .../org/apache/juneau/bean/openapi3/Response.java  |   0
 .../apache/juneau/bean/openapi3/SchemaInfo.java    |   0
 .../juneau/bean/openapi3/SecurityRequirement.java  |   0
 .../juneau/bean/openapi3/SecuritySchemeInfo.java   |   0
 .../org/apache/juneau/bean/openapi3/Server.java    |   0
 .../juneau/bean/openapi3/ServerVariable.java       |   0
 .../java/org/apache/juneau/bean/openapi3/Tag.java  |   0
 .../java/org/apache/juneau/bean/openapi3/Xml.java  |   0
 .../apache/juneau/bean/openapi3/package-info.java  |   0
 juneau-bean/juneau-bean-openapi3/.gitignore        |   6 -
 .../pom.xml                                        |   8 +-
 .../org/apache/juneau/bean/swagger/Contact.java    |   0
 .../juneau/bean/swagger/ExternalDocumentation.java |   0
 .../org/apache/juneau/bean/swagger/HeaderInfo.java |   0
 .../java/org/apache/juneau/bean/swagger/Info.java  |   0
 .../java/org/apache/juneau/bean/swagger/Items.java |   0
 .../org/apache/juneau/bean/swagger/License.java    |   0
 .../org/apache/juneau/bean/swagger/Operation.java  |   0
 .../apache/juneau/bean/swagger/OperationMap.java   |  23 +-
 .../apache/juneau/bean/swagger/ParameterInfo.java  |   0
 .../apache/juneau/bean/swagger/ResponseInfo.java   |   0
 .../org/apache/juneau/bean/swagger/SchemaInfo.java |   0
 .../apache/juneau/bean/swagger/SecurityScheme.java |   0
 .../org/apache/juneau/bean/swagger/Swagger.java    |   0
 .../apache/juneau/bean/swagger/SwaggerBuilder.java |   9 +
 .../apache/juneau/bean/swagger/SwaggerElement.java |  10 +-
 .../java/org/apache/juneau/bean/swagger/Tag.java   |   0
 .../java/org/apache/juneau/bean/swagger/Xml.java   |   0
 .../apache/juneau/bean/swagger/package-info.java   |   0
 .../apache/juneau/bean/swagger/ui/SwaggerUI.java   |  30 +-
 .../juneau/bean/swagger/ui/package-info.java       |   0
 juneau-bean/pom.xml                                |   3 +-
 .../org/apache/juneau/junit/bct/BctAssertions.java |   4 +-
 .../juneau/junit/bct/PropertyExtractors.java       |   5 +
 juneau-utest/pom.xml                               |   2 +-
 .../juneau/bean/swagger/OperationMap_Test.java     | 183 +++++++++++
 .../juneau/bean/swagger/SwaggerElement_Test.java   | 177 +++++++++++
 .../apache/juneau/bean/swagger/Swagger_Test.java   |   2 +-
 .../juneau/bean/swagger/ui/SwaggerUI_Test.java     | 342 +++++++++++++++++++++
 64 files changed, 772 insertions(+), 36 deletions(-)

diff --git a/juneau-bean/juneau-bean-openapi3/pom.xml 
b/juneau-bean/juneau-bean-openapi-v3/pom.xml
similarity index 97%
copy from juneau-bean/juneau-bean-openapi3/pom.xml
copy to juneau-bean/juneau-bean-openapi-v3/pom.xml
index 8594e5746..ecee6cc2e 100644
--- a/juneau-bean/juneau-bean-openapi3/pom.xml
+++ b/juneau-bean/juneau-bean-openapi-v3/pom.xml
@@ -23,8 +23,8 @@
                <version>9.2.0-SNAPSHOT</version>
        </parent>
 
-       <artifactId>juneau-bean-openapi3</artifactId>
-       <name>juneau/bean/openapi3</name>
+       <artifactId>juneau-bean-openapi-v3</artifactId>
+       <name>juneau/bean/openapi-v3</name>
        <description>Apache Juneau Serializable Beans - OpenAPI v3</description>
        <packaging>bundle</packaging>
 
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/OpenApiUI.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi/ui/package-info.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/package-info.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi/ui/package-info.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi/ui/package-info.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Callback.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Components.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Contact.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Discriminator.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Encoding.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Example.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ExternalDocumentation.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/HeaderInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Info.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Items.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/License.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/License.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/License.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/License.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Link.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/MediaType.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlow.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OAuthFlows.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiBuilder.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiElement.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiElement.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiElement.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApiElement.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Operation.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Parameter.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/PathItem.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/RequestBodyInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Response.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SchemaInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecurityRequirement.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/SecuritySchemeInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Server.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/ServerVariable.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Tag.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/Xml.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/package-info.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/package-info.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/openapi3/package-info.java
rename to 
juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/package-info.java
diff --git a/juneau-bean/juneau-bean-openapi3/.gitignore 
b/juneau-bean/juneau-bean-openapi3/.gitignore
deleted file mode 100644
index 34acf885c..000000000
--- a/juneau-bean/juneau-bean-openapi3/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/target/
-**/.DS_Store
-.classpath
-.project
-/.settings/
-/bin/
diff --git a/juneau-bean/juneau-bean-openapi3/pom.xml 
b/juneau-bean/juneau-bean-swagger-v2/pom.xml
similarity index 93%
rename from juneau-bean/juneau-bean-openapi3/pom.xml
rename to juneau-bean/juneau-bean-swagger-v2/pom.xml
index 8594e5746..71b6eaeee 100644
--- a/juneau-bean/juneau-bean-openapi3/pom.xml
+++ b/juneau-bean/juneau-bean-swagger-v2/pom.xml
@@ -23,9 +23,9 @@
                <version>9.2.0-SNAPSHOT</version>
        </parent>
 
-       <artifactId>juneau-bean-openapi3</artifactId>
-       <name>juneau/bean/openapi3</name>
-       <description>Apache Juneau Serializable Beans - OpenAPI v3</description>
+       <artifactId>juneau-bean-swagger-v2</artifactId>
+       <name>juneau/bean/swagger-v2</name>
+       <description>Apache Juneau Serializable Beans - Swagger v2</description>
        <packaging>bundle</packaging>
 
        <properties>
@@ -53,7 +53,7 @@
                                <extensions>true</extensions>
                                <configuration>
                                        <instructions>
-                                               
<Automatic-Module-Name>org.apache.juneau.bean.openapi3</Automatic-Module-Name>
+                                               
<Automatic-Module-Name>org.apache.juneau.bean.swagger</Automatic-Module-Name>
                                        </instructions>
                                </configuration>
                        </plugin>
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Contact.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Contact.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Contact.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Contact.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ExternalDocumentation.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/HeaderInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Info.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Info.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Info.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Info.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Items.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Items.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Items.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Items.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/License.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/License.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/License.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/License.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Operation.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Operation.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Operation.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Operation.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
similarity index 82%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
index cadeb8efd..a45bf5e37 100644
--- 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
+++ 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
@@ -51,12 +51,13 @@ public class OperationMap extends TreeMap<String,Operation> 
{
 
                @Override
                public int compare(String o1, String o2) {
-                       var s1 = methods.get(o1);
-                       var s2 = methods.get(o2);
+                       // Since keys are now stored in lowercase, we need to 
normalize them for comparison
+                       var s1 = methods.get(emptyIfNull(o1).toLowerCase());
+                       var s2 = methods.get(emptyIfNull(o2).toLowerCase());
                        if (s1 == null)
-                               s1 = o1;
+                               s1 = emptyIfNull(o1).toLowerCase();
                        if (s2 == null)
-                               s2 = o2;
+                               s2 = emptyIfNull(o2).toLowerCase();
                        return StringUtils.compare(s1, s2);
                }
        };
@@ -68,6 +69,18 @@ public class OperationMap extends TreeMap<String,Operation> {
                super(OP_SORTER);
        }
 
+       /**
+        * Override put to normalize keys to lowercase.
+        *
+        * @param key The key.
+        * @param value The value.
+        * @return The previous value associated with key, or null if there was 
no mapping for key.
+        */
+       @Override
+       public Operation put(String key, Operation value) {
+               return super.put(emptyIfNull(key).toLowerCase(), value);
+       }
+
        /**
         * Fluent-style put method.
         *
@@ -76,7 +89,7 @@ public class OperationMap extends TreeMap<String,Operation> {
         * @return This object.
         */
        public OperationMap append(String httpMethodName, Operation operation) {
-               put(emptyIfNull(httpMethodName).toLowerCase(), operation);
+               put(httpMethodName, operation);
                return this;
        }
 }
\ No newline at end of file
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ParameterInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ResponseInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SchemaInfo.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SecurityScheme.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Swagger.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
similarity index 98%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
index 571038161..0e1326c03 100644
--- 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
+++ 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerBuilder.java
@@ -249,6 +249,15 @@ public class SwaggerBuilder {
                return new Operation();
        }
 
+       /**
+        * Creates an empty {@link OperationMap} element.
+        *
+        * @return The new element.
+        */
+       public static final OperationMap operationMap() {
+               return new OperationMap();
+       }
+
        /**
         * Creates an empty {@link ParameterInfo} element.
         *
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
similarity index 95%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
index 38d45f35c..72ffff345 100644
--- 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
+++ 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/SwaggerElement.java
@@ -15,6 +15,7 @@ package org.apache.juneau.bean.swagger;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConverterUtils.*;
 
+import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
@@ -105,7 +106,11 @@ public abstract class SwaggerElement {
         */
        @Beanp("*")
        public Object get(String property) {
-               if (property == null || extra == null)
+               if (property == null)
+                       return null;
+               if ("strict".equals(property))
+                       return toType(isStrict(), Object.class);
+               if (extra == null)
                        return null;
                return extra.get(property);
        }
@@ -179,6 +184,9 @@ public abstract class SwaggerElement {
 
        @Override /* Object */
        public String toString() {
+               if (Modifier.isAbstract(getClass().getModifiers())) {
+                       return JsonMap.of("strict", strict, "extra", 
extra).toString();
+               }
                return JsonSerializer.DEFAULT.toString(this);
        }
 }
\ No newline at end of file
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Tag.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Tag.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Tag.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Tag.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Xml.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Xml.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/Xml.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/Xml.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/package-info.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/package-info.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/package-info.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/package-info.java
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
similarity index 94%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
index 7e6f23a3f..c742cc911 100644
--- 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
+++ 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/SwaggerUI.java
@@ -156,24 +156,30 @@ public class SwaggerUI extends ObjectSwap<Swagger,Div> {
        private HtmlElement tagBlockSummary(Tag t) {
                var ed = t.getExternalDocs();
 
-               var content = ed.getDescription() != null ? ed.getDescription() 
: ed.getUrl();
-               return div()._class("tag-block-summary").children(
-                       span(t.getName())._class("name"),
-                       span(toBRL(t.getDescription()))._class("description"),
-                       span(a(ed.getUrl(), content))._class("extdocs")
-               ).onclick("toggleTagBlock(this)");
+               var children = new ArrayList<HtmlElement>();
+               children.add(span(t.getName())._class("name"));
+               
children.add(span(toBRL(t.getDescription()))._class("description"));
+
+               if (ed != null) {
+                       var content = ed.getDescription() != null ? 
ed.getDescription() : ed.getUrl();
+                       children.add(span(a(ed.getUrl(), 
content))._class("extdocs"));
+               }
+
+               return 
div()._class("tag-block-summary").children(children).onclick("toggleTagBlock(this)");
        }
 
        // Creates the contents under the "pet  Everything about your Pets  
ext-link" header.
        private Div tagBlockContents(Session s, Tag t) {
                var tagBlockContents = div()._class("tag-block-contents");
 
-               s.swagger.getPaths().forEach((path,v) ->
-                       v.forEach((opName,op) -> {
-                               if ((t == null && op.getTags() == null) || (t 
!= null && op.getTags() != null && op.getTags() != null && 
op.getTags().contains(t.getName())))
-                                       tagBlockContents.child(opBlock(s, path, 
opName, op));
-                       })
-               );
+               if (s.swagger.getPaths() != null) {
+                       s.swagger.getPaths().forEach((path,v) ->
+                               v.forEach((opName,op) -> {
+                                       if ((t == null && op.getTags() == null) 
|| (t != null && op.getTags() != null && op.getTags() != null && 
op.getTags().contains(t.getName())))
+                                               
tagBlockContents.child(opBlock(s, path, opName, op));
+                               })
+                       );
+               }
 
                return tagBlockContents;
        }
diff --git 
a/juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ui/package-info.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/package-info.java
similarity index 100%
rename from 
juneau-bean/juneau-bean-openapi3/src/main/java/org/apache/juneau/bean/swagger/ui/package-info.java
rename to 
juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/ui/package-info.java
diff --git a/juneau-bean/pom.xml b/juneau-bean/pom.xml
index f824eaba0..59b25a8d9 100644
--- a/juneau-bean/pom.xml
+++ b/juneau-bean/pom.xml
@@ -33,6 +33,7 @@
                <module>juneau-bean-common</module>
                <module>juneau-bean-html5</module>
                <module>juneau-bean-jsonschema</module>
-               <module>juneau-bean-openapi3</module>
+               <module>juneau-bean-openapi-v3</module>
+               <module>juneau-bean-swagger-v2</module>
        </modules>
 </project>
diff --git 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctAssertions.java
 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctAssertions.java
index 2573e8184..aa711c12e 100644
--- 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctAssertions.java
+++ 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctAssertions.java
@@ -465,13 +465,11 @@ public class BctAssertions {
                        actualStrings.add(tokens.stream().map(x -> 
converter.getNested(o, x)).collect(joining(",")));
                }
 
-               if (errors.size() == 1) throw errors.get(0);
-
                throw assertEqualsFailed(
                        
Stream.of(expected).map(Utils::escapeForJava).collect(joining("\", \"", "\"", 
"\"")),
                        
actualStrings.stream().map(Utils::escapeForJava).collect(joining("\", \"", 
"\"", "\"")),
                        args.getMessage("{0} bean assertions failed:\n{1}", 
errors.size(), errors.stream().map(x -> x.getMessage()).collect(joining("\n")))
-                       );
+               );
        }
 
        /**
diff --git 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyExtractors.java
 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyExtractors.java
index edb6c2fd4..7a2dfbfe8 100644
--- 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyExtractors.java
+++ 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyExtractors.java
@@ -107,6 +107,11 @@ public class PropertyExtractors {
                                                m.setAccessible(true);
                                                return m.invoke(o);
                                        }
+                                       if (o instanceof Map.Entry<?,?> me) {
+                                               // Reflection to classes inside 
java.util are restricted in Java 9+.
+                                               if ("key".equals(name)) return 
me.getKey();
+                                               if ("value".equals(name)) 
return me.getValue();
+                                       }
                                        m = 
Arrays.stream(c.getMethods()).filter(x -> x.getName().equals("get"+n) && 
x.getParameterCount() == 0).findFirst().orElse(null);
                                        if (m != null) {
                                                m.setAccessible(true);
diff --git a/juneau-utest/pom.xml b/juneau-utest/pom.xml
index a1d377a12..03700c2e3 100644
--- a/juneau-utest/pom.xml
+++ b/juneau-utest/pom.xml
@@ -65,7 +65,7 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.juneau</groupId>
-                       <artifactId>juneau-bean-openapi3</artifactId>
+                       <artifactId>juneau-bean-swagger-v2</artifactId>
                        <version>${project.version}</version>
                </dependency>
                <dependency>
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/OperationMap_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/OperationMap_Test.java
new file mode 100644
index 000000000..03aef5adf
--- /dev/null
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/OperationMap_Test.java
@@ -0,0 +1,183 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.bean.swagger;
+
+import static org.apache.juneau.bean.swagger.SwaggerBuilder.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.apache.juneau.junit.bct.BctAssertions.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.json.*;
+import org.junit.jupiter.api.*;
+
+/**
+ * Testcase for {@link OperationMap}.
+ */
+class OperationMap_Test extends SimpleTestBase {
+
+       /**
+        * Test method for operation ordering.
+        */
+       @Test void a01_operationOrdering() {
+               var map = operationMap();
+
+               // Add operations in random order
+               map
+                       .append("custom", operation())
+                       .append("post", operation())
+                       .append("delete", operation())
+                       .append("get", operation())
+                       .append("options", operation())
+                       .append("head", operation())
+                       .append("patch", operation())
+                       .append("put", operation());
+
+               // Verify ordering.
+               assertList(map.keySet(), "get", "put", "post", "delete", 
"options", "head", "patch", "custom");
+       }
+
+       /**
+        * Test method for case-insensitive ordering.
+        */
+       @Test void a02_caseInsensitiveOrdering() {
+               var map = operationMap();
+
+               // Add operations with different cases
+               map.append("DELETE", operation()).append("Get", 
operation()).append("POST", operation()).append("put", operation());
+
+               // Verify ordering is case-insensitive - all keys should be 
normalized to lowercase
+               assertList(map.keySet(), "get", "put", "post", "delete");
+       }
+
+       /**
+        * Test method for custom methods.
+        */
+       @Test void a04_customMethods() {
+               var map = operationMap();
+
+               // Add standard methods
+               map.put("get", operation().setSummary("Get operation"));
+               map.put("post", operation().setSummary("Post operation"));
+
+               // Add custom methods
+               map.put("custom1", operation().setSummary("Custom1 operation"));
+               map.put("custom2", operation().setSummary("Custom2 operation"));
+
+               // Verify custom methods come after standard methods
+               assertBeans(map, "key,value{summary}", "get,{Get operation}", 
"post,{Post operation}", "custom1,{Custom1 operation}", "custom2,{Custom2 
operation}");
+       }
+
+       /**
+        * Test method for empty map.
+        */
+       @Test void a05_emptyMap() {
+               var map = operationMap();
+               assertTrue(map.isEmpty());
+               assertEquals(0, map.size());
+       }
+
+       /**
+        * Test method for duplicate keys.
+        */
+       @Test void a06_duplicateKeys() {
+               var map = operationMap();
+
+               map.put("get", operation().setSummary("First operation"));
+               map.put("get", operation().setSummary("Second operation"));
+
+               // Verify the second operation overwrites the first
+               assertBeans(map, "key,value{summary}", "get,{Second 
operation}");
+       }
+
+       /**
+        * Test method for null values.
+        */
+       @Test void a07_nullValues() {
+               var map = operationMap();
+
+               // Should not throw exception when adding null value
+               assertDoesNotThrow(() -> map.put("get", null));
+               assertTrue(map.containsKey("get"));
+               assertNull(map.get("get"));
+       }
+
+       /**
+        * Test method for serialization.
+        */
+       @Test void a08_serialization() {
+               var map = operationMap();
+               map.put("get", operation().setSummary("Get operation"));
+               map.put("post", operation().setSummary("Post operation"));
+
+               // Test that it can be serialized to JSON
+               var json = Json5Serializer.DEFAULT.toString(map);
+               assertNotNull(json);
+               assertEquals("{get:{summary:'Get 
operation'},post:{summary:'Post operation'}}", json);
+       }
+
+       /**
+        * Test method for deserialization.
+        */
+       @Test void a09_deserialization() {
+               var json = "{get:{summary:'Get operation'},post:{summary:'Post 
operation'}}";
+               var map = Json5Parser.DEFAULT.parse(json, OperationMap.class);
+               assertBeans(map, "key,value{summary}", "get,{Get operation}", 
"post,{Post operation}");
+       }
+
+       /**
+        * Test method for iteration order.
+        */
+       @Test void a10_iterationOrder() {
+               var map = operationMap();
+               map.put("delete", operation().setSummary("Delete"));
+               map.put("get", operation().setSummary("Get"));
+               map.put("post", operation().setSummary("Post"));
+               map.put("put", operation().setSummary("Put"));
+
+               assertList(map.keySet(), "get", "put", "post", "delete");
+       }
+
+       /**
+        * Test method for key normalization in put method.
+        */
+       @Test void a11_keyNormalization() {
+               var map = operationMap();
+
+               // Test that put() normalizes keys to lowercase
+               map.put("GET", operation().setSummary("Get operation"));
+               map.put("Post", operation().setSummary("Post operation"));
+               map.put("DELETE", operation().setSummary("Delete operation"));
+
+
+               // Verify that keys are stored in lowercase
+               assertTrue(map.containsKey("get"));
+               assertTrue(map.containsKey("post"));
+               assertTrue(map.containsKey("delete"));
+
+               // Verify that original case keys are not present (TreeMap with 
custom comparator may be case-insensitive)
+               // Since our comparator normalizes keys, containsKey() may also 
be case-insensitive
+               // Let's verify the actual keys in the map instead
+               var keys = new ArrayList<>(map.keySet());
+               assertTrue(keys.contains("get"));
+               assertTrue(keys.contains("post"));
+               assertTrue(keys.contains("delete"));
+               assertFalse(keys.contains("GET"));
+               assertFalse(keys.contains("Post"));
+               assertFalse(keys.contains("DELETE"));
+
+               // Verify that we can retrieve using lowercase keys
+               assertBeans(map, "value{summary}", "{Get operation}", "{Post 
operation}", "{Delete operation}");
+       }
+}
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/SwaggerElement_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/SwaggerElement_Test.java
new file mode 100644
index 000000000..9238ab518
--- /dev/null
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/SwaggerElement_Test.java
@@ -0,0 +1,177 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.bean.swagger;
+
+import static org.apache.juneau.TestUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.json.*;
+import org.junit.jupiter.api.*;
+
+/**
+ * Testcase for {@link SwaggerElement}.
+ */
+class SwaggerElement_Test extends SimpleTestBase {
+
+       /**
+        * Test class that extends SwaggerElement for testing purposes.
+        */
+       public static class TestSwaggerElement extends SwaggerElement {
+               private String testProperty;
+
+               public TestSwaggerElement() {}
+
+               public TestSwaggerElement(TestSwaggerElement copyFrom) {
+                       super(copyFrom);
+                       this.testProperty = copyFrom.testProperty;
+               }
+
+               public String getTestProperty() { return testProperty; }
+               public TestSwaggerElement setTestProperty(String testProperty) 
{ this.testProperty = testProperty; return this; }
+       }
+
+       /**
+        * Test method for strict mode.
+        */
+       @Test void a01_strictMode() {
+               var t = new TestSwaggerElement();
+
+               // Default should be non-strict
+               assertFalse(t.isStrict());
+
+               // Test setting strict mode
+               assertBean(t.strict(true), "strict", "true");
+               assertTrue(t.isStrict());
+
+               assertBean(t.strict(false), "strict", "false");
+               assertFalse(t.isStrict());
+       }
+
+       /**
+        * Test method for extra properties.
+        */
+       @Test void a02_extraProperties() {
+               var t = new TestSwaggerElement();
+
+               // Test setting extra properties
+               t.set("key1", "value1");
+               t.set("key2", "value2");
+
+               // Test getting extra properties
+               assertBean(t, "key1,key2", "value1,value2");
+       }
+
+       /**
+        * Test method for extra properties with null.
+        */
+       @Test void a03_extraPropertiesNull() {
+               var t = new TestSwaggerElement();
+
+               // Test setting null extra properties
+               t.set("key1", null);
+               assertNull(t.get("key1"));
+       }
+
+       /**
+        * Test method for extra properties with empty map.
+        */
+       @Test void a04_extraPropertiesEmpty() {
+               var t = new TestSwaggerElement();
+
+               // Test that no extra properties are set initially
+               assertTrue(t.extraKeys().isEmpty());
+       }
+
+       /**
+        * Test method for copy constructor.
+        */
+       @Test void a05_copyConstructor() {
+               var original = new TestSwaggerElement();
+               original.setTestProperty("test");
+               original.strict(true);
+               original.set("key", "value");
+
+               var copy = new TestSwaggerElement(original);
+
+               // Test that properties are copied
+               assertEquals("test", copy.getTestProperty());
+               assertTrue(copy.isStrict());
+               assertEquals("value", copy.get("key"));
+       }
+
+       /**
+        * Test method for serialization with extra properties.
+        */
+       @Test void a06_serializationWithExtra() {
+               var t = new TestSwaggerElement();
+               t.setTestProperty("test");
+               t.set("extraKey", "extraValue");
+
+               
assertEquals("{\"testProperty\":\"test\",\"extraKey\":\"extraValue\"}", 
t.toString());
+       }
+
+       /**
+        * Test method for deserialization with extra properties.
+        */
+       @Test void a07_deserializationWithExtra() {
+               var json = 
"{\"testProperty\":\"test\",\"extraKey\":\"extraValue\"}";
+
+               var t = JsonParser.DEFAULT.parse(json, 
TestSwaggerElement.class);
+               assertBean(t, "testProperty,extraKey", "test,extraValue");
+       }
+
+       /**
+        * Test method for fluent setters.
+        */
+       @Test void a08_fluentSetters() {
+               var t = new TestSwaggerElement();
+
+               // Test chaining
+               var result = t.setTestProperty("test")
+                       .strict(true)
+                       .set("key", "value");
+
+               assertSame(t, result);
+               assertBean(t, "testProperty,strict,key", "test,true,value");
+       }
+
+       /**
+        * Test method for extra properties modification.
+        */
+       @Test void a09_extraPropertiesModification() {
+               var t = new TestSwaggerElement();
+               t.set("key1", "value1");
+
+               // Modify the extra properties
+               t.set("key2", "value2");
+
+               // Verify the modification
+               assertBean(t, "key1,key2", "value1,value2");
+       }
+
+       /**
+        * Test method for complex extra properties.
+        */
+       @Test void a10_complexExtraProperties() {
+               var t = new TestSwaggerElement();
+
+               t.set("string", "value");
+               t.set("number", 123);
+               t.set("boolean", true);
+               t.set("array", list("a", "b", "c"));
+               t.set("object", map("nested", "value"));
+
+               assertBean(t, "string,number,boolean,array,object", 
"value,123,true,[a,b,c],{nested=value}");
+       }
+}
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/Swagger_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/Swagger_Test.java
index 568fb07bd..1d69518d5 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/Swagger_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/Swagger_Test.java
@@ -83,7 +83,7 @@ class Swagger_Test extends SimpleTestBase {
 
                // addX methods.
                assertBean(t.setPaths(null).addPath("a", "a1", 
operation().setDescription("a2")).addPath("b", null, null),
-                       "paths", 
"{a={a1={\"description\":\"a2\"}},b={<null>=<null>}}");
+                       "paths", 
"{a={a1={\"description\":\"a2\"}},b={=<null>}}");
                assertBean(t.setDefinitions(null).addDefinition("a", 
JsonMap.of("type","a1")).addDefinition("b", (JsonMap)null).addDefinition(null, 
JsonMap.of("type", "c1")),
                        "definitions", 
"{a={type=a1},b=<null>,<null>={type=c1}}");
                assertBean(t.setParameters(null).addParameter("a", 
parameterInfo().setIn("a1")).addParameter("b", null).addParameter(null, 
parameterInfo().setIn("c1")),
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
new file mode 100644
index 000000000..76334e843
--- /dev/null
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
@@ -0,0 +1,342 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.bean.swagger.ui;
+
+import static org.apache.juneau.TestUtils.*;
+import static org.apache.juneau.bean.swagger.SwaggerBuilder.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.junit.jupiter.api.*;
+
+/**
+ * Testcase for {@link SwaggerUI}.
+ */
+class SwaggerUI_Test extends SimpleTestBase {
+
+       private final BeanSession bs = BeanContext.DEFAULT_SESSION;
+
+       /**
+        * Test method for media types.
+        */
+       @Test void a01_mediaTypes() {
+               assertList(
+                       new SwaggerUI().forMediaTypes(),
+                       "text/html"
+               );
+       }
+
+       /**
+        * Test method for basic Swagger document conversion.
+        */
+       @Test void a02_basicSwaggerConversion() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0").setDescription("Test 
API Description"))
+                       .setHost("localhost:8080")
+                       .setBasePath("/api")
+                       .setPaths(map("/test", operationMap().append("get", 
operation().setSummary("Test operation"))));
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Description:</th><td>Test API 
Description</td></tr>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents'>
+                                               <div class='op-block 
op-block-closed get'>
+                                                       <div 
class='op-block-summary' onclick='toggleOpBlock(this)'>
+                                                               <span 
class='method-button'>GET</span>
+                                                               <span 
class='path'>/test</span>
+                                                               <span 
class='summary'>Test operation</span>
+                                                       </div>
+                                                       <div 
class='op-block-contents'>
+                                                               <div 
class='table-container' nil='true'></div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with tags.
+        */
+       @Test void a03_swaggerWithTags() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setTags(list(
+                               tag("users").setDescription("User operations"),
+                               tag("orders").setDescription("Order operations")
+                       ));
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-summary' 
onclick='toggleTagBlock(this)'>
+                                               <span class='name'>users</span>
+                                               <span class='description'>User 
operations</span>
+                                       </div>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-summary' 
onclick='toggleTagBlock(this)'>
+                                               <span class='name'>orders</span>
+                                               <span class='description'>Order 
operations</span>
+                                       </div>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with parameters.
+        */
+       @Test void a04_swaggerWithParameters() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with responses.
+        */
+       @Test void a05_swaggerWithResponses() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with models.
+        */
+       @Test void a06_swaggerWithModels() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for empty Swagger document.
+        */
+       @Test void a07_emptySwaggerDocument() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with external documentation.
+        */
+       @Test void a08_swaggerWithExternalDocs() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with security schemes.
+        */
+       @Test void a09_swaggerWithSecuritySchemes() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for Swagger document with multiple operations.
+        */
+       @Test void a10_swaggerWithMultipleOperations() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       .setPaths(new HashMap<>());
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents' 
nil='true'></div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+
+       /**
+        * Test method for null input.
+        */
+       @Test void a11_nullInput() {
+               assertThrows(NullPointerException.class, () -> {
+                       new SwaggerUI().swap(bs, null);
+               });
+       }
+
+       /**
+        * Test method for HTML output structure.
+        */
+       @Test void a12_htmlOutputStructure() throws Exception {
+               var swagger = swagger()
+                       .setInfo(info("Test API", "1.0.0"))
+                       
.setPaths(org.apache.juneau.common.internal.Utils.map("/test", operationMap()
+                               .append("get", operation().setSummary("Test 
operation"))));
+
+               assertString(
+                       """
+                       <div class='swagger-ui'>
+                               <style nil='true'></style>
+                               <script type='text/javascript'><sp/></script>
+                               <table class='header'>
+                                       <tr><th>Version:</th><td>1.0.0</td></tr>
+                               </table>
+                               <div class='tag-block tag-block-open'>
+                                       <div class='tag-block-contents'>
+                                               <div class='op-block 
op-block-closed get'>
+                                                       <div 
class='op-block-summary' onclick='toggleOpBlock(this)'>
+                                                               <span 
class='method-button'>GET</span>
+                                                               <span 
class='path'>/test</span>
+                                                               <span 
class='summary'>Test operation</span>
+                                                       </div>
+                                                       <div 
class='op-block-contents'>
+                                                               <div 
class='table-container' nil='true'></div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+                       """.replaceAll("\\n\\s*", ""),
+                       new SwaggerUI().swap(bs, swagger)
+               );
+       }
+}

Reply via email to