This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 481d6ec0f8 [type:feature] namespace export operation (#5857)
481d6ec0f8 is described below
commit 481d6ec0f89ad240198ac253a7a13be694d2f343
Author: aias00 <[email protected]>
AuthorDate: Thu Dec 19 15:39:27 2024 +0800
[type:feature] namespace export operation (#5857)
* [type:feature] config export support plugin template data
* [type:feature] config export support plugin template data
* [type:feature] config export support plugin template data
* [type:feature] config export support plugin template data
* [type:feature] namespace config export
* [type:feature] namespace config export
* [type:feature] namespace config export
* [type:feature] namespace config export
* [type:feature] namespace config export
---
.../admin/service/NamespacePluginService.java | 14 ++--
.../apache/shenyu/admin/service/PluginService.java | 8 ---
.../admin/service/impl/ConfigsServiceImpl.java | 77 ++++++++++++++++++++--
.../service/impl/NamespacePluginServiceImpl.java | 54 ++++++++++-----
.../admin/service/impl/PluginServiceImpl.java | 51 --------------
.../shenyu/admin/service/ConfigsServiceTest.java | 8 ++-
.../common/constant/ExportImportConstants.java | 10 +++
7 files changed, 133 insertions(+), 89 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/NamespacePluginService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/NamespacePluginService.java
index b3de7bf277..09b2164d76 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/NamespacePluginService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/NamespacePluginService.java
@@ -17,7 +17,6 @@
package org.apache.shenyu.admin.service;
-import org.apache.shenyu.admin.model.dto.PluginDTO;
import org.apache.shenyu.admin.model.dto.NamespacePluginDTO;
import org.apache.shenyu.admin.model.page.CommonPager;
import org.apache.shenyu.admin.model.query.NamespacePluginQuery;
@@ -108,11 +107,11 @@ public interface NamespacePluginService extends
PageService<NamespacePluginQuery
* @return the list
*/
List<NamespacePluginVO> listByNamespaceId(String namespaceId);
-
+
/**
* List all vo list.
*
- * @param namespaceId the namespaceId
+ * @param namespaceId the namespace id
* @return the vo list
*/
List<NamespacePluginVO> listAllData(String namespaceId);
@@ -148,10 +147,17 @@ public interface NamespacePluginService extends
PageService<NamespacePluginQuery
/**
* import plugin data.
*
+ * @param namespace the namespace
* @param pluginList the plugin data
* @return config import result
*/
- ConfigImportResult importData(List<PluginDTO> pluginList);
+ ConfigImportResult importData(String namespace, List<NamespacePluginDTO>
pluginList);
+ /**
+ * List by namespace.
+ *
+ * @param namespace the namespace
+ * @return the list
+ */
List<PluginData> listByNamespace(String namespace);
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
index 73cf6f6fb5..ba2df965b8 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
@@ -86,14 +86,6 @@ public interface PluginService extends
PageService<PluginQueryCondition, PluginV
* @return the vo list
*/
List<PluginVO> listAllData();
-
- /**
- * List all vo list.
- *
- * @param namespaceId the namespace id
- * @return the vo list
- */
- List<PluginVO> listAllDataByNamespaceId(String namespaceId);
/**
* list all not in resource.
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ConfigsServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ConfigsServiceImpl.java
index 2b6d8a2d62..bc2ea0f906 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ConfigsServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ConfigsServiceImpl.java
@@ -25,6 +25,7 @@ import org.apache.shenyu.admin.model.dto.AppAuthDTO;
import org.apache.shenyu.admin.model.dto.DiscoveryDTO;
import org.apache.shenyu.admin.model.dto.DiscoveryUpstreamDTO;
import org.apache.shenyu.admin.model.dto.MetaDataDTO;
+import org.apache.shenyu.admin.model.dto.NamespacePluginDTO;
import org.apache.shenyu.admin.model.dto.PluginDTO;
import org.apache.shenyu.admin.model.dto.RuleDTO;
import org.apache.shenyu.admin.model.dto.SelectorDTO;
@@ -35,6 +36,8 @@ import org.apache.shenyu.admin.model.vo.AppAuthVO;
import org.apache.shenyu.admin.model.vo.DiscoveryUpstreamVO;
import org.apache.shenyu.admin.model.vo.DiscoveryVO;
import org.apache.shenyu.admin.model.vo.MetaDataVO;
+import org.apache.shenyu.admin.model.vo.NamespacePluginVO;
+import org.apache.shenyu.admin.model.vo.PluginHandleVO;
import org.apache.shenyu.admin.model.vo.PluginVO;
import org.apache.shenyu.admin.model.vo.RuleVO;
import org.apache.shenyu.admin.model.vo.SelectorVO;
@@ -44,16 +47,20 @@ import org.apache.shenyu.admin.service.ConfigsService;
import org.apache.shenyu.admin.service.DiscoveryService;
import org.apache.shenyu.admin.service.DiscoveryUpstreamService;
import org.apache.shenyu.admin.service.MetaDataService;
+import org.apache.shenyu.admin.service.NamespacePluginService;
+import org.apache.shenyu.admin.service.PluginHandleService;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.ProxySelectorService;
import org.apache.shenyu.admin.service.RuleService;
import org.apache.shenyu.admin.service.SelectorService;
import org.apache.shenyu.admin.service.ShenyuDictService;
import org.apache.shenyu.admin.utils.ZipUtil;
+import org.apache.shenyu.admin.utils.ZipUtil.ZipItem;
import org.apache.shenyu.common.constant.ExportImportConstants;
import org.apache.shenyu.common.dto.ProxySelectorData;
import org.apache.shenyu.common.utils.GsonUtils;
import org.apache.shenyu.common.utils.JsonUtils;
+import org.apache.shenyu.common.utils.UUIDUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -79,6 +86,16 @@ public class ConfigsServiceImpl implements ConfigsService {
*/
private final PluginService pluginService;
+ /**
+ * The Namespace Plugin service.
+ */
+ private final NamespacePluginService namespacePluginService;
+
+ /**
+ * The Plugin Handle service.
+ */
+ private final PluginHandleService pluginHandleService;
+
/**
* The Selector service.
*/
@@ -116,6 +133,8 @@ public class ConfigsServiceImpl implements ConfigsService {
public ConfigsServiceImpl(final AppAuthService appAuthService,
final PluginService pluginService,
+ final NamespacePluginService
namespacePluginService,
+ final PluginHandleService
pluginHandleService,
final SelectorService selectorService,
final RuleService ruleService,
final MetaDataService metaDataService,
@@ -125,6 +144,8 @@ public class ConfigsServiceImpl implements ConfigsService {
final DiscoveryUpstreamService
discoveryUpstreamService) {
this.appAuthService = appAuthService;
this.pluginService = pluginService;
+ this.namespacePluginService = namespacePluginService;
+ this.pluginHandleService = pluginHandleService;
this.selectorService = selectorService;
this.ruleService = ruleService;
this.metaDataService = metaDataService;
@@ -166,7 +187,7 @@ public class ConfigsServiceImpl implements ConfigsService {
exportMetadata(namespace, zipItemList);
- exportPluginData(namespace, zipItemList);
+ exportNamespacePluginData(namespace, zipItemList);
exportSelectorData(namespace, zipItemList);
@@ -176,6 +197,8 @@ public class ConfigsServiceImpl implements ConfigsService {
exportPluginTemplateData(zipItemList);
+ exportPluginHandleData(zipItemList);
+
exportProxySelectorData(namespace, zipItemList);
exportDiscoveryData(namespace, zipItemList);
@@ -185,6 +208,13 @@ public class ConfigsServiceImpl implements ConfigsService {
return ShenyuAdminResult.success(ZipUtil.zip(zipItemList));
}
+ private void exportPluginHandleData(final List<ZipItem> zipItemList) {
+ List<PluginHandleVO> pluginHandleDataList =
pluginHandleService.listAllData();
+ if (CollectionUtils.isNotEmpty(pluginHandleDataList)) {
+ zipItemList.add(new
ZipItem(ExportImportConstants.PLUGIN_HANDLE_JSON,
JsonUtils.toJson(pluginHandleDataList)));
+ }
+ }
+
private void exportDiscoveryUpstreamData(final List<ZipUtil.ZipItem>
zipItemList) {
List<DiscoveryUpstreamVO> discoveryUpstreamList =
discoveryUpstreamService.listAllData();
if (CollectionUtils.isNotEmpty(discoveryUpstreamList)) {
@@ -272,10 +302,10 @@ public class ConfigsServiceImpl implements ConfigsService
{
}
}
- private void exportPluginData(final String namespace, final
List<ZipUtil.ZipItem> zipItemList) {
- List<PluginVO> pluginDataList =
pluginService.listAllDataByNamespaceId(namespace);
- if (CollectionUtils.isNotEmpty(pluginDataList)) {
- zipItemList.add(new
ZipUtil.ZipItem(ExportImportConstants.PLUGIN_JSON,
JsonUtils.toJson(pluginDataList)));
+ private void exportNamespacePluginData(final String namespace, final
List<ZipUtil.ZipItem> zipItemList) {
+ List<NamespacePluginVO> namespacePluginVOList =
namespacePluginService.listAllData(namespace);
+ if (CollectionUtils.isNotEmpty(namespacePluginVOList)) {
+ zipItemList.add(new
ZipUtil.ZipItem(ExportImportConstants.NAMESPACE_PLUGIN_JSON,
JsonUtils.toJson(namespacePluginVOList)));
}
}
@@ -378,8 +408,11 @@ public class ConfigsServiceImpl implements ConfigsService {
case ExportImportConstants.META_JSON:
importMetaData(namespace, result, zipItem);
break;
- case ExportImportConstants.PLUGIN_JSON:
- importPluginData(namespace, result, zipItem);
+ case ExportImportConstants.PLUGIN_TEMPLATE_JSON:
+ importPluginTemplateData(result, zipItem);
+ break;
+ case ExportImportConstants.NAMESPACE_PLUGIN_JSON:
+ importNamespacePluginData(namespace, result, zipItem);
break;
case ExportImportConstants.SELECTOR_JSON:
importSelectorData(namespace, result, zipItem);
@@ -574,6 +607,36 @@ public class ConfigsServiceImpl implements ConfigsService {
}
}
+ private void importNamespacePluginData(final String namespace, final
Map<String, Object> result, final ZipUtil.ZipItem zipItem) {
+ String pluginJson = zipItem.getItemData();
+ if (StringUtils.isNotEmpty(pluginJson)) {
+ List<NamespacePluginDTO> namespacePluginDTOS =
GsonUtils.getInstance().fromList(pluginJson, NamespacePluginDTO.class);
+ // set namespaceId
+ namespacePluginDTOS.forEach(namespacePluginDTO -> {
+ namespacePluginDTO.setNamespaceId(namespace);
+ // change id
+
namespacePluginDTO.setId(UUIDUtils.getInstance().generateShortUuid());
+ });
+ ConfigImportResult configImportResult =
namespacePluginService.importData(namespace, namespacePluginDTOS);
+ result.put(ExportImportConstants.PLUGIN_IMPORT_SUCCESS_COUNT,
configImportResult.getSuccessCount());
+ if (StringUtils.isNotEmpty(configImportResult.getFailMessage())) {
+ result.put(ExportImportConstants.PLUGIN_IMPORT_FAIL_MESSAGE,
configImportResult.getFailMessage());
+ }
+ }
+ }
+
+ private void importPluginTemplateData(final Map<String, Object> result,
final ZipUtil.ZipItem zipItem) {
+ String pluginTemplateJson = zipItem.getItemData();
+ if (StringUtils.isNotEmpty(pluginTemplateJson)) {
+ List<PluginDTO> pluginTemplateList =
GsonUtils.getInstance().fromList(pluginTemplateJson, PluginDTO.class);
+ ConfigImportResult configImportResult =
pluginService.importData(pluginTemplateList);
+ result.put(ExportImportConstants.PLUGIN_IMPORT_SUCCESS_COUNT,
configImportResult.getSuccessCount());
+ if (StringUtils.isNotEmpty(configImportResult.getFailMessage())) {
+ result.put(ExportImportConstants.PLUGIN_IMPORT_FAIL_MESSAGE,
configImportResult.getFailMessage());
+ }
+ }
+ }
+
private void importMetaData(final Map<String, Object> result, final
ZipUtil.ZipItem zipItem) {
String metaJson = zipItem.getItemData();
if (StringUtils.isNotEmpty(metaJson)) {
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
index 95903af87f..da1473016b 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
@@ -26,7 +26,6 @@ import org.apache.shenyu.admin.mapper.PluginHandleMapper;
import org.apache.shenyu.admin.mapper.PluginMapper;
import org.apache.shenyu.admin.mapper.SelectorMapper;
import org.apache.shenyu.admin.model.dto.NamespacePluginDTO;
-import org.apache.shenyu.admin.model.dto.PluginDTO;
import org.apache.shenyu.admin.model.entity.NamespacePluginRelDO;
import org.apache.shenyu.admin.model.entity.PluginDO;
import org.apache.shenyu.admin.model.entity.PluginHandleDO;
@@ -36,10 +35,8 @@ import org.apache.shenyu.admin.model.page.PageResultUtils;
import org.apache.shenyu.admin.model.query.NamespacePluginQuery;
import org.apache.shenyu.admin.model.result.ConfigImportResult;
import org.apache.shenyu.admin.model.vo.NamespacePluginVO;
-import org.apache.shenyu.admin.model.vo.PluginHandleVO;
import org.apache.shenyu.admin.model.vo.PluginSnapshotVO;
import org.apache.shenyu.admin.service.NamespacePluginService;
-import org.apache.shenyu.admin.service.PluginHandleService;
import org.apache.shenyu.admin.service.publish.NamespacePluginEventPublisher;
import org.apache.shenyu.admin.transfer.PluginTransfer;
import org.apache.shenyu.admin.utils.ShenyuResultMessage;
@@ -52,7 +49,6 @@ import
org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -61,8 +57,6 @@ public class NamespacePluginServiceImpl implements
NamespacePluginService {
private final NamespacePluginRelMapper namespacePluginRelMapper;
- private final PluginHandleService pluginHandleService;
-
private final NamespacePluginEventPublisher namespacePluginEventPublisher;
private final PluginMapper pluginMapper;
@@ -72,13 +66,11 @@ public class NamespacePluginServiceImpl implements
NamespacePluginService {
private final PluginHandleMapper pluginHandleMapper;
public NamespacePluginServiceImpl(final NamespacePluginRelMapper
namespacePluginRelMapper,
- final PluginHandleService
pluginHandleService,
final NamespacePluginEventPublisher
namespacePluginEventPublisher,
final PluginMapper pluginMapper,
final SelectorMapper selectorMapper,
final PluginHandleMapper
pluginHandleMapper) {
this.namespacePluginRelMapper = namespacePluginRelMapper;
- this.pluginHandleService = pluginHandleService;
this.namespacePluginEventPublisher = namespacePluginEventPublisher;
this.pluginMapper = pluginMapper;
this.selectorMapper = selectorMapper;
@@ -158,14 +150,11 @@ public class NamespacePluginServiceImpl implements
NamespacePluginService {
@Override
public List<NamespacePluginVO> listAllData(final String namespaceId) {
- Map<String, List<PluginHandleVO>> pluginHandleMap =
pluginHandleService.listAllData().stream().collect(Collectors.groupingBy(PluginHandleVO::getPluginId));
-
- return
namespacePluginRelMapper.selectAllByNamespaceId(namespaceId).stream().filter(Objects::nonNull).peek(namespacePluginVO
-> {
- List<PluginHandleVO> pluginHandleList =
Optional.ofNullable(pluginHandleMap.get(namespacePluginVO.getPluginId())).orElse(Lists.newArrayList()).stream()
- // to make less volume of export data
- .peek(x ->
x.setDictOptions(null)).collect(Collectors.toList());
- namespacePluginVO.setPluginHandleList(pluginHandleList);
- }).collect(Collectors.toList());
+ List<NamespacePluginVO> namespacePluginVOList =
namespacePluginRelMapper.selectByNamespaceId(namespaceId);
+ if (CollectionUtils.isEmpty(namespacePluginVOList)) {
+ return Lists.newArrayList();
+ }
+ return namespacePluginVOList;
}
@Override
@@ -243,8 +232,37 @@ public class NamespacePluginServiceImpl implements
NamespacePluginService {
}
@Override
- public ConfigImportResult importData(final List<PluginDTO> pluginList) {
- return null;
+ public ConfigImportResult importData(final String namespace, final
List<NamespacePluginDTO> namespacePluginList) {
+ if (CollectionUtils.isEmpty(namespacePluginList)) {
+ return ConfigImportResult.success();
+ }
+ Map<String, NamespacePluginRelDO> existPluginMap =
namespacePluginRelMapper.listByNamespaceId(namespace)
+ .stream()
+ .filter(Objects::nonNull)
+ .collect(Collectors.toMap(NamespacePluginRelDO::getPluginId, x
-> x));
+ StringBuilder errorMsgBuilder = new StringBuilder();
+ int successCount = 0;
+ for (NamespacePluginDTO namespacePluginDTO : namespacePluginList) {
+ String pluginId = namespacePluginDTO.getPluginId();
+ // check plugin base info
+ if (existPluginMap.containsKey(pluginId)) {
+ errorMsgBuilder
+ .append(pluginId)
+ .append(",");
+ } else {
+ NamespacePluginRelDO namespacePluginRelDO =
NamespacePluginRelDO.buildNamespacePluginRelDO(namespacePluginDTO);
+ if
(namespacePluginRelMapper.insertSelective(namespacePluginRelDO) > 0) {
+ // publish create event. init plugin data
+ successCount++;
+ }
+ }
+ }
+ if (StringUtils.isNotEmpty(errorMsgBuilder)) {
+ errorMsgBuilder.setLength(errorMsgBuilder.length() - 1);
+ return ConfigImportResult
+ .fail(successCount, "import fail plugin: " +
errorMsgBuilder);
+ }
+ return ConfigImportResult.success(successCount);
}
@Override
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
index 034662438a..d11abe454d 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
@@ -17,7 +17,6 @@
package org.apache.shenyu.admin.service.impl;
-import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
@@ -35,7 +34,6 @@ import org.apache.shenyu.admin.model.page.PageResultUtils;
import org.apache.shenyu.admin.model.query.PluginQuery;
import org.apache.shenyu.admin.model.query.PluginQueryCondition;
import org.apache.shenyu.admin.model.result.ConfigImportResult;
-import org.apache.shenyu.admin.model.vo.PluginHandleVO;
import org.apache.shenyu.admin.model.vo.PluginSnapshotVO;
import org.apache.shenyu.admin.model.vo.PluginVO;
import org.apache.shenyu.admin.service.PluginHandleService;
@@ -212,43 +210,7 @@ public class PluginServiceImpl implements PluginService {
@Override
public List<PluginVO> listAllData() {
- // plugin handle
- Map<String, List<PluginHandleVO>> pluginHandleMap =
pluginHandleService.listAllData()
- .stream()
- .collect(Collectors.groupingBy(PluginHandleVO::getPluginId));
-
return pluginMapper.selectAll()
- .stream()
- .filter(Objects::nonNull)
- .map(pluginDO -> {
- PluginVO exportVO = PluginVO.buildPluginVO(pluginDO);
- List<PluginHandleVO> pluginHandleList = Optional
-
.ofNullable(pluginHandleMap.getOrDefault(exportVO.getId(),
Lists.newArrayList()))
- .orElse(Lists.newArrayList())
- .stream()
- // to make less volume of export data
- .peek(x -> x.setDictOptions(null))
- .collect(Collectors.toList());
- exportVO.setPluginHandleList(pluginHandleList);
- return exportVO;
- }).collect(Collectors.toList());
- }
-
- @Override
- public List<PluginVO> listAllDataByNamespaceId(final String namespaceId) {
- List<NamespacePluginRelDO> pluginRelDOList =
namespacePluginRelMapper.listByNamespaceId(namespaceId);
- if (CollectionUtils.isEmpty(pluginRelDOList)) {
- return Lists.newArrayList();
- }
- Set<String> pluginIdSet =
pluginRelDOList.stream().map(NamespacePluginRelDO::getPluginId).collect(Collectors.toSet());
-
- List<PluginDO> pluginDOList =
pluginMapper.selectByIds(Lists.newArrayList(pluginIdSet));
-
- if (CollectionUtils.isEmpty(pluginDOList)) {
- return Lists.newArrayList();
- }
-
- return pluginDOList
.stream()
.filter(Objects::nonNull)
.map(PluginVO::buildPluginVO).collect(Collectors.toList());
@@ -301,31 +263,18 @@ public class PluginServiceImpl implements PluginService {
int successCount = 0;
for (PluginDTO pluginDTO : pluginList) {
String pluginName = pluginDTO.getName();
- String pluginId;
// check plugin base info
if (existPluginMap.containsKey(pluginName)) {
- PluginDO existPlugin = existPluginMap.get(pluginName);
- pluginId = existPlugin.getId();
errorMsgBuilder
.append(pluginName)
.append(",");
} else {
PluginDO pluginDO = PluginDO.buildPluginDO(pluginDTO);
- pluginId = pluginDO.getId();
if (pluginMapper.insertSelective(pluginDO) > 0) {
// publish create event. init plugin data
successCount++;
}
}
- // check and import plugin handle
- List<PluginHandleDTO> pluginHandleList =
pluginDTO.getPluginHandleList();
- if (CollectionUtils.isNotEmpty(pluginHandleList)) {
- pluginHandleService
- .importData(pluginHandleList
- .stream()
- .peek(x -> x.setPluginId(pluginId))
- .collect(Collectors.toList()));
- }
}
if (StringUtils.isNotEmpty(errorMsgBuilder)) {
errorMsgBuilder.setLength(errorMsgBuilder.length() - 1);
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ConfigsServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ConfigsServiceTest.java
index 87a3090f83..7348ab7928 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ConfigsServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/ConfigsServiceTest.java
@@ -54,6 +54,12 @@ public final class ConfigsServiceTest {
@Mock
private PluginService pluginService;
+ @Mock
+ private NamespacePluginService namespacePluginService;
+
+ @Mock
+ private PluginHandleService pluginHandleService;
+
@Mock
private RuleService ruleService;
@@ -77,7 +83,7 @@ public final class ConfigsServiceTest {
@BeforeEach
public void setUp() {
- configsService = new ConfigsServiceImpl(appAuthService, pluginService,
selectorService, ruleService,
+ configsService = new ConfigsServiceImpl(appAuthService, pluginService,
namespacePluginService, pluginHandleService, selectorService, ruleService,
metaDataService, shenyuDictService, proxySelectorService,
discoveryService, discoveryUpstreamService);
}
diff --git
a/shenyu-common/src/main/java/org/apache/shenyu/common/constant/ExportImportConstants.java
b/shenyu-common/src/main/java/org/apache/shenyu/common/constant/ExportImportConstants.java
index b396005fec..5d8022e93c 100644
---
a/shenyu-common/src/main/java/org/apache/shenyu/common/constant/ExportImportConstants.java
+++
b/shenyu-common/src/main/java/org/apache/shenyu/common/constant/ExportImportConstants.java
@@ -41,10 +41,20 @@ public final class ExportImportConstants {
*/
public static final String PLUGIN_JSON = "plugin.json";
+ /**
+ * namespace plugin json config name.
+ */
+ public static final String NAMESPACE_PLUGIN_JSON = "namespace_plugin.json";
+
/**
* plugin template json config name.
*/
public static final String PLUGIN_TEMPLATE_JSON = "plugin_template.json";
+
+ /**
+ * plugin handle json config name.
+ */
+ public static final String PLUGIN_HANDLE_JSON = "proxy_handle.json";
/**
* selector json config name.