You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/08/24 11:10:43 UTC
syncope git commit: [SYNCOPE-925] Extending CXF's Swagger2Feature on
purpose
Repository: syncope
Updated Branches:
refs/heads/master 5b8237e0b -> 39f7f7ebf
[SYNCOPE-925] Extending CXF's Swagger2Feature on purpose
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/39f7f7eb
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/39f7f7eb
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/39f7f7eb
Branch: refs/heads/master
Commit: 39f7f7ebff132173d5ca6ff6ec5e7692327524dc
Parents: 5b8237e
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Wed Aug 24 13:10:30 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Wed Aug 24 13:10:30 2016 +0200
----------------------------------------------------------------------
.../rest/cxf/ExtendedSwagger2Serializers.java | 214 +++++++++++++++++++
.../syncope/core/rest/cxf/Swagger2Feature.java | 164 ++------------
.../core/rest/cxf/Swagger2Serializers.java | 36 ++++
.../src/main/resources/restCXFContext.xml | 7 +-
.../src/main/resources/jboss/restCXFContext.xml | 8 +-
5 files changed, 275 insertions(+), 154 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f7f7eb/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/ExtendedSwagger2Serializers.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/ExtendedSwagger2Serializers.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/ExtendedSwagger2Serializers.java
new file mode 100644
index 0000000..41710fb
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/ExtendedSwagger2Serializers.java
@@ -0,0 +1,214 @@
+/*
+ * 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.syncope.core.rest.cxf;
+
+import io.swagger.jaxrs.listing.SwaggerSerializers;
+import io.swagger.models.HttpMethod;
+import io.swagger.models.Operation;
+import io.swagger.models.Path;
+import io.swagger.models.Swagger;
+import io.swagger.models.Tag;
+import io.swagger.models.parameters.HeaderParameter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import org.apache.commons.collections4.ComparatorUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.cxf.jaxrs.ext.MessageContext;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.model.doc.DocumentationProvider;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.core.persistence.api.DomainsHolder;
+import org.apache.syncope.core.spring.ApplicationContextProvider;
+
+public class ExtendedSwagger2Serializers extends SwaggerSerializers implements Swagger2Serializers {
+
+ protected boolean dynamicBasePath;
+
+ protected boolean replaceTags;
+
+ protected DocumentationProvider javadocProvider;
+
+ protected List<ClassResourceInfo> cris;
+
+ protected final List<String> domains = new ArrayList<>();
+
+ public ExtendedSwagger2Serializers() {
+ super();
+
+ domains.addAll(ApplicationContextProvider.getApplicationContext().
+ getBean(DomainsHolder.class).getDomains().keySet());
+ }
+
+ @Override
+ public void setDynamicBasePath(final boolean dynamicBasePath) {
+ this.dynamicBasePath = dynamicBasePath;
+ }
+
+ @Override
+ public void setReplaceTags(final boolean replaceTags) {
+ this.replaceTags = replaceTags;
+ }
+
+ @Override
+ public void setJavadocProvider(final DocumentationProvider javadocProvider) {
+ this.javadocProvider = javadocProvider;
+ }
+
+ @Override
+ public void setClassResourceInfos(final List<ClassResourceInfo> classResourceInfos) {
+ this.cris = classResourceInfos;
+ }
+
+ @Override
+ public void writeTo(
+ final Swagger data,
+ final Class<?> type,
+ final Type genericType,
+ final Annotation[] annotations,
+ final MediaType mediaType,
+ final MultivaluedMap<String, Object> headers,
+ final OutputStream out) throws IOException {
+
+ if (dynamicBasePath) {
+ MessageContext ctx = JAXRSUtils.createContextValue(
+ JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
+ data.setBasePath(StringUtils.substringBeforeLast(ctx.getHttpServletRequest().
+ getRequestURI(), "/"));
+ }
+
+ if (replaceTags || javadocProvider != null) {
+ Map<String, ClassResourceInfo> operations = new HashMap<>();
+ Map<Pair<String, String>, OperationResourceInfo> methods = new HashMap<>();
+ for (ClassResourceInfo cri : cris) {
+ for (OperationResourceInfo ori : cri.getMethodDispatcher().getOperationResourceInfos()) {
+ String normalizedPath = getNormalizedPath(
+ cri.getURITemplate().getValue(), ori.getURITemplate().getValue());
+
+ operations.put(normalizedPath, cri);
+ methods.put(ImmutablePair.of(ori.getHttpMethod(), normalizedPath), ori);
+ }
+ }
+
+ if (replaceTags && data.getTags() != null) {
+ data.getTags().clear();
+ }
+ for (final Map.Entry<String, Path> entry : data.getPaths().entrySet()) {
+ Tag tag = null;
+ if (replaceTags && operations.containsKey(entry.getKey())) {
+ ClassResourceInfo cri = operations.get(entry.getKey());
+
+ tag = new Tag();
+ tag.setName(cri.getURITemplate().getValue());
+ if (javadocProvider != null) {
+ tag.setDescription(javadocProvider.getClassDoc(cri));
+ }
+
+ data.addTag(tag);
+ }
+
+ for (Map.Entry<HttpMethod, Operation> subentry : entry.getValue().getOperationMap().entrySet()) {
+ if (replaceTags && tag != null) {
+ subentry.getValue().setTags(Collections.singletonList(tag.getName()));
+ }
+
+ Pair<String, String> key = ImmutablePair.of(subentry.getKey().name(), entry.getKey());
+ if (methods.containsKey(key) && javadocProvider != null) {
+ OperationResourceInfo ori = methods.get(key);
+
+ subentry.getValue().setSummary(javadocProvider.getMethodDoc(ori));
+
+ boolean domainHeaderParameterFound = false;
+ for (int i = 0; i < subentry.getValue().getParameters().size(); i++) {
+ subentry.getValue().getParameters().get(i).
+ setDescription(javadocProvider.getMethodParameterDoc(ori, i));
+
+ if (subentry.getValue().getParameters().get(i) instanceof HeaderParameter
+ && RESTHeaders.DOMAIN.equals(
+ subentry.getValue().getParameters().get(i).getName())) {
+
+ domainHeaderParameterFound = true;
+ }
+ }
+ if (!domainHeaderParameterFound) {
+ HeaderParameter domainHeaderParameter = new HeaderParameter();
+ domainHeaderParameter.setName(RESTHeaders.DOMAIN);
+ domainHeaderParameter.setRequired(true);
+ domainHeaderParameter.setType("string");
+ domainHeaderParameter.setEnum(domains);
+ domainHeaderParameter.setDefault(SyncopeConstants.MASTER_DOMAIN);
+
+ subentry.getValue().getParameters().add(domainHeaderParameter);
+ }
+
+ if (subentry.getValue().getResponses() != null
+ && !subentry.getValue().getResponses().isEmpty()) {
+
+ subentry.getValue().getResponses().entrySet().iterator().next().getValue().
+ setDescription(javadocProvider.getMethodResponseDoc(ori));
+ }
+ }
+ }
+ }
+ }
+ if (replaceTags && data.getTags() != null) {
+ Collections.sort(data.getTags(), new Comparator<Tag>() {
+
+ @Override
+ public int compare(final Tag tag1, final Tag tag2) {
+ return ComparatorUtils.<String>naturalComparator().compare(tag1.getName(), tag2.getName());
+ }
+ });
+ }
+
+ super.writeTo(data, type, genericType, annotations, mediaType, headers, out);
+ }
+
+ protected String getNormalizedPath(final String classResourcePath, final String operationResourcePath) {
+ StringBuilder normalizedPath = new StringBuilder();
+
+ String[] segments = org.apache.commons.lang3.StringUtils.split(classResourcePath + operationResourcePath,
+ "/");
+ for (String segment : segments) {
+ if (!org.apache.commons.lang3.StringUtils.isEmpty(segment)) {
+ normalizedPath.append("/").append(segment);
+ }
+ }
+ // Adapt to Swagger's path expression
+ if (normalizedPath.toString().endsWith(":.*}")) {
+ normalizedPath.setLength(normalizedPath.length() - 4);
+ normalizedPath.append('}');
+ }
+ return StringUtils.EMPTY.equals(normalizedPath.toString()) ? "/" : normalizedPath.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f7f7eb/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Feature.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Feature.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Feature.java
index 1578032..e01d7e2 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Feature.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Feature.java
@@ -22,25 +22,13 @@ import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.config.DefaultReaderConfig;
import io.swagger.jaxrs.config.ReaderConfig;
import io.swagger.jaxrs.listing.ApiListingResource;
-import io.swagger.jaxrs.listing.SwaggerSerializers;
-import io.swagger.models.Operation;
-import io.swagger.models.Path;
-import io.swagger.models.Swagger;
-import io.swagger.models.Tag;
import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import javax.servlet.ServletContext;
@@ -49,23 +37,15 @@ import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
-import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
import org.apache.cxf.Bus;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
import org.apache.cxf.jaxrs.ext.MessageContext;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
-import org.apache.cxf.jaxrs.model.OperationResourceInfo;
-import org.apache.cxf.jaxrs.model.doc.DocumentationProvider;
import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
-import org.apache.cxf.jaxrs.utils.JAXRSUtils;
/**
* Automatically loads available javadocs from class loader (when {@link java.net.URLClassLoader}).
@@ -82,7 +62,13 @@ public class Swagger2Feature extends org.apache.cxf.jaxrs.swagger.Swagger2Featur
super.initialize(server, bus);
}
- // ------- Remove the code below this point when CXF-6990 is part of next CXF release (3.1.8?) -----
+ // ------- Remove the code below this point when CXF 3.1.8 is available -----
+ private Swagger2Serializers swagger2Serializers;
+
+ public void setSwagger2Serializers(final Swagger2Serializers swagger2Serializers) {
+ this.swagger2Serializers = swagger2Serializers;
+ }
+
@Override
protected void addSwaggerResource(final Server server, final Bus bus) {
List<Object> swaggerResources = new LinkedList<>();
@@ -107,7 +93,13 @@ public class Swagger2Feature extends org.apache.cxf.jaxrs.swagger.Swagger2Featur
if (SWAGGER_UI_RESOURCE_ROOT != null) {
providers.add(new SwaggerUIFilter());
}
- providers.add(new Swagger2Serializers(dynamicBasePath, replaceTags, javadocProvider, cris));
+
+ if (swagger2Serializers != null) {
+ swagger2Serializers.setJavadocProvider(javadocProvider);
+ swagger2Serializers.setClassResourceInfos(cris);
+ providers.add(swagger2Serializers);
+ }
+
providers.add(new ReaderConfigFilter());
((ServerProviderFactory) server.getEndpoint().get(
ServerProviderFactory.class.getName())).setUserProviders(providers);
@@ -180,132 +172,4 @@ public class Swagger2Feature extends org.apache.cxf.jaxrs.swagger.Swagger2Featur
}
}
- protected static class Swagger2Serializers extends SwaggerSerializers {
-
- protected final boolean dynamicBasePath;
-
- protected final boolean replaceTags;
-
- protected final DocumentationProvider javadocProvider;
-
- protected final List<ClassResourceInfo> cris;
-
- public Swagger2Serializers(
- final boolean dynamicBasePath,
- final boolean replaceTags,
- final DocumentationProvider javadocProvider,
- final List<ClassResourceInfo> cris) {
-
- super();
-
- this.dynamicBasePath = dynamicBasePath;
- this.replaceTags = replaceTags;
- this.javadocProvider = javadocProvider;
- this.cris = cris;
- }
-
- @Override
- public void writeTo(
- final Swagger data,
- final Class<?> type,
- final Type genericType,
- final Annotation[] annotations,
- final MediaType mediaType,
- final MultivaluedMap<String, Object> headers,
- final OutputStream out) throws IOException {
-
- if (dynamicBasePath) {
- MessageContext ctx = JAXRSUtils.createContextValue(
- JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
- data.setBasePath(StringUtils.substringBeforeLast(ctx.getHttpServletRequest().
- getRequestURI(), "/"));
- }
-
- if (replaceTags || javadocProvider != null) {
- Map<String, ClassResourceInfo> operations = new HashMap<>();
- Map<Pair<String, String>, OperationResourceInfo> methods = new HashMap<>();
- for (ClassResourceInfo cri : cris) {
- for (OperationResourceInfo ori : cri.getMethodDispatcher().getOperationResourceInfos()) {
- String normalizedPath = getNormalizedPath(
- cri.getURITemplate().getValue(), ori.getURITemplate().getValue());
-
- operations.put(normalizedPath, cri);
- methods.put(ImmutablePair.of(ori.getHttpMethod(), normalizedPath), ori);
- }
- }
-
- if (replaceTags && data.getTags() != null) {
- data.getTags().clear();
- }
- for (final Map.Entry<String, Path> entry : data.getPaths().entrySet()) {
- Tag tag = null;
- if (replaceTags && operations.containsKey(entry.getKey())) {
- ClassResourceInfo cri = operations.get(entry.getKey());
-
- tag = new Tag();
- tag.setName(cri.getURITemplate().getValue());
- if (javadocProvider != null) {
- tag.setDescription(javadocProvider.getClassDoc(cri));
- }
-
- data.addTag(tag);
- }
-
- for (Map.Entry<io.swagger.models.HttpMethod, Operation> subentry : entry.getValue().
- getOperationMap().entrySet()) {
- if (replaceTags && tag != null) {
- subentry.getValue().setTags(Collections.singletonList(tag.getName()));
- }
-
- Pair<String, String> key = ImmutablePair.of(subentry.getKey().name(), entry.getKey());
- if (methods.containsKey(key) && javadocProvider != null) {
- OperationResourceInfo ori = methods.get(key);
-
- subentry.getValue().setSummary(javadocProvider.getMethodDoc(ori));
- for (int i = 0; i < subentry.getValue().getParameters().size(); i++) {
- subentry.getValue().getParameters().get(i).
- setDescription(javadocProvider.getMethodParameterDoc(ori, i));
- }
-
- if (subentry.getValue().getResponses() != null
- && !subentry.getValue().getResponses().isEmpty()) {
-
- subentry.getValue().getResponses().entrySet().iterator().next().getValue().
- setDescription(javadocProvider.getMethodResponseDoc(ori));
- }
- }
- }
- }
- }
- if (replaceTags && data.getTags() != null) {
- Collections.sort(data.getTags(), new Comparator<Tag>() {
-
- @Override
- public int compare(final Tag tag1, final Tag tag2) {
- return ComparatorUtils.<String>naturalComparator().compare(tag1.getName(), tag2.getName());
- }
- });
- }
-
- super.writeTo(data, type, genericType, annotations, mediaType, headers, out);
- }
-
- protected String getNormalizedPath(final String classResourcePath, final String operationResourcePath) {
- StringBuilder normalizedPath = new StringBuilder();
-
- String[] segments = org.apache.commons.lang3.StringUtils.split(classResourcePath + operationResourcePath,
- "/");
- for (String segment : segments) {
- if (!org.apache.commons.lang3.StringUtils.isEmpty(segment)) {
- normalizedPath.append("/").append(segment);
- }
- }
- // Adapt to Swagger's path expression
- if (normalizedPath.toString().endsWith(":.*}")) {
- normalizedPath.setLength(normalizedPath.length() - 4);
- normalizedPath.append('}');
- }
- return StringUtils.EMPTY.equals(normalizedPath.toString()) ? "/" : normalizedPath.toString();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f7f7eb/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Serializers.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Serializers.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Serializers.java
new file mode 100644
index 0000000..39abf7b
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/Swagger2Serializers.java
@@ -0,0 +1,36 @@
+/*
+ * 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.syncope.core.rest.cxf;
+
+import io.swagger.models.Swagger;
+import java.util.List;
+import javax.ws.rs.ext.MessageBodyWriter;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.doc.DocumentationProvider;
+
+public interface Swagger2Serializers extends MessageBodyWriter<Swagger> {
+
+ void setDynamicBasePath(boolean dynamicBasePath);
+
+ void setReplaceTags(boolean replaceTags);
+
+ void setJavadocProvider(DocumentationProvider javadocProvider);
+
+ void setClassResourceInfos(List<ClassResourceInfo> classResourceInfos);
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f7f7eb/core/rest-cxf/src/main/resources/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/resources/restCXFContext.xml b/core/rest-cxf/src/main/resources/restCXFContext.xml
index f7714a1..4f4d12b 100644
--- a/core/rest-cxf/src/main/resources/restCXFContext.xml
+++ b/core/rest-cxf/src/main/resources/restCXFContext.xml
@@ -99,6 +99,10 @@ under the License.
<property name="usePathParamsToCompareOperations" value="false"/>
</bean>
+ <bean id="extendedSwagger2Serializers" class="org.apache.syncope.core.rest.cxf.ExtendedSwagger2Serializers">
+ <property name="dynamicBasePath" value="true"/>
+ <property name="replaceTags" value="true"/>
+ </bean>
<bean id="swagger2Feature" class="org.apache.syncope.core.rest.cxf.Swagger2Feature">
<property name="title" value="Apache Syncope"/>
<property name="version" value="${syncope.version}"/>
@@ -109,8 +113,7 @@ under the License.
<property name="scanAllResources" value="true"/>
<property name="activateOnlyIfJaxrsSupported" value="true"/>
- <property name="dynamicBasePath" value="true"/>
- <property name="replaceTags" value="true"/>
+ <property name="swagger2Serializers" ref="extendedSwagger2Serializers"/>
</bean>
<jaxrs:server id="restContainer" address="/"
http://git-wip-us.apache.org/repos/asf/syncope/blob/39f7f7eb/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
index 2417c35..1b709b1 100644
--- a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
+++ b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
@@ -105,6 +105,10 @@ under the License.
</property>
</bean>
+ <bean id="extendedSwagger2Serializers" class="org.apache.syncope.core.rest.cxf.ExtendedSwagger2Serializers">
+ <property name="dynamicBasePath" value="true"/>
+ <property name="replaceTags" value="true"/>
+ </bean>
<bean id="swagger2Feature" class="org.apache.syncope.core.rest.cxf.Swagger2Feature">
<property name="title" value="Apache Syncope"/>
<property name="version" value="${syncope.version}"/>
@@ -115,14 +119,14 @@ under the License.
<property name="scanAllResources" value="true"/>
<property name="activateOnlyIfJaxrsSupported" value="true"/>
- <property name="dynamicBasePath" value="true"/>
- <property name="replaceTags" value="true"/>
<property name="javaDocPaths">
<list>
<value>/WEB-INF/lib/syncope-common-rest-api-${syncope.version}-javadoc.jar</value>
<value>/WEB-INF/lib/syncope-ext-camel-rest-api-${syncope.version}-javadoc.jar</value>
</list>
</property>
+
+ <property name="swagger2Serializers" ref="extendedSwagger2Serializers"/>
</bean>
<jaxrs:server id="restContainer" address="/"