You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2018/04/03 14:35:24 UTC

[cxf] branch master updated: CXF-7634: Enrich support for Swagger Core 2.0 (OpenApi Spec 3.0). Adding OSGi support and samples

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 82fc4f0  CXF-7634: Enrich support for Swagger Core 2.0 (OpenApi Spec 3.0). Adding OSGi support and samples
82fc4f0 is described below

commit 82fc4f0d4a28491ba66db875438be336df0b06e9
Author: reta <dr...@gmail.com>
AuthorDate: Wed Mar 14 22:03:47 2018 -0400

    CXF-7634: Enrich support for Swagger Core 2.0 (OpenApi Spec 3.0). Adding OSGi support and samples
---
 .../jax_rs/description_openapi_v3_osgi/README.txt  |  81 +++++++++++
 .../jax_rs/description_openapi_v3_osgi/pom.xml     |  90 ++++++++++++
 .../demo/jaxrs/swagger/server/ApiOriginFilter.java |  45 ++++++
 .../main/java/demo/jaxrs/swagger/server/Item.java  |  49 +++++++
 .../java/demo/jaxrs/swagger/server/Sample.java     | 161 +++++++++++++++++++++
 .../main/resources/OSGI-INF/blueprint/context.xml  |  65 +++++++++
 distribution/src/main/release/samples/pom.xml      |   1 +
 .../karaf/features/src/main/resources/features.xml |  17 +++
 parent/pom.xml                                     |   4 +-
 9 files changed, 511 insertions(+), 2 deletions(-)

diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/README.txt b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/README.txt
new file mode 100644
index 0000000..23ae398
--- /dev/null
+++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/README.txt
@@ -0,0 +1,81 @@
+JAX-RS Swagger2Feature Demo for OSGi using Blueprint
+=================
+
+The demo shows a basic usage of Open API 3.0 documentation with REST based Web Services
+using JAX-RS 2.0 (JSR-339). In this demo, the OpenApiFeature is configured using Blueprint.
+
+Building and running the demo
+---------------------------------------
+(Note this demo currently uses the snapshot version of some components)
+
+From the base directory of this sample (i.e., where this README file is
+located), the Maven pom.xml file can be used to build and run the demo. 
+
+
+Using either UNIX or Windows:
+
+  mvn install
+
+Starting Karaf (refer to http://karaf.apache.org/manual/latest/quick-start.html)
+
+  bin/karaf
+
+
+          __ __                  ____      
+         / //_/____ __________ _/ __/      
+        / ,<  / __ `/ ___/ __ `/ /_        
+       / /| |/ /_/ / /  / /_/ / __/        
+      /_/ |_|\__,_/_/   \__,_/_/         
+  
+    Apache Karaf (4.1.5)
+  
+  Hit '<tab>' for a list of available commands
+  and '[cmd] --help' for help on a specific command.
+  Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.
+
+
+In order to install CXF's features, you need to add the CXF's features repo using
+
+  feature:repo-add cxf 3.n.m
+
+ where 3.n.m corresponds to a valid CXF version number (e.g., 3.2.5).
+
+Install CXF's cxf-rs-description-openapi-v3 feature that installs all the required bundles
+for this demo bundle.
+
+  feature:install cxf-rs-description-openapi-v3
+
+Install this demo bundle (using the appropriate bundle version number)
+  
+  install -s mvn:org.apache.cxf.samples/jax_rs_description_openapi_v3_osgi/3.n.m
+
+You can verify if the CXF JAX-RS OpenApi 3.0 Blueprint Demo is installed and started.
+
+  karaf@root()> list
+  START LEVEL 100 , List Threshold: 50
+   ID | State  | Lvl | Version          | Name                              
+  -----------------------------------------------------------------------------
+  127 | Active |  80 | 3.2.5-SNAPSHOT   | CXF JAX-RS OpenApi 3.0 Blueprint Demo
+  karaf@root()>
+
+Now, you will be able to access this CXF JAXRS demo service on your Karaf instance at
+
+  http://localhost:8181/cxf/openApiSample
+
+And its Swagger API documents in either json or yaml are available at
+
+  http://localhost:8181/cxf/openApiSample/openapi.json
+  http://localhost:8181/cxf/openApiSample/openapi.yaml
+
+
+If you do not have your swagger-ui on your local system, you can download 
+a copy from its download site.
+
+At the console, type
+
+  wget -N https://github.com/swagger-api/swagger-ui/archive/master.zip
+  unzip master.zip
+
+This will extract the content of the swagger-ui zip file. Using your Browser, open
+the index.html file at swagger-ui-master/dist/. Finally, type in the above swagger 
+document URL in the input field and click on "Explore" to view the document.
diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/pom.xml
new file mode 100644
index 0000000..34ff1e6
--- /dev/null
+++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/pom.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>jax_rs_description_openapi_v3_osgi</artifactId>
+    <packaging>bundle</packaging>
+    <name>CXF JAX-RS OpenApi 3.0 Blueprint Demo</name>
+    <description>JAX-RS OpenApi 3.0 Basic Demo for OSGi using Blueprint</description>
+    <parent>
+        <groupId>org.apache.cxf.samples</groupId>
+        <artifactId>cxf-samples</artifactId>
+        <version>3.2.5-SNAPSHOT</version>
+        <relativePath>../..</relativePath>
+    </parent>
+
+    <properties>
+        <cxf.version>${project.version}</cxf.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId};blueprint.aries.xml-validation:=false</Bundle-SymbolicName>
+                        <Import-Package>
+                            javax.ws.rs,
+                            javax.ws.rs.core,
+                            javax.ws.rs.container,
+                            org.apache.cxf.jaxrs.provider,
+                            org.apache.cxf.jaxrs.openapi,
+                            org.osgi.service.blueprint,
+                            io.swagger.v3.oas.annotations,
+                            io.swagger.v3.oas.models,
+                            io.swagger.v3.jaxrs2,
+                            com.fasterxml.jackson.jaxrs.base,
+                            com.fasterxml.jackson.jaxrs.json,
+                            javax.annotation;version="[1.2,2)",
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-transports-http</artifactId>
+            <version>3.2.5-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>3.2.5-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-service-description-openapi-v3</artifactId>
+            <version>3.2.5-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/ApiOriginFilter.java b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/ApiOriginFilter.java
new file mode 100644
index 0000000..b7eda12
--- /dev/null
+++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/ApiOriginFilter.java
@@ -0,0 +1,45 @@
+/**
+ * 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 demo.jaxrs.swagger.server;
+
+import java.io.IOException;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.core.MultivaluedMap;
+
+/**
+ * This is a simple optional CORS filter used for this demo to make the resources accessible
+ * from other origins. You may omit using this filter or use CXF's advanced CORS filter
+ * org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter
+ * included in cxf-rt-rs-security-cors if you need a more comprehensive accessibility rules.
+ */
+public class ApiOriginFilter implements ContainerResponseFilter {
+
+    @Override
+    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
+        throws IOException {
+        MultivaluedMap<String, Object> headers = responseContext.getHeaders();
+        headers.add("Access-Control-Allow-Origin", "*");
+        headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
+        headers.add("Access-Control-Allow-Headers", "Content-Type");
+    }
+}
diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/Item.java b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/Item.java
new file mode 100644
index 0000000..51b3cab
--- /dev/null
+++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/Item.java
@@ -0,0 +1,49 @@
+/**
+ * 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 demo.jaxrs.swagger.server;
+
+public class Item {
+    private String name;
+    private String value;
+
+    public Item() {
+    }
+
+    public Item(final String name, final String value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}
diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/Sample.java b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/Sample.java
new file mode 100644
index 0000000..23f34d1
--- /dev/null
+++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/java/demo/jaxrs/swagger/server/Sample.java
@@ -0,0 +1,161 @@
+/**
+ * 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 demo.jaxrs.swagger.server;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.UriInfo;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.headers.Header;
+import io.swagger.v3.oas.annotations.media.ArraySchema;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+
+@Path("/sample")
+public class Sample {
+    private Map<String, Item> items;
+
+    public Sample() {
+        items = Collections.synchronizedMap(new TreeMap<String, Item>(String.CASE_INSENSITIVE_ORDER));
+        items.put("Item 1", new Item("Item 1", "Value 1"));
+        items.put("Item 2", new Item("Item 2", "Value 2"));
+    }
+
+    @Produces({ MediaType.APPLICATION_JSON })
+    @GET
+    @Operation(
+        summary = "Get all items",
+        description = "Get operation with Response and @Default value",
+        responses = {
+            @ApiResponse(
+                content = @Content(array = @ArraySchema(schema = @Schema(implementation = Item.class))),
+                responseCode = "200"
+            )
+        }
+    )
+    public Response getItems(@Parameter(required = true) @QueryParam("page") @DefaultValue("1") int page) {
+        return Response.ok(items.values()).build();
+    }
+
+    @Produces({ MediaType.APPLICATION_JSON })
+    @Path("/{name}")
+    @GET
+    @Operation(
+        summary = "Get item by name",
+        description = "Get operation with type and headers",
+        responses = {
+            @ApiResponse(content = @Content(schema = @Schema(implementation = Item.class)), responseCode = "200"),
+            @ApiResponse(responseCode = "404")
+        }
+    )
+    public Response getItem(
+            @Parameter(required = true) @HeaderParam("Accept-Language") final String language,
+            @Parameter(required = true) @PathParam("name") String name) {
+        return items.containsKey(name) 
+            ? Response.ok().entity(items.get(name)).build() 
+                : Response.status(Status.NOT_FOUND).build();
+    }
+
+    @Consumes({ MediaType.APPLICATION_JSON })
+    @POST
+    @Operation(
+        summary = "Create new item",
+        description = "Post operation with entity in a body",
+        responses = {
+            @ApiResponse(
+                content = @Content(
+                    schema = @Schema(implementation = Item.class), 
+                    mediaType = MediaType.APPLICATION_JSON
+                ),
+                headers = @Header(name = "Location"),
+                responseCode = "201"
+            )
+        }
+    )
+    public Response createItem(
+        @Context final UriInfo uriInfo,
+        @Parameter(required = true) final Item item) {
+        items.put(item.getName(), item);
+        return Response
+            .created(uriInfo.getBaseUriBuilder().path(item.getName()).build())
+            .entity(item).build();
+    }
+
+    @Produces({ MediaType.APPLICATION_JSON })
+    @Path("/{name}")
+    @PUT
+    @Operation(
+        summary = "Update an existing new item",
+        description = "Put operation with form parameter",
+        responses = {
+            @ApiResponse(
+                content = @Content(schema = @Schema(implementation = Item.class)),
+                responseCode = "200"
+            )
+        }
+    )
+    public Item updateItem(
+            @Parameter(required = true) @PathParam("name") String name,
+            @Parameter(required = true) @FormParam("value") String value) {
+        Item item = new Item(name, value);
+        items.put(name,  item);
+        return item;
+    }
+
+    @Path("/{name}")
+    @DELETE
+    @Operation(
+        summary = "Delete an existing new item",
+        description = "Delete operation with implicit header",
+        responses = @ApiResponse(responseCode = "204")
+    )
+    @Parameter(
+       name = "Accept-Language",
+       description = "language",
+       required = true,
+       schema = @Schema(implementation = String.class),
+       in = ParameterIn.HEADER
+    )
+    public void delete(@Parameter(required = true) @PathParam("name") String name) {
+        items.remove(name);
+    }
+}
diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/resources/OSGI-INF/blueprint/context.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/resources/OSGI-INF/blueprint/context.xml
new file mode 100644
index 0000000..f5e7b3d
--- /dev/null
+++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_osgi/src/main/resources/OSGI-INF/blueprint/context.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<!-- START SNIPPET: blueprint -->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:cxf="http://cxf.apache.org/blueprint/core"
+       xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
+
+       xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+                           http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
+                           http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
+
+
+
+    <!-- JAXRS providers -->
+    <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
+    <bean id="multipartProvider" class="org.apache.cxf.jaxrs.provider.MultipartProvider" />
+    <bean id="originFilter" class="demo.jaxrs.swagger.server.ApiOriginFilter" />
+
+    <!-- Application resources -->
+    <bean id="sampleResource" class="demo.jaxrs.swagger.server.Sample" />
+
+    <!-- CXF OpenApiFeature -->  
+    <bean id="openApiFeature" class="org.apache.cxf.jaxrs.openapi.OpenApiFeature">
+    </bean>
+
+    <cxf:bus>
+        <cxf:features>
+            <cxf:logging />
+        </cxf:features>
+    </cxf:bus>
+
+    <jaxrs:server id="sampleServer" address="/openApiSample">
+        <jaxrs:serviceBeans>
+            <ref component-id="sampleResource" />
+        </jaxrs:serviceBeans>
+        <jaxrs:providers>
+            <ref component-id="jsonProvider" />
+            <ref component-id="multipartProvider" />
+            <ref component-id="originFilter" />
+        </jaxrs:providers>
+        <jaxrs:features>
+            <ref component-id="openApiFeature" />
+        </jaxrs:features>
+    </jaxrs:server>
+
+</blueprint>
+<!-- END SNIPPET: blueprint -->
diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml
index 2730f9d..c1a0011e 100644
--- a/distribution/src/main/release/samples/pom.xml
+++ b/distribution/src/main/release/samples/pom.xml
@@ -136,6 +136,7 @@
         <module>jax_rs/tracing_opentracing_osgi</module>
         <module>jax_rs/description_openapi_v3</module>
         <module>jax_rs/sse_osgi</module>
+        <module>jax_rs/description_openapi_v3_osgi</module>
     </modules>
     <dependencyManagement>
         <dependencies>
diff --git a/osgi/karaf/features/src/main/resources/features.xml b/osgi/karaf/features/src/main/resources/features.xml
index 4935ed5..98056ff 100644
--- a/osgi/karaf/features/src/main/resources/features.xml
+++ b/osgi/karaf/features/src/main/resources/features.xml
@@ -320,6 +320,23 @@
         <bundle start-level="35" dependency="true">mvn:io.swagger/swagger-core/${cxf.swagger2.version}</bundle>
         <bundle start-level="35" dependency="true">mvn:io.swagger/swagger-jaxrs/${cxf.swagger2.version}</bundle>
     </feature>
+    <feature name="cxf-rs-description-openapi-v3" version="${project.version}">
+        <feature version="${project.version}">cxf-jaxrs</feature>
+        <feature version="${project.version}">cxf-jackson</feature>
+        <bundle start-level="35">mvn:org.apache.cxf/cxf-rt-rs-service-description-swagger-ui/${project.version}</bundle>
+        <bundle start-level="40">mvn:org.apache.cxf/cxf-rt-rs-service-description-openapi-v3/${project.version}</bundle>
+        <bundle dependency="true" start-level="35">mvn:${cxf.servlet-api.group}/${cxf.servlet-api.artifact}/${cxf.servlet-api.version}</bundle>
+        <bundle start-level="10" dependency="true">mvn:javax.validation/validation-api/${cxf.validation.api.version}</bundle>
+        <bundle start-level="35" dependency="true">mvn:org.apache.commons/commons-lang3/${cxf.commons-lang3.version}</bundle>
+        <bundle start-level="25" dependency="true">mvn:com.google.guava/guava/${cxf.guava.version}</bundle>
+        <bundle start-level="30" dependency="true">mvn:org.javassist/javassist/${cxf.javassist.version}</bundle>
+        <bundle start-level="30" dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.reflections/${cxf.reflections.bundle.version}</bundle>
+        <bundle start-level="35" dependency="true">mvn:io.swagger.core.v3/swagger-annotations/${cxf.swagger.v3.version}</bundle>
+        <bundle start-level="35" dependency="true">mvn:io.swagger.core.v3/swagger-models/${cxf.swagger.v3.version}</bundle>
+        <bundle start-level="35" dependency="true">mvn:io.swagger.core.v3/swagger-core/${cxf.swagger.v3.version}</bundle>
+        <bundle start-level="35" dependency="true">mvn:io.swagger.core.v3/swagger-integration/${cxf.swagger.v3.version}</bundle>
+        <bundle start-level="35" dependency="true">mvn:io.swagger.core.v3/swagger-jaxrs2/${cxf.swagger.v3.version}</bundle>
+    </feature>
     <feature name="cxf-databinding-aegis" version="${project.version}">
         <feature version="${project.version}">cxf-wsdl</feature>
         <feature version="${project.version}">cxf-bindings-soap</feature>
diff --git a/parent/pom.xml b/parent/pom.xml
index 623a5b8..4273966 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -113,7 +113,7 @@
         <cxf.openjpa.version>2.4.2</cxf.openjpa.version>
         <cxf.geronimo.transaction.version>3.1.4</cxf.geronimo.transaction.version>
         <cxf.jasypt.bundle.version>1.9.0_1</cxf.jasypt.bundle.version>
-        <cxf.javassist.version>3.19.0-GA</cxf.javassist.version>
+        <cxf.javassist.version>3.21.0-GA</cxf.javassist.version>
         <cxf.javax.ws.rs.version>2.1</cxf.javax.ws.rs.version>
         <cxf.jaxb.version>2.2.11</cxf.jaxb.version>
         <cxf.jaxb.impl.version>${cxf.jaxb.version}</cxf.jaxb.impl.version>
@@ -143,7 +143,7 @@
         <cxf.opensaml.osgi.version.range>[3.1,4)</cxf.opensaml.osgi.version.range>
         <cxf.rhino.version>1.7R2</cxf.rhino.version>
         <cxf.reactivestreams.version>1.0.1</cxf.reactivestreams.version>
-        <cxf.reflections.bundle.version>0.9.10_3</cxf.reflections.bundle.version>
+        <cxf.reflections.bundle.version>0.9.11_2</cxf.reflections.bundle.version>
         <cxf.servlet-api.group>javax.servlet</cxf.servlet-api.group>
         <cxf.servlet-api.artifact>javax.servlet-api</cxf.servlet-api.artifact>
         <cxf.servlet-api.version>3.1.0</cxf.servlet-api.version>

-- 
To stop receiving notification emails like this one, please contact
reta@apache.org.