You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2019/10/07 09:36:09 UTC
[servicecomb-java-chassis] branch master updated: [SCB-1492] add
ModelResolveObjectMapperProvider
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 8e665bf [SCB-1492] add ModelResolveObjectMapperProvider
8e665bf is described below
commit 8e665bfd518d4872c324a2d123f5619aa19e997f
Author: yhs0092 <yh...@163.com>
AuthorDate: Tue Sep 17 21:45:12 2019 +0800
[SCB-1492] add ModelResolveObjectMapperProvider
To allow users to custom the ObjectMapper used in schema generation
---
.../DefaultModelResolveObjectMapperProvider.java | 38 ++++++++++++++++++++++
.../extend/ModelResolveObjectMapperProvider.java | 37 +++++++++++++++++++++
.../swagger/extend/ModelResolverExt.java | 23 +++++++++----
3 files changed, 91 insertions(+), 7 deletions(-)
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/DefaultModelResolveObjectMapperProvider.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/DefaultModelResolveObjectMapperProvider.java
new file mode 100644
index 0000000..9f5093c
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/DefaultModelResolveObjectMapperProvider.java
@@ -0,0 +1,38 @@
+/*
+ * 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.servicecomb.swagger.extend;
+
+import org.apache.servicecomb.swagger.extend.module.EnumModuleExt;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.swagger.util.Json;
+
+public class DefaultModelResolveObjectMapperProvider implements ModelResolveObjectMapperProvider {
+ @Override
+ public int getOrder() {
+ return 100;
+ }
+
+ @Override
+ public ObjectMapper getMapper() {
+ ObjectMapper mapper = Json.mapper();
+ mapper.registerModule(new EnumModuleExt());
+ return mapper;
+ }
+}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolveObjectMapperProvider.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolveObjectMapperProvider.java
new file mode 100644
index 0000000..68e05da
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolveObjectMapperProvider.java
@@ -0,0 +1,37 @@
+/*
+ * 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.servicecomb.swagger.extend;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * Implement this interface to create custom {@link ObjectMapper} for Swagger schema generation.
+ */
+public interface ModelResolveObjectMapperProvider {
+ /**
+ * @return order The smaller value it is, the higher priority this provider has.
+ */
+ default int getOrder() {
+ return 0;
+ }
+
+ /**
+ * @return the ObjectMapper, which is used by Swagger to introspect the param types and generate property collections.
+ */
+ ObjectMapper getMapper();
+}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolverExt.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolverExt.java
index 81b6d30..854b10d 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolverExt.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/ModelResolverExt.java
@@ -26,7 +26,6 @@ import java.util.Map;
import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.apache.servicecomb.swagger.converter.property.StringPropertyConverter;
-import org.apache.servicecomb.swagger.extend.module.EnumModuleExt;
import org.apache.servicecomb.swagger.extend.property.creator.ByteArrayPropertyCreator;
import org.apache.servicecomb.swagger.extend.property.creator.BytePropertyCreator;
import org.apache.servicecomb.swagger.extend.property.creator.InputStreamPropertyCreator;
@@ -46,11 +45,12 @@ import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.properties.Property;
import io.swagger.models.properties.StringProperty;
-import io.swagger.util.Json;
public class ModelResolverExt extends ModelResolver {
private Map<Class<?>, PropertyCreator> propertyCreatorMap = new HashMap<>();
+ private static ObjectMapper objectMapper;
+
public ModelResolverExt() {
super(findMapper());
@@ -63,9 +63,18 @@ public class ModelResolverExt extends ModelResolver {
}
private static ObjectMapper findMapper() {
- ObjectMapper mapper = Json.mapper();
- mapper.registerModule(new EnumModuleExt());
- return mapper;
+ if (null != objectMapper) {
+ return objectMapper;
+ }
+
+ ModelResolveObjectMapperProvider objectMapperProvider = SPIServiceUtils
+ .getPriorityHighestService(ModelResolveObjectMapperProvider.class);
+ if (null == objectMapperProvider) {
+ objectMapperProvider = new DefaultModelResolveObjectMapperProvider();
+ }
+ objectMapper = objectMapperProvider.getMapper();
+
+ return objectMapper;
}
private void addPropertyCreator(PropertyCreator creator) {
@@ -130,7 +139,7 @@ public class ModelResolverExt extends ModelResolver {
checkType(type);
// 只有声明model的地方才需要标注类型
- if (ModelImpl.class.isInstance(model) && !StringUtils.isEmpty(((ModelImpl) model).getName())) {
+ if (model instanceof ModelImpl && !StringUtils.isEmpty(((ModelImpl) model).getName())) {
setType(type, model.getVendorExtensions());
}
return model;
@@ -147,7 +156,7 @@ public class ModelResolverExt extends ModelResolver {
}
Property property = super.resolveProperty(propType, context, annotations, next);
- if (StringProperty.class.isInstance(property)) {
+ if (property instanceof StringProperty) {
if (StringPropertyConverter.isEnum((StringProperty) property)) {
setType(propType, property.getVendorExtensions());
}