gitextract_9c5hxuql/ ├── .asf.yaml ├── .devcontainer/ │ └── devcontainer.json ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ ├── feature-request.yml │ │ ├── question.yml │ │ ├── task.yml │ │ └── volunteer.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── activie-committers.yml │ ├── filters.yml │ └── workflows/ │ ├── auto-notify.yml │ ├── ci.yml │ ├── codeql-analysis.yml │ ├── docker-publish-dockerhub.yml │ ├── docker-publish.yml │ ├── e2e-k8s.yml │ ├── integrated-test-k8s-ingress.yml │ ├── integrated-test.yml │ ├── issue-label.yml │ └── k8s-examples-http.yml ├── .gitignore ├── .gitpod.Dockerfile ├── .gitpod.yml ├── .idea/ │ └── vcs.xml ├── .licenserc.yaml ├── .mvn/ │ └── wrapper/ │ └── maven-wrapper.properties ├── .prowlabels.yaml ├── LICENSE ├── MATURITY.md ├── Makefile ├── NOTICE ├── README.md ├── RELEASE-NOTES.md ├── SECURITY.md ├── actions/ │ ├── paths-filter/ │ │ ├── action.yml │ │ └── dist/ │ │ └── index.js │ └── scripts/ │ └── issue-manager.sh ├── changelog.sh ├── db/ │ ├── init/ │ │ ├── init-guide.md │ │ ├── mysql/ │ │ │ └── schema.sql │ │ ├── ob/ │ │ │ └── schema.sql │ │ ├── og/ │ │ │ └── create-table.sql │ │ ├── oracle/ │ │ │ └── schema.sql │ │ └── pg/ │ │ ├── create-database.sql │ │ └── create-table.sql │ └── upgrade/ │ ├── 2.4.1-upgrade-2.4.2-mysql.sql │ ├── 2.4.1-upgrade-2.4.2-pg.sql │ ├── 2.4.2-upgrade-2.4.3-mysql.sql │ ├── 2.4.2-upgrade-2.4.3-pg.sql │ ├── 2.4.3-upgrade-2.5.0-mysql.sql │ ├── 2.4.3-upgrade-2.5.0-pg.sql │ ├── 2.5.0-upgrade-2.5.1-mysql.sql │ ├── 2.5.0-upgrade-2.5.1-oracle.sql │ ├── 2.5.0-upgrade-2.5.1-pg.sql │ ├── 2.5.1-upgrade-2.6.0-mysql.sql │ ├── 2.5.1-upgrade-2.6.0-oracle.sql │ ├── 2.5.1-upgrade-2.6.0-pg.sql │ ├── 2.6.0-upgrade-2.6.1-mysql.sql │ ├── 2.6.0-upgrade-2.6.1-og.sql │ ├── 2.6.0-upgrade-2.6.1-oracle.sql │ ├── 2.6.0-upgrade-2.6.1-pg.sql │ ├── 2.6.1-upgrade-2.7.0-mysql.sql │ ├── 2.6.1-upgrade-2.7.0-og.sql │ ├── 2.6.1-upgrade-2.7.0-oracle.sql │ ├── 2.6.1-upgrade-2.7.0-pg.sql │ ├── 2.7.0-upgrade-2.7.1-mysql.sql │ ├── 2.7.0-upgrade-2.7.1-ob.sql │ ├── 2.7.0-upgrade-2.7.1-og.sql │ ├── 2.7.0-upgrade-2.7.1-oracle.sql │ ├── 2.7.0-upgrade-2.7.1-pg.sql │ └── upgrade-guide.md ├── mvnw ├── mvnw.cmd ├── pom.xml ├── script/ │ ├── checkstyle-header.txt │ └── shenyu_checkstyle.xml ├── shenyu-admin/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── http/ │ │ ├── http-debug-app-auth-controller-api.http │ │ ├── http-debug-dashboard-user-controller-api.http │ │ ├── http-debug-data-permission-controller-api.http │ │ ├── http-debug-dict-controller-api.http │ │ ├── http-debug-meta-data-controller-api.http │ │ ├── http-debug-operation-record-log-controller-api.http │ │ ├── http-debug-platform-controller-api.http │ │ ├── http-debug-plugin-controller-api.http │ │ ├── http-debug-plugin-handle-controller-api.http │ │ ├── http-debug-registry-config-controller-api.http │ │ ├── http-debug-registry-controller-api.http │ │ ├── http-debug-resource-controller-api.http │ │ ├── http-debug-role-controller-api.http │ │ ├── http-debug-rule-controller-api.http │ │ └── http-debug-selector-controller-api.http │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── admin/ │ │ │ ├── ShenyuAdminBootstrap.java │ │ │ ├── aspect/ │ │ │ │ ├── DataPermissionAspect.java │ │ │ │ ├── PageableAspect.java │ │ │ │ ├── annotation/ │ │ │ │ │ ├── DataPermission.java │ │ │ │ │ ├── Pageable.java │ │ │ │ │ └── RestApi.java │ │ │ │ └── controller/ │ │ │ │ ├── ControllerMethodAdvice.java │ │ │ │ ├── PrintLogControllerMethodAdviceImpl.java │ │ │ │ ├── RestControllerAspect.java │ │ │ │ └── SuperAdminPasswordSafeAdvice.java │ │ │ ├── config/ │ │ │ │ ├── ClusterConfiguration.java │ │ │ │ ├── ClusterJdbcConfiguration.java │ │ │ │ ├── ClusterZookeeperConfiguration.java │ │ │ │ ├── DataBaseConfiguration.java │ │ │ │ ├── DiscoveryConfiguration.java │ │ │ │ ├── HttpLongPollingSyncConfiguration.java │ │ │ │ ├── HttpUtilsConfiguration.java │ │ │ │ ├── KubernetesConfiguration.java │ │ │ │ ├── LdapConfiguration.java │ │ │ │ ├── MapperConfig.java │ │ │ │ ├── RegisterCenterConfiguration.java │ │ │ │ ├── ShenyuAdminConfiguration.java │ │ │ │ ├── StandaloneConfiguration.java │ │ │ │ ├── SwaggerConfiguration.java │ │ │ │ ├── WebConfiguration.java │ │ │ │ ├── WebSocketSyncConfiguration.java │ │ │ │ └── properties/ │ │ │ │ ├── ClusterProperties.java │ │ │ │ ├── ClusterZookeeperProperties.java │ │ │ │ ├── DashboardProperties.java │ │ │ │ ├── DataBaseProperties.java │ │ │ │ ├── DeploymentProperties.java │ │ │ │ ├── HttpSyncProperties.java │ │ │ │ ├── JwtProperties.java │ │ │ │ ├── LdapProperties.java │ │ │ │ ├── SecretProperties.java │ │ │ │ ├── ShiroProperties.java │ │ │ │ └── WebsocketSyncProperties.java │ │ │ ├── controller/ │ │ │ │ ├── AiProxyApiKeyController.java │ │ │ │ ├── AlertReceiverController.java │ │ │ │ ├── AlertReportController.java │ │ │ │ ├── ApiController.java │ │ │ │ ├── ApiDocController.java │ │ │ │ ├── AppAuthController.java │ │ │ │ ├── ConfigController.java │ │ │ │ ├── ConfigsExportImportController.java │ │ │ │ ├── DashboardUserController.java │ │ │ │ ├── DataPermissionController.java │ │ │ │ ├── DetailController.java │ │ │ │ ├── DiscoveryController.java │ │ │ │ ├── DiscoveryUpstreamController.java │ │ │ │ ├── FieldController.java │ │ │ │ ├── IndexController.java │ │ │ │ ├── InstanceController.java │ │ │ │ ├── MetaDataController.java │ │ │ │ ├── MockRequestRecordController.java │ │ │ │ ├── NamespaceController.java │ │ │ │ ├── NamespacePluginController.java │ │ │ │ ├── OperationRecordLogController.java │ │ │ │ ├── PagedController.java │ │ │ │ ├── PermissionController.java │ │ │ │ ├── PlatformController.java │ │ │ │ ├── PluginController.java │ │ │ │ ├── PluginHandleController.java │ │ │ │ ├── ProxySelectorController.java │ │ │ │ ├── RegistryController.java │ │ │ │ ├── ResourceController.java │ │ │ │ ├── RoleController.java │ │ │ │ ├── RuleController.java │ │ │ │ ├── SandboxController.java │ │ │ │ ├── ScalePolicyController.java │ │ │ │ ├── ScaleRlueController.java │ │ │ │ ├── SelectorController.java │ │ │ │ ├── ShenyuClientHttpRegistryController.java │ │ │ │ ├── ShenyuDictController.java │ │ │ │ ├── SwaggerImportController.java │ │ │ │ ├── TagController.java │ │ │ │ └── TagRelationController.java │ │ │ ├── discovery/ │ │ │ │ ├── APDiscoveryProcessor.java │ │ │ │ ├── AbstractDiscoveryProcessor.java │ │ │ │ ├── DefaultDiscoveryProcessor.java │ │ │ │ ├── DiscoveryDataChangedEventSyncListener.java │ │ │ │ ├── DiscoveryLevel.java │ │ │ │ ├── DiscoveryMode.java │ │ │ │ ├── DiscoveryProcessor.java │ │ │ │ ├── DiscoveryProcessorHolder.java │ │ │ │ ├── LocalDiscoveryProcessor.java │ │ │ │ ├── listener/ │ │ │ │ │ ├── DataChangedEventListener.java │ │ │ │ │ └── DiscoveryDataChangedEvent.java │ │ │ │ └── parse/ │ │ │ │ ├── CustomDiscoveryUpstreamParser.java │ │ │ │ └── KeyValueParser.java │ │ │ ├── disruptor/ │ │ │ │ ├── RegisterClientServerDisruptorPublisher.java │ │ │ │ ├── executor/ │ │ │ │ │ └── RegisterServerConsumerExecutor.java │ │ │ │ └── subscriber/ │ │ │ │ ├── ApiDocExecutorSubscriber.java │ │ │ │ ├── DiscoveryConfigRegisterExecutorSubscriber.java │ │ │ │ ├── McpToolsRegisterExecutorSubscriber.java │ │ │ │ ├── MetadataExecutorSubscriber.java │ │ │ │ └── URIRegisterExecutorSubscriber.java │ │ │ ├── exception/ │ │ │ │ ├── ExceptionHandlers.java │ │ │ │ ├── I18nException.java │ │ │ │ ├── ResourceNotFoundException.java │ │ │ │ ├── ShenyuAdminException.java │ │ │ │ ├── ValidFailException.java │ │ │ │ └── WebI18nException.java │ │ │ ├── listener/ │ │ │ │ ├── AbstractDataChangedListener.java │ │ │ │ ├── AiProxySelectorResolverInvalidator.java │ │ │ │ ├── ApplicationStartListener.java │ │ │ │ ├── ConfigDataCache.java │ │ │ │ ├── DataChangedEvent.java │ │ │ │ ├── DataChangedEventDispatcher.java │ │ │ │ ├── RecordLogDataChangedAdapterListener.java │ │ │ │ ├── http/ │ │ │ │ │ └── HttpLongPollingDataChangedListener.java │ │ │ │ └── websocket/ │ │ │ │ ├── WebsocketCollector.java │ │ │ │ ├── WebsocketConfigurator.java │ │ │ │ ├── WebsocketDataChangedListener.java │ │ │ │ └── WebsocketListener.java │ │ │ ├── lock/ │ │ │ │ ├── RegisterExecutionLock.java │ │ │ │ ├── RegisterExecutionRepository.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── ForUpdateBackedRegisterExecutionLock.java │ │ │ │ │ └── PlatformTransactionRegisterExecutionRepository.java │ │ │ │ └── util/ │ │ │ │ └── RegisterTransactionUtil.java │ │ │ ├── mapper/ │ │ │ │ ├── AiProxyApiKeyMapper.java │ │ │ │ ├── AlertReceiverMapper.java │ │ │ │ ├── ApiMapper.java │ │ │ │ ├── ApiRuleRelationMapper.java │ │ │ │ ├── AppAuthMapper.java │ │ │ │ ├── AuthParamMapper.java │ │ │ │ ├── AuthPathMapper.java │ │ │ │ ├── DashboardUserMapper.java │ │ │ │ ├── DataPermissionMapper.java │ │ │ │ ├── DetailMapper.java │ │ │ │ ├── DiscoveryHandlerMapper.java │ │ │ │ ├── DiscoveryMapper.java │ │ │ │ ├── DiscoveryRelMapper.java │ │ │ │ ├── DiscoveryUpstreamMapper.java │ │ │ │ ├── FieldMapper.java │ │ │ │ ├── InstanceInfoMapper.java │ │ │ │ ├── MetaDataMapper.java │ │ │ │ ├── MockRequestRecordMapper.java │ │ │ │ ├── ModelMapper.java │ │ │ │ ├── NamespaceMapper.java │ │ │ │ ├── NamespacePluginRelMapper.java │ │ │ │ ├── NamespaceUserRelMapper.java │ │ │ │ ├── OperationRecordLogMapper.java │ │ │ │ ├── ParameterMapper.java │ │ │ │ ├── PermissionMapper.java │ │ │ │ ├── PluginHandleMapper.java │ │ │ │ ├── PluginMapper.java │ │ │ │ ├── ProxySelectorMapper.java │ │ │ │ ├── RegistryMapper.java │ │ │ │ ├── ResourceMapper.java │ │ │ │ ├── RoleMapper.java │ │ │ │ ├── RuleConditionMapper.java │ │ │ │ ├── RuleMapper.java │ │ │ │ ├── ScaleHistoryMapper.java │ │ │ │ ├── ScalePolicyMapper.java │ │ │ │ ├── ScaleRuleMapper.java │ │ │ │ ├── SelectorConditionMapper.java │ │ │ │ ├── SelectorMapper.java │ │ │ │ ├── ShenyuDictMapper.java │ │ │ │ ├── TagMapper.java │ │ │ │ ├── TagRelationMapper.java │ │ │ │ └── UserRoleMapper.java │ │ │ ├── mode/ │ │ │ │ ├── ShenyuRunningModeService.java │ │ │ │ ├── cluster/ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ └── ClusterForwardFilter.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── jdbc/ │ │ │ │ │ │ │ ├── ClusterSelectMasterServiceJdbcImpl.java │ │ │ │ │ │ │ └── mapper/ │ │ │ │ │ │ │ └── ClusterMasterMapper.java │ │ │ │ │ │ └── zookeeper/ │ │ │ │ │ │ ├── ClusterSelectMasterServiceZookeeperImpl.java │ │ │ │ │ │ ├── ClusterZookeeperClient.java │ │ │ │ │ │ └── ClusterZookeeperConfig.java │ │ │ │ │ └── service/ │ │ │ │ │ ├── ClusterSelectMasterService.java │ │ │ │ │ └── ShenyuClusterService.java │ │ │ │ └── standalone/ │ │ │ │ └── ShenyuStandaloneService.java │ │ │ ├── model/ │ │ │ │ ├── bean/ │ │ │ │ │ ├── CustomCode.java │ │ │ │ │ ├── DocInfo.java │ │ │ │ │ ├── DocItem.java │ │ │ │ │ ├── DocModule.java │ │ │ │ │ ├── DocParameter.java │ │ │ │ │ └── UpstreamInstance.java │ │ │ │ ├── constant/ │ │ │ │ │ └── RegConstant.java │ │ │ │ ├── custom/ │ │ │ │ │ └── UserInfo.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── ApiDTO.java │ │ │ │ │ ├── AppAuthDTO.java │ │ │ │ │ ├── AuthApplyDTO.java │ │ │ │ │ ├── AuthParamDTO.java │ │ │ │ │ ├── AuthPathApplyDTO.java │ │ │ │ │ ├── AuthPathDTO.java │ │ │ │ │ ├── AuthPathWarpDTO.java │ │ │ │ │ ├── BatchCommonDTO.java │ │ │ │ │ ├── BatchIdsDTO.java │ │ │ │ │ ├── BatchNamespaceCommonDTO.java │ │ │ │ │ ├── ClusterMasterDTO.java │ │ │ │ │ ├── CreateResourceDTO.java │ │ │ │ │ ├── DashboardUserDTO.java │ │ │ │ │ ├── DashboardUserModifyPasswordDTO.java │ │ │ │ │ ├── DataPermissionDTO.java │ │ │ │ │ ├── DetailDTO.java │ │ │ │ │ ├── DiscoveryDTO.java │ │ │ │ │ ├── DiscoveryHandlerDTO.java │ │ │ │ │ ├── DiscoveryRelDTO.java │ │ │ │ │ ├── DiscoveryUpstreamDTO.java │ │ │ │ │ ├── FieldDTO.java │ │ │ │ │ ├── MetaDataDTO.java │ │ │ │ │ ├── MockRequestRecordDTO.java │ │ │ │ │ ├── NamespaceDTO.java │ │ │ │ │ ├── NamespacePluginDTO.java │ │ │ │ │ ├── NamespaceSyncDTO.java │ │ │ │ │ ├── PermissionDTO.java │ │ │ │ │ ├── PluginDTO.java │ │ │ │ │ ├── PluginHandleDTO.java │ │ │ │ │ ├── ProxyApiKeyDTO.java │ │ │ │ │ ├── ProxyGatewayDTO.java │ │ │ │ │ ├── ProxySelectorAddDTO.java │ │ │ │ │ ├── ProxySelectorDTO.java │ │ │ │ │ ├── RegistryDTO.java │ │ │ │ │ ├── ResourceDTO.java │ │ │ │ │ ├── RoleDTO.java │ │ │ │ │ ├── RuleConditionDTO.java │ │ │ │ │ ├── RuleDTO.java │ │ │ │ │ ├── ScalePolicyDTO.java │ │ │ │ │ ├── ScaleRuleDTO.java │ │ │ │ │ ├── SelectorConditionDTO.java │ │ │ │ │ ├── SelectorDTO.java │ │ │ │ │ ├── ShenyuDictDTO.java │ │ │ │ │ ├── SwaggerImportRequest.java │ │ │ │ │ ├── TagDTO.java │ │ │ │ │ ├── TagRelationDTO.java │ │ │ │ │ └── UserRoleDTO.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── AlertReceiverDO.java │ │ │ │ │ ├── ApiDO.java │ │ │ │ │ ├── ApiRuleRelationDO.java │ │ │ │ │ ├── AppAuthDO.java │ │ │ │ │ ├── AuthParamDO.java │ │ │ │ │ ├── AuthPathDO.java │ │ │ │ │ ├── BaseDO.java │ │ │ │ │ ├── ClusterMasterDO.java │ │ │ │ │ ├── DashboardUserDO.java │ │ │ │ │ ├── DataPermissionDO.java │ │ │ │ │ ├── DetailDO.java │ │ │ │ │ ├── DiscoveryDO.java │ │ │ │ │ ├── DiscoveryHandlerDO.java │ │ │ │ │ ├── DiscoveryRelDO.java │ │ │ │ │ ├── DiscoveryUpstreamDO.java │ │ │ │ │ ├── FieldDO.java │ │ │ │ │ ├── InstanceInfoDO.java │ │ │ │ │ ├── MetaDataDO.java │ │ │ │ │ ├── MockRequestRecordDO.java │ │ │ │ │ ├── ModelDO.java │ │ │ │ │ ├── NamespaceDO.java │ │ │ │ │ ├── NamespacePluginRelDO.java │ │ │ │ │ ├── NamespaceUserRelDO.java │ │ │ │ │ ├── OperationRecordLog.java │ │ │ │ │ ├── ParameterDO.java │ │ │ │ │ ├── PermissionDO.java │ │ │ │ │ ├── PluginDO.java │ │ │ │ │ ├── PluginHandleDO.java │ │ │ │ │ ├── ProxyApiKeyDO.java │ │ │ │ │ ├── ProxySelectorDO.java │ │ │ │ │ ├── RegistryDO.java │ │ │ │ │ ├── ResourceDO.java │ │ │ │ │ ├── RoleDO.java │ │ │ │ │ ├── RuleConditionDO.java │ │ │ │ │ ├── RuleDO.java │ │ │ │ │ ├── ScaleHistoryDO.java │ │ │ │ │ ├── ScalePolicyDO.java │ │ │ │ │ ├── ScaleRuleDO.java │ │ │ │ │ ├── SelectorConditionDO.java │ │ │ │ │ ├── SelectorDO.java │ │ │ │ │ ├── ShenyuDictDO.java │ │ │ │ │ ├── TagDO.java │ │ │ │ │ ├── TagRelationDO.java │ │ │ │ │ └── UserRoleDO.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── DiscoveryTypeEnum.java │ │ │ │ │ └── EventTypeEnum.java │ │ │ │ ├── event/ │ │ │ │ │ ├── AdminDataModelChangedEvent.java │ │ │ │ │ ├── BatchChangedEvent.java │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── BatchDictChangedEvent.java │ │ │ │ │ │ ├── BatchDictDeletedEvent.java │ │ │ │ │ │ ├── DictChangedEvent.java │ │ │ │ │ │ ├── DictCreatedEvent.java │ │ │ │ │ │ └── DictUpdatedEvent.java │ │ │ │ │ ├── discovery/ │ │ │ │ │ │ └── DiscoveryStreamUpdatedEvent.java │ │ │ │ │ ├── handle/ │ │ │ │ │ │ ├── BatchPluginHandleChangedEvent.java │ │ │ │ │ │ └── PluginHandleChangedEvent.java │ │ │ │ │ ├── instance/ │ │ │ │ │ │ └── InstanceInfoReportEvent.java │ │ │ │ │ ├── metadata/ │ │ │ │ │ │ ├── BatchMetaDataChangedEvent.java │ │ │ │ │ │ ├── BatchMetaDataDeletedEvent.java │ │ │ │ │ │ ├── MetaDataChangedEvent.java │ │ │ │ │ │ ├── MetaDataCreatedEvent.java │ │ │ │ │ │ └── MetadataUpdatedEvent.java │ │ │ │ │ ├── namespace/ │ │ │ │ │ │ └── NamespaceCreatedEvent.java │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ ├── BatchNamespacePluginChangedEvent.java │ │ │ │ │ │ ├── BatchNamespacePluginDeletedEvent.java │ │ │ │ │ │ ├── BatchPluginChangedEvent.java │ │ │ │ │ │ ├── BatchPluginDeletedEvent.java │ │ │ │ │ │ ├── NamespacePluginChangedEvent.java │ │ │ │ │ │ ├── NamespacePluginCreatedEvent.java │ │ │ │ │ │ ├── PluginChangedEvent.java │ │ │ │ │ │ └── PluginCreatedEvent.java │ │ │ │ │ ├── resource/ │ │ │ │ │ │ ├── BatchResourceCreatedEvent.java │ │ │ │ │ │ ├── BatchResourceDeletedEvent.java │ │ │ │ │ │ ├── ResourceChangedEvent.java │ │ │ │ │ │ └── ResourceCreatedEvent.java │ │ │ │ │ ├── role/ │ │ │ │ │ │ ├── BatchRoleDeletedEvent.java │ │ │ │ │ │ ├── RoleChangedEvent.java │ │ │ │ │ │ ├── RoleCreatedEvent.java │ │ │ │ │ │ └── RoleUpdatedEvent.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── BatchRuleDeletedEvent.java │ │ │ │ │ │ ├── RuleChangedEvent.java │ │ │ │ │ │ ├── RuleCreatedEvent.java │ │ │ │ │ │ └── RuleUpdatedEvent.java │ │ │ │ │ ├── selector/ │ │ │ │ │ │ ├── BatchSelectorDeletedEvent.java │ │ │ │ │ │ ├── SelectorChangedEvent.java │ │ │ │ │ │ ├── SelectorCreatedEvent.java │ │ │ │ │ │ └── SelectorUpdatedEvent.java │ │ │ │ │ └── user/ │ │ │ │ │ ├── BatchUserDeletedEvent.java │ │ │ │ │ ├── UserChangedEvent.java │ │ │ │ │ ├── UserCreatedEvent.java │ │ │ │ │ └── UserUpdatedEvent.java │ │ │ │ ├── page/ │ │ │ │ │ ├── CommonPager.java │ │ │ │ │ ├── PageCondition.java │ │ │ │ │ ├── PageParameter.java │ │ │ │ │ ├── PageResultUtils.java │ │ │ │ │ └── condition/ │ │ │ │ │ ├── BaseExcludedSearchCondition.java │ │ │ │ │ ├── SearchCondition.java │ │ │ │ │ └── SwitchCondition.java │ │ │ │ ├── query/ │ │ │ │ │ ├── AlertReceiverQuery.java │ │ │ │ │ ├── ApiQuery.java │ │ │ │ │ ├── AppAuthQuery.java │ │ │ │ │ ├── DashboardUserQuery.java │ │ │ │ │ ├── DataPermissionQuery.java │ │ │ │ │ ├── DetailQuery.java │ │ │ │ │ ├── FieldQuery.java │ │ │ │ │ ├── FilterQuery.java │ │ │ │ │ ├── InstanceQuery.java │ │ │ │ │ ├── InstanceQueryCondition.java │ │ │ │ │ ├── MetaDataQuery.java │ │ │ │ │ ├── MockRequestRecordQuery.java │ │ │ │ │ ├── NamespacePluginQuery.java │ │ │ │ │ ├── NamespacePluginQueryCondition.java │ │ │ │ │ ├── NamespaceQuery.java │ │ │ │ │ ├── NamespaceUserQuery.java │ │ │ │ │ ├── PermissionQuery.java │ │ │ │ │ ├── PluginHandleQuery.java │ │ │ │ │ ├── PluginQuery.java │ │ │ │ │ ├── PluginQueryCondition.java │ │ │ │ │ ├── ProxyApiKeyQuery.java │ │ │ │ │ ├── ProxySelectorQuery.java │ │ │ │ │ ├── RecordLogQueryCondition.java │ │ │ │ │ ├── RegistryQuery.java │ │ │ │ │ ├── ResourceQuery.java │ │ │ │ │ ├── RoleQuery.java │ │ │ │ │ ├── RuleConditionQuery.java │ │ │ │ │ ├── RuleQuery.java │ │ │ │ │ ├── RuleQueryCondition.java │ │ │ │ │ ├── ScaleRuleQuery.java │ │ │ │ │ ├── SelectorConditionQuery.java │ │ │ │ │ ├── SelectorQuery.java │ │ │ │ │ ├── SelectorQueryCondition.java │ │ │ │ │ ├── ShenyuDictQuery.java │ │ │ │ │ ├── TagQuery.java │ │ │ │ │ └── TagRelationQuery.java │ │ │ │ ├── result/ │ │ │ │ │ ├── AdminResult.java │ │ │ │ │ ├── ConfigImportResult.java │ │ │ │ │ └── ShenyuAdminResult.java │ │ │ │ └── vo/ │ │ │ │ ├── AlertTemplateVO.java │ │ │ │ ├── ApiVO.java │ │ │ │ ├── AppAuthVO.java │ │ │ │ ├── AuthParamVO.java │ │ │ │ ├── AuthPathVO.java │ │ │ │ ├── DashboardUserEditVO.java │ │ │ │ ├── DashboardUserVO.java │ │ │ │ ├── DataPermissionPageVO.java │ │ │ │ ├── DetailVO.java │ │ │ │ ├── DiscoveryHandlerVO.java │ │ │ │ ├── DiscoveryRelVO.java │ │ │ │ ├── DiscoveryUpstreamVO.java │ │ │ │ ├── DiscoveryVO.java │ │ │ │ ├── DocVO.java │ │ │ │ ├── EnumVO.java │ │ │ │ ├── FieldVO.java │ │ │ │ ├── InstanceDataVisualLineVO.java │ │ │ │ ├── InstanceDataVisualVO.java │ │ │ │ ├── InstanceInfoVO.java │ │ │ │ ├── LoginDashboardUserVO.java │ │ │ │ ├── MenuDocItemVO.java │ │ │ │ ├── MenuModuleVO.java │ │ │ │ ├── MenuProjectVO.java │ │ │ │ ├── MetaDataVO.java │ │ │ │ ├── MockRequestRecordVO.java │ │ │ │ ├── NamespacePluginVO.java │ │ │ │ ├── NamespaceUserRelVO.java │ │ │ │ ├── NamespaceVO.java │ │ │ │ ├── PermissionMenuVO.java │ │ │ │ ├── PluginHandleVO.java │ │ │ │ ├── PluginSnapshotVO.java │ │ │ │ ├── PluginVO.java │ │ │ │ ├── ProxyApiKeyVO.java │ │ │ │ ├── ProxySelectorVO.java │ │ │ │ ├── RegistryVO.java │ │ │ │ ├── ResourceVO.java │ │ │ │ ├── RoleEditVO.java │ │ │ │ ├── RoleVO.java │ │ │ │ ├── RuleConditionVO.java │ │ │ │ ├── RuleVO.java │ │ │ │ ├── ScalePolicyVO.java │ │ │ │ ├── ScaleRuleVO.java │ │ │ │ ├── SelectorConditionVO.java │ │ │ │ ├── SelectorVO.java │ │ │ │ ├── ShenyuDictVO.java │ │ │ │ ├── TagVO.java │ │ │ │ └── UserRoleVO.java │ │ │ ├── mybatis/ │ │ │ │ ├── handler/ │ │ │ │ │ ├── AbstractObjectTypeHandler.java │ │ │ │ │ ├── ListByteTypeHandler.java │ │ │ │ │ └── MapStringTypeHandler.java │ │ │ │ ├── og/ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── OpenGaussSQLBooleanHandler.java │ │ │ │ │ └── interceptor/ │ │ │ │ │ ├── OpenGaussSQLPrepareInterceptor.java │ │ │ │ │ ├── OpenGaussSQLQueryInterceptor.java │ │ │ │ │ └── OpenGaussSqlUpdateInterceptor.java │ │ │ │ ├── oracle/ │ │ │ │ │ ├── OracleSQLPrepareInterceptor.java │ │ │ │ │ └── OracleSQLUpdateInterceptor.java │ │ │ │ └── pg/ │ │ │ │ ├── handler/ │ │ │ │ │ └── PostgreSQLBooleanHandler.java │ │ │ │ └── interceptor/ │ │ │ │ ├── PostgreSQLPrepareInterceptor.java │ │ │ │ ├── PostgreSQLQueryInterceptor.java │ │ │ │ └── PostgreSqlUpdateInterceptor.java │ │ │ ├── register/ │ │ │ │ ├── ShenyuClientServerRegisterPublisher.java │ │ │ │ └── ShenyuClientServerRegisterRepository.java │ │ │ ├── scale/ │ │ │ │ ├── collector/ │ │ │ │ │ ├── PrometheusMetricsProvider.java │ │ │ │ │ └── provider/ │ │ │ │ │ ├── MetricData.java │ │ │ │ │ └── MetricsProvider.java │ │ │ │ ├── config/ │ │ │ │ │ ├── PrometheusProperties.java │ │ │ │ │ └── ScaleProperties.java │ │ │ │ ├── monitor/ │ │ │ │ │ ├── observer/ │ │ │ │ │ │ ├── Observer.java │ │ │ │ │ │ └── ScaleObserver.java │ │ │ │ │ └── subject/ │ │ │ │ │ ├── MetricsMonitor.java │ │ │ │ │ ├── Subject.java │ │ │ │ │ └── cache/ │ │ │ │ │ └── ScaleRuleCache.java │ │ │ │ └── scaler/ │ │ │ │ ├── KubernetesScaler.java │ │ │ │ ├── ScaleService.java │ │ │ │ ├── ScaleTaskInitializer.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ScalePolicyCache.java │ │ │ │ └── dynamic/ │ │ │ │ ├── ScaleAction.java │ │ │ │ ├── ScaleRuleEvaluator.java │ │ │ │ └── TaskSchedulerManager.java │ │ │ ├── service/ │ │ │ │ ├── AiProxyApiKeyService.java │ │ │ │ ├── AiProxyConnectionService.java │ │ │ │ ├── AlertDispatchService.java │ │ │ │ ├── AlertReceiverService.java │ │ │ │ ├── ApiService.java │ │ │ │ ├── AppAuthService.java │ │ │ │ ├── ConfigsService.java │ │ │ │ ├── DashboardUserService.java │ │ │ │ ├── DataPermissionService.java │ │ │ │ ├── DetailService.java │ │ │ │ ├── DiscoveryService.java │ │ │ │ ├── DiscoveryUpstreamService.java │ │ │ │ ├── EnumService.java │ │ │ │ ├── FieldService.java │ │ │ │ ├── InstanceInfoService.java │ │ │ │ ├── MetaDataService.java │ │ │ │ ├── MockRequestRecordService.java │ │ │ │ ├── NamespacePluginService.java │ │ │ │ ├── NamespaceService.java │ │ │ │ ├── NamespaceUserService.java │ │ │ │ ├── OperationRecordLogService.java │ │ │ │ ├── PageService.java │ │ │ │ ├── PermissionService.java │ │ │ │ ├── PluginHandleService.java │ │ │ │ ├── PluginService.java │ │ │ │ ├── ProxySelectorService.java │ │ │ │ ├── RegistryService.java │ │ │ │ ├── ResourceService.java │ │ │ │ ├── RoleService.java │ │ │ │ ├── RuleService.java │ │ │ │ ├── SandboxService.java │ │ │ │ ├── ScalePolicyService.java │ │ │ │ ├── ScaleRuleService.java │ │ │ │ ├── SecretService.java │ │ │ │ ├── SelectorService.java │ │ │ │ ├── ShenyuDictService.java │ │ │ │ ├── SwaggerImportService.java │ │ │ │ ├── TagRelationService.java │ │ │ │ ├── TagService.java │ │ │ │ ├── configs/ │ │ │ │ │ ├── AuthConfigsExportImportHandler.java │ │ │ │ │ ├── ConfigsExportImportEnum.java │ │ │ │ │ ├── ConfigsExportImportHandler.java │ │ │ │ │ ├── ConfigsImportContext.java │ │ │ │ │ ├── DictDataConfigsExportImportHandler.java │ │ │ │ │ ├── DiscoveryDataConfigsExportImportHandler.java │ │ │ │ │ ├── DiscoveryUpstreamDataConfigsExportImportHandler.java │ │ │ │ │ ├── MetadataConfigsExportImportHandler.java │ │ │ │ │ ├── NamespacePluginDataConfigsExportImportHandler.java │ │ │ │ │ ├── PluginHandleDataConfigsExportImportHandler.java │ │ │ │ │ ├── PluginTemplateDataConfigsExportImportHandler.java │ │ │ │ │ ├── ProxySelectorDataConfigsExportImportHandler.java │ │ │ │ │ ├── RuleDataConfigsExportImportHandler.java │ │ │ │ │ └── SelectorDataConfigsExportImportHandler.java │ │ │ │ ├── converter/ │ │ │ │ │ ├── AbstractSelectorHandleConverter.java │ │ │ │ │ ├── DivideSelectorHandleConverter.java │ │ │ │ │ ├── DubboSelectorHandleConverter.java │ │ │ │ │ ├── GrpcSelectorHandleConverter.java │ │ │ │ │ ├── SelectorHandleConverter.java │ │ │ │ │ ├── SelectorHandleConverterFactor.java │ │ │ │ │ └── TarsSelectorHandleConverter.java │ │ │ │ ├── impl/ │ │ │ │ │ ├── AiProxyApiKeyServiceImpl.java │ │ │ │ │ ├── AiProxyConnectionServiceImpl.java │ │ │ │ │ ├── AlertDispatchServiceImpl.java │ │ │ │ │ ├── AlertReceiverServiceImpl.java │ │ │ │ │ ├── ApiServiceImpl.java │ │ │ │ │ ├── AppAuthServiceImpl.java │ │ │ │ │ ├── ConfigsServiceImpl.java │ │ │ │ │ ├── DashboardUserServiceImpl.java │ │ │ │ │ ├── DataPermissionServiceImpl.java │ │ │ │ │ ├── DetailServiceImpl.java │ │ │ │ │ ├── DiscoveryServiceImpl.java │ │ │ │ │ ├── DiscoveryUpstreamServiceImpl.java │ │ │ │ │ ├── EnumServiceImpl.java │ │ │ │ │ ├── FieldServiceImpl.java │ │ │ │ │ ├── InstanceCheckService.java │ │ │ │ │ ├── InstanceInfoServiceImpl.java │ │ │ │ │ ├── MetaDataServiceImpl.java │ │ │ │ │ ├── MockRequestRecordServiceImpl.java │ │ │ │ │ ├── NamespacePluginServiceImpl.java │ │ │ │ │ ├── NamespaceServiceImpl.java │ │ │ │ │ ├── NamespaceUserServiceImpl.java │ │ │ │ │ ├── OperationRecordLogServiceImpl.java │ │ │ │ │ ├── PermissionServiceImpl.java │ │ │ │ │ ├── PluginHandleServiceImpl.java │ │ │ │ │ ├── PluginServiceImpl.java │ │ │ │ │ ├── ProxySelectorServiceImpl.java │ │ │ │ │ ├── RegistryServiceImpl.java │ │ │ │ │ ├── ResourceServiceImpl.java │ │ │ │ │ ├── RoleServiceImpl.java │ │ │ │ │ ├── RuleServiceImpl.java │ │ │ │ │ ├── SandboxServiceImpl.java │ │ │ │ │ ├── ScalePolicyServiceImpl.java │ │ │ │ │ ├── ScaleRuleServiceImpl.java │ │ │ │ │ ├── SecretServiceImpl.java │ │ │ │ │ ├── SelectorServiceImpl.java │ │ │ │ │ ├── ShenyuDictServiceImpl.java │ │ │ │ │ ├── SwaggerImportServiceImpl.java │ │ │ │ │ ├── SyncDataServiceImpl.java │ │ │ │ │ ├── TagRelationServiceImpl.java │ │ │ │ │ ├── TagServiceImpl.java │ │ │ │ │ └── UpstreamCheckService.java │ │ │ │ ├── manager/ │ │ │ │ │ ├── DocManager.java │ │ │ │ │ ├── DocParser.java │ │ │ │ │ ├── LoadServiceDocEntry.java │ │ │ │ │ ├── PullSwaggerDocService.java │ │ │ │ │ ├── RegisterApiDocService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── DocManagerImpl.java │ │ │ │ │ ├── LoadServiceDocEntryImpl.java │ │ │ │ │ ├── PullSwaggerDocServiceImpl.java │ │ │ │ │ ├── RegisterApiDocServiceImpl.java │ │ │ │ │ └── SwaggerDocParser.java │ │ │ │ ├── provider/ │ │ │ │ │ ├── AppKeyProvider.java │ │ │ │ │ └── PluginNameProvider.java │ │ │ │ ├── publish/ │ │ │ │ │ ├── AdminDataModelChangedEventPublisher.java │ │ │ │ │ ├── DictEventPublisher.java │ │ │ │ │ ├── InstanceInfoReportEventPublisher.java │ │ │ │ │ ├── MetaDataEventPublisher.java │ │ │ │ │ ├── NamespaceEventPublisher.java │ │ │ │ │ ├── NamespacePluginEventPublisher.java │ │ │ │ │ ├── PluginEventPublisher.java │ │ │ │ │ ├── PluginHandleEventPublisher.java │ │ │ │ │ ├── ResourceEventPublisher.java │ │ │ │ │ ├── RoleEventPublisher.java │ │ │ │ │ ├── RuleEventPublisher.java │ │ │ │ │ ├── SelectorEventPublisher.java │ │ │ │ │ └── UserEventPublisher.java │ │ │ │ ├── register/ │ │ │ │ │ ├── AbstractContextPathRegisterService.java │ │ │ │ │ ├── AbstractShenyuClientRegisterServiceImpl.java │ │ │ │ │ ├── FallbackShenyuClientRegisterService.java │ │ │ │ │ ├── ShenyuClientRegisterDivideServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterDubboServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterGrpcServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterMcpServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterMotanServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterService.java │ │ │ │ │ ├── ShenyuClientRegisterSofaServiceImpl.java │ │ │ │ │ ├── ShenyuClientRegisterTarsServiceImpl.java │ │ │ │ │ └── ShenyuClientRegisterWebSocketServiceImpl.java │ │ │ │ └── support/ │ │ │ │ └── AiProxyRealKeyResolver.java │ │ │ ├── shiro/ │ │ │ │ ├── bean/ │ │ │ │ │ └── StatelessAuthFilter.java │ │ │ │ └── config/ │ │ │ │ ├── ShiroConfiguration.java │ │ │ │ └── ShiroRealm.java │ │ │ ├── spring/ │ │ │ │ ├── LocalDataSourceLoader.java │ │ │ │ ├── ResourcePermissionDataSourceLoader.java │ │ │ │ ├── ShenyuApplicationContextAware.java │ │ │ │ └── SpringBeanUtils.java │ │ │ ├── transfer/ │ │ │ │ ├── AlertTransfer.java │ │ │ │ ├── AppAuthTransfer.java │ │ │ │ ├── ClusterMasterTransfer.java │ │ │ │ ├── ConditionTransfer.java │ │ │ │ ├── DashboardUserTransfer.java │ │ │ │ ├── DiscoveryTransfer.java │ │ │ │ ├── MetaDataTransfer.java │ │ │ │ ├── NamespaceTransfer.java │ │ │ │ ├── PluginTransfer.java │ │ │ │ ├── ProxyApiKeyTransfer.java │ │ │ │ └── RegistryTransfer.java │ │ │ ├── utils/ │ │ │ │ ├── Assert.java │ │ │ │ ├── BaseTrigger.java │ │ │ │ ├── CommonUpstreamUtils.java │ │ │ │ ├── FailI18nMessage.java │ │ │ │ ├── HttpUtils.java │ │ │ │ ├── JwtUtils.java │ │ │ │ ├── NamespaceUtils.java │ │ │ │ ├── PluginHandleH2Trigger.java │ │ │ │ ├── ResourceUtil.java │ │ │ │ ├── ResultUtil.java │ │ │ │ ├── SelectorUtil.java │ │ │ │ ├── SessionUtil.java │ │ │ │ ├── ShenyuDictH2Trigger.java │ │ │ │ ├── ShenyuDomain.java │ │ │ │ ├── ShenyuResultMessage.java │ │ │ │ ├── ShenyuSignatureUtils.java │ │ │ │ ├── ThreadLocalUtils.java │ │ │ │ ├── UploadUtils.java │ │ │ │ ├── UrlSecurityUtils.java │ │ │ │ ├── WebI18nAssert.java │ │ │ │ └── ZipUtil.java │ │ │ └── validation/ │ │ │ ├── ExistProvider.java │ │ │ ├── annotation/ │ │ │ │ └── Existed.java │ │ │ └── validator/ │ │ │ └── ExistedValidator.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ ├── shenyu/ │ │ │ │ └── org.apache.shenyu.admin.register.ShenyuClientServerRegisterRepository │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── application-h2.yml │ │ ├── application-mysql.yml │ │ ├── application-ob.yml │ │ ├── application-og.yml │ │ ├── application-oracle.yml │ │ ├── application-pg.yml │ │ ├── application.yml │ │ ├── banner.txt │ │ ├── logback.xml │ │ ├── mappers/ │ │ │ ├── ai-proxy-api-key-sqlmap.xml │ │ │ ├── alert-receiver-sqlmap.xml │ │ │ ├── api-rule-relation-sqlmap.xml │ │ │ ├── api-sqlmap.xml │ │ │ ├── app-auth-sqlmap.xml │ │ │ ├── auth-param-sqlmap.xml │ │ │ ├── auth-path-sqlmap.xml │ │ │ ├── cluster-master-sqlmap.xml │ │ │ ├── dashboard-user-sqlmap.xml │ │ │ ├── data-permission-sqlmap.xml │ │ │ ├── detail-sqlmap.xml │ │ │ ├── discovery-handler-sqlmap.xml │ │ │ ├── discovery-rel-sqlmap.xml │ │ │ ├── discovery-sqlmap.xml │ │ │ ├── discovery-upstream-sqlmap.xml │ │ │ ├── field-sqlmap.xml │ │ │ ├── instance-info-sqlmap.xml │ │ │ ├── meta-data-sqlmap.xml │ │ │ ├── mock-request-record-sqlmap.xml │ │ │ ├── model-sqlmap.xml │ │ │ ├── namespace-plugin-rel-sqlmap.xml │ │ │ ├── namespace-sqlmap.xml │ │ │ ├── namespace-user-rel-sqlmap.xml │ │ │ ├── operation-record-log-sqlmap.xml │ │ │ ├── parameter-sqlmap.xml │ │ │ ├── permission-sqlmap.xml │ │ │ ├── plugin-handle-sqlmap.xml │ │ │ ├── plugin-sqlmap.xml │ │ │ ├── proxy-selector-sqlmap.xml │ │ │ ├── registry-sqlmap.xml │ │ │ ├── resouce-sqlmap.xml │ │ │ ├── role-sqlmap.xml │ │ │ ├── rule-condition-sqlmap.xml │ │ │ ├── rule-sqlmap.xml │ │ │ ├── scale-history-sqlmap.xml │ │ │ ├── scale-policy-sqlmap.xml │ │ │ ├── scale-rule-sqlmap.xml │ │ │ ├── selector-condition-sqlmap.xml │ │ │ ├── selector-sqlmap.xml │ │ │ ├── shenyu-dict-sqlmap.xml │ │ │ ├── tag-relation-sqlmap.xml │ │ │ ├── tag-sqlmap.xml │ │ │ └── user-role-sqlmap.xml │ │ ├── message/ │ │ │ ├── i18n.properties │ │ │ ├── i18n_en_US.properties │ │ │ └── i18n_zh_CN.properties │ │ ├── mybatis/ │ │ │ └── mybatis-config.xml │ │ ├── sql-script/ │ │ │ └── h2/ │ │ │ └── schema.sql │ │ └── static/ │ │ ├── index.7892d888.css │ │ ├── index.814edc73.js │ │ └── index.html │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── AbstractConfigurationTest.java │ │ ├── AbstractReflectGetterSetterTest.java │ │ ├── AbstractSpringIntegrationTest.java │ │ ├── aspect/ │ │ │ ├── DataPermissionAspectTest.java │ │ │ ├── PageableAspectTest.java │ │ │ └── PrintApiLogAspectTest.java │ │ ├── config/ │ │ │ ├── DataBaseConfigurationTest.java │ │ │ ├── HttpLongPollingSyncConfigurationTest.java │ │ │ ├── LdapConfigurationTest.java │ │ │ ├── MapperConfigTest.java │ │ │ ├── RegisterCenterConfigurationTest.java │ │ │ ├── SecretPropertiesTest.java │ │ │ ├── ShenyuAdminConfigurationTest.java │ │ │ ├── SwaggerConfigurationTest.java │ │ │ ├── WebConfigurationTest.java │ │ │ ├── WebSocketSyncConfigurationTest.java │ │ │ └── properties/ │ │ │ ├── DashboardPropertiesTest.java │ │ │ ├── HttpSyncPropertiesTest.java │ │ │ ├── JwtPropertiesTest.java │ │ │ ├── LdapPropertiesTest.java │ │ │ └── WebsocketSyncPropertiesTest.java │ │ ├── controller/ │ │ │ ├── ApiControllerTest.java │ │ │ ├── ApiDocControllerTest.java │ │ │ ├── AppAuthControllerTest.java │ │ │ ├── ConfigControllerTest.java │ │ │ ├── ConfigsExportImportControllerTest.java │ │ │ ├── DashboardUserControllerTest.java │ │ │ ├── DataPermissionControllerTest.java │ │ │ ├── IndexControllerTest.java │ │ │ ├── InstanceControllerTest.java │ │ │ ├── MetaDataControllerTest.java │ │ │ ├── MockRequestRecordControllerTest.java │ │ │ ├── OperationRecordLogControllerTest.java │ │ │ ├── PermissionControllerTest.java │ │ │ ├── PlatformControllerTest.java │ │ │ ├── PluginControllerTest.java │ │ │ ├── PluginHandleControllerTest.java │ │ │ ├── ResourceControllerTest.java │ │ │ ├── RoleControllerTest.java │ │ │ ├── RuleControllerTest.java │ │ │ ├── SandboxControllerTest.java │ │ │ ├── SelectorControllerTest.java │ │ │ ├── ShenyuDictControllerTest.java │ │ │ ├── ShenyuHttpRegistryControllerTest.java │ │ │ ├── TagControllerTest.java │ │ │ └── TagRelationControllerTest.java │ │ ├── discovery/ │ │ │ ├── DefaultDiscoveryProcessorTest.java │ │ │ ├── DiscoveryDataChangedEventSyncListenerTest.java │ │ │ ├── DiscoveryLevelTest.java │ │ │ ├── DiscoveryModeTest.java │ │ │ ├── DiscoveryProcessorHolderTest.java │ │ │ ├── LocalDiscoveryProcessorTest.java │ │ │ └── parse/ │ │ │ └── CustomDiscoveryUpstreamParserTest.java │ │ ├── disruptor/ │ │ │ └── subscriber/ │ │ │ ├── MetadataExecutorSubscriberTest.java │ │ │ └── URIRegisterExecutorSubscriberTest.java │ │ ├── exception/ │ │ │ └── ExceptionHandlersTest.java │ │ ├── listener/ │ │ │ ├── AbstractDataChangedListenerTest.java │ │ │ ├── ApplicationStartListenerTest.java │ │ │ ├── ConfigDataCacheTest.java │ │ │ ├── DataChangedEventDispatcherTest.java │ │ │ ├── http/ │ │ │ │ └── HttpLongPollingDataChangedListenerTest.java │ │ │ └── websocket/ │ │ │ ├── WebsocketCollectorTest.java │ │ │ ├── WebsocketConfiguratorTest.java │ │ │ ├── WebsocketDataChangedListenerTest.java │ │ │ └── WebsocketListenerTest.java │ │ ├── lock/ │ │ │ ├── ForUpdateBackedRegisterExecutionLockTest.java │ │ │ └── RegisterExecutionRepositoryTest.java │ │ ├── mapper/ │ │ │ ├── ApiMapperTest.java │ │ │ ├── ApiRuleRelationMapperTest.java │ │ │ ├── AppAuthMapperTest.java │ │ │ ├── AuthParamMapperTest.java │ │ │ ├── AuthPathMapperTest.java │ │ │ ├── DashboardUserMapperTest.java │ │ │ ├── DataPermissionMapperTest.java │ │ │ ├── DetailMapperTest.java │ │ │ ├── DiscoveryHandlerMapperTest.java │ │ │ ├── DiscoveryUpstreamMapperTest.java │ │ │ ├── FieldMapperTest.java │ │ │ ├── InstanceInfoMapperTest.java │ │ │ ├── MetaDataMapperTest.java │ │ │ ├── MockRequestRecordMapperTest.java │ │ │ ├── ModelMapperTest.java │ │ │ ├── NamespacePluginRelMapperTest.java │ │ │ ├── OperationRecordLogMapperTest.java │ │ │ ├── ParameterMapperTest.java │ │ │ ├── PermissionMapperTest.java │ │ │ ├── PluginHandleMapperTest.java │ │ │ ├── PluginMapperTest.java │ │ │ ├── ProxySelectorMapperTest.java │ │ │ ├── ResourceMapperTest.java │ │ │ ├── RoleMapperTest.java │ │ │ ├── RuleConditionMapperTest.java │ │ │ ├── RuleMapperTest.java │ │ │ ├── SelectorConditionMapperTest.java │ │ │ ├── SelectorMapperTest.java │ │ │ ├── ShenyuDictMapperTest.java │ │ │ ├── TagMapperTest.java │ │ │ ├── TagRelationMapperTest.java │ │ │ └── UserRoleMapperTest.java │ │ ├── model/ │ │ │ ├── bean/ │ │ │ │ ├── DocParameterTest.java │ │ │ │ └── UpstreamInstanceTest.java │ │ │ ├── dto/ │ │ │ │ └── AuthPathApplyDTOTest.java │ │ │ ├── event/ │ │ │ │ ├── dict/ │ │ │ │ │ ├── BatchDictChangedEventTest.java │ │ │ │ │ ├── BatchDictDeletedEventTest.java │ │ │ │ │ ├── DictCreatedEventTest.java │ │ │ │ │ └── DictUpdatedEventTest.java │ │ │ │ ├── handle/ │ │ │ │ │ ├── BatchPluginHandleChangedEventTest.java │ │ │ │ │ └── PluginHandleChangedEventTest.java │ │ │ │ ├── instance/ │ │ │ │ │ └── InstanceInfoReportEventTest.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── BatchMetaDataChangedEventTest.java │ │ │ │ │ ├── BatchMetaDataDeletedEventTest.java │ │ │ │ │ ├── MetaDataChangedEventTest.java │ │ │ │ │ ├── MetaDataCreatedEventTest.java │ │ │ │ │ └── MetadataUpdatedEventTest.java │ │ │ │ ├── plugin/ │ │ │ │ │ ├── BatchNamespacePluginDeletedEventTest.java │ │ │ │ │ ├── BatchPluginChangedEventTest.java │ │ │ │ │ ├── PluginChangedEventTest.java │ │ │ │ │ └── PluginCreatedEventTest.java │ │ │ │ ├── resource/ │ │ │ │ │ ├── BatchResourceCreatedEventTest.java │ │ │ │ │ ├── BatchResourceDeletedEventTest.java │ │ │ │ │ ├── ResourceChangedEventTest.java │ │ │ │ │ └── ResourceCreatedEventTest.java │ │ │ │ ├── role/ │ │ │ │ │ ├── BatchRoleDeletedEventTest.java │ │ │ │ │ ├── RoleChangedEventTest.java │ │ │ │ │ ├── RoleCreatedEventTest.java │ │ │ │ │ └── RoleUpdatedEventTest.java │ │ │ │ ├── selector/ │ │ │ │ │ ├── BatchSelectorDeletedEventTest.java │ │ │ │ │ ├── SelectorChangedEventTest.java │ │ │ │ │ ├── SelectorCreatedEventTest.java │ │ │ │ │ └── SelectorUpdatedEventTest.java │ │ │ │ └── user/ │ │ │ │ ├── BatchUserDeletedEventTest.java │ │ │ │ ├── UserCreatedEventTest.java │ │ │ │ └── UserUpdatedEventTest.java │ │ │ ├── page/ │ │ │ │ ├── PageParameterTest.java │ │ │ │ └── PageResultUtilsTest.java │ │ │ ├── query/ │ │ │ │ ├── AppAuthQueryTest.java │ │ │ │ ├── DashboardUserQueryTest.java │ │ │ │ ├── DataPermissionQueryTest.java │ │ │ │ ├── InstanceQueryConditionTest.java │ │ │ │ ├── MetaDataQueryTest.java │ │ │ │ ├── PluginHandleQueryTest.java │ │ │ │ ├── PluginQueryTest.java │ │ │ │ ├── RuleConditionQueryTest.java │ │ │ │ ├── RuleQueryTest.java │ │ │ │ ├── SelectorConditionQueryTest.java │ │ │ │ ├── SelectorQueryTest.java │ │ │ │ ├── ShenyuDictQueryTest.java │ │ │ │ └── TagRelationQueryTest.java │ │ │ ├── result/ │ │ │ │ └── ShenyuAdminResultTest.java │ │ │ └── vo/ │ │ │ ├── AppAuthVOTest.java │ │ │ ├── AuthParamVOTest.java │ │ │ ├── AuthPathVOTest.java │ │ │ ├── DashboardUserVOTest.java │ │ │ ├── EnumVOTest.java │ │ │ ├── InstanceDataVisualLineVOTest.java │ │ │ ├── InstanceDataVisualVOTest.java │ │ │ ├── InstanceInfoVOTest.java │ │ │ ├── MetaDataVOTest.java │ │ │ ├── PluginHandleVOTest.java │ │ │ ├── PluginVOTest.java │ │ │ ├── RuleConditionVOTest.java │ │ │ ├── RuleVOTest.java │ │ │ ├── SelectorConditionVOTest.java │ │ │ ├── SelectorVOTest.java │ │ │ ├── ShenyuDictVOTest.java │ │ │ └── UserRoleVOTest.java │ │ ├── mybatis/ │ │ │ ├── og/ │ │ │ │ ├── handler/ │ │ │ │ │ └── OpenGaussSQLBooleanHandlerTest.java │ │ │ │ └── interceptor/ │ │ │ │ ├── OpenGaussSQLPrepareInterceptorTest.java │ │ │ │ ├── OpenGaussSQLQueryInterceptorTest.java │ │ │ │ └── OpenGaussSqlUpdateInterceptorTest.java │ │ │ ├── oracle/ │ │ │ │ └── OracleSQLPrepareInterceptorTest.java │ │ │ └── pg/ │ │ │ ├── handler/ │ │ │ │ └── PostgreSQLBooleanHandlerTest.java │ │ │ └── interceptor/ │ │ │ ├── PostgreSQLPrepareInterceptorTest.java │ │ │ ├── PostgreSQLQueryInterceptorTest.java │ │ │ └── PostgreSqlUpdateInterceptorTest.java │ │ ├── service/ │ │ │ ├── AlertDispatchServiceTest.java │ │ │ ├── AlertReceiverServiceTest.java │ │ │ ├── ApiServiceTest.java │ │ │ ├── AppAuthServiceTest.java │ │ │ ├── ClusterSelectMasterServiceJdbcImplTest.java │ │ │ ├── ConfigsServiceTest.java │ │ │ ├── DashboardUserServiceTest.java │ │ │ ├── DataPermissionServiceTest.java │ │ │ ├── DetailServiceTest.java │ │ │ ├── DiscoveryUpstreamServiceTest.java │ │ │ ├── EnumServiceTest.java │ │ │ ├── FieldServiceTest.java │ │ │ ├── InstanceInfoServiceTest.java │ │ │ ├── MetaDataServiceTest.java │ │ │ ├── MockRequestRecordServiceTest.java │ │ │ ├── NamespacePluginServiceTest.java │ │ │ ├── PermissionServiceTest.java │ │ │ ├── PluginHandleServiceTest.java │ │ │ ├── PluginServiceTest.java │ │ │ ├── ProxySelectorServiceTest.java │ │ │ ├── ResourceServiceTest.java │ │ │ ├── RoleServiceTest.java │ │ │ ├── RuleServiceTest.java │ │ │ ├── SelectorServiceTest.java │ │ │ ├── ShenyuDictServiceTest.java │ │ │ ├── SwaggerImportServiceTest.java │ │ │ ├── SyncDataServiceTest.java │ │ │ ├── TagRelationServiceTest.java │ │ │ ├── TagServiceTest.java │ │ │ ├── UpstreamCheckServiceTest.java │ │ │ ├── impl/ │ │ │ │ ├── AiProxyApiKeyServiceImplTest.java │ │ │ │ └── InstanceCheckServiceTest.java │ │ │ ├── manager/ │ │ │ │ └── impl/ │ │ │ │ ├── DocManagerImplTest.java │ │ │ │ ├── LoadServiceDocEntryImplTest.java │ │ │ │ ├── SwaggerDocManagerImplTest.java │ │ │ │ └── SwaggerDocParserTest.java │ │ │ ├── publish/ │ │ │ │ └── InstanceInfoReportEventPublisherTest.java │ │ │ ├── register/ │ │ │ │ ├── AbstractContextPathRegisterServiceTest.java │ │ │ │ ├── AbstractShenyuClientRegisterServiceImplTest.java │ │ │ │ ├── FallbackShenyuClientRegisterServiceTest.java │ │ │ │ ├── ShenyuClientRegisterDivideServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterDubboServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterGrpcServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterMotanServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterSofaServiceImplTest.java │ │ │ │ ├── ShenyuClientRegisterTarsServiceImplTest.java │ │ │ │ └── ShenyuClientRegisterWebSocketServiceImplTest.java │ │ │ └── support/ │ │ │ └── AiProxyRealKeyResolverTest.java │ │ ├── shiro/ │ │ │ ├── bean/ │ │ │ │ └── StatelessAuthFilterTest.java │ │ │ └── config/ │ │ │ ├── ShiroConfigurationTest.java │ │ │ └── ShiroRealmTest.java │ │ ├── spring/ │ │ │ ├── ShenyuApplicationContextAwareTest.java │ │ │ └── SpringBeanUtilsTest.java │ │ ├── transfer/ │ │ │ ├── AlertTransferTest.java │ │ │ └── MetaDataTransferTest.java │ │ └── utils/ │ │ ├── AssertTest.java │ │ ├── BaseTriggerTest.java │ │ ├── CommonUpstreamUtilsTest.java │ │ ├── HttpUtilsTest.java │ │ ├── JwtUtilsTest.java │ │ ├── PluginHandleH2TriggerTest.java │ │ ├── ResultUtilTest.java │ │ ├── ShenyuDictH2TriggerTest.java │ │ ├── ShenyuSignatureUtilsTest.java │ │ └── UploadUtilsTest.java │ └── resources/ │ ├── application-h2.yml │ └── application.yml ├── shenyu-admin-listener/ │ ├── pom.xml │ ├── shenyu-admin-listener-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── admin/ │ │ │ ├── listener/ │ │ │ │ ├── AbstractDataChangedInit.java │ │ │ │ ├── AbstractNodeDataChangedListener.java │ │ │ │ ├── AbstractPathDataChangedListener.java │ │ │ │ ├── DataChangedInit.java │ │ │ │ ├── DataChangedListener.java │ │ │ │ └── utils/ │ │ │ │ └── NodeDataPathUtils.java │ │ │ └── service/ │ │ │ └── SyncDataService.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ └── listener/ │ │ ├── AbstractConfigurationTest.java │ │ └── utils/ │ │ └── NodeDataPathUtilsTest.java │ ├── shenyu-admin-listener-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ ├── ApolloSyncConfiguration.java │ │ │ │ │ └── properties/ │ │ │ │ │ └── ApolloProperties.java │ │ │ │ └── listener/ │ │ │ │ └── apollo/ │ │ │ │ ├── ApolloClient.java │ │ │ │ ├── ApolloDataChangedInit.java │ │ │ │ └── ApolloDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ └── listener/ │ │ └── apollo/ │ │ ├── ApolloClientTest.java │ │ ├── ApolloDataChangedInitTest.java │ │ └── ApolloDataChangedListenerTest.java │ ├── shenyu-admin-listener-consul/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ ├── ConsulSyncConfiguration.java │ │ │ │ │ └── properties/ │ │ │ │ │ └── ConsulProperties.java │ │ │ │ └── listener/ │ │ │ │ └── consul/ │ │ │ │ ├── ConsulDataChangedInit.java │ │ │ │ └── ConsulDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ ├── ConsulSyncConfigurationTest.java │ │ │ └── properties/ │ │ │ └── ConsulPropertiesTest.java │ │ └── listener/ │ │ └── consul/ │ │ ├── ConsulDataChangedInitTest.java │ │ └── ConsulDataChangedListenerTest.java │ ├── shenyu-admin-listener-etcd/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ └── EtcdSyncConfiguration.java │ │ │ │ └── listener/ │ │ │ │ └── etcd/ │ │ │ │ ├── EtcdDataChangedInit.java │ │ │ │ └── EtcdDataDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ └── EtcdSyncConfigurationTest.java │ │ └── listener/ │ │ └── etcd/ │ │ ├── EtcdDataChangedInitTest.java │ │ └── EtcdDataDataChangedListenerTest.java │ ├── shenyu-admin-listener-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ └── NacosSyncConfiguration.java │ │ │ │ └── listener/ │ │ │ │ └── nacos/ │ │ │ │ ├── NacosDataChangedInit.java │ │ │ │ └── NacosDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ └── NacosSyncConfigurationTest.java │ │ └── listener/ │ │ └── nacos/ │ │ ├── NacosDataChangedInitTest.java │ │ └── NacosDataChangedListenerTest.java │ ├── shenyu-admin-listener-polaris/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── admin/ │ │ │ │ ├── config/ │ │ │ │ │ ├── PolarisSyncConfiguration.java │ │ │ │ │ └── properties/ │ │ │ │ │ └── PolarisProperties.java │ │ │ │ └── listener/ │ │ │ │ └── polaris/ │ │ │ │ ├── PolarisDataChangedInit.java │ │ │ │ └── PolarisDataChangedListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── admin/ │ │ ├── config/ │ │ │ ├── PolarisSyncConfigurationTest.java │ │ │ └── properties/ │ │ │ └── PolarisPropertiesTest.java │ │ └── listener/ │ │ └── polaris/ │ │ ├── PolarisDataChangedInitTest.java │ │ └── PolarisDataChangedListenerTest.java │ └── shenyu-admin-listener-zookeeper/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── admin/ │ │ │ ├── config/ │ │ │ │ └── ZookeeperSyncConfiguration.java │ │ │ └── listener/ │ │ │ └── zookeeper/ │ │ │ ├── ZookeeperDataChangedInit.java │ │ │ └── ZookeeperDataChangedListener.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── admin/ │ ├── config/ │ │ └── ZookeeperSyncConfigurationTest.java │ └── listener/ │ └── zookeeper/ │ ├── ZookeeperDataChangedInitTest.java │ └── ZookeeperDataChangedListenerTest.java ├── shenyu-alert/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── alert/ │ │ ├── AlertAutoConfiguration.java │ │ ├── AlertNotifyHandler.java │ │ ├── config/ │ │ │ ├── HeaderRequestInterceptor.java │ │ │ ├── RestTemplateConfig.java │ │ │ └── ThymeleafConfig.java │ │ ├── exception/ │ │ │ └── AlertNoticeException.java │ │ ├── model/ │ │ │ └── AlertReceiverDTO.java │ │ └── strategy/ │ │ ├── AbstractAlertNotifyHandler.java │ │ ├── CommonRobotNotifyResp.java │ │ ├── DingTalkRobotAlertNotifyStrategy.java │ │ └── EmailAlertNotifyStrategy.java │ └── resources/ │ ├── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── static/ │ ├── alertNotifyDingTalkRobot.txt │ └── mailAlarm.html ├── shenyu-bootstrap/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── bootstrap/ │ │ └── ShenyuBootstrapApplication.java │ └── resources/ │ ├── application.yml │ ├── banner.txt │ └── logback.xml ├── shenyu-client/ │ ├── pom.xml │ ├── shenyu-client-api-docs-annotations/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── apidocs/ │ │ └── annotations/ │ │ ├── ApiDoc.java │ │ └── ApiModule.java │ ├── shenyu-client-autoconfig/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── auto/ │ │ └── config/ │ │ ├── ClientRegisterConfiguration.java │ │ └── EnableClientRegister.java │ ├── shenyu-client-core/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── core/ │ │ │ ├── client/ │ │ │ │ └── AbstractContextRefreshedEventListener.java │ │ │ ├── constant/ │ │ │ │ └── ShenyuClientConstants.java │ │ │ ├── disruptor/ │ │ │ │ ├── ShenyuClientRegisterEventPublisher.java │ │ │ │ ├── executor/ │ │ │ │ │ └── RegisterClientConsumerExecutor.java │ │ │ │ └── subcriber/ │ │ │ │ ├── ShenyuClientApiDocExecutorSubscriber.java │ │ │ │ ├── ShenyuClientMcpExecutorSubscriber.java │ │ │ │ ├── ShenyuClientMetadataExecutorSubscriber.java │ │ │ │ └── ShenyuClientURIExecutorSubscriber.java │ │ │ ├── exception/ │ │ │ │ └── ShenyuClientIllegalArgumentException.java │ │ │ ├── register/ │ │ │ │ ├── ApiBean.java │ │ │ │ ├── ClientApiRefreshedEventListener.java │ │ │ │ ├── ClientDiscoveryConfigRefreshedEventListener.java │ │ │ │ ├── ClientRegisterConfig.java │ │ │ │ ├── ClientRegisterConfigImpl.java │ │ │ │ ├── InstanceRegisterListener.java │ │ │ │ ├── ShenyuClientRegisterRepositoryFactory.java │ │ │ │ ├── extractor/ │ │ │ │ │ ├── ApiBeansExtractor.java │ │ │ │ │ ├── BaseAnnotationApiBeansExtractor.java │ │ │ │ │ ├── BaseApiBeansExtractor.java │ │ │ │ │ ├── MultiClientApiBeansExtractorImpl.java │ │ │ │ │ └── RpcApiBeansExtractor.java │ │ │ │ ├── matcher/ │ │ │ │ │ ├── AnnotatedApiBeanMatcher.java │ │ │ │ │ ├── AnnotatedApiDefinitionMatcher.java │ │ │ │ │ ├── ApiAnnotationProcessor.java │ │ │ │ │ ├── ApiBeanMatcher.java │ │ │ │ │ ├── ApiBeanProcessor.java │ │ │ │ │ ├── ApiDefinitionMatcher.java │ │ │ │ │ ├── ApiDocProcessorImpl.java │ │ │ │ │ ├── ApiRegisterProcessor.java │ │ │ │ │ ├── BaseAnnotationApiProcessor.java │ │ │ │ │ ├── ExtractorProcessor.java │ │ │ │ │ └── Matcher.java │ │ │ │ └── registrar/ │ │ │ │ ├── AbstractApiDocRegistrar.java │ │ │ │ ├── AbstractApiMetaRegistrar.java │ │ │ │ ├── AbstractApiRegistrar.java │ │ │ │ ├── ApiDocRegistrarImpl.java │ │ │ │ ├── ApiRegistrar.java │ │ │ │ ├── BaseApiRegistrarImpl.java │ │ │ │ ├── HttpApiDocRegistrar.java │ │ │ │ ├── MateDataApiRegistrarImpl.java │ │ │ │ ├── NoHttpApiDocRegistrar.java │ │ │ │ └── UriApiRegistrarImplImpl.java │ │ │ ├── shutdown/ │ │ │ │ ├── ShenyuClientShutdownHook.java │ │ │ │ └── ShutdownHookManager.java │ │ │ └── utils/ │ │ │ ├── ApiBeanUtil.java │ │ │ ├── OpenApiUtils.java │ │ │ ├── PortUtils.java │ │ │ ├── RequestMethodUtils.java │ │ │ └── UrlPathUtils.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── core/ │ │ ├── disruptor/ │ │ │ └── subcriber/ │ │ │ ├── ShenyuClientApiDocExecutorSubscriberTest.java │ │ │ ├── ShenyuClientMetadataExecutorSubscriberTest.java │ │ │ ├── ShenyuClientRegisterEventPublisherTest.java │ │ │ └── ShenyuClientURIExecutorSubscriberTest.java │ │ ├── exception/ │ │ │ └── ShenyuClientIllegalArgumentExceptionTest.java │ │ ├── register/ │ │ │ ├── ShenyuClientRegisterRepositoryFactoryTest.java │ │ │ └── registrar/ │ │ │ ├── AbstractApiDocRegistrarTest.java │ │ │ ├── HttpApiDocRegistrarTest.java │ │ │ ├── NoHttpApiDocRegistrarTest.java │ │ │ └── TestClientRegisterConfig.java │ │ └── utils/ │ │ └── PortUtilsTest.java │ ├── shenyu-client-dubbo/ │ │ ├── pom.xml │ │ ├── shenyu-client-apache-dubbo/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── client/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ ├── ApacheDubboApiBeansExtractor.java │ │ │ │ │ ├── ApacheDubboServiceBeanListener.java │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ ├── ShenyuDubboService.java │ │ │ │ │ │ └── ShenyuService.java │ │ │ │ │ ├── processor/ │ │ │ │ │ │ ├── extractor/ │ │ │ │ │ │ │ ├── DubboServiceProcessor.java │ │ │ │ │ │ │ └── ServiceProcessor.java │ │ │ │ │ │ └── register/ │ │ │ │ │ │ └── ShenyuDubboProcessor.java │ │ │ │ │ └── validation/ │ │ │ │ │ ├── ApacheDubboClientValidation.java │ │ │ │ │ └── ApacheDubboClientValidator.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── dubbo/ │ │ │ │ └── org.apache.dubbo.validation.Validation │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── apache/ │ │ │ └── dubbo/ │ │ │ ├── annotation/ │ │ │ │ └── ShenyuDubboServiceDefaultValueTest.java │ │ │ └── validation/ │ │ │ ├── ApacheDubboClientValidationTest.java │ │ │ ├── ApacheDubboClientValidatorTest.java │ │ │ ├── mock/ │ │ │ │ ├── MockConstraint.java │ │ │ │ ├── MockConstraintValidator.java │ │ │ │ ├── MockEnumType.java │ │ │ │ ├── MockValidationParameter.java │ │ │ │ └── MockValidatorTarget.java │ │ │ └── service/ │ │ │ └── TestService.java │ │ └── shenyu-client-dubbo-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── dubbo/ │ │ └── common/ │ │ ├── annotation/ │ │ │ └── ShenyuDubboClient.java │ │ └── dto/ │ │ ├── DubboRpcExt.java │ │ └── DubboRpcMethodExt.java │ ├── shenyu-client-grpc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── grpc/ │ │ │ ├── GrpcClientEventListener.java │ │ │ ├── common/ │ │ │ │ ├── annotation/ │ │ │ │ │ └── ShenyuGrpcClient.java │ │ │ │ └── dto/ │ │ │ │ └── GrpcExt.java │ │ │ ├── json/ │ │ │ │ ├── JsonForwardingServerCall.java │ │ │ │ ├── JsonServerCallListener.java │ │ │ │ └── JsonServerServiceInterceptor.java │ │ │ └── server/ │ │ │ ├── GrpcServerBuilder.java │ │ │ └── GrpcServerRunner.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── grpc/ │ │ ├── TestRequest.java │ │ ├── TestResponse.java │ │ ├── json/ │ │ │ ├── JsonForwardingServerCallTest.java │ │ │ ├── JsonServerCallListenerTest.java │ │ │ └── JsonServerServiceInterceptorTest.java │ │ └── server/ │ │ └── GrpcServerRunnerTest.java │ ├── shenyu-client-http/ │ │ ├── pom.xml │ │ └── shenyu-client-springmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── springmvc/ │ │ │ ├── annotation/ │ │ │ │ ├── ShenyuDeleteMapping.java │ │ │ │ ├── ShenyuGetMapping.java │ │ │ │ ├── ShenyuPatchMapping.java │ │ │ │ ├── ShenyuPostMapping.java │ │ │ │ ├── ShenyuPutMapping.java │ │ │ │ ├── ShenyuRequestMapping.java │ │ │ │ └── ShenyuSpringMvcClient.java │ │ │ ├── init/ │ │ │ │ └── SpringMvcClientEventListener.java │ │ │ ├── proceeor/ │ │ │ │ ├── extractor/ │ │ │ │ │ └── RequestMappingProcessor.java │ │ │ │ └── register/ │ │ │ │ └── ShenyuSpringMvcClientProcessorImpl.java │ │ │ └── register/ │ │ │ ├── SpringMvcApiBeansExtractor.java │ │ │ └── SpringMvcApiMetaRegister.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── springmvc/ │ │ ├── annotation/ │ │ │ ├── ShenyuDeleteMappingTest.java │ │ │ ├── ShenyuGetMappingTest.java │ │ │ ├── ShenyuPatchMappingTest.java │ │ │ ├── ShenyuPostMappingTest.java │ │ │ ├── ShenyuPutMappingTest.java │ │ │ └── ShenyuRequestMappingTest.java │ │ ├── init/ │ │ │ └── SpringMvcClientEventListenerTest.java │ │ └── register/ │ │ ├── SpringMvcApiBeansExtractorTest.java │ │ └── SpringMvcApiMetaRegisterTest.java │ ├── shenyu-client-mcp/ │ │ ├── pom.xml │ │ ├── shenyu-client-mcp-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── mcp/ │ │ │ ├── common/ │ │ │ │ ├── annotation/ │ │ │ │ │ ├── ShenyuMcpHeader.java │ │ │ │ │ ├── ShenyuMcpRequestConfig.java │ │ │ │ │ ├── ShenyuMcpTool.java │ │ │ │ │ └── ShenyuMcpToolParam.java │ │ │ │ ├── constants/ │ │ │ │ │ ├── OpenApiConstants.java │ │ │ │ │ ├── RequestTemplateConstants.java │ │ │ │ │ └── ShenyuToolConfigConstants.java │ │ │ │ ├── dto/ │ │ │ │ │ ├── ShenyuMcpRequestConfig.java │ │ │ │ │ └── ShenyuMcpTool.java │ │ │ │ └── eunm/ │ │ │ │ └── McpParameterType.java │ │ │ ├── generator/ │ │ │ │ ├── McpOpenApiGenerator.java │ │ │ │ ├── McpRequestConfigGenerator.java │ │ │ │ └── McpToolsRegisterDTOGenerator.java │ │ │ └── utils/ │ │ │ └── OpenApiConvertorUtil.java │ │ └── shenyu-client-mcp-register/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── mcp/ │ │ └── McpServiceEventListener.java │ ├── shenyu-client-motan/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── motan/ │ │ │ ├── MotanServiceEventListener.java │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ ├── ShenyuMotanClient.java │ │ │ │ └── ShenyuMotanService.java │ │ │ └── dto/ │ │ │ └── MotanRpcExt.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── motan/ │ │ └── MotanServiceEventListenerTest.java │ ├── shenyu-client-sofa/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── sofa/ │ │ │ ├── SofaServiceEventListener.java │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ └── ShenyuSofaClient.java │ │ │ └── dto/ │ │ │ └── SofaRpcExt.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── sofa/ │ │ └── SofaServiceEventListenerTest.java │ ├── shenyu-client-tars/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── client/ │ │ │ └── tars/ │ │ │ ├── TarsServiceBeanEventListener.java │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ ├── ShenyuTarsClient.java │ │ │ │ └── ShenyuTarsService.java │ │ │ └── dto/ │ │ │ └── TarsRpcExt.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── tars/ │ │ ├── TarsRpcExtTest.java │ │ └── TarsServiceBeanPostProcessorTest.java │ └── shenyu-client-websocket/ │ ├── pom.xml │ └── shenyu-client-spring-websocket/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── client/ │ │ └── spring/ │ │ └── websocket/ │ │ ├── annotation/ │ │ │ ├── ShenyuServerEndpoint.java │ │ │ └── ShenyuSpringWebSocketClient.java │ │ └── init/ │ │ ├── ShenyuServerEndpointerExporter.java │ │ └── SpringWebSocketClientEventListener.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── client/ │ └── spring/ │ └── websocket/ │ └── init/ │ ├── ShenyuServerEndpointerExporterTest.java │ └── SpringWebSocketClientEventListenerTest.java ├── shenyu-common/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── common/ │ │ ├── cache/ │ │ │ ├── MemorySafeLRUMap.java │ │ │ ├── MemorySafeWindowTinyLFUMap.java │ │ │ └── WindowTinyLFUMap.java │ │ ├── concurrent/ │ │ │ ├── AbortPolicy.java │ │ │ ├── DiscardOldestPolicy.java │ │ │ ├── DiscardPolicy.java │ │ │ ├── EagerExecutorService.java │ │ │ ├── MemoryLimitCalculator.java │ │ │ ├── MemoryLimitedLinkedBlockingQueue.java │ │ │ ├── MemoryLimitedTaskQueue.java │ │ │ ├── MemoryLimiter.java │ │ │ ├── MemorySafeLinkedBlockingQueue.java │ │ │ ├── MemorySafeTaskQueue.java │ │ │ ├── RejectException.java │ │ │ ├── Rejector.java │ │ │ ├── ShenyuThreadFactory.java │ │ │ ├── ShenyuThreadPoolExecutor.java │ │ │ └── TaskQueue.java │ │ ├── config/ │ │ │ ├── NettyChannelProperties.java │ │ │ ├── NettyHttpProperties.java │ │ │ ├── ShenyuConfig.java │ │ │ └── ssl/ │ │ │ ├── ShenyuSniAsyncMapping.java │ │ │ ├── SslCrtAndKey.java │ │ │ ├── SslCrtAndKeyFile.java │ │ │ └── SslCrtAndKeyStream.java │ │ ├── constant/ │ │ │ ├── AdminConstants.java │ │ │ ├── ApolloPathConstants.java │ │ │ ├── Constants.java │ │ │ ├── ConsulConstants.java │ │ │ ├── DefaultNodeConstants.java │ │ │ ├── DefaultPathConstants.java │ │ │ ├── DubboParamConstants.java │ │ │ ├── ExportImportConstants.java │ │ │ ├── HttpConstants.java │ │ │ ├── InstanceTypeConstants.java │ │ │ ├── NacosPathConstants.java │ │ │ ├── PolarisPathConstants.java │ │ │ ├── RedisKeyConstants.java │ │ │ ├── ResourceTypeConstants.java │ │ │ ├── RuleHandleConstants.java │ │ │ ├── RunningModeConstants.java │ │ │ └── ShenyuModuleConstants.java │ │ ├── dto/ │ │ │ ├── AlarmContent.java │ │ │ ├── AppAuthData.java │ │ │ ├── AuthParamData.java │ │ │ ├── AuthPathData.java │ │ │ ├── BaseData.java │ │ │ ├── ConditionData.java │ │ │ ├── ConfigData.java │ │ │ ├── DiscoverySyncData.java │ │ │ ├── DiscoveryUpstreamData.java │ │ │ ├── MetaData.java │ │ │ ├── PluginData.java │ │ │ ├── ProxyApiKeyData.java │ │ │ ├── ProxySelectorData.java │ │ │ ├── RuleData.java │ │ │ ├── SelectorData.java │ │ │ ├── WebsocketData.java │ │ │ └── convert/ │ │ │ ├── plugin/ │ │ │ │ ├── AiPromptConfig.java │ │ │ │ ├── AiRequestTransformerConfig.java │ │ │ │ ├── AiResponseTransformerConfig.java │ │ │ │ ├── DubboRegisterConfig.java │ │ │ │ ├── GrpcRegisterConfig.java │ │ │ │ ├── MotanRegisterConfig.java │ │ │ │ ├── SofaRegisterConfig.java │ │ │ │ └── TarsRegisterConfig.java │ │ │ ├── rule/ │ │ │ │ ├── AiPromptHandle.java │ │ │ │ ├── AiProxyHandle.java │ │ │ │ ├── AiRequestTransformerHandle.java │ │ │ │ ├── AiResponseTransformerHandle.java │ │ │ │ ├── AiTokenLimiterHandle.java │ │ │ │ ├── GeneralContextHandle.java │ │ │ │ ├── HystrixHandle.java │ │ │ │ ├── MockHandle.java │ │ │ │ ├── RateLimiterHandle.java │ │ │ │ ├── RedirectHandle.java │ │ │ │ ├── RequestHandle.java │ │ │ │ ├── Resilience4JHandle.java │ │ │ │ ├── RewriteHandle.java │ │ │ │ ├── RuleHandle.java │ │ │ │ ├── SentinelHandle.java │ │ │ │ ├── WafHandle.java │ │ │ │ └── impl/ │ │ │ │ ├── CacheRuleHandle.java │ │ │ │ ├── ContextMappingRuleHandle.java │ │ │ │ ├── DivideRuleHandle.java │ │ │ │ ├── DubboRuleHandle.java │ │ │ │ ├── GrpcRuleHandle.java │ │ │ │ ├── KeyAuthRuleHandle.java │ │ │ │ ├── ModifyResponseRuleHandle.java │ │ │ │ ├── ParamMappingRuleHandle.java │ │ │ │ ├── SofaRuleHandle.java │ │ │ │ ├── SpringCloudRuleHandle.java │ │ │ │ └── WebSocketRuleHandle.java │ │ │ └── selector/ │ │ │ ├── CacheUpstream.java │ │ │ ├── CommonUpstream.java │ │ │ ├── DiscoveryUpstream.java │ │ │ ├── DivideUpstream.java │ │ │ ├── DubboUpstream.java │ │ │ ├── GrpcUpstream.java │ │ │ ├── MotanUpstream.java │ │ │ ├── SofaUpstream.java │ │ │ ├── SpringCloudSelectorHandle.java │ │ │ ├── TarsUpstream.java │ │ │ ├── WebSocketUpstream.java │ │ │ └── ZombieUpstream.java │ │ ├── enums/ │ │ │ ├── AdminDataPermissionTypeEnum.java │ │ │ ├── AdminDataSourceEnum.java │ │ │ ├── AdminPluginOperateEnum.java │ │ │ ├── AdminResourceEnum.java │ │ │ ├── AiModelProviderEnum.java │ │ │ ├── AiTokenLimiterEnum.java │ │ │ ├── ApiHttpMethodEnum.java │ │ │ ├── ApiSourceEnum.java │ │ │ ├── ApiStateEnum.java │ │ │ ├── ConfigGroupEnum.java │ │ │ ├── DataEventTypeEnum.java │ │ │ ├── DataSyncEnum.java │ │ │ ├── HeaderUniqueStrategyEnum.java │ │ │ ├── HttpMethodEnum.java │ │ │ ├── HttpRetryBackoffSpecEnum.java │ │ │ ├── HttpSchemeEnum.java │ │ │ ├── HystrixIsolationModeEnum.java │ │ │ ├── InstanceStatusEnum.java │ │ │ ├── LoadBalanceEnum.java │ │ │ ├── MatchModeEnum.java │ │ │ ├── OperatorEnum.java │ │ │ ├── ParamTypeEnum.java │ │ │ ├── PluginEnum.java │ │ │ ├── PluginHandlerEventEnum.java │ │ │ ├── PluginRoleEnum.java │ │ │ ├── PluginTypeEnum.java │ │ │ ├── RateLimitEnum.java │ │ │ ├── RedisModeEnum.java │ │ │ ├── ResultEnum.java │ │ │ ├── RetryEnum.java │ │ │ ├── RpcTypeEnum.java │ │ │ ├── RunningModeEnum.java │ │ │ ├── SelectorTypeEnum.java │ │ │ ├── SerializeEnum.java │ │ │ ├── SwaggerVersion.java │ │ │ ├── TimeWindowEnum.java │ │ │ ├── TrieCacheTypeEnum.java │ │ │ ├── TrieEventEnum.java │ │ │ ├── TrieMatchModeEnum.java │ │ │ ├── UniqueHeaderEnum.java │ │ │ ├── WafEnum.java │ │ │ └── WafModelEnum.java │ │ ├── exception/ │ │ │ ├── CommonErrorCode.java │ │ │ ├── SerializerException.java │ │ │ └── ShenyuException.java │ │ ├── timer/ │ │ │ ├── AbstractRetryTask.java │ │ │ ├── AbstractRoundTask.java │ │ │ ├── HierarchicalWheelTimer.java │ │ │ ├── TaskEntity.java │ │ │ ├── Timer.java │ │ │ ├── TimerTask.java │ │ │ ├── TimerTaskList.java │ │ │ ├── TimingWheel.java │ │ │ └── WheelTimerFactory.java │ │ └── utils/ │ │ ├── AesUtils.java │ │ ├── ContextPathUtils.java │ │ ├── DateUtils.java │ │ ├── DigestUtils.java │ │ ├── FreshBeanHolder.java │ │ ├── GsonUtils.java │ │ ├── HmacHexUtils.java │ │ ├── IpUtils.java │ │ ├── JarDependencyUtils.java │ │ ├── JsonUtils.java │ │ ├── ListUtil.java │ │ ├── LogUtils.java │ │ ├── MapUtils.java │ │ ├── NamespaceIDUtils.java │ │ ├── ObjectTypeUtils.java │ │ ├── ParamCheckUtils.java │ │ ├── PathUtils.java │ │ ├── PluginNameAdapter.java │ │ ├── ReflectUtils.java │ │ ├── SignUtils.java │ │ ├── Singleton.java │ │ ├── SpiLoadFactory.java │ │ ├── SystemInfoUtils.java │ │ ├── ThreadUtils.java │ │ ├── UUIDUtils.java │ │ ├── UpstreamCheckUtils.java │ │ ├── UriUtils.java │ │ └── VersionUtils.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── common/ │ │ ├── cache/ │ │ │ ├── MemorySafeLRUMapTest.java │ │ │ ├── MemorySafeWindowTinyLFUMapTest.java │ │ │ └── WindowTinyLFUMapTest.java │ │ ├── concurrent/ │ │ │ ├── MemoryLimitCalculatorTest.java │ │ │ ├── MemoryLimitedLinkedBlockingQueueTest.java │ │ │ ├── MemoryLimitedTaskQueueTest.java │ │ │ ├── MemoryLimiterTest.java │ │ │ ├── MemorySafeLinkedBlockingQueueTest.java │ │ │ ├── ShenyuThreadFactoryTest.java │ │ │ └── ShenyuThreadPoolExecutorTest.java │ │ ├── config/ │ │ │ └── ShenyuConfigTest.java │ │ ├── constant/ │ │ │ ├── DefaultPathConstantsTest.java │ │ │ └── RedisKeyConstantsTest.java │ │ ├── dto/ │ │ │ ├── AppAuthDataTest.java │ │ │ ├── AuthParamDataTest.java │ │ │ ├── AuthPathDataTest.java │ │ │ ├── ConditionDataTest.java │ │ │ ├── ConfigDataTest.java │ │ │ ├── MetaDataTest.java │ │ │ ├── PluginDataTest.java │ │ │ ├── RuleDataTest.java │ │ │ ├── SelectorDataTest.java │ │ │ ├── WebsocketDataTest.java │ │ │ └── convert/ │ │ │ ├── plugin/ │ │ │ │ ├── DubboRegisterConfigTest.java │ │ │ │ ├── GrpcRegisterConfigTest.java │ │ │ │ ├── MotanRegisterConfigTest.java │ │ │ │ ├── SofaRegisterConfigTest.java │ │ │ │ └── TarsRegisterConfigTest.java │ │ │ ├── rule/ │ │ │ │ ├── GeneralContextHandleTest.java │ │ │ │ ├── HystrixHandleTest.java │ │ │ │ ├── MockHandleTest.java │ │ │ │ ├── RateLimiterHandleTest.java │ │ │ │ ├── RedirectHandleTest.java │ │ │ │ ├── RequestHandleTest.java │ │ │ │ ├── Resilience4JHandleTest.java │ │ │ │ ├── RewriteHandleTest.java │ │ │ │ ├── RuleHandleTest.java │ │ │ │ ├── SentinelHandleTest.java │ │ │ │ ├── WafHandleTest.java │ │ │ │ └── impl/ │ │ │ │ ├── CacheRuleHandleTest.java │ │ │ │ ├── ContextMappingRuleHandleTest.java │ │ │ │ ├── DivideRuleHandleTest.java │ │ │ │ ├── DubboRuleHandleTest.java │ │ │ │ ├── KeyAuthRuleHandleTest.java │ │ │ │ ├── ModifyResponseRuleHandleTest.java │ │ │ │ ├── ParamMappingRuleHandleTest.java │ │ │ │ ├── SofaRuleHandleTest.java │ │ │ │ ├── SpringCloudRuleHandleTest.java │ │ │ │ └── WebSocketRuleHandleTest.java │ │ │ └── selector/ │ │ │ ├── CommonUpstreamTest.java │ │ │ ├── DivideUpstreamTest.java │ │ │ ├── DubboUpstreamTest.java │ │ │ ├── GrpcUpstreamTest.java │ │ │ ├── SpringCloudSelectorHandleTest.java │ │ │ ├── TarsUpstreamTest.java │ │ │ ├── WebSocketUpstreamTest.java │ │ │ └── ZombieUpstreamTest.java │ │ ├── enums/ │ │ │ ├── AdminDataPermissionTypeEnumTest.java │ │ │ ├── AdminDataSourceEnumTest.java │ │ │ ├── AdminPluginOperateEnumTest.java │ │ │ ├── AdminResourceEnumTest.java │ │ │ ├── ApiHttpMethodEnumTest.java │ │ │ ├── ApiSourceEnumTest.java │ │ │ ├── ApiStateEnumTest.java │ │ │ ├── ConfigGroupEnumTest.java │ │ │ ├── DataEventTypeEnumTest.java │ │ │ ├── DataSyncEnumTest.java │ │ │ ├── HttpMethodEnumTest.java │ │ │ ├── HystrixIsolationModeEnumTest.java │ │ │ ├── LoadBalanceEnumTest.java │ │ │ ├── MatchModeEnumTest.java │ │ │ ├── OperatorEnumTest.java │ │ │ ├── ParamTypeEnumTest.java │ │ │ ├── PluginEnumTest.java │ │ │ ├── PluginHandlerEventEnumTest.java │ │ │ ├── PluginRoleEnumTest.java │ │ │ ├── PluginTypeEnumTest.java │ │ │ ├── RateLimitEnumTest.java │ │ │ ├── RedisModeEnumTest.java │ │ │ ├── ResultEnumTest.java │ │ │ ├── RetryEnumTest.java │ │ │ ├── RpcTypeEnumTest.java │ │ │ ├── SelectorTypeEnumTest.java │ │ │ ├── SerializeEnumTest.java │ │ │ ├── TrieEventEnumTest.java │ │ │ ├── TrieMatchModeEnumTest.java │ │ │ ├── WafEnumTest.java │ │ │ └── WafModelEnumTest.java │ │ ├── exception/ │ │ │ ├── CommonErrorCodeTest.java │ │ │ ├── SerializerExceptionTest.java │ │ │ └── ShenyuExceptionTest.java │ │ ├── timer/ │ │ │ ├── HierarchicalWheelTimerTest.java │ │ │ ├── TimerTaskListTest.java │ │ │ └── WheelTimerFactoryTest.java │ │ └── utils/ │ │ ├── AesUtilsTest.java │ │ ├── ContextPathUtilsTest.java │ │ ├── DateUtilsTest.java │ │ ├── DigestUtilsTest.java │ │ ├── FreshBeanHolderTest.java │ │ ├── GsonUtilsTest.java │ │ ├── HmacHexUtilsTest.java │ │ ├── IpUtilsTest.java │ │ ├── JarDependencyUtilsTest.java │ │ ├── JsonUtilsTest.java │ │ ├── ListUtilTest.java │ │ ├── LogUtilsTest.java │ │ ├── MapUtilsTest.java │ │ ├── NamespaceIDUtilsTest.java │ │ ├── ObjectTypeUtilsTest.java │ │ ├── ParamCheckUtilsTest.java │ │ ├── PathUtilsTest.java │ │ ├── PluginNameAdapterTest.java │ │ ├── ReflectUtilsTest.java │ │ ├── SignUtilsTest.java │ │ ├── SingletonTest.java │ │ ├── SpiImpl.java │ │ ├── SpiInterface.java │ │ ├── SpiLoadFactoryTest.java │ │ ├── ThreadUtilsTest.java │ │ ├── UUIDUtilsTest.java │ │ ├── UpstreamCheckUtilsTest.java │ │ ├── UriUtilsTest.java │ │ └── VersionUtilsTest.java │ └── resources/ │ └── META-INF/ │ └── services/ │ └── org.apache.shenyu.common.utils.SpiInterface ├── shenyu-disruptor/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── disruptor/ │ │ ├── DisruptorProviderManage.java │ │ ├── common/ │ │ │ └── Data.java │ │ ├── consumer/ │ │ │ ├── QueueConsumer.java │ │ │ ├── QueueConsumerExecutor.java │ │ │ └── QueueConsumerFactory.java │ │ ├── event/ │ │ │ ├── DataEvent.java │ │ │ ├── DisruptorEventFactory.java │ │ │ ├── OrderlyDataEvent.java │ │ │ └── OrderlyDisruptorEventFactory.java │ │ ├── provider/ │ │ │ └── DisruptorProvider.java │ │ └── thread/ │ │ ├── DisruptorThreadFactory.java │ │ ├── OrderlyExecutor.java │ │ └── SingletonExecutor.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── disruptor/ │ ├── DisruptorProviderManagerTest.java │ ├── consumer/ │ │ └── QueueConsumerTest.java │ ├── provider/ │ │ └── DisruptorProviderTest.java │ └── thread/ │ └── DisruptorThreadFactoryTest.java ├── shenyu-dist/ │ ├── README.md │ ├── pom.xml │ ├── release_check.py │ ├── shenyu-admin-dist/ │ │ ├── docker/ │ │ │ ├── Dockerfile │ │ │ ├── entrypoint.sh │ │ │ └── logback.xml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ └── binary.xml │ │ ├── release-docs/ │ │ │ ├── LICENSE │ │ │ ├── NOTICE │ │ │ ├── README.txt │ │ │ └── licenses/ │ │ │ ├── LICENSE-HdrHistogram.txt │ │ │ ├── LICENSE-LatencyUtils.txt │ │ │ ├── LICENSE-animal-sniffer.txt │ │ │ ├── LICENSE-asm.txt │ │ │ ├── LICENSE-aspectjweaver.txt │ │ │ ├── LICENSE-checker-qual.txt │ │ │ ├── LICENSE-consul.txt │ │ │ ├── LICENSE-encoder.txt │ │ │ ├── LICENSE-h2.txt │ │ │ ├── LICENSE-jakarta.activation-api.txt │ │ │ ├── LICENSE-jakarta.annotation-api.txt │ │ │ ├── LICENSE-jakarta.xml.bind-api.txt │ │ │ ├── LICENSE-java-jwt.txt │ │ │ ├── LICENSE-jaxb-api.txt │ │ │ ├── LICENSE-jcl-over-slf4j.txt │ │ │ ├── LICENSE-jul-to-slf4j.txt │ │ │ ├── LICENSE-k8sio.txt │ │ │ ├── LICENSE-kryo-shaded.txt │ │ │ ├── LICENSE-logback.txt │ │ │ ├── LICENSE-micrometer.txt │ │ │ ├── LICENSE-minlog.txt │ │ │ ├── LICENSE-pagehelper.txt │ │ │ ├── LICENSE-protobuf-java.txt │ │ │ ├── LICENSE-reflections.txt │ │ │ ├── LICENSE-slf4j.txt │ │ │ └── ui-licenses/ │ │ │ ├── LICENSE-@babel-polyfill.txt │ │ │ ├── LICENSE-antd.txt │ │ │ ├── LICENSE-babel-eslint.txt │ │ │ ├── LICENSE-babel-plugin-dva-hmr.txt │ │ │ ├── LICENSE-babel-plugin-import.txt │ │ │ ├── LICENSE-babel-plugin-module-resolver.txt │ │ │ ├── LICENSE-babel-plugin-transform-decorators-legacy.txt │ │ │ ├── LICENSE-classnames.txt │ │ │ ├── LICENSE-cross-env.txt │ │ │ ├── LICENSE-cross-port-killer.txt │ │ │ ├── LICENSE-dayjs.txt │ │ │ ├── LICENSE-dva-loading.txt │ │ │ ├── LICENSE-dva.txt │ │ │ ├── LICENSE-enquire-js.txt │ │ │ ├── LICENSE-enzyme.txt │ │ │ ├── LICENSE-eslint-config-airbnb.txt │ │ │ ├── LICENSE-eslint-config-prettier.txt │ │ │ ├── LICENSE-eslint-plugin-babel.txt │ │ │ ├── LICENSE-eslint-plugin-compat.txt │ │ │ ├── LICENSE-eslint-plugin-import.txt │ │ │ ├── LICENSE-eslint-plugin-jsx-ally.txt │ │ │ ├── LICENSE-eslint-plugin-markdown.txt │ │ │ ├── LICENSE-eslint-plugin-react.txt │ │ │ ├── LICENSE-eslint.txt │ │ │ ├── LICENSE-gh-pages.txt │ │ │ ├── LICENSE-husky.txt │ │ │ ├── LICENSE-lint-staged.txt │ │ │ ├── LICENSE-lodash-decorators.txt │ │ │ ├── LICENSE-lodash.txt │ │ │ ├── LICENSE-mockjs.txt │ │ │ ├── LICENSE-omit.js.txt │ │ │ ├── LICENSE-path-to-regexp.txt │ │ │ ├── LICENSE-postgresql.txt │ │ │ ├── LICENSE-prettier.txt │ │ │ ├── LICENSE-pro-download.txt │ │ │ ├── LICENSE-prop-types.txt │ │ │ ├── LICENSE-qs.txt │ │ │ ├── LICENSE-react-container-query.txt │ │ │ ├── LICENSE-react-document-title.txt │ │ │ ├── LICENSE-react-dom.txt │ │ │ ├── LICENSE-react-fittext.txt │ │ │ ├── LICENSE-react-intl-universal.txt │ │ │ ├── LICENSE-react-loadable.txt │ │ │ ├── LICENSE-react-logger.txt │ │ │ ├── LICENSE-react-resizable.txt │ │ │ ├── LICENSE-react.txt │ │ │ ├── LICENSE-redbox-react.txt │ │ │ ├── LICENSE-redux-logger.txt │ │ │ ├── LICENSE-regenerator-runtime.txt │ │ │ ├── LICENSE-roadhog.txt │ │ │ ├── LICENSE-setprototypeof.txt │ │ │ ├── LICENSE-stylelint-config-prettier.txt │ │ │ ├── LICENSE-stylelint-config-standard.txt │ │ │ ├── LICENSE-stylelint.txt │ │ │ └── LICENSE-url-polyfill.txt │ │ └── resources/ │ │ ├── bin/ │ │ │ ├── start.bat │ │ │ ├── start.sh │ │ │ ├── stop.bat │ │ │ └── stop.sh │ │ └── logback.xml │ ├── shenyu-bootstrap-dist/ │ │ ├── docker/ │ │ │ ├── Dockerfile │ │ │ ├── entrypoint.sh │ │ │ └── logback.xml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ └── binary.xml │ │ ├── release-docs/ │ │ │ ├── LICENSE │ │ │ ├── NOTICE │ │ │ ├── README.txt │ │ │ └── licenses/ │ │ │ ├── LICENSE-HdrHistogram.txt │ │ │ ├── LICENSE-Java-WebSocket.txt │ │ │ ├── LICENSE-LatencyUtils.txt │ │ │ ├── LICENSE-activation.txt │ │ │ ├── LICENSE-animal-sniffer.txt │ │ │ ├── LICENSE-antlr.txt │ │ │ ├── LICENSE-asm.txt │ │ │ ├── LICENSE-aspectjweaver.txt │ │ │ ├── LICENSE-bcpkix-jdk15on.txt │ │ │ ├── LICENSE-bcprov-jdk15on.txt │ │ │ ├── LICENSE-checker-qual.txt │ │ │ ├── LICENSE-consul.txt │ │ │ ├── LICENSE-google-auth-library-java.txt │ │ │ ├── LICENSE-jakarta.activation-api.txt │ │ │ ├── LICENSE-jakarta.annotation-api.txt │ │ │ ├── LICENSE-jakarta.el.txt │ │ │ ├── LICENSE-jakarta.xml.bind-api.txt │ │ │ ├── LICENSE-javax.mail.txt │ │ │ ├── LICENSE-javax.servlet-api.txt │ │ │ ├── LICENSE-jaxb-api.txt │ │ │ ├── LICENSE-jboss.txt │ │ │ ├── LICENSE-jcl-over-slf4j.txt │ │ │ ├── LICENSE-jersey.txt │ │ │ ├── LICENSE-jni-rs.txt │ │ │ ├── LICENSE-jul-to-slf4j.txt │ │ │ ├── LICENSE-logback.txt │ │ │ ├── LICENSE-motan.txt │ │ │ ├── LICENSE-mxparser.txt │ │ │ ├── LICENSE-perfmark.txt │ │ │ ├── LICENSE-protobuf-java.txt │ │ │ ├── LICENSE-reactive-streams.txt │ │ │ ├── LICENSE-slf4j.txt │ │ │ ├── LICENSE-stringtemplate4.txt │ │ │ ├── LICENSE-tars.txt │ │ │ ├── LICENSE-wasi-cap-std-sync.txt │ │ │ ├── LICENSE-wasi-common.txt │ │ │ ├── LICENSE-wasmtime-wasi.txt │ │ │ ├── LICENSE-wasmtime.txt │ │ │ ├── LICENSE-xstream.txt │ │ │ └── LICENSE-zstd-jni.txt │ │ └── resources/ │ │ ├── bin/ │ │ │ ├── start.bat │ │ │ ├── start.sh │ │ │ ├── stop.bat │ │ │ └── stop.sh │ │ └── logback.xml │ ├── shenyu-docker-compose-dist/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ └── source.xml │ │ └── resources/ │ │ ├── docker-compose.yaml │ │ └── install.sh │ └── shenyu-src-dist/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── assembly/ │ └── source.xml ├── shenyu-e2e/ │ ├── .gitignore │ ├── pom.xml │ ├── script/ │ │ ├── storage_init.sh │ │ ├── storage_init_mysql.sh │ │ └── storage_init_postgres.sh │ ├── shenyu-e2e-case/ │ │ ├── compose/ │ │ │ ├── storage/ │ │ │ │ ├── shenyu-storage-h2.yml │ │ │ │ ├── shenyu-storage-mysql.yml │ │ │ │ ├── shenyu-storage-opengauss.yml │ │ │ │ └── shenyu-storage-postgres.yml │ │ │ └── sync/ │ │ │ ├── shenyu-nacos.yml │ │ │ ├── shenyu-sync-etcd-eureka.yml │ │ │ ├── shenyu-sync-etcd.yml │ │ │ ├── shenyu-sync-http-eureka.yml │ │ │ ├── shenyu-sync-http.yml │ │ │ ├── shenyu-sync-websocket-cluster-jdbc.yml │ │ │ ├── shenyu-sync-websocket-cluster-zookeeper.yml │ │ │ ├── shenyu-sync-websocket-eureka.yml │ │ │ ├── shenyu-sync-websocket.yml │ │ │ ├── shenyu-sync-zookeeper-eureka.yml │ │ │ └── shenyu-sync-zookeeper.yml │ │ ├── k8s/ │ │ │ ├── script/ │ │ │ │ ├── healthcheck.sh │ │ │ │ ├── init/ │ │ │ │ │ ├── mysql_container_init.sh │ │ │ │ │ ├── opengauss_container_init.sh │ │ │ │ │ └── postgres_container_init.sh │ │ │ │ └── storage/ │ │ │ │ ├── storage_init_mysql.sh │ │ │ │ ├── storage_init_opengauss.sh │ │ │ │ └── storage_init_postgres.sh │ │ │ ├── shenyu-etcd.yml │ │ │ ├── shenyu-mysql.yml │ │ │ ├── shenyu-nacos.yml │ │ │ ├── shenyu-opengauss.yml │ │ │ ├── shenyu-postgres.yml │ │ │ ├── shenyu-zookeeper.yml │ │ │ └── sync/ │ │ │ ├── shenyu-admin-etcd.yml │ │ │ ├── shenyu-admin-http.yml │ │ │ ├── shenyu-admin-nacos.yml │ │ │ ├── shenyu-admin-websocket.yml │ │ │ ├── shenyu-admin-zookeeper.yml │ │ │ ├── shenyu-bootstrap-etcd.yml │ │ │ ├── shenyu-bootstrap-http.yml │ │ │ ├── shenyu-bootstrap-nacos.yml │ │ │ ├── shenyu-bootstrap-websocket.yml │ │ │ ├── shenyu-bootstrap-zookeeper.yml │ │ │ └── shenyu-cm.yml │ │ ├── pom.xml │ │ ├── shenyu-e2e-case-apache-dubbo/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-apache-dubbo-sync-compose.sh │ │ │ │ └── shenyu-examples-dubbo-compose.yml │ │ │ ├── docker-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-apache-dubbo-sync.sh │ │ │ │ └── shenyu-examples-dubbo.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── apachedubbo/ │ │ │ ├── ApacheDubboPluginCases.java │ │ │ ├── ApacheDubboPluginTest.java │ │ │ └── DataSynTest.java │ │ ├── shenyu-e2e-case-cluster/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ ├── e2e-cluster-jdbc-compose.sh │ │ │ │ │ └── e2e-cluster-zookeeper-compose.sh │ │ │ │ └── shenyu-examples-http-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ ├── e2e-cluster-jdbc.sh │ │ │ │ │ ├── e2e-cluster-zookeeper.sh │ │ │ │ │ ├── healthcheck.sh │ │ │ │ │ └── services-cluster.list │ │ │ │ ├── shenyu-cluster-jdbc.yml │ │ │ │ └── shenyu-cluster-zookeeper.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyue/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── cluster/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-grpc/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-grpc-sync-compose.sh │ │ │ │ └── shenyu-examples-grpc-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-grpc-sync.sh │ │ │ │ └── shenyu-examples-grpc.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── grpc/ │ │ │ ├── DataSynTest.java │ │ │ ├── GrpcPluginCases.java │ │ │ └── GrpcPluginTest.java │ │ ├── shenyu-e2e-case-http/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync-compose.sh │ │ │ │ ├── shenyu-examples-http-compose.yml │ │ │ │ └── shenyu-rocketmq-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync.sh │ │ │ │ ├── shenyu-examples-http.yml │ │ │ │ └── shenyu-rocketmq.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── http/ │ │ │ ├── DataSynTest.java │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-logging-kafka/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-logging-kafka-compose.sh │ │ │ │ ├── shenyu-examples-http-compose.yml │ │ │ │ └── shenyu-kafka-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync.sh │ │ │ │ └── shenyu-kafka.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── logging/ │ │ │ └── kafka/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-logging-rocketmq/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-logging-rocketmq-compose.sh │ │ │ │ ├── shenyu-examples-http-compose.yml │ │ │ │ └── shenyu-rocketmq-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-http-sync.sh │ │ │ │ └── shenyu-kafka.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── logging/ │ │ │ └── rocketmq/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ ├── shenyu-e2e-case-motan/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── motan/ │ │ │ ├── MotanPluginCases.java │ │ │ └── MotanPluginTest.java │ │ ├── shenyu-e2e-case-sofa/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-sofa-sync-compose.sh │ │ │ │ └── shenyu-examples-sofa-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-sofa-sync.sh │ │ │ │ └── shenyu-examples-sofa.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── sofa/ │ │ │ ├── DataSynTest.java │ │ │ ├── SofaPluginCases.java │ │ │ └── SofaPluginTest.java │ │ ├── shenyu-e2e-case-spring-cloud/ │ │ │ ├── compose/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-springcloud-sync-compose.sh │ │ │ │ └── shenyu-examples-springcloud-compose.yml │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ └── e2e-springcloud-sync.sh │ │ │ │ ├── shenyu-cm.yml │ │ │ │ ├── shenyu-examples-eureka.yml │ │ │ │ └── shenyu-examples-springcloud.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── springcloud/ │ │ │ ├── DataSynTest.java │ │ │ ├── SpringCloudPluginCases.java │ │ │ └── SpringCloudPluginTest.java │ │ ├── shenyu-e2e-case-storage/ │ │ │ ├── compose/ │ │ │ │ └── script/ │ │ │ │ ├── e2e-h2-compose.sh │ │ │ │ ├── e2e-mysql-compose.sh │ │ │ │ ├── e2e-opengauss-compose.sh │ │ │ │ ├── e2e-postgres-compose.sh │ │ │ │ └── e2e-storage-compose.sh │ │ │ ├── k8s/ │ │ │ │ ├── script/ │ │ │ │ │ ├── e2e-h2.sh │ │ │ │ │ ├── e2e-mysql.sh │ │ │ │ │ ├── e2e-opengauss.sh │ │ │ │ │ ├── e2e-postgres.sh │ │ │ │ │ ├── healthcheck.sh │ │ │ │ │ ├── services-h2.list │ │ │ │ │ ├── services-mysql.list │ │ │ │ │ └── services-postgres.list │ │ │ │ ├── shenyu-app-service-h2.yml │ │ │ │ ├── shenyu-app-service-mysql.yml │ │ │ │ ├── shenyu-app-service-opengauss.yml │ │ │ │ ├── shenyu-app-service-postgres.yml │ │ │ │ ├── shenyu-deployment-h2.yml │ │ │ │ ├── shenyu-deployment-mysql.yml │ │ │ │ ├── shenyu-deployment-opengauss.yml │ │ │ │ └── shenyu-deployment-postgres.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── testcase/ │ │ │ └── divide/ │ │ │ ├── DividePluginCases.java │ │ │ └── DividePluginTest.java │ │ └── shenyu-e2e-case-websocket/ │ │ ├── compose/ │ │ │ ├── script/ │ │ │ │ └── e2e-websocket-sync-compose.sh │ │ │ └── shenyu-examples-websocket-compose.yml │ │ ├── k8s/ │ │ │ ├── script/ │ │ │ │ └── e2e-websocket-sync.sh │ │ │ └── shenyu-examples-websocket.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyue/ │ │ └── e2e/ │ │ └── testcase/ │ │ └── websocket/ │ │ ├── DataSynTest.java │ │ ├── WebSocketPluginCases.java │ │ └── WebSocketPluginTest.java │ ├── shenyu-e2e-client/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ ├── client/ │ │ │ │ ├── BaseClient.java │ │ │ │ ├── EnvironmentClient.java │ │ │ │ ├── ExternalServiceClient.java │ │ │ │ ├── WaitDataSync.java │ │ │ │ ├── admin/ │ │ │ │ │ └── AdminClient.java │ │ │ │ └── gateway/ │ │ │ │ └── GatewayClient.java │ │ │ └── matcher/ │ │ │ ├── RuleMatcher.java │ │ │ └── SelectorMatcher.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── client/ │ │ │ └── admin/ │ │ │ └── AdminClientTest.java │ │ └── resources/ │ │ └── log4j2.xml │ ├── shenyu-e2e-common/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ ├── annotation/ │ │ │ │ ├── ExternalService.java │ │ │ │ ├── ShenYuAdminClient.java │ │ │ │ ├── ShenYuEnvironmentClient.java │ │ │ │ ├── ShenYuGatewayClient.java │ │ │ │ └── ShenYuInjectable.java │ │ │ ├── common/ │ │ │ │ ├── IdGenerator.java │ │ │ │ ├── IdManagers.java │ │ │ │ ├── NameUtils.java │ │ │ │ ├── RequestLogConsumer.java │ │ │ │ └── TableView.java │ │ │ ├── config/ │ │ │ │ └── ServiceConfigure.java │ │ │ ├── constant/ │ │ │ │ └── Constants.java │ │ │ ├── enums/ │ │ │ │ └── ServiceTypeEnum.java │ │ │ ├── model/ │ │ │ │ ├── MatchMode.java │ │ │ │ ├── Plugin.java │ │ │ │ ├── ResourcesData.java │ │ │ │ ├── SelectorType.java │ │ │ │ ├── ShenYuResult.java │ │ │ │ ├── data/ │ │ │ │ │ ├── BindingData.java │ │ │ │ │ ├── Condition.java │ │ │ │ │ ├── ConditionData.java │ │ │ │ │ ├── MetaData.java │ │ │ │ │ ├── NamespaceSyncData.java │ │ │ │ │ ├── PluginData.java │ │ │ │ │ ├── QueryCondition.java │ │ │ │ │ ├── ResourceData.java │ │ │ │ │ ├── RuleCacheData.java │ │ │ │ │ ├── RuleData.java │ │ │ │ │ ├── RuleQueryCondition.java │ │ │ │ │ ├── SearchCondition.java │ │ │ │ │ ├── SelectorCacheData.java │ │ │ │ │ ├── SelectorData.java │ │ │ │ │ └── SelectorQueryCondition.java │ │ │ │ ├── handle/ │ │ │ │ │ ├── DivideRuleHandle.java │ │ │ │ │ ├── DivideUpstream.java │ │ │ │ │ ├── DubboHandler.java │ │ │ │ │ ├── DubboRuleHandle.java │ │ │ │ │ ├── DubboSelectorHandle.java │ │ │ │ │ ├── GrpcSelectorHandle.java │ │ │ │ │ ├── PluginHandle.java │ │ │ │ │ ├── RuleHandle.java │ │ │ │ │ ├── SpringCloudRuleHandle.java │ │ │ │ │ ├── SpringCloudSelectorHandle.java │ │ │ │ │ └── Upstreams.java │ │ │ │ ├── request/ │ │ │ │ │ └── RequestVO.java │ │ │ │ └── response/ │ │ │ │ ├── FakeResourceDTO.java │ │ │ │ ├── LoginInfo.java │ │ │ │ ├── MetaDataDTO.java │ │ │ │ ├── NamespacePluginDTO.java │ │ │ │ ├── PaginatedResources.java │ │ │ │ ├── Pagination.java │ │ │ │ ├── PluginDTO.java │ │ │ │ ├── ResourceDTO.java │ │ │ │ ├── RuleDTO.java │ │ │ │ ├── SearchedResources.java │ │ │ │ └── SelectorDTO.java │ │ │ └── template/ │ │ │ └── ResourceDataTemplate.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── common/ │ │ │ └── TableViewTest.java │ │ └── resources/ │ │ └── log4j2.xml │ └── shenyu-e2e-engine/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── e2e/ │ │ │ └── engine/ │ │ │ ├── ShenYuExtension.java │ │ │ ├── ShenYuExtensionContext.java │ │ │ ├── ShenYuLogExtension.java │ │ │ ├── annotation/ │ │ │ │ ├── ShenYuScenario.java │ │ │ │ ├── ShenYuScenarioParameter.java │ │ │ │ ├── ShenYuTest.java │ │ │ │ └── ShenYuValue.java │ │ │ ├── config/ │ │ │ │ └── ShenYuEngineConfigure.java │ │ │ ├── scenario/ │ │ │ │ ├── ShenYuScenarioInvocationContextProvider.java │ │ │ │ ├── ShenYuScenarioParameterResolver.java │ │ │ │ ├── ShenYuScenarioProvider.java │ │ │ │ ├── ShenYuScenarioSupplier.java │ │ │ │ ├── function/ │ │ │ │ │ ├── Checker.java │ │ │ │ │ ├── Deleter.java │ │ │ │ │ ├── HttpChecker.java │ │ │ │ │ ├── HttpCheckers.java │ │ │ │ │ ├── HttpVerifier.java │ │ │ │ │ ├── HttpWaiting.java │ │ │ │ │ ├── Verifier.java │ │ │ │ │ ├── WaitForHelper.java │ │ │ │ │ ├── Waiting.java │ │ │ │ │ ├── WebSocketChecker.java │ │ │ │ │ ├── WebSocketCheckers.java │ │ │ │ │ └── WebSocketVerifier.java │ │ │ │ └── specification/ │ │ │ │ ├── AfterEachSpec.java │ │ │ │ ├── BeforeEachSpec.java │ │ │ │ ├── CaseSpec.java │ │ │ │ ├── ScenarioSpec.java │ │ │ │ ├── ScenarioSpecLogProxy.java │ │ │ │ ├── ShenYuAfterEachSpec.java │ │ │ │ ├── ShenYuBeforeEachSpec.java │ │ │ │ ├── ShenYuCaseSpec.java │ │ │ │ └── ShenYuScenarioSpec.java │ │ │ └── utils/ │ │ │ └── SocketUtils.java │ │ └── resources/ │ │ └── log4j2.xml │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── e2e/ │ │ ├── engine/ │ │ │ ├── ShenYuEngineTest.java │ │ │ └── function/ │ │ │ └── WaitForHelperTest.java │ │ └── k8s/ │ │ └── engine/ │ │ └── ShenYuE2eExtensionTest.java │ └── resources/ │ └── docker-compose.yml ├── shenyu-examples/ │ ├── pom.xml │ ├── shenyu-examples-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── common/ │ │ │ └── aop/ │ │ │ ├── InterceptorConfiguration.java │ │ │ ├── Log.java │ │ │ ├── LogInterceptor.java │ │ │ └── package-info.java │ │ └── resources/ │ │ ├── 1.txt │ │ ├── 2.txt │ │ └── META-INF/ │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-examples-dubbo/ │ │ ├── pom.xml │ │ ├── shenyu-examples-apache-dubbo-service/ │ │ │ ├── Dockerfile │ │ │ ├── k8s/ │ │ │ │ ├── ingress.yml │ │ │ │ ├── shenyu-examples-dubbo.yml │ │ │ │ └── shenyu-zookeeper.yml │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── service/ │ │ │ │ ├── TestApacheDubboApplication.java │ │ │ │ └── impl/ │ │ │ │ ├── DubboMultiParamServiceImpl.java │ │ │ │ ├── DubboProtobufServiceImpl.java │ │ │ │ └── DubboTestServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── spring-dubbo.xml │ │ ├── shenyu-examples-apache-dubbo-service-annotation/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ ├── apache-dubbo-class-test-api.http │ │ │ │ └── apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── service/ │ │ │ │ └── annotation/ │ │ │ │ ├── TestApacheDubboAnnotationApplication.java │ │ │ │ └── impl/ │ │ │ │ ├── DubboClassMultiParamServiceImpl.java │ │ │ │ ├── DubboClassTestServiceImpl.java │ │ │ │ ├── DubboMultiParamServiceImpl.java │ │ │ │ ├── DubboProtobufServiceImpl.java │ │ │ │ └── DubboTestServiceImpl.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── shenyu-examples-apache-dubbo-service-xml/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ ├── apache-dubbo-class-test-api.http │ │ │ │ └── apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── service/ │ │ │ │ └── xml/ │ │ │ │ ├── TestApacheDubboXmlApplication.java │ │ │ │ └── impl/ │ │ │ │ ├── DubboClassMultiParamServiceImpl.java │ │ │ │ ├── DubboClassTestServiceImpl.java │ │ │ │ ├── DubboMultiParamServiceImpl.java │ │ │ │ ├── DubboProtobufServiceImpl.java │ │ │ │ └── DubboTestServiceImpl.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── shenyu.xml │ │ │ └── spring-dubbo.xml │ │ └── shenyu-examples-dubbo-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── dubbo/ │ │ │ └── api/ │ │ │ ├── entity/ │ │ │ │ ├── ComplexBeanTest.java │ │ │ │ ├── DubboTest.java │ │ │ │ └── ListResp.java │ │ │ └── service/ │ │ │ ├── DubboClassMultiParamService.java │ │ │ ├── DubboClassTestService.java │ │ │ ├── DubboMultiParamService.java │ │ │ └── DubboTestService.java │ │ └── proto/ │ │ └── DubboTestProto.proto │ ├── shenyu-examples-eureka/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ └── shenyu-examples-eureka.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── eureka/ │ │ │ └── EurekaServerApplication.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── shenyu-examples-grpc/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ └── shenyu-examples-grpc.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── grpc-class-annotation-test-api.http │ │ │ └── grpc-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── grpc/ │ │ │ ├── ShenyuGrpcServerBuilder.java │ │ │ ├── ShenyuTestGrpcApplication.java │ │ │ ├── controller/ │ │ │ │ └── GrpcTestController.java │ │ │ ├── demo/ │ │ │ │ ├── EventServiceImpl.java │ │ │ │ └── HelloServiceImpl.java │ │ │ ├── echo/ │ │ │ │ └── EchoServiceImpl.java │ │ │ └── stream/ │ │ │ └── StreamServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── proto/ │ │ ├── echo.proto │ │ ├── event.proto │ │ ├── hello.proto │ │ └── stream.proto │ ├── shenyu-examples-http/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ ├── script/ │ │ │ │ ├── healthcheck.sh │ │ │ │ └── services.list │ │ │ ├── shenyu-deployment.yml │ │ │ ├── shenyu-examples-http.yml │ │ │ ├── shenyu-service.yml │ │ │ └── shenyu-zookeeper.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── http-test-api-local.http │ │ │ └── http-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── http/ │ │ │ ├── ShenyuTestHttpApplication.java │ │ │ ├── config/ │ │ │ │ └── HttpServerConfig.java │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OauthController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── RequestController.java │ │ │ │ ├── ShenyuClientPathController.java │ │ │ │ ├── SpringMvcMappingPathController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── BigObject.java │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ ├── RequestDTO.java │ │ │ │ └── UserDTO.java │ │ │ ├── result/ │ │ │ │ └── ResultBean.java │ │ │ └── router/ │ │ │ └── ShenyuTestHttpRouter.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-http-swagger3/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── script/ │ │ │ │ ├── healthcheck.sh │ │ │ │ └── services.list │ │ │ ├── shenyu-deployment.yml │ │ │ ├── shenyu-examples-http-deployment.yml │ │ │ ├── shenyu-examples-http-service.yml │ │ │ └── shenyu-service.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── http/ │ │ │ ├── ShenyuTestSwaggerApplication.java │ │ │ ├── config/ │ │ │ │ ├── HttpServerConfig.java │ │ │ │ └── SwaggerConfiguration.java │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OauthController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── RequestController.java │ │ │ │ ├── ShenyuClientPathController.java │ │ │ │ ├── SpringMvcMappingPathController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ ├── RequestDTO.java │ │ │ │ └── UserDTO.java │ │ │ ├── result/ │ │ │ │ ├── ResultBean.java │ │ │ │ └── TreeResult.java │ │ │ └── router/ │ │ │ └── ShenyuTestHttpRouter.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-https/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── https-test-api-local.http │ │ │ └── https-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── https/ │ │ │ ├── ShenyuTestHttpsApplication.java │ │ │ ├── configuration/ │ │ │ │ └── HttpsConfiguration.java │ │ │ ├── controller/ │ │ │ │ ├── OrderController.java │ │ │ │ └── UploadController.java │ │ │ └── dto/ │ │ │ └── OrderDTO.java │ │ └── resources/ │ │ ├── application.yml │ │ └── keystore.p12 │ ├── shenyu-examples-mcp/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ ├── ShenyuTestMcpApplication.java │ │ │ ├── controller/ │ │ │ │ └── OrderController.java │ │ │ └── dto/ │ │ │ └── OrderDTO.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-motan/ │ │ ├── pom.xml │ │ ├── shenyu-examples-motan-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── motan/ │ │ │ └── service/ │ │ │ ├── MotanClassDemoService.java │ │ │ ├── MotanDemoService.java │ │ │ └── MotanTest.java │ │ └── shenyu-examples-motan-service/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ ├── shenyu-examples-motan.yml │ │ │ └── shenyu-zookeeper.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── motan-class-test-api.http │ │ │ └── motan-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── motan/ │ │ │ └── service/ │ │ │ ├── TestMotanApplication.java │ │ │ └── impl/ │ │ │ ├── MotanClassDemoServiceImpl.java │ │ │ └── MotanDemoServiceImpl.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-plugin/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── examples/ │ │ └── plugin/ │ │ ├── ext/ │ │ │ ├── ExtPluginDataHandler.java │ │ │ ├── ExtendsShenyuBerBean.java │ │ │ ├── ExtendsShenyuPlugin.java │ │ │ └── ExtendsShenyuZerBean.java │ │ └── simple/ │ │ └── CustomShenyuPlugin.java │ ├── shenyu-examples-sdk/ │ │ ├── pom.xml │ │ ├── shenyu-examples-sdk-dubbo/ │ │ │ ├── pom.xml │ │ │ ├── shenyu-examples-sdk-apache-dubbo-consumer/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── http/ │ │ │ │ │ └── sdk-apache-dubbo-test-api.http │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── sdk/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── consumer/ │ │ │ │ │ ├── ShenyuSdkApacheDubboExampleApplication.java │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── ShenyuApacheDubboClientApi.java │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── ShenyuApacheDubboSdkExampleController.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── DubboRequestBody.java │ │ │ │ │ │ └── DubboTestSaveRequest.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── ShenyuApacheDubboClientAplFallBack.java │ │ │ │ └── resources/ │ │ │ │ └── application.yml │ │ │ └── shenyu-examples-sdk-apache-dubbo-provider/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-apache-dubbo-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── apache/ │ │ │ │ └── provider/ │ │ │ │ └── ShenyuApacheDubboXmlProviderApplication.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── shenyu.xml │ │ │ └── spring-dubbo.xml │ │ ├── shenyu-examples-sdk-feign/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-http-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── feign/ │ │ │ │ ├── ShenyuSdkHttpExampleApplication.java │ │ │ │ ├── api/ │ │ │ │ │ └── ShenyuHttpClientApi.java │ │ │ │ ├── config/ │ │ │ │ │ └── SdkConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── HttpServiceController.java │ │ │ │ │ └── ShenyuHttpSdkExampleController.java │ │ │ │ └── dto/ │ │ │ │ └── SdkTestDto.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ ├── shenyu-examples-sdk-grpc/ │ │ │ ├── pom.xml │ │ │ ├── shenyu-examples-sdk-grpc-consumer/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── http/ │ │ │ │ │ └── sdk-grpc-test-api.http │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── sdk/ │ │ │ │ │ └── grpc/ │ │ │ │ │ └── consumer/ │ │ │ │ │ ├── ShenyuSdkGrpcConsumerApplication.java │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── ShenyuGrpcClientApi.java │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── ShenyuSdkGrpcConsumerController.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── EchoRequest.java │ │ │ │ │ ├── EchoResponse.java │ │ │ │ │ ├── GrpcData.java │ │ │ │ │ ├── HelloRequest.java │ │ │ │ │ └── HelloResponse.java │ │ │ │ └── resources/ │ │ │ │ └── application.yaml │ │ │ └── shenyu-examples-sdk-grpc-provider/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── grpc/ │ │ │ │ └── provider/ │ │ │ │ └── ShenyuSdkGrpcProviderApplication.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ ├── shenyu-examples-sdk-http/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-http-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── http/ │ │ │ │ ├── ShenyuSdkHttpExampleApplication.java │ │ │ │ ├── api/ │ │ │ │ │ └── ShenyuHttpClientApi.java │ │ │ │ ├── config/ │ │ │ │ │ └── SdkConfig.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── HttpServiceController.java │ │ │ │ │ └── ShenyuHttpSdkExampleController.java │ │ │ │ └── dto/ │ │ │ │ └── SdkTestDto.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── shenyu-examples-sdk-springcloud/ │ │ ├── pom.xml │ │ ├── shenyu-examples-sdk-springcloud-consumer/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── http/ │ │ │ │ └── sdk-spring-cloud-test-api.http │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── examples/ │ │ │ │ └── sdk/ │ │ │ │ └── springcloud/ │ │ │ │ └── consumer/ │ │ │ │ ├── ShenyuSdkSpringCloudConsumerExampleApplication.java │ │ │ │ ├── api/ │ │ │ │ │ └── ShenyuSpringCloudClientApi.java │ │ │ │ ├── controller/ │ │ │ │ │ └── ShenyuSdkSpringCloudConsumerController.java │ │ │ │ ├── dto/ │ │ │ │ │ └── OrderDTO.java │ │ │ │ └── impl/ │ │ │ │ ├── ShenyuSpringCloudClientApiFallback.java │ │ │ │ └── ShenyuSpringCloudClientApiFallbackFactory.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── shenyu-examples-sdk-springcloud-provider/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── sdk/ │ │ │ └── springcloud/ │ │ │ └── provider/ │ │ │ └── ShenyuSdkSpringCloudProviderApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-sofa/ │ │ ├── README.md │ │ ├── pom.xml │ │ ├── shenyu-examples-sofa-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── sofa/ │ │ │ └── api/ │ │ │ ├── entity/ │ │ │ │ ├── SofaComplexTypeBean.java │ │ │ │ └── SofaSimpleTypeBean.java │ │ │ └── service/ │ │ │ ├── SofaClientMultiParamService.java │ │ │ ├── SofaClientSingleParamService.java │ │ │ ├── SofaMultiParamService.java │ │ │ └── SofaSingleParamService.java │ │ └── shenyu-examples-sofa-service/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ ├── shenyu-examples-sofa.yml │ │ │ └── shenyu-zookeeper.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ └── sofa-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── sofa/ │ │ │ └── service/ │ │ │ ├── TestSofaApplication.java │ │ │ └── impl/ │ │ │ ├── SofaClientMultiParamServiceImpl.java │ │ │ ├── SofaClientSingleParamServiceImpl.java │ │ │ ├── SofaMultiParamServiceImpl.java │ │ │ └── SofaSingleParamServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ └── invoke-server-example.xml │ ├── shenyu-examples-springcloud/ │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ └── shenyu-examples-springcloud.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── spring-cloud-test-api-local.http │ │ │ └── spring-cloud-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── springcloud/ │ │ │ ├── ShenyuTestSpringCloudApplication.java │ │ │ ├── controller/ │ │ │ │ ├── AllController.java │ │ │ │ ├── NewFeatureController.java │ │ │ │ ├── OrderController.java │ │ │ │ ├── TestController.java │ │ │ │ └── UploadController.java │ │ │ └── dto/ │ │ │ ├── EntityResult.java │ │ │ ├── OrderDTO.java │ │ │ └── UserDTO.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-examples-springmvc/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── http-test-api-local.http │ │ │ └── http-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── springmvc/ │ │ │ ├── TestSpringMvcApplication.java │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OrderController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ └── UserDTO.java │ │ │ └── result/ │ │ │ └── ResultBean.java │ │ └── resources/ │ │ ├── application.yml │ │ └── context/ │ │ └── shenyu.xml │ ├── shenyu-examples-springmvc-tomcat/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ ├── http-test-api-local.http │ │ │ └── http-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── springmvc/ │ │ │ ├── controller/ │ │ │ │ ├── HttpTestController.java │ │ │ │ ├── OrderController.java │ │ │ │ └── UploadController.java │ │ │ ├── dto/ │ │ │ │ ├── OAuth2DTO.java │ │ │ │ ├── OrderDTO.java │ │ │ │ └── UserDTO.java │ │ │ └── result/ │ │ │ └── ResultBean.java │ │ ├── resources/ │ │ │ ├── application.properties │ │ │ ├── context/ │ │ │ │ └── shenyu.xml │ │ │ └── spring-mvc.xml │ │ └── webapp/ │ │ └── WEB-INF/ │ │ └── web.xml │ ├── shenyu-examples-tars/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── http/ │ │ │ └── tars-test-api.http │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── tars/ │ │ │ ├── ShenyuTestTarsApplication.java │ │ │ └── servant/ │ │ │ └── testapp/ │ │ │ ├── HelloServant.java │ │ │ ├── OrderServant.java │ │ │ ├── UserServant.java │ │ │ └── impl/ │ │ │ ├── HelloServantImpl.java │ │ │ ├── OrderServantImpl.java │ │ │ └── UserServantImpl.java │ │ └── resources/ │ │ ├── ShenyuExampleServer.ShenyuExampleApp.config.conf │ │ ├── application.yml │ │ └── test.tars │ └── shenyu-examples-websocket/ │ ├── pom.xml │ ├── shenyu-example-spring-annotation-websocket/ │ │ ├── Dockerfile │ │ ├── k8s/ │ │ │ ├── ingress.yml │ │ │ └── shenyu-example-spring-annotation-websocket.yml │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── websocket/ │ │ │ ├── TestAnnotationWebsocketApplication.java │ │ │ ├── config/ │ │ │ │ └── WebSocketConfig.java │ │ │ ├── service/ │ │ │ │ ├── SaveFile.java │ │ │ │ └── SaveFileImpl.java │ │ │ └── ws/ │ │ │ ├── UploadController.java │ │ │ └── WsServerEndpoint.java │ │ └── resources/ │ │ └── application.yml │ ├── shenyu-example-spring-native-websocket/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── examples/ │ │ │ └── websocket/ │ │ │ ├── TestNativeWebsocketApplication.java │ │ │ ├── config/ │ │ │ │ ├── WebSocketConfig.java │ │ │ │ └── WsSessionManager.java │ │ │ ├── controller/ │ │ │ │ └── TestHttpController.java │ │ │ ├── handler/ │ │ │ │ └── HttpAuthHandler.java │ │ │ └── interceptor/ │ │ │ └── WebSocketInterceptor.java │ │ └── resources/ │ │ └── application.yml │ └── shenyu-example-spring-reactive-websocket/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── examples/ │ │ └── websocket/ │ │ ├── TestReactiveWebsocketApplication.java │ │ ├── config/ │ │ │ └── WebSocketConfiguration.java │ │ └── handler/ │ │ ├── EchoHandler.java │ │ └── UploadFileHandler.java │ └── resources/ │ └── application.yml ├── shenyu-infra/ │ ├── pom.xml │ ├── shenyu-infra-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── infra/ │ │ └── common/ │ │ ├── InfraConstants.java │ │ └── InfraParentProperties.java │ ├── shenyu-infra-etcd/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── infra/ │ │ │ │ └── etcd/ │ │ │ │ ├── autoconfig/ │ │ │ │ │ ├── ConditionOnSyncEtcd.java │ │ │ │ │ ├── EtcdConfiguration.java │ │ │ │ │ └── EtcdProperties.java │ │ │ │ ├── client/ │ │ │ │ │ └── EtcdClient.java │ │ │ │ └── config/ │ │ │ │ └── EtcdConfig.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── infra/ │ │ └── etcd/ │ │ ├── client/ │ │ │ └── EtcdClientTest.java │ │ └── properties/ │ │ ├── AbstractConfigurationTest.java │ │ └── EtcdPropertiesTest.java │ ├── shenyu-infra-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── infra/ │ │ │ └── nacos/ │ │ │ ├── autoconfig/ │ │ │ │ ├── ConditionOnSyncNacos.java │ │ │ │ └── NacosProperties.java │ │ │ └── config/ │ │ │ ├── NacosACMConfig.java │ │ │ └── NacosConfig.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── infra/ │ │ └── nacos/ │ │ ├── autoconfig/ │ │ │ └── NacosPropertiesTest.java │ │ └── config/ │ │ ├── NacosACMConfigTest.java │ │ └── NacosConfigTest.java │ ├── shenyu-infra-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── infra/ │ │ │ └── redis/ │ │ │ ├── RedisConfigProperties.java │ │ │ ├── RedisConnectionFactory.java │ │ │ ├── ShenyuReactiveRedisTemplate.java │ │ │ ├── ShenyuReactiveScriptExecutor.java │ │ │ └── serializer/ │ │ │ ├── ByteArrayRedisSerializer.java │ │ │ └── ShenyuRedisSerializationContext.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── infra/ │ │ └── redis/ │ │ ├── RedisConfigPropertiesTest.java │ │ ├── RedisConnectionFactoryTest.java │ │ └── ShenyuRedisSerializationContextTest.java │ └── shenyu-infra-zookeeper/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── infra/ │ │ │ └── zookeeper/ │ │ │ ├── autoconfig/ │ │ │ │ ├── ConditionOnSyncZookeeper.java │ │ │ │ ├── ZookeeperConfiguration.java │ │ │ │ └── ZookeeperProperties.java │ │ │ ├── client/ │ │ │ │ └── ZookeeperClient.java │ │ │ └── config/ │ │ │ └── ZookeeperConfig.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── infra/ │ └── zookeeper/ │ ├── client/ │ │ └── ZookeeperClientTest.java │ └── properties/ │ ├── AbstractConfigurationTest.java │ └── ZookeeperPropertiesTest.java ├── shenyu-integrated-test/ │ ├── README.md │ ├── pom.xml │ ├── shenyu-integrated-test-apache-dubbo/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── ApacheDubboIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── apache/ │ │ └── dubbo/ │ │ ├── ApacheDubboPluginMultiParamTest.java │ │ ├── ApacheDubboPluginSharedThreadPoolTest.java │ │ └── ApacheDubboPluginTest.java │ ├── shenyu-integrated-test-combination/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── combination/ │ │ │ │ ├── CombinationIntegratedBootstrap.java │ │ │ │ └── controller/ │ │ │ │ └── SharedThreadPoolController.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── combination/ │ │ ├── MultiRequestPluginTest.java │ │ ├── RequestAndResponsePluginTest.java │ │ ├── RpcAndRequestPluginTest.java │ │ └── SharedThreadPoolTest.java │ ├── shenyu-integrated-test-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integratedtest/ │ │ └── common/ │ │ ├── AbstractPluginDataInit.java │ │ ├── AbstractTest.java │ │ ├── dto/ │ │ │ ├── AdminResponse.java │ │ │ ├── BigObject.java │ │ │ ├── ComplexBeanTest.java │ │ │ ├── ComplexBeanTestWithNameRequest.java │ │ │ ├── ComplexObjects.java │ │ │ ├── DubboTest.java │ │ │ ├── DubboTestListRequest.java │ │ │ ├── DubboTestListWithIdAndNameRequest.java │ │ │ ├── IdArrayAndNameRequest.java │ │ │ ├── IdStringArrayRequest.java │ │ │ ├── IdStringListRequest.java │ │ │ ├── IdsAndNameRequest.java │ │ │ ├── ListResp.java │ │ │ ├── ModifyResponseDTO.java │ │ │ ├── MotanDTO.java │ │ │ ├── OAuth2DTO.java │ │ │ ├── OrderDTO.java │ │ │ └── UserDTO.java │ │ ├── helper/ │ │ │ └── HttpHelper.java │ │ ├── result/ │ │ │ └── ResultBean.java │ │ └── utils/ │ │ └── ConfUtils.java │ ├── shenyu-integrated-test-grpc/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── grpc/ │ │ │ │ ├── GrpcIntegratedBootstrap.java │ │ │ │ └── dto/ │ │ │ │ └── GrpcResponse.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── grpc/ │ │ ├── GrpcPluginSharedThreadPoolTest.java │ │ └── GrpcPluginTest.java │ ├── shenyu-integrated-test-http/ │ │ ├── Dockerfile │ │ ├── config/ │ │ │ ├── broker.conf │ │ │ └── prometheus.yml │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── http/ │ │ │ │ └── HttpIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── http/ │ │ ├── DividePluginTest.java │ │ ├── HttpTestControllerTest.java │ │ ├── OrderControllerTest.java │ │ ├── RequestControllerTest.java │ │ ├── ShenyuClientPathControllerTest.java │ │ ├── SpringMvcMappingPathControllerTest.java │ │ ├── UploadControllerTest.java │ │ └── combination/ │ │ ├── CachePluginTest.java │ │ ├── ContextPathPluginTest.java │ │ ├── CryptorRequestPluginTest.java │ │ ├── CryptorResponsePluginTest.java │ │ ├── HystrixPluginTest.java │ │ ├── JwtPluginTest.java │ │ ├── LoggingElasticSearchPluginTest.java │ │ ├── LoggingPulsarPluginTest.java │ │ ├── LoggingRabbitMqPluginTest.java │ │ ├── MetricsPluginTest.java │ │ ├── MockPluginTest.java │ │ ├── ModifyResponsePluginTest.java │ │ ├── MqttPluginTest.java │ │ ├── ParamMappingPluginTest.java │ │ ├── RateLimiterPluginTest.java │ │ ├── RedirectPluginTest.java │ │ ├── RequestPluginTest.java │ │ ├── Resilience4JPluginTest.java │ │ ├── RewritePluginTest.java │ │ ├── RocketMqPluginTest.java │ │ ├── SentinelPluginTest.java │ │ ├── SignPluginVersionOneTest.java │ │ ├── SignPluginVersionTwoTest.java │ │ └── WafPluginTest.java │ ├── shenyu-integrated-test-https/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── https/ │ │ │ │ └── HttpsIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── keystore.p12 │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── https/ │ │ ├── HttpsDividePluginTest.java │ │ └── HttpsUploadFileTest.java │ ├── shenyu-integrated-test-k8s-ingress-apache-dubbo/ │ │ ├── Dockerfile │ │ ├── deploy/ │ │ │ ├── deploy-shenyu.yaml │ │ │ └── kind-config.yaml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── build_k8s_cluster.sh │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── k8s/ │ │ │ │ └── ingress/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── ApacheDubboIngressControllerIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── k8s/ │ │ └── ingress/ │ │ └── apache/ │ │ └── dubbo/ │ │ └── ApacheDubboPluginTest.java │ ├── shenyu-integrated-test-k8s-ingress-grpc/ │ │ ├── Dockerfile │ │ ├── deploy/ │ │ │ ├── deploy-shenyu.yaml │ │ │ └── kind-config.yaml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── build_k8s_cluster.sh │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── k8s/ │ │ │ │ └── ingress/ │ │ │ │ └── grpc/ │ │ │ │ └── GrpcIngressControllerIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── k8s/ │ │ └── ingress/ │ │ └── grpc/ │ │ └── GrpcPluginTest.java │ ├── shenyu-integrated-test-k8s-ingress-http/ │ │ ├── Dockerfile │ │ ├── deploy/ │ │ │ ├── deploy-shenyu.yaml │ │ │ └── kind-config.yaml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── build_k8s_cluster.sh │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── k8s/ │ │ │ │ └── ingress/ │ │ │ │ └── IngressControllerBootstrap.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── k8s/ │ │ └── ingress/ │ │ └── DividePluginTest.java │ ├── shenyu-integrated-test-k8s-ingress-motan/ │ │ ├── Dockerfile │ │ ├── deploy/ │ │ │ ├── deploy-shenyu.yaml │ │ │ └── kind-config.yaml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── build_k8s_cluster.sh │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── k8s/ │ │ │ │ └── ingress/ │ │ │ │ └── motan/ │ │ │ │ └── MotanIngressControllerIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── k8s/ │ │ └── ingress/ │ │ └── motan/ │ │ └── MotanPluginTest.java │ ├── shenyu-integrated-test-k8s-ingress-sofa/ │ │ ├── Dockerfile │ │ ├── deploy/ │ │ │ ├── deploy-shenyu.yaml │ │ │ └── kind-config.yaml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── build_k8s_cluster.sh │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── k8s/ │ │ │ │ └── ingress/ │ │ │ │ └── sofa/ │ │ │ │ ├── SofaIngressControllerIntegratedBootstrap.java │ │ │ │ └── dto/ │ │ │ │ └── SofaTestData.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── k8s/ │ │ └── ingress/ │ │ └── sofa/ │ │ └── SofaPluginShareThreadPoolTest.java │ ├── shenyu-integrated-test-k8s-ingress-websocket/ │ │ ├── Dockerfile │ │ ├── deploy/ │ │ │ ├── deploy-shenyu.yaml │ │ │ └── kind-config.yaml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── build_k8s_cluster.sh │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── k8s/ │ │ │ │ └── ingress/ │ │ │ │ └── websocket/ │ │ │ │ └── WebsocketIngressIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── k8s/ │ │ └── ingress/ │ │ └── websocket/ │ │ └── WebsocketPluginTest.java │ ├── shenyu-integrated-test-motan/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── motan/ │ │ │ │ └── MotanIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── motan/ │ │ ├── MotanPluginShareThreadPoolTest.java │ │ └── MotanPluginTest.java │ ├── shenyu-integrated-test-rewrite/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── rewrite/ │ │ │ │ └── RewriteIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── rewrite/ │ │ └── ContextPathAndRewritePluginTest.java │ ├── shenyu-integrated-test-sdk-apache-dubbo/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── SdkApacheDubboIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── apache/ │ │ └── dubbo/ │ │ └── ApacheDubboPluginTest.java │ ├── shenyu-integrated-test-sdk-http/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── sdk/ │ │ │ │ └── http/ │ │ │ │ ├── SdkHttpIntegratedBootstrap.java │ │ │ │ └── dto/ │ │ │ │ └── SdkTestDto.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── sdk/ │ │ └── http/ │ │ └── SdkHttpIntegratedTest.java │ ├── shenyu-integrated-test-sofa/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── sofa/ │ │ │ │ ├── SofaIntegratedBootstrap.java │ │ │ │ └── dto/ │ │ │ │ └── SofaTestData.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── sofa/ │ │ ├── SofaPluginShareThreadPoolTest.java │ │ └── SofaPluginTest.java │ ├── shenyu-integrated-test-spring-cloud/ │ │ ├── Dockerfile │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── script/ │ │ │ ├── healthcheck.sh │ │ │ └── services.list │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integratedtest/ │ │ │ │ └── springcloud/ │ │ │ │ └── SpringCloudIntegratedBootstrap.java │ │ │ └── resources/ │ │ │ ├── application-local.yml │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integratedtest/ │ │ └── springcloud/ │ │ ├── SpringCloudPluginTest.java │ │ └── SpringCloudPluginUploadTest.java │ ├── shenyu-integrated-test-upload-plugin/ │ │ ├── docker-compose.yml │ │ ├── pom.xml │ │ ├── shenyu-custom-plugin/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── custom/ │ │ │ └── CustomPlugin.java │ │ ├── shenyu-integrated-test-admin/ │ │ │ ├── Dockerfile │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── assembly/ │ │ │ │ └── binary.xml │ │ │ └── resources/ │ │ │ └── bin/ │ │ │ └── start.sh │ │ └── shenyu-integrated-test-upload-plugin-case/ │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── integrated/ │ │ │ │ └── test/ │ │ │ │ └── upload/ │ │ │ │ └── plugin/ │ │ │ │ └── ShenyuUploadPluginIntegratedApplication.java │ │ │ └── resources/ │ │ │ └── application.yaml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── integrated/ │ │ └── test/ │ │ └── admin/ │ │ └── AdminPluginUploadTest.java │ └── shenyu-integrated-test-websocket/ │ ├── Dockerfile │ ├── docker-compose.yml │ ├── pom.xml │ ├── script/ │ │ ├── healthcheck.sh │ │ └── services.list │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── integrated/ │ │ │ └── test/ │ │ │ └── websocket/ │ │ │ └── WebsocketIntegratedBootstrap.java │ │ └── resources/ │ │ ├── application-local.yml │ │ └── application.yml │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── integrated/ │ └── test/ │ └── websocket/ │ ├── UploadControllerTest.java │ └── WebsocketPluginTest.java ├── shenyu-kubernetes-controller/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── k8s/ │ │ ├── cache/ │ │ │ ├── IngressCache.java │ │ │ ├── IngressSecretCache.java │ │ │ ├── IngressSelectorCache.java │ │ │ ├── K8sResourceCache.java │ │ │ ├── SelectorCache.java │ │ │ └── ServiceIngressCache.java │ │ ├── common/ │ │ │ ├── IngressConfiguration.java │ │ │ ├── IngressConstants.java │ │ │ └── ShenyuMemoryConfig.java │ │ ├── parser/ │ │ │ ├── ContextPathParser.java │ │ │ ├── DivideIngressParser.java │ │ │ ├── DubboIngressParser.java │ │ │ ├── GrpcParser.java │ │ │ ├── IngressParser.java │ │ │ ├── K8sResourceListParser.java │ │ │ ├── K8sResourceParser.java │ │ │ ├── MotanIngressParser.java │ │ │ ├── SofaParser.java │ │ │ └── WebSocketParser.java │ │ ├── reconciler/ │ │ │ ├── EndpointsReconciler.java │ │ │ └── IngressReconciler.java │ │ └── repository/ │ │ └── ShenyuCacheRepository.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── k8s/ │ ├── DivideIngressReconcilerTest.java │ ├── DubboReconcilerTest.java │ ├── MotanReconcilerTest.java │ └── WebSocketReconcilerTest.java ├── shenyu-loadbalancer/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── loadbalancer/ │ │ │ ├── cache/ │ │ │ │ ├── UpstreamCacheManager.java │ │ │ │ ├── UpstreamCheckTask.java │ │ │ │ └── UpstreamWithSelectorId.java │ │ │ ├── entity/ │ │ │ │ ├── LoadBalanceData.java │ │ │ │ └── Upstream.java │ │ │ ├── factory/ │ │ │ │ └── LoadBalancerFactory.java │ │ │ └── spi/ │ │ │ ├── AbstractLoadBalancer.java │ │ │ ├── HashLoadBalancer.java │ │ │ ├── LeastActiveLoadBalance.java │ │ │ ├── LoadBalancer.java │ │ │ ├── P2cLoadBalancer.java │ │ │ ├── RandomLoadBalancer.java │ │ │ ├── RoundRobinLoadBalancer.java │ │ │ └── ShortestResponseLoadBalancer.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── shenyu/ │ │ └── org.apache.shenyu.loadbalancer.spi.LoadBalancer │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── loadbalancer/ │ ├── cache/ │ │ ├── UpstreamCacheManagerTest.java │ │ ├── UpstreamCheckTaskTest.java │ │ └── UpstreamWithSelectorIdTest.java │ ├── entity/ │ │ └── UpstreamTest.java │ ├── factory/ │ │ └── LoadBalancerFactoryTest.java │ └── spi/ │ ├── HashLoadBalanceTest.java │ ├── HashLoadBalancerTest.java │ ├── LeastActiveLoadBalanceTest.java │ ├── P2cLoadBalancerTest.java │ ├── RandomLoadBalancerTest.java │ ├── RoundRobinLoadBalanceTest.java │ └── ShortestResponseLoadBalancerTest.java ├── shenyu-plugin/ │ ├── pom.xml │ ├── shenyu-plugin-ai/ │ │ ├── pom.xml │ │ ├── shenyu-plugin-ai-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── common/ │ │ │ │ ├── config/ │ │ │ │ │ └── AiCommonConfig.java │ │ │ │ ├── spring/ │ │ │ │ │ └── ai/ │ │ │ │ │ ├── AiModelFactory.java │ │ │ │ │ ├── factory/ │ │ │ │ │ │ ├── DeepSeekModelFactory.java │ │ │ │ │ │ └── OpenAiModelFactory.java │ │ │ │ │ └── registry/ │ │ │ │ │ └── AiModelFactoryRegistry.java │ │ │ │ ├── strategy/ │ │ │ │ │ ├── FallbackStrategy.java │ │ │ │ │ └── SimpleModelFallbackStrategy.java │ │ │ │ └── utils/ │ │ │ │ └── ResponseBodyCaptureUtils.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── ai/ │ │ │ └── common/ │ │ │ ├── spring/ │ │ │ │ └── ai/ │ │ │ │ ├── factory/ │ │ │ │ │ ├── DeepSeekModelFactoryTest.java │ │ │ │ │ └── OpenAiModelFactoryTest.java │ │ │ │ └── registry/ │ │ │ │ └── AiModelFactoryRegistryTest.java │ │ │ └── utils/ │ │ │ └── ResponseBodyCaptureUtilsTest.java │ │ ├── shenyu-plugin-ai-prompt/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── prompt/ │ │ │ │ ├── AiPromptPlugin.java │ │ │ │ └── handler/ │ │ │ │ └── AiPromptPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── ai/ │ │ │ └── prompt/ │ │ │ ├── AiPromptPluginTest.java │ │ │ └── handler/ │ │ │ └── AiPromptPluginDataHandlerTest.java │ │ ├── shenyu-plugin-ai-proxy/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── proxy/ │ │ │ │ └── enhanced/ │ │ │ │ ├── AiProxyPlugin.java │ │ │ │ ├── cache/ │ │ │ │ │ ├── AiProxyApiKeyCache.java │ │ │ │ │ └── ChatClientCache.java │ │ │ │ ├── handler/ │ │ │ │ │ └── AiProxyPluginHandler.java │ │ │ │ ├── service/ │ │ │ │ │ ├── AiProxyConfigService.java │ │ │ │ │ └── AiProxyExecutorService.java │ │ │ │ └── subscriber/ │ │ │ │ └── CommonAiProxyApiKeyDataSubscriber.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── ai/ │ │ │ └── proxy/ │ │ │ └── enhanced/ │ │ │ ├── AiProxyPluginTest.java │ │ │ ├── cache/ │ │ │ │ └── AiProxyApiKeyCacheTest.java │ │ │ ├── service/ │ │ │ │ ├── AiProxyConfigServiceTest.java │ │ │ │ └── AiProxyExecutorServiceTest.java │ │ │ └── subscriber/ │ │ │ └── CommonAiProxyApiKeyDataSubscriberTest.java │ │ ├── shenyu-plugin-ai-request-transformer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── transformer/ │ │ │ │ └── request/ │ │ │ │ ├── AiRequestTransformerPlugin.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ChatClientCache.java │ │ │ │ ├── handler/ │ │ │ │ │ └── AiRequestTransformerPluginHandler.java │ │ │ │ └── template/ │ │ │ │ └── AiRequestTransformerTemplate.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── ai/ │ │ │ └── transformer/ │ │ │ └── request/ │ │ │ ├── AiRequestTransformerPluginTest.java │ │ │ ├── cache/ │ │ │ │ └── ChatClientCacheTest.java │ │ │ ├── handler/ │ │ │ │ └── AiRequestTransformerPluginHandlerTest.java │ │ │ └── template/ │ │ │ └── AiRequestTransformerTemplateTest.java │ │ ├── shenyu-plugin-ai-response-transformer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── transformer/ │ │ │ │ └── response/ │ │ │ │ ├── AiResponseTransformerPlugin.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ChatClientCache.java │ │ │ │ ├── handler/ │ │ │ │ │ └── AiResponseTransformerPluginHandler.java │ │ │ │ └── template/ │ │ │ │ └── AiResponseTransformerTemplate.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── ai/ │ │ │ └── transformer/ │ │ │ └── response/ │ │ │ ├── AiResponseTransformerPluginTest.java │ │ │ ├── handler/ │ │ │ │ └── AiResponseTransformerPluginHandlerTest.java │ │ │ └── template/ │ │ │ └── AiResponseTransformerTemplateTest.java │ │ └── shenyu-plugin-ai-token-limiter/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── ai/ │ │ └── token/ │ │ └── limiter/ │ │ ├── AiTokenLimiterPlugin.java │ │ └── handler/ │ │ └── AiTokenLimiterPluginHandler.java │ ├── shenyu-plugin-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── api/ │ │ ├── HandleCache.java │ │ ├── RemoteAddressResolver.java │ │ ├── ShenyuPlugin.java │ │ ├── ShenyuPluginChain.java │ │ ├── context/ │ │ │ ├── ShenyuContext.java │ │ │ ├── ShenyuContextBuilder.java │ │ │ └── ShenyuContextDecorator.java │ │ ├── exception/ │ │ │ └── ResponsiveException.java │ │ ├── result/ │ │ │ ├── DefaultShenyuEntity.java │ │ │ ├── DefaultShenyuResult.java │ │ │ ├── ShenyuResult.java │ │ │ ├── ShenyuResultEnum.java │ │ │ └── ShenyuResultWrap.java │ │ └── utils/ │ │ ├── BodyParamUtils.java │ │ ├── RequestQueryCodecUtil.java │ │ ├── RequestUrlUtils.java │ │ ├── SpringBeanUtils.java │ │ └── WebFluxResultUtils.java │ ├── shenyu-plugin-base/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── base/ │ │ │ │ ├── AbstractShenyuPlugin.java │ │ │ │ ├── alert/ │ │ │ │ │ ├── AlarmSender.java │ │ │ │ │ ├── AlarmService.java │ │ │ │ │ ├── AlarmServiceImpl.java │ │ │ │ │ └── AlarmThreadPoolExecutor.java │ │ │ │ ├── cache/ │ │ │ │ │ ├── BaseDataCache.java │ │ │ │ │ ├── CommonDiscoveryUpstreamDataSubscriber.java │ │ │ │ │ ├── CommonHandleCache.java │ │ │ │ │ ├── CommonMetaDataSubscriber.java │ │ │ │ │ ├── CommonPluginDataSubscriber.java │ │ │ │ │ ├── CommonProxySelectorDataSubscriber.java │ │ │ │ │ ├── MatchDataCache.java │ │ │ │ │ ├── MetaDataCache.java │ │ │ │ │ └── PluginHandlerEvent.java │ │ │ │ ├── condition/ │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── CookieParameterData.java │ │ │ │ │ │ ├── DomainParameterData.java │ │ │ │ │ │ ├── HeaderParameterData.java │ │ │ │ │ │ ├── HostParameterData.java │ │ │ │ │ │ ├── IpParameterData.java │ │ │ │ │ │ ├── ParameterData.java │ │ │ │ │ │ ├── ParameterDataFactory.java │ │ │ │ │ │ ├── PostParameterData.java │ │ │ │ │ │ ├── QueryParameterData.java │ │ │ │ │ │ ├── RequestMethodParameterData.java │ │ │ │ │ │ └── URIParameterData.java │ │ │ │ │ ├── judge/ │ │ │ │ │ │ ├── BlankPredicateJudge.java │ │ │ │ │ │ ├── ContainsPredicateJudge.java │ │ │ │ │ │ ├── EndsWithPredicateJudge.java │ │ │ │ │ │ ├── EqualsPredicateJudge.java │ │ │ │ │ │ ├── ExcludePredicateJudge.java │ │ │ │ │ │ ├── MatchPredicateJudge.java │ │ │ │ │ │ ├── PathPatternPredicateJudge.java │ │ │ │ │ │ ├── PredicateJudge.java │ │ │ │ │ │ ├── PredicateJudgeFactory.java │ │ │ │ │ │ ├── RegexPredicateJudge.java │ │ │ │ │ │ ├── StartsWithPredicateJudge.java │ │ │ │ │ │ ├── TimerAfterPredicateJudge.java │ │ │ │ │ │ └── TimerBeforePredicateJudge.java │ │ │ │ │ └── strategy/ │ │ │ │ │ ├── AbstractMatchStrategy.java │ │ │ │ │ ├── AndMatchStrategy.java │ │ │ │ │ ├── MatchStrategy.java │ │ │ │ │ ├── MatchStrategyFactory.java │ │ │ │ │ └── OrMatchStrategy.java │ │ │ │ ├── event/ │ │ │ │ │ └── TrieEvent.java │ │ │ │ ├── fallback/ │ │ │ │ │ └── FallbackHandler.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── DiscoveryUpstreamDataHandler.java │ │ │ │ │ ├── MetaDataHandler.java │ │ │ │ │ ├── PluginDataHandler.java │ │ │ │ │ └── ProxySelectorDataHandler.java │ │ │ │ ├── support/ │ │ │ │ │ ├── BodyInserterContext.java │ │ │ │ │ ├── CachedBodyOutputMessage.java │ │ │ │ │ ├── RequestDecorator.java │ │ │ │ │ └── ResponseDecorator.java │ │ │ │ ├── trie/ │ │ │ │ │ ├── ShenyuTrie.java │ │ │ │ │ ├── ShenyuTrieListener.java │ │ │ │ │ └── ShenyuTrieNode.java │ │ │ │ └── utils/ │ │ │ │ ├── BeanHolder.java │ │ │ │ ├── CacheKeyUtils.java │ │ │ │ ├── HostAddressUtils.java │ │ │ │ ├── HttpParamConverter.java │ │ │ │ ├── LoadbalancerUtils.java │ │ │ │ ├── MediaTypeUtils.java │ │ │ │ ├── PathMatchUtils.java │ │ │ │ ├── ResponseUtils.java │ │ │ │ └── ServerWebExchangeUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ ├── org.apache.shenyu.plugin.base.condition.data.ParameterData │ │ │ ├── org.apache.shenyu.plugin.base.condition.judge.PredicateJudge │ │ │ └── org.apache.shenyu.plugin.base.condition.strategy.MatchStrategy │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── base/ │ │ │ ├── AbstractShenyuPluginTest.java │ │ │ ├── cache/ │ │ │ │ ├── BaseDataCacheTest.java │ │ │ │ ├── CommonHandleCacheTest.java │ │ │ │ ├── CommonPluginDataSubscriberTest.java │ │ │ │ ├── EmptyMockCommonHandleCache.java │ │ │ │ └── MatchDataCacheTest.java │ │ │ ├── condition/ │ │ │ │ ├── data/ │ │ │ │ │ ├── CookieParameterDataTest.java │ │ │ │ │ ├── HeaderParameterDataTest.java │ │ │ │ │ ├── HostParameterDataTest.java │ │ │ │ │ ├── IpParameterDataTest.java │ │ │ │ │ ├── ParameterDataFactoryTest.java │ │ │ │ │ ├── PostParameterDataTest.java │ │ │ │ │ ├── QueryParameterDataTest.java │ │ │ │ │ ├── RequestMethodParameterDataTest.java │ │ │ │ │ └── URIParameterDataTest.java │ │ │ │ ├── judge/ │ │ │ │ │ └── PredicateJudgeFactoryTest.java │ │ │ │ └── strategy/ │ │ │ │ ├── AbstractMatchStrategyTest.java │ │ │ │ ├── AndMatchStrategyTest.java │ │ │ │ ├── MatchStrategyFactoryTest.java │ │ │ │ └── OrMatchStrategyTest.java │ │ │ ├── fallback/ │ │ │ │ └── FallbackHandlerTest.java │ │ │ ├── handler/ │ │ │ │ └── PluginDataHandlerTest.java │ │ │ ├── trie/ │ │ │ │ ├── ShenyuRuleTrieTest.java │ │ │ │ └── ShenyuSelectorTrieTest.java │ │ │ └── utils/ │ │ │ ├── CacheKeyUtilsTest.java │ │ │ ├── HostAddressUtilsTest.java │ │ │ ├── HttpParamConverterTest.java │ │ │ ├── MatchStrategyFactoryTest.java │ │ │ ├── PathMatchUtilsTest.java │ │ │ ├── ShenyuResultWrapTest.java │ │ │ ├── SingletonTest.java │ │ │ └── UriUtilsTest.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── shenyu/ │ │ └── org.apache.shenyu.plugin.base.condition.strategy.MatchStrategy │ ├── shenyu-plugin-cache/ │ │ ├── pom.xml │ │ ├── shenyu-plugin-cache-handler/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── cache/ │ │ │ │ ├── CachePlugin.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ApplicationConfigCache.java │ │ │ │ ├── config/ │ │ │ │ │ └── CacheConfig.java │ │ │ │ ├── handler/ │ │ │ │ │ └── CachePluginDataHandler.java │ │ │ │ └── utils/ │ │ │ │ └── CacheUtils.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── cache/ │ │ │ ├── ApplicationConfigCacheTest.java │ │ │ ├── CachePluginDataHandlerTest.java │ │ │ └── CachePluginTest.java │ │ ├── shenyu-plugin-cache-memory/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── cache/ │ │ │ │ │ └── memory/ │ │ │ │ │ ├── MemoryCache.java │ │ │ │ │ └── MemoryCacheBuilder.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── shenyu/ │ │ │ │ └── org.apache.shenyu.plugin.cache.ICacheBuilder │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── cache/ │ │ │ └── memory/ │ │ │ └── MemoryCacheTest.java │ │ ├── shenyu-plugin-cache-redis/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── cache/ │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisCache.java │ │ │ │ │ └── RedisCacheBuilder.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── shenyu/ │ │ │ │ └── org.apache.shenyu.plugin.cache.ICacheBuilder │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── cache/ │ │ │ └── redis/ │ │ │ └── RedisCacheTest.java │ │ └── shenyu-plugin-cache-spi/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── cache/ │ │ ├── ICache.java │ │ └── ICacheBuilder.java │ ├── shenyu-plugin-context-path/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── context/ │ │ │ └── path/ │ │ │ ├── ContextPathPlugin.java │ │ │ └── handler/ │ │ │ └── ContextPathPluginDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── context/ │ │ └── path/ │ │ ├── ContextPathPluginTest.java │ │ └── handler/ │ │ └── ContextPathPluginDataHandlerTest.java │ ├── shenyu-plugin-fault-tolerance/ │ │ ├── pom.xml │ │ ├── shenyu-plugin-hystrix/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── hystrix/ │ │ │ │ ├── HystrixPlugin.java │ │ │ │ ├── builder/ │ │ │ │ │ └── HystrixBuilder.java │ │ │ │ ├── command/ │ │ │ │ │ ├── Command.java │ │ │ │ │ ├── HystrixCommand.java │ │ │ │ │ └── HystrixCommandOnThread.java │ │ │ │ └── handler/ │ │ │ │ └── HystrixPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── hystrix/ │ │ │ ├── HystrixPluginTest.java │ │ │ ├── builder/ │ │ │ │ └── HystrixBuilderTest.java │ │ │ ├── command/ │ │ │ │ ├── HystrixCommandOnThreadTest.java │ │ │ │ └── HystrixCommandTest.java │ │ │ └── handler/ │ │ │ └── HystrixPluginDataHandlerTest.java │ │ ├── shenyu-plugin-ratelimiter/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── ratelimiter/ │ │ │ │ │ ├── RateLimiterPlugin.java │ │ │ │ │ ├── algorithm/ │ │ │ │ │ │ ├── AbstractRateLimiterAlgorithm.java │ │ │ │ │ │ ├── ConcurrentRateLimiterAlgorithm.java │ │ │ │ │ │ ├── LeakyBucketRateLimiterAlgorithm.java │ │ │ │ │ │ ├── RateLimiterAlgorithm.java │ │ │ │ │ │ ├── RateLimiterAlgorithmFactory.java │ │ │ │ │ │ ├── SlidingWindowRateLimiterAlgorithm.java │ │ │ │ │ │ └── TokenBucketRateLimiterAlgorithm.java │ │ │ │ │ ├── executor/ │ │ │ │ │ │ └── RedisRateLimiter.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── RateLimiterPluginDataHandler.java │ │ │ │ │ ├── resolver/ │ │ │ │ │ │ ├── RateLimiterKeyResolver.java │ │ │ │ │ │ ├── RateLimiterKeyResolverFactory.java │ │ │ │ │ │ ├── RemoteAddrKeyResolver.java │ │ │ │ │ │ └── WholeKeyResolver.java │ │ │ │ │ └── response/ │ │ │ │ │ └── RateLimiterResponse.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── scripts/ │ │ │ │ │ ├── concurrent_request_rate_limiter.lua │ │ │ │ │ ├── request_leaky_rate_limiter.lua │ │ │ │ │ ├── request_rate_limiter.lua │ │ │ │ │ └── sliding_window_request_rate_limiter.lua │ │ │ │ └── shenyu/ │ │ │ │ ├── org.apache.shenyu.plugin.ratelimiter.algorithm.RateLimiterAlgorithm │ │ │ │ └── org.apache.shenyu.plugin.ratelimiter.resolver.RateLimiterKeyResolver │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── ratelimiter/ │ │ │ ├── RateLimiterPluginTest.java │ │ │ ├── algorithm/ │ │ │ │ ├── AbstractRateLimiterAlgorithmTest.java │ │ │ │ ├── ConcurrentRateLimiterAlgorithmTest.java │ │ │ │ ├── LeakyBucketRateLimiterAlgorithmTest.java │ │ │ │ ├── RateLimiterAlgorithmFactoryTest.java │ │ │ │ ├── SlidingWindowRateLimiterAlgorithmTest.java │ │ │ │ └── TokenBucketRateLimiterAlgorithmTest.java │ │ │ ├── executor/ │ │ │ │ ├── RedisRateLimiterScriptsTest.java │ │ │ │ └── RedisRateLimiterTest.java │ │ │ ├── handler/ │ │ │ │ └── RateLimiterPluginDataHandlerTest.java │ │ │ └── resolver/ │ │ │ └── RateLimiterKeyResolverTest.java │ │ ├── shenyu-plugin-resilience4j/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── resilience4j/ │ │ │ │ ├── Resilience4JPlugin.java │ │ │ │ ├── build/ │ │ │ │ │ └── Resilience4JBuilder.java │ │ │ │ ├── conf/ │ │ │ │ │ └── Resilience4JConf.java │ │ │ │ ├── executor/ │ │ │ │ │ ├── CombinedExecutor.java │ │ │ │ │ ├── Executor.java │ │ │ │ │ └── RateLimiterExecutor.java │ │ │ │ ├── factory/ │ │ │ │ │ └── Resilience4JRegistryFactory.java │ │ │ │ └── handler/ │ │ │ │ └── Resilience4JHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── resilience4j/ │ │ │ ├── Resilience4JPluginTest.java │ │ │ ├── build/ │ │ │ │ └── Resilience4JBuilderTest.java │ │ │ ├── conf/ │ │ │ │ └── Resilience4JConfTest.java │ │ │ ├── core/ │ │ │ │ ├── CircuitBreakerTest.java │ │ │ │ └── RateLimiterTest.java │ │ │ ├── executor/ │ │ │ │ ├── CombinedExecutorTest.java │ │ │ │ └── RateLimiterExecutorTest.java │ │ │ └── handler/ │ │ │ └── Resilience4JHandlerTest.java │ │ └── shenyu-plugin-sentinel/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── sentinel/ │ │ │ ├── SentinelPlugin.java │ │ │ ├── fallback/ │ │ │ │ └── SentinelFallbackHandler.java │ │ │ └── handler/ │ │ │ └── SentinelRuleHandle.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── sentinel/ │ │ ├── SentinelPluginTest.java │ │ ├── fallback/ │ │ │ └── SentinelFallbackHandlerTest.java │ │ └── handler/ │ │ └── SentinelRuleHandleTest.java │ ├── shenyu-plugin-global/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── global/ │ │ │ ├── DefaultShenyuContextBuilder.java │ │ │ ├── GlobalPlugin.java │ │ │ └── subsciber/ │ │ │ └── MetaDataCacheSubscriber.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── global/ │ │ ├── DefaultShenyuContextBuilderTest.java │ │ ├── GlobalPluginTest.java │ │ ├── cache/ │ │ │ └── MetaDataCacheTest.java │ │ ├── fixture/ │ │ │ ├── FixtureHttpShenyuContextDecorator.java │ │ │ └── FixtureWebSocketShenyuContextDecorator.java │ │ └── subsciber/ │ │ └── MetaDataCacheSubscriberTest.java │ ├── shenyu-plugin-httpclient/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── httpclient/ │ │ │ ├── AbstractHttpClientPlugin.java │ │ │ ├── CustomRetryStrategy.java │ │ │ ├── DefaultRetryStrategy.java │ │ │ ├── ExponentialRetryBackoffStrategy.java │ │ │ ├── FixedRetryStrategy.java │ │ │ ├── NettyHttpClientPlugin.java │ │ │ ├── RetryStrategy.java │ │ │ ├── WebClientPlugin.java │ │ │ ├── config/ │ │ │ │ └── HttpClientProperties.java │ │ │ └── exception/ │ │ │ └── ShenyuTimeoutException.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── httpclient/ │ │ ├── HttpClientPropertiesTest.java │ │ ├── NettyHttpClientPluginTest.java │ │ ├── RetryStrategyTest.java │ │ └── WebClientPluginTest.java │ ├── shenyu-plugin-logging/ │ │ ├── pom.xml │ │ ├── shenyu-plugin-logging-aliyun-sls/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── aliyun/ │ │ │ │ └── sls/ │ │ │ │ ├── LoggingAliyunSlsPlugin.java │ │ │ │ ├── client/ │ │ │ │ │ └── AliyunSlsLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── AliyunSlsLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── AliyunLogCollectConfig.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingAliyunSlsPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── aliyun/ │ │ │ └── sls/ │ │ │ ├── LoggingAliyunSlsPluginTest.java │ │ │ ├── aliyunsls/ │ │ │ │ └── AliyunSlsLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── AliyunSlsLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── AliyunLogCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingAliyunSlsPluginDataHandlerTest.java │ │ ├── shenyu-plugin-logging-clickhouse/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── clickhouse/ │ │ │ │ ├── LoggingClickHousePlugin.java │ │ │ │ ├── client/ │ │ │ │ │ └── ClickHouseLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── ClickHouseLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── ClickHouseLogCollectConfig.java │ │ │ │ ├── constant/ │ │ │ │ │ └── ClickHouseLoggingConstant.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingClickHousePluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── clickhouse/ │ │ │ ├── LoggingClickHousePluginTest.java │ │ │ ├── client/ │ │ │ │ └── ClickHouseLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── ClickHouseLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── ClickHouseLogCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingClickHousePluginDataHandlerTest.java │ │ ├── shenyu-plugin-logging-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── common/ │ │ │ │ ├── AbstractLoggingPlugin.java │ │ │ │ ├── body/ │ │ │ │ │ ├── BodyWriter.java │ │ │ │ │ ├── LoggingServerHttpRequest.java │ │ │ │ │ └── LoggingServerHttpResponse.java │ │ │ │ ├── client/ │ │ │ │ │ ├── AbstractLogConsumeClient.java │ │ │ │ │ └── LogConsumeClient.java │ │ │ │ ├── collector/ │ │ │ │ │ ├── AbstractLogCollector.java │ │ │ │ │ └── LogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ ├── GenericApiConfig.java │ │ │ │ │ └── GenericGlobalConfig.java │ │ │ │ ├── constant/ │ │ │ │ │ └── GenericLoggingConstant.java │ │ │ │ ├── entity/ │ │ │ │ │ ├── CommonLoggingRuleHandle.java │ │ │ │ │ ├── LZ4CompressData.java │ │ │ │ │ └── ShenyuRequestLog.java │ │ │ │ ├── handler/ │ │ │ │ │ └── AbstractLogPluginDataHandler.java │ │ │ │ ├── sampler/ │ │ │ │ │ ├── CountSampler.java │ │ │ │ │ └── Sampler.java │ │ │ │ └── utils/ │ │ │ │ ├── LogCollectConfigUtils.java │ │ │ │ └── LogCollectUtils.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── common/ │ │ │ ├── body/ │ │ │ │ ├── BodyWriterTest.java │ │ │ │ └── LoggingServerHttpResponseTest.java │ │ │ ├── entity/ │ │ │ │ ├── LZ4CompressDataTest.java │ │ │ │ └── ShenyuRequestLogTest.java │ │ │ ├── sampler/ │ │ │ │ └── CountSamplerTest.java │ │ │ ├── test/ │ │ │ │ └── GenericGlobalConfigTest.java │ │ │ └── utils/ │ │ │ ├── LogCollectConfigUtilsTest.java │ │ │ └── LogCollectUtilsTest.java │ │ ├── shenyu-plugin-logging-console/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── console/ │ │ │ │ ├── LoggingConsolePlugin.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingConsolePluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── console/ │ │ │ └── LoggingConsolePluginTest.java │ │ ├── shenyu-plugin-logging-desensitize-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── desensitize/ │ │ │ │ │ └── api/ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── DataDesensitizeEnum.java │ │ │ │ │ ├── factory/ │ │ │ │ │ │ └── DataDesensitizeFactory.java │ │ │ │ │ ├── matcher/ │ │ │ │ │ │ └── KeyWordMatch.java │ │ │ │ │ ├── spi/ │ │ │ │ │ │ ├── AbstractShenyuDataDesensitize.java │ │ │ │ │ │ ├── CharacterReplaceDataDesensitize.java │ │ │ │ │ │ ├── Md5EncryptDataDesensitize.java │ │ │ │ │ │ └── ShenyuDataDesensitize.java │ │ │ │ │ └── utils/ │ │ │ │ │ └── DataDesensitizeUtils.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── shenyu/ │ │ │ │ └── org.apache.shenyu.plugin.logging.desensitize.api.spi.ShenyuDataDesensitize │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── desensitize/ │ │ │ └── api/ │ │ │ ├── factory/ │ │ │ │ └── DataDesensitizeFactoryTest.java │ │ │ ├── matcher/ │ │ │ │ └── KeyWordMatchTest.java │ │ │ ├── spi/ │ │ │ │ ├── CharacterReplaceDataDesensitizeTest.java │ │ │ │ └── Md5EncryptDataDesensitizeTest.java │ │ │ └── utils/ │ │ │ └── DataDesensitizeUtilsTest.java │ │ ├── shenyu-plugin-logging-elasticsearch/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── elasticsearch/ │ │ │ │ ├── LoggingElasticSearchPlugin.java │ │ │ │ ├── client/ │ │ │ │ │ └── ElasticSearchLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── ElasticSearchLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── ElasticSearchLogCollectConfig.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingElasticSearchPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── elasticsearch/ │ │ │ ├── LoggingElasticSearchPluginTest.java │ │ │ ├── client/ │ │ │ │ └── ElasticSearchLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── ElasticSearchLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── ElasticSearchLogCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingElasticSearchPluginDataHandlerTest.java │ │ ├── shenyu-plugin-logging-huawei-lts/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── huawei/ │ │ │ │ └── lts/ │ │ │ │ ├── LoggingHuaweiLtsPlugin.java │ │ │ │ ├── client/ │ │ │ │ │ └── HuaweiLtsLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── HuaweiLtsLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── HuaweiLogCollectConfig.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingHuaweiLtsPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── huawei/ │ │ │ └── lts/ │ │ │ ├── LoggingHuaweiLtsPluginTest.java │ │ │ ├── client/ │ │ │ │ └── HuaweiLtsLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── HuaweiLtsLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── HuaweiLogCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingHuaweiLtsPluginDataHandlerTest.java │ │ ├── shenyu-plugin-logging-kafka/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── kafka/ │ │ │ │ ├── LoggingKafkaPlugin.java │ │ │ │ ├── cache/ │ │ │ │ │ └── KafkaClientCache.java │ │ │ │ ├── client/ │ │ │ │ │ └── KafkaLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── KafkaLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── KafkaLogCollectConfig.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingKafkaPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── kafka/ │ │ │ ├── LoggingKafkaPluginTest.java │ │ │ ├── cache/ │ │ │ │ └── KafkaClientCacheTest.java │ │ │ ├── collector/ │ │ │ │ └── KafkaLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── KafkaLogCollectConfigTest.java │ │ │ ├── handler/ │ │ │ │ └── LoggingKafkaPluginDataHandlerTest.java │ │ │ └── kafka/ │ │ │ └── KafkaLogCollectClientTest.java │ │ ├── shenyu-plugin-logging-pulsar/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── pulsar/ │ │ │ │ ├── LoggingPulsarPlugin.java │ │ │ │ ├── client/ │ │ │ │ │ └── PulsarLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── PulsarLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── PulsarLogCollectConfig.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingPulsarPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── pulsar/ │ │ │ ├── LoggingPulsarPluginTest.java │ │ │ ├── client/ │ │ │ │ └── PulsarLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── PulsarLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── PulsarCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingPulsarPluginDataHandlerTest.java │ │ ├── shenyu-plugin-logging-rabbitmq/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── rabbitmq/ │ │ │ │ ├── LoggingRabbitmqPlugin.java │ │ │ │ ├── cache/ │ │ │ │ │ └── RabbitmqClientCache.java │ │ │ │ ├── client/ │ │ │ │ │ └── RabbitmqLogCollectClient.java │ │ │ │ ├── config/ │ │ │ │ │ └── RabbitmqLogCollectConfig.java │ │ │ │ ├── conllector/ │ │ │ │ │ └── RabbitmqLogCollector.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingRabbitmqPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── rabbitmq/ │ │ │ ├── LoggingRabbitmqPluginTest.java │ │ │ ├── cache/ │ │ │ │ └── RabbitmqClientCacheTest.java │ │ │ ├── client/ │ │ │ │ └── RabbitmqLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── RabbitmqLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── RabbitmqLogCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingRabbitmqPluginDataHandlerTest.java │ │ ├── shenyu-plugin-logging-rocketmq/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── rocketmq/ │ │ │ │ ├── LoggingRocketMQPlugin.java │ │ │ │ ├── client/ │ │ │ │ │ └── RocketMQLogCollectClient.java │ │ │ │ ├── collector/ │ │ │ │ │ └── RocketMQLogCollector.java │ │ │ │ ├── config/ │ │ │ │ │ └── RocketMQLogCollectConfig.java │ │ │ │ └── handler/ │ │ │ │ └── LoggingRocketMQPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── rocketmq/ │ │ │ ├── LoggingRocketMQPluginTest.java │ │ │ ├── client/ │ │ │ │ └── RocketMQLogCollectClientTest.java │ │ │ ├── collector/ │ │ │ │ └── RocketMQLogCollectorTest.java │ │ │ ├── config/ │ │ │ │ └── RocketMQLogCollectConfigTest.java │ │ │ └── handler/ │ │ │ └── LoggingRocketMQPluginDataHandlerTest.java │ │ └── shenyu-plugin-logging-tencent-cls/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── tencent/ │ │ │ └── cls/ │ │ │ ├── LoggingTencentClsPlugin.java │ │ │ ├── client/ │ │ │ │ └── TencentClsLogCollectClient.java │ │ │ ├── collector/ │ │ │ │ └── TencentClsSlsLogCollector.java │ │ │ ├── config/ │ │ │ │ └── TencentLogCollectConfig.java │ │ │ └── handler/ │ │ │ └── LoggingTencentClsPluginDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── tencent/ │ │ └── cls/ │ │ ├── LoggingTencentClsPluginTest.java │ │ ├── collector/ │ │ │ └── TencentClsSlsLogCollectorTest.java │ │ ├── config/ │ │ │ └── TencentLogCollectConfigTest.java │ │ ├── handler/ │ │ │ └── LoggingTencentClsPluginDataHandlerTest.java │ │ └── tencentcls/ │ │ └── TencentClsLogCollectClientTest.java │ ├── shenyu-plugin-mcp-server/ │ │ ├── MCP_TOOL_EXAMPLES.md │ │ ├── MCP_TOOL_EXAMPLES_EN.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── mcp/ │ │ │ └── server/ │ │ │ ├── McpServerPlugin.java │ │ │ ├── callback/ │ │ │ │ └── ShenyuToolCallback.java │ │ │ ├── definition/ │ │ │ │ └── ShenyuToolDefinition.java │ │ │ ├── handler/ │ │ │ │ └── McpServerPluginDataHandler.java │ │ │ ├── holder/ │ │ │ │ └── ShenyuMcpExchangeHolder.java │ │ │ ├── manager/ │ │ │ │ └── ShenyuMcpServerManager.java │ │ │ ├── model/ │ │ │ │ ├── McpServerToolParameter.java │ │ │ │ ├── ShenyuMcpServer.java │ │ │ │ └── ShenyuMcpServerTool.java │ │ │ ├── request/ │ │ │ │ ├── BodyWriterExchange.java │ │ │ │ ├── ParameterFormatter.java │ │ │ │ ├── RequestConfig.java │ │ │ │ └── RequestConfigHelper.java │ │ │ ├── response/ │ │ │ │ ├── NonCommittingMcpResponseDecorator.java │ │ │ │ └── ShenyuMcpResponseDecorator.java │ │ │ ├── session/ │ │ │ │ └── McpSessionHelper.java │ │ │ ├── transport/ │ │ │ │ ├── MessageHandlingResult.java │ │ │ │ ├── ShenyuSseServerTransportProvider.java │ │ │ │ ├── ShenyuStreamableHttpServerTransportProvider.java │ │ │ │ ├── SseEventFormatter.java │ │ │ │ └── StreamableHttpProviderBuilder.java │ │ │ └── utils/ │ │ │ └── JsonSchemaUtil.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── mcp/ │ │ │ └── server/ │ │ │ ├── McpServerPluginIntegrationTest.java │ │ │ ├── McpServerPluginTest.java │ │ │ ├── callback/ │ │ │ │ └── ShenyuToolCallbackTest.java │ │ │ ├── handler/ │ │ │ │ └── McpServerPluginDataHandlerTest.java │ │ │ ├── manager/ │ │ │ │ └── ShenyuMcpServerManagerTest.java │ │ │ ├── request/ │ │ │ │ └── RequestConfigHelperTest.java │ │ │ ├── transport/ │ │ │ │ └── ShenyuStreamableHttpServerTransportProviderTest.java │ │ │ └── utils/ │ │ │ └── JsonSchemaUtilTest.java │ │ └── resources/ │ │ └── application-test.yml │ ├── shenyu-plugin-metrics/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── metrics/ │ │ │ │ ├── MetricsPlugin.java │ │ │ │ ├── config/ │ │ │ │ │ └── Metric.java │ │ │ │ ├── constant/ │ │ │ │ │ └── LabelNames.java │ │ │ │ ├── enums/ │ │ │ │ │ └── MetricType.java │ │ │ │ ├── prometheus/ │ │ │ │ │ ├── PrometheusMetricsRegister.java │ │ │ │ │ └── PrometheusMetricsService.java │ │ │ │ ├── reporter/ │ │ │ │ │ └── MetricsReporter.java │ │ │ │ └── spi/ │ │ │ │ ├── MetricsRegister.java │ │ │ │ └── MetricsService.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ ├── org.apache.shenyu.plugin.metrics.spi.MetricsRegister │ │ │ └── org.apache.shenyu.plugin.metrics.spi.MetricsService │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── metrics/ │ │ ├── MetricsPluginTest.java │ │ ├── config/ │ │ │ └── MetricTest.java │ │ ├── prometheus/ │ │ │ ├── PrometheusMetricsRegisterTest.java │ │ │ └── PrometheusMetricsServiceTest.java │ │ └── reporter/ │ │ └── MetricsReporterTest.java │ ├── shenyu-plugin-mock/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── mock/ │ │ │ │ ├── MockPlugin.java │ │ │ │ ├── api/ │ │ │ │ │ └── MockRequest.java │ │ │ │ ├── generator/ │ │ │ │ │ ├── ArrayGenerator.java │ │ │ │ │ ├── BoolGenerator.java │ │ │ │ │ ├── CurrentTimeGenerator.java │ │ │ │ │ ├── EmailGenerator.java │ │ │ │ │ ├── EnStringGenerator.java │ │ │ │ │ ├── ExpressionGenerator.java │ │ │ │ │ ├── Generator.java │ │ │ │ │ ├── GeneratorFactory.java │ │ │ │ │ ├── PhoneGenerator.java │ │ │ │ │ ├── RandomDoubleGenerator.java │ │ │ │ │ ├── RandomIntGenerator.java │ │ │ │ │ ├── RangeDataGenerator.java │ │ │ │ │ ├── StandardExpressionGenerator.java │ │ │ │ │ └── ZhStringGenerator.java │ │ │ │ ├── handler/ │ │ │ │ │ └── MockPluginHandler.java │ │ │ │ └── util/ │ │ │ │ ├── EvaluationContextUtil.java │ │ │ │ ├── MockUtil.java │ │ │ │ └── RandomUtil.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.plugin.mock.generator.Generator │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── mock/ │ │ └── generator/ │ │ ├── ArrayGeneratorTest.java │ │ ├── BoolGeneratorTest.java │ │ ├── CurrentTimeGeneratorTest.java │ │ ├── EmailGeneratorTest.java │ │ ├── EnStringGeneratorTest.java │ │ ├── ExpressionGeneratorTest.java │ │ ├── GeneratorFactoryTest.java │ │ ├── PhoneGeneratorTest.java │ │ ├── RandomDoubleGeneratorTest.java │ │ ├── RandomIntGeneratorTest.java │ │ ├── RangeDataGeneratorTest.java │ │ └── ZhStringGeneratorTest.java │ ├── shenyu-plugin-modify-response/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── modify/ │ │ │ └── response/ │ │ │ ├── ModifyResponsePlugin.java │ │ │ └── handler/ │ │ │ └── ModifyResponsePluginDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── modify/ │ │ └── response/ │ │ ├── ModifyResponsePluginTest.java │ │ └── handler/ │ │ └── ModifyResponsePluginDataHandlerTest.java │ ├── shenyu-plugin-param-mapping/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── param/ │ │ │ └── mapping/ │ │ │ ├── ParamMappingPlugin.java │ │ │ ├── handler/ │ │ │ │ └── ParamMappingPluginDataHandler.java │ │ │ └── strategy/ │ │ │ ├── DefaultOperator.java │ │ │ ├── FormDataOperator.java │ │ │ ├── JsonOperator.java │ │ │ └── Operator.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── param/ │ │ └── mapping/ │ │ ├── ParamMappingPluginTest.java │ │ ├── handler/ │ │ │ └── ParamMappingPluginDataTest.java │ │ └── strategy/ │ │ ├── DefaultOperatorTest.java │ │ ├── FormDataOperatorTest.java │ │ └── JsonOperatorTest.java │ ├── shenyu-plugin-proxy/ │ │ ├── pom.xml │ │ ├── shenyu-plugin-divide/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── divide/ │ │ │ │ ├── DividePlugin.java │ │ │ │ ├── context/ │ │ │ │ │ └── DivideShenyuContextDecorator.java │ │ │ │ └── handler/ │ │ │ │ ├── DivideMetaDataHandler.java │ │ │ │ ├── DividePluginDataHandler.java │ │ │ │ └── DivideUpstreamDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── divide/ │ │ │ ├── DividePluginTest.java │ │ │ ├── context/ │ │ │ │ └── DivideShenyuContextDecoratorTest.java │ │ │ └── handler/ │ │ │ ├── DividePluginDataHandlerTest.java │ │ │ └── DivideUpstreamDataHandlerTest.java │ │ ├── shenyu-plugin-mqtt/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── mqtt/ │ │ │ │ └── handler/ │ │ │ │ └── MqttPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── mqtt/ │ │ │ └── handler/ │ │ │ └── MqttPluginDataHandlerTest.java │ │ ├── shenyu-plugin-rpc/ │ │ │ ├── pom.xml │ │ │ ├── shenyu-plugin-dubbo/ │ │ │ │ ├── pom.xml │ │ │ │ ├── shenyu-plugin-apache-dubbo/ │ │ │ │ │ ├── pom.xml │ │ │ │ │ └── src/ │ │ │ │ │ ├── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ └── apache/ │ │ │ │ │ │ │ └── shenyu/ │ │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ │ └── apache/ │ │ │ │ │ │ │ └── dubbo/ │ │ │ │ │ │ │ ├── ApacheDubboPlugin.java │ │ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ │ │ └── ApacheDubboConfigCache.java │ │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ │ ├── ApacheDubboMetaDataHandler.java │ │ │ │ │ │ │ │ └── ApacheDubboPluginDataHandler.java │ │ │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ │ │ ├── ApacheDubboGrayLoadBalance.java │ │ │ │ │ │ │ │ └── ApacheDubboProxyService.java │ │ │ │ │ │ │ └── threadpool/ │ │ │ │ │ │ │ └── SharedThreadPool.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── dubbo/ │ │ │ │ │ │ ├── org.apache.dubbo.common.threadpool.ThreadPool │ │ │ │ │ │ └── org.apache.dubbo.rpc.cluster.LoadBalance │ │ │ │ │ └── test/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ ├── ApacheDubboPluginTest.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ └── ApacheDubboConfigCacheTest.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── ApacheDubboMetaDataHandlerTest.java │ │ │ │ │ │ └── ApacheDubboPluginDataHandlerTest.java │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ ├── ApacheDubboGrayLoadBalanceTest.java │ │ │ │ │ │ └── ApacheDubboProxyServiceTest.java │ │ │ │ │ └── threadpool/ │ │ │ │ │ └── SharedThreadPoolTest.java │ │ │ │ └── shenyu-plugin-dubbo-common/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── common/ │ │ │ │ │ ├── AbstractDubboPlugin.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ ├── DubboConfigCache.java │ │ │ │ │ │ ├── DubboMethodParam.java │ │ │ │ │ │ └── DubboParam.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── DubboShenyuContextDecorator.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── AbstractDubboMetaDataHandler.java │ │ │ │ │ │ └── AbstractDubboPluginDataHandler.java │ │ │ │ │ └── param/ │ │ │ │ │ ├── DubboParamResolveService.java │ │ │ │ │ └── DubboParamResolveServiceImpl.java │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── dubbo/ │ │ │ │ └── common/ │ │ │ │ ├── AbstractDubboPluginTest.java │ │ │ │ ├── cache/ │ │ │ │ │ └── DubboConfigCacheTest.java │ │ │ │ ├── context/ │ │ │ │ │ └── DubboShenyuContextDecoratorTest.java │ │ │ │ ├── handler/ │ │ │ │ │ └── AbstractDubboPluginDataHandlerTest.java │ │ │ │ └── param/ │ │ │ │ └── DubboParamResolveServiceTest.java │ │ │ ├── shenyu-plugin-general-context/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── general/ │ │ │ │ │ └── context/ │ │ │ │ │ ├── GeneralContextPlugin.java │ │ │ │ │ └── handler/ │ │ │ │ │ └── GeneralContextPluginDataHandler.java │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── general/ │ │ │ │ └── context/ │ │ │ │ ├── GeneralContextPluginTest.java │ │ │ │ └── handler/ │ │ │ │ └── GeneralContextPluginHandlerTest.java │ │ │ ├── shenyu-plugin-grpc/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── grpc/ │ │ │ │ │ ├── GrpcPlugin.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ ├── ApplicationConfigCache.java │ │ │ │ │ │ └── GrpcClientCache.java │ │ │ │ │ ├── client/ │ │ │ │ │ │ ├── GrpcClientBuilder.java │ │ │ │ │ │ └── ShenyuGrpcClient.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ ├── GrpcConstants.java │ │ │ │ │ │ └── GrpcShenyuContextDecorator.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ └── ShenyuGrpcException.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── GrpcDiscoveryUpstreamDataHandler.java │ │ │ │ │ │ └── GrpcPluginDataHandler.java │ │ │ │ │ ├── intercept/ │ │ │ │ │ │ └── ContextClientInterceptor.java │ │ │ │ │ ├── loadbalance/ │ │ │ │ │ │ ├── AbstractLoadBalancer.java │ │ │ │ │ │ ├── GrpcAttributeUtils.java │ │ │ │ │ │ ├── LoadBalancerStrategy.java │ │ │ │ │ │ ├── RandomLoadBalancerProvider.java │ │ │ │ │ │ ├── RoundRobinLoadBalancerProvider.java │ │ │ │ │ │ ├── ShenyuLoadBalancerProvider.java │ │ │ │ │ │ ├── SubChannelCopy.java │ │ │ │ │ │ ├── SubChannels.java │ │ │ │ │ │ └── picker/ │ │ │ │ │ │ ├── AbstractPicker.java │ │ │ │ │ │ ├── AbstractReadyPicker.java │ │ │ │ │ │ ├── EmptyPicker.java │ │ │ │ │ │ ├── Picker.java │ │ │ │ │ │ ├── RandomPicker.java │ │ │ │ │ │ ├── RoundRobinPicker.java │ │ │ │ │ │ └── ShenyuPicker.java │ │ │ │ │ ├── proto/ │ │ │ │ │ │ ├── CompleteObserver.java │ │ │ │ │ │ ├── CompositeStreamObserver.java │ │ │ │ │ │ ├── DynamicMessageMarshaller.java │ │ │ │ │ │ ├── MessageWriter.java │ │ │ │ │ │ ├── ShenyuGrpcCallRequest.java │ │ │ │ │ │ └── ShenyuGrpcResponse.java │ │ │ │ │ ├── resolver/ │ │ │ │ │ │ ├── ShenyuNameResolver.java │ │ │ │ │ │ ├── ShenyuNameResolverProvider.java │ │ │ │ │ │ ├── ShenyuResolverHelper.java │ │ │ │ │ │ ├── ShenyuServiceInstance.java │ │ │ │ │ │ └── ShenyuServiceInstanceLists.java │ │ │ │ │ └── transfer/ │ │ │ │ │ └── ShenyuServiceTransfer.java │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── grpc/ │ │ │ │ ├── GrpcPluginTest.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ApplicationConfigCacheTest.java │ │ │ │ ├── context/ │ │ │ │ │ └── GrpcShenyuContextDecoratorTest.java │ │ │ │ ├── handler/ │ │ │ │ │ └── GrpcPluginDataHandlerTest.java │ │ │ │ ├── loadbalance/ │ │ │ │ │ ├── AbstractLoadBalancerTest.java │ │ │ │ │ ├── RandomLoadBalancerProviderTest.java │ │ │ │ │ ├── RoundRobinLoadBalancerProviderTest.java │ │ │ │ │ ├── SubChannelsTest.java │ │ │ │ │ └── picker/ │ │ │ │ │ ├── EmptyPickerTest.java │ │ │ │ │ ├── RandomPickerTest.java │ │ │ │ │ ├── RoundRobinPickerTest.java │ │ │ │ │ ├── UnitTestIdleHelper.java │ │ │ │ │ └── UnitTestReadHelper.java │ │ │ │ ├── proto/ │ │ │ │ │ ├── CompleteObserverTest.java │ │ │ │ │ ├── CompositeStreamObserverTest.java │ │ │ │ │ ├── DynamicMessageMarshallerTest.java │ │ │ │ │ ├── MessageWriterTest.java │ │ │ │ │ └── MyStreamObserver.java │ │ │ │ └── resolver/ │ │ │ │ ├── ShenyuNameResolverProviderTest.java │ │ │ │ ├── ShenyuResolverHelperTest.java │ │ │ │ ├── ShenyuServiceInstanceListsTest.java │ │ │ │ └── ShenyuServiceInstanceTest.java │ │ │ ├── shenyu-plugin-motan/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── motan/ │ │ │ │ │ ├── MotanPlugin.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ └── ApplicationConfigCache.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── MotanShenyuContextDecorator.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── MotanMetaDataHandler.java │ │ │ │ │ │ └── MotanPluginDataHandler.java │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ └── MotanProxyService.java │ │ │ │ │ └── util/ │ │ │ │ │ └── PrxInfoUtil.java │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── motan/ │ │ │ │ ├── MotanPluginTest.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ApplicationConfigCacheTest.java │ │ │ │ ├── context/ │ │ │ │ │ └── MotanShenyuContextDecoratorTest.java │ │ │ │ ├── handler/ │ │ │ │ │ └── MotanPluginDataHandlerTest.java │ │ │ │ ├── proxy/ │ │ │ │ │ └── MotanProxyServiceTest.java │ │ │ │ └── util/ │ │ │ │ └── PrxInfoUtilTest.java │ │ │ ├── shenyu-plugin-sofa/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── sofa/ │ │ │ │ │ ├── SofaPlugin.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ └── ApplicationConfigCache.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── SofaShenyuContextDecorator.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── SofaMetaDataHandler.java │ │ │ │ │ │ └── SofaPluginDataHandler.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ ├── SofaParamResolveService.java │ │ │ │ │ │ └── SofaParamResolveServiceImpl.java │ │ │ │ │ └── proxy/ │ │ │ │ │ └── SofaProxyService.java │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── sofa/ │ │ │ │ ├── SofaPluginTest.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ApplicationConfigCacheTest.java │ │ │ │ ├── context/ │ │ │ │ │ └── SofaShenyuContextDecoratorTest.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── SofaMetaDataHandlerTest.java │ │ │ │ │ └── SofaPluginDataHandlerTest.java │ │ │ │ ├── param/ │ │ │ │ │ └── SofaBodyParamResolveServiceTest.java │ │ │ │ └── proxy/ │ │ │ │ └── SofaProxyServiceTest.java │ │ │ ├── shenyu-plugin-tars/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── tars/ │ │ │ │ │ ├── TarsPlugin.java │ │ │ │ │ ├── cache/ │ │ │ │ │ │ └── ApplicationConfigCache.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── TarsShenyuContextDecorator.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ └── ShenyuTarsPluginException.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── TarsMetaDataHandler.java │ │ │ │ │ │ └── TarsPluginDataHandler.java │ │ │ │ │ ├── proxy/ │ │ │ │ │ │ ├── TarsInvokePrx.java │ │ │ │ │ │ └── TarsInvokePrxList.java │ │ │ │ │ └── util/ │ │ │ │ │ ├── PrxInfoUtil.java │ │ │ │ │ └── ReturnValueResolver.java │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── tars/ │ │ │ │ ├── TarsPluginTest.java │ │ │ │ ├── cache/ │ │ │ │ │ └── ApplicationConfigCacheTest.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── TarsMetaDataHandlerTest.java │ │ │ │ │ └── TarsPluginDataHandlerTest.java │ │ │ │ └── util/ │ │ │ │ └── PrxInfoUtilTest.java │ │ │ └── shenyu-plugin-transform/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── transform/ │ │ │ │ └── RpcParamTransformPlugin.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── transform/ │ │ │ └── RpcParamTransformPluginTest.java │ │ ├── shenyu-plugin-tcp/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── tcp/ │ │ │ └── handler/ │ │ │ ├── TcpBootstrapFactory.java │ │ │ ├── TcpProxySelectorDataHandler.java │ │ │ └── TcpUpstreamDataHandler.java │ │ └── shenyu-plugin-websocket/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── websocket/ │ │ │ ├── WebSocketPlugin.java │ │ │ ├── context/ │ │ │ │ └── WebSocketShenyuContextDecorator.java │ │ │ └── handler/ │ │ │ ├── WebSocketPluginDataHandler.java │ │ │ └── WebSocketUpstreamDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── websocket/ │ │ ├── WebSocketPluginTest.java │ │ ├── context/ │ │ │ └── WebSocketShenyuContextDecoratorTest.java │ │ └── handler/ │ │ └── WebSocketPluginDataHandlerTest.java │ ├── shenyu-plugin-redirect/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── redirect/ │ │ │ ├── RedirectPlugin.java │ │ │ └── handler/ │ │ │ └── RedirectPluginDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── redirect/ │ │ └── RedirectPluginTest.java │ ├── shenyu-plugin-request/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── request/ │ │ │ ├── RequestPlugin.java │ │ │ └── handler/ │ │ │ └── RequestPluginHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── request/ │ │ ├── RequestPluginTest.java │ │ └── handler/ │ │ └── RequestPluginHandlerTest.java │ ├── shenyu-plugin-response/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── response/ │ │ │ ├── ResponsePlugin.java │ │ │ └── strategy/ │ │ │ ├── MessageWriter.java │ │ │ ├── NettyClientMessageWriter.java │ │ │ ├── RPCMessageWriter.java │ │ │ └── WebClientMessageWriter.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── response/ │ │ ├── ResponsePluginTest.java │ │ └── strategy/ │ │ ├── NettyClientMessageWriterTest.java │ │ ├── RPCMessageWriterTest.java │ │ └── WebClientMessageWriterTest.java │ ├── shenyu-plugin-rewrite/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── rewrite/ │ │ │ ├── RewritePlugin.java │ │ │ └── handler/ │ │ │ └── RewritePluginDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── rewrite/ │ │ ├── RewritePluginTest.java │ │ └── handler/ │ │ └── RewritePluginDataHandlerTest.java │ ├── shenyu-plugin-security/ │ │ ├── pom.xml │ │ ├── shenyu-plugin-basic-auth/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── basic/ │ │ │ │ │ └── auth/ │ │ │ │ │ ├── BasicAuthPlugin.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── BasicAuthConfig.java │ │ │ │ │ ├── handle/ │ │ │ │ │ │ └── BasicAuthPluginDataHandler.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── BasicAuthRuleHandle.java │ │ │ │ │ │ └── DefaultBasicAuthRuleHandle.java │ │ │ │ │ └── strategy/ │ │ │ │ │ ├── BasicAuthAuthenticationStrategy.java │ │ │ │ │ ├── BasicAuthAuthenticationStrategyFactory.java │ │ │ │ │ └── DefaultBasicAuthAuthenticationStrategy.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── shenyu/ │ │ │ │ └── org.apache.shenyu.plugin.basic.auth.strategy.BasicAuthAuthenticationStrategy │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── basic/ │ │ │ │ └── auth/ │ │ │ │ ├── BasicAuthPluginTest.java │ │ │ │ ├── handle/ │ │ │ │ │ └── BasicAuthPluginDataHandlerTest.java │ │ │ │ ├── rule/ │ │ │ │ │ ├── BasicAuthRuleHandleTest.java │ │ │ │ │ └── CustomBasicAuthRuleHandle.java │ │ │ │ └── strategy/ │ │ │ │ ├── CustomBasicAuthAuthenticationStrategy.java │ │ │ │ └── DefaultBasicAuthAuthenticationStrategyTest.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.plugin.basic.auth.strategy.BasicAuthAuthenticationStrategy │ │ ├── shenyu-plugin-casdoor/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── casdoor/ │ │ │ │ ├── CasdoorPlugin.java │ │ │ │ ├── config/ │ │ │ │ │ └── CasdoorConfig.java │ │ │ │ └── handle/ │ │ │ │ └── CasdoorPluginDateHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── casdoor/ │ │ │ ├── CasdoorPluginTest.java │ │ │ ├── config/ │ │ │ │ └── CasdoorConfigTest.java │ │ │ └── handle/ │ │ │ └── CasdoorPluginDateHandlerTest.java │ │ ├── shenyu-plugin-cryptor/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── cryptor/ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── AbstractCryptorPluginDataHandler.java │ │ │ │ │ │ ├── CryptorRequestPluginDataHandler.java │ │ │ │ │ │ ├── CryptorResponsePluginDataHandler.java │ │ │ │ │ │ └── CryptorRuleHandler.java │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ ├── AbstractCryptorPlugin.java │ │ │ │ │ │ ├── CryptorRequestPlugin.java │ │ │ │ │ │ └── CryptorResponsePlugin.java │ │ │ │ │ ├── strategy/ │ │ │ │ │ │ ├── CryptorStrategy.java │ │ │ │ │ │ ├── CryptorStrategyFactory.java │ │ │ │ │ │ ├── MapTypeEnum.java │ │ │ │ │ │ └── RsaStrategy.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── CryptorUtil.java │ │ │ │ │ └── JsonUtil.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── shenyu/ │ │ │ │ └── org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategy │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── cryptor/ │ │ │ ├── plugin/ │ │ │ │ ├── CryptorRequestPluginTest.java │ │ │ │ └── CryptorResponsePluginTest.java │ │ │ └── strategy/ │ │ │ └── RSAStrategyTest.java │ │ ├── shenyu-plugin-jwt/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── jwt/ │ │ │ │ │ ├── JwtPlugin.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── JwtConfig.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ └── ThrowingFunction.java │ │ │ │ │ ├── handle/ │ │ │ │ │ │ └── JwtPluginDataHandler.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── DefaultJwtRuleHandle.java │ │ │ │ │ │ └── JwtRuleHandle.java │ │ │ │ │ └── strategy/ │ │ │ │ │ ├── DefaultJwtConvertStrategy.java │ │ │ │ │ ├── DefaultJwtPayloadParseStrategy.java │ │ │ │ │ ├── JwtConvertStrategy.java │ │ │ │ │ ├── JwtConvertStrategyFactory.java │ │ │ │ │ ├── JwtPayloadParseStrategy.java │ │ │ │ │ └── JwtPayloadParseStrategyFactory.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── shenyu/ │ │ │ │ ├── org.apache.shenyu.plugin.jwt.strategy.JwtConvertStrategy │ │ │ │ └── org.apache.shenyu.plugin.jwt.strategy.JwtPayloadParseStrategy │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── jwt/ │ │ │ │ ├── JwtPluginTest.java │ │ │ │ ├── handle/ │ │ │ │ │ └── JwtPluginDataHandlerTest.java │ │ │ │ ├── rule/ │ │ │ │ │ ├── CustomJwtRuleHandle.java │ │ │ │ │ └── JwtRuleHandleTest.java │ │ │ │ └── strategy/ │ │ │ │ ├── CustomJwtConvertStrategy.java │ │ │ │ └── DefaultJwtConvertStrategyTest.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.plugin.jwt.strategy.JwtConvertStrategy │ │ ├── shenyu-plugin-key-auth/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── key/ │ │ │ │ └── auth/ │ │ │ │ ├── KeyAuthPlugin.java │ │ │ │ └── handler/ │ │ │ │ └── KeyAuthPluginDataHandler.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── key/ │ │ │ └── auth/ │ │ │ ├── KeyAuthPluginTest.java │ │ │ └── handler/ │ │ │ └── KeyAuthPluginDataHandlerTest.java │ │ ├── shenyu-plugin-oauth2/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── plugin/ │ │ │ │ └── oauth2/ │ │ │ │ └── OAuth2Plugin.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── oauth2/ │ │ │ └── OAuth2PluginTest.java │ │ └── shenyu-plugin-sign/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── sign/ │ │ │ ├── SignPlugin.java │ │ │ ├── api/ │ │ │ │ ├── SignParameters.java │ │ │ │ ├── VerifyResult.java │ │ │ │ └── VerifySupplier.java │ │ │ ├── cache/ │ │ │ │ └── SignAuthDataCache.java │ │ │ ├── extractor/ │ │ │ │ ├── DefaultExtractor.java │ │ │ │ ├── SignParameterExtractor.java │ │ │ │ ├── VersionOneExtractor.java │ │ │ │ └── VersionTwoExtractor.java │ │ │ ├── handler/ │ │ │ │ ├── SignPluginDataHandler.java │ │ │ │ └── SignRuleHandler.java │ │ │ ├── provider/ │ │ │ │ ├── DefaultSignProvider.java │ │ │ │ ├── SignProvider.java │ │ │ │ ├── VersionOneSignProvider.java │ │ │ │ └── VersionTwoSignProvider.java │ │ │ ├── service/ │ │ │ │ ├── ComposableSignService.java │ │ │ │ └── SignService.java │ │ │ └── subscriber/ │ │ │ └── SignAuthDataSubscriber.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── sign/ │ │ ├── SignPluginTest.java │ │ ├── extractor/ │ │ │ └── DefaultExtractorTest.java │ │ ├── provider/ │ │ │ └── DefaultSignProviderTest.java │ │ ├── service/ │ │ │ ├── SignServiceVersionOneTest.java │ │ │ └── SignServiceVersionTwoTest.java │ │ └── subscriber/ │ │ └── SignAuthDataSubscriberTest.java │ ├── shenyu-plugin-uri/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── uri/ │ │ │ └── URIPlugin.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── uri/ │ │ └── URIPluginTest.java │ ├── shenyu-plugin-waf/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── waf/ │ │ │ ├── WafPlugin.java │ │ │ ├── config/ │ │ │ │ └── WafConfig.java │ │ │ └── handler/ │ │ │ └── WafPluginDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── waf/ │ │ ├── WafPluginTest.java │ │ └── handler/ │ │ └── WafPluginDataHandlerTest.java │ ├── shenyu-plugin-wasm-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── wasm/ │ │ │ └── api/ │ │ │ ├── AbstractWasmPlugin.java │ │ │ ├── exception/ │ │ │ │ ├── ShenyuWasmException.java │ │ │ │ └── ShenyuWasmInitException.java │ │ │ └── loader/ │ │ │ └── WasmLoader.java │ │ └── test/ │ │ ├── README.md │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── wasm/ │ │ │ └── api/ │ │ │ └── AbstractWasmPluginTest.java │ │ ├── resources/ │ │ │ └── org.apache.shenyu.plugin.wasm.api.AbstractWasmPluginTest$RustWasmPlugin.wasm │ │ └── rust-wasm-plugin/ │ │ ├── Cargo.toml │ │ └── src/ │ │ └── lib.rs │ └── shenyu-plugin-wasm-base/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── wasm/ │ │ └── base/ │ │ ├── AbstractShenyuWasmPlugin.java │ │ └── handler/ │ │ ├── AbstractWasmDiscoveryHandler.java │ │ ├── AbstractWasmMetaDataHandler.java │ │ └── AbstractWasmPluginDataHandler.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── wasm/ │ │ └── base/ │ │ ├── AbstractShenyuWasmPluginTest.java │ │ └── handler/ │ │ ├── AbstractWasmDiscoveryHandlerTest.java │ │ ├── AbstractWasmMetaDataHandlerTest.java │ │ └── AbstractWasmPluginDataHandlerTest.java │ ├── resources/ │ │ ├── org.apache.shenyu.plugin.wasm.base.AbstractShenyuWasmPluginTest$TestShenyuWasmPlugin.wasm │ │ ├── org.apache.shenyu.plugin.wasm.base.handler.AbstractWasmDiscoveryHandlerTest$TestWasmPluginDiscoveryHandler.wasm │ │ ├── org.apache.shenyu.plugin.wasm.base.handler.AbstractWasmMetaDataHandlerTest$TestWasmMetaDataHandler.wasm │ │ └── org.apache.shenyu.plugin.wasm.base.handler.AbstractWasmPluginDataHandlerTest$TestWasmPluginDataHandler.wasm │ ├── rust-discovery-handler/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src/ │ │ └── lib.rs │ ├── rust-meta-data-handler/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src/ │ │ └── lib.rs │ ├── rust-plugin-data-handler/ │ │ ├── Cargo.toml │ │ ├── README.md │ │ └── src/ │ │ └── lib.rs │ └── rust-shenyu-wasm-plugin/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ └── lib.rs ├── shenyu-protocol/ │ ├── pom.xml │ ├── shenyu-protocol-grpc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── protocol/ │ │ │ └── grpc/ │ │ │ ├── constant/ │ │ │ │ └── GrpcConstants.java │ │ │ └── message/ │ │ │ └── JsonMessage.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── protocol/ │ │ └── grpc/ │ │ └── message/ │ │ └── JsonMessageTest.java │ ├── shenyu-protocol-mqtt/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── protocol/ │ │ └── mqtt/ │ │ ├── AbstractMessageType.java │ │ ├── BootstrapServer.java │ │ ├── Connect.java │ │ ├── Disconnect.java │ │ ├── MessageType.java │ │ ├── MqttBootstrapServer.java │ │ ├── MqttContext.java │ │ ├── MqttFactory.java │ │ ├── MqttServerConfiguration.java │ │ ├── MqttTransportHandler.java │ │ ├── MqttTransportServerInitializer.java │ │ ├── PingReq.java │ │ ├── PingResp.java │ │ ├── Publish.java │ │ ├── Subscribe.java │ │ ├── Unsubscribe.java │ │ ├── agent/ │ │ │ └── MessageAgent.java │ │ ├── annotation/ │ │ │ ├── Connect.java │ │ │ ├── Disconnect.java │ │ │ ├── Primary.java │ │ │ ├── Publish.java │ │ │ └── Subscribe.java │ │ ├── repositories/ │ │ │ ├── BaseRepository.java │ │ │ ├── ChannelRepository.java │ │ │ ├── SubscribeRepository.java │ │ │ └── TopicRepository.java │ │ └── utils/ │ │ └── EncryptUtil.java │ └── shenyu-protocol-tcp/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── protocol/ │ └── tcp/ │ ├── BootstrapServer.java │ ├── TcpBootstrapServer.java │ ├── TcpServerConfiguration.java │ ├── UpstreamProvider.java │ └── connection/ │ ├── ActivityConnectionObserver.java │ ├── Bridge.java │ ├── ClientConnectionConfigProvider.java │ ├── ConnectionContext.java │ ├── DefaultConnectionConfigProvider.java │ └── TcpConnectionBridge.java ├── shenyu-register-center/ │ ├── pom.xml │ ├── shenyu-register-client/ │ │ ├── pom.xml │ │ ├── shenyu-register-client-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── register/ │ │ │ │ └── client/ │ │ │ │ └── api/ │ │ │ │ ├── FailbackRegistryRepository.java │ │ │ │ ├── ShenyuClientRegisterRepository.java │ │ │ │ └── retry/ │ │ │ │ └── FailureRegistryTask.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── register/ │ │ │ └── client/ │ │ │ └── api/ │ │ │ ├── FailbackRegistryRepositoryTest.java │ │ │ └── retry/ │ │ │ └── FailureRegistryTaskTest.java │ │ └── shenyu-register-client-http/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── register/ │ │ │ │ └── client/ │ │ │ │ └── http/ │ │ │ │ ├── HttpClientRegisterRepository.java │ │ │ │ └── utils/ │ │ │ │ ├── OkHttpTools.java │ │ │ │ ├── RegisterUtils.java │ │ │ │ ├── RuntimeUtils.java │ │ │ │ └── SystemUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.register.client.api.ShenyuClientRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── register/ │ │ └── client/ │ │ └── http/ │ │ └── utils/ │ │ ├── OkHttpToolsTest.java │ │ ├── RegisterUtilsTest.java │ │ ├── RuntimeUtilsTest.java │ │ └── SystemUtilsTest.java │ ├── shenyu-register-client-beat/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── register/ │ │ │ └── client/ │ │ │ └── beat/ │ │ │ ├── HeartbeatListener.java │ │ │ └── ShenyuBootstrapHeartBeatConfig.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── register/ │ │ └── client/ │ │ └── beat/ │ │ └── HeartbeatListenerTest.java │ └── shenyu-register-common/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── register/ │ └── common/ │ ├── config/ │ │ ├── PropertiesConfig.java │ │ ├── ShenyuClientConfig.java │ │ ├── ShenyuDiscoveryConfig.java │ │ └── ShenyuRegisterCenterConfig.java │ ├── dto/ │ │ ├── ApiDocRegisterDTO.java │ │ ├── DiscoveryConfigRegisterDTO.java │ │ ├── InstanceBeatInfoDTO.java │ │ ├── McpToolsRegisterDTO.java │ │ ├── MetaDataRegisterDTO.java │ │ └── URIRegisterDTO.java │ ├── enums/ │ │ ├── EventType.java │ │ └── RegisterTypeEnum.java │ ├── path/ │ │ └── RegisterPathConstants.java │ ├── subsriber/ │ │ ├── AbstractQueueConsumerFactory.java │ │ ├── ExecutorSubscriber.java │ │ └── ExecutorTypeSubscriber.java │ └── type/ │ ├── DataType.java │ └── DataTypeParent.java ├── shenyu-registry/ │ ├── pom.xml │ ├── shenyu-registry-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── registry/ │ │ │ └── api/ │ │ │ ├── ShenyuInstanceRegisterRepository.java │ │ │ ├── config/ │ │ │ │ └── RegisterConfig.java │ │ │ ├── entity/ │ │ │ │ └── InstanceEntity.java │ │ │ ├── event/ │ │ │ │ └── ChangedEventListener.java │ │ │ └── path/ │ │ │ └── InstancePathConstants.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── api/ │ │ ├── config/ │ │ │ └── RegisterConfigTest.java │ │ └── path/ │ │ └── InstancePathConstantsTest.java │ ├── shenyu-registry-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── apollo/ │ │ │ │ ├── ApolloClient.java │ │ │ │ ├── ApolloConfig.java │ │ │ │ └── ApolloInstanceRegisterRepository.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── apollo/ │ │ ├── ApolloClientTest.java │ │ └── ApolloConfigTest.java │ ├── shenyu-registry-consul/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── consul/ │ │ │ │ ├── ConsulInstanceRegisterRepository.java │ │ │ │ └── TtlScheduler.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── consul/ │ │ └── ConsulInstanceRegisterRepositoryTest.java │ ├── shenyu-registry-core/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── registry/ │ │ │ └── core/ │ │ │ └── ShenyuInstanceRegisterRepositoryFactory.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── core/ │ │ └── ShenyuInstanceRegisterRepositoryFactoryTest.java │ ├── shenyu-registry-etcd/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── etcd/ │ │ │ │ └── EtcdInstanceRegisterRepository.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── etcd/ │ │ ├── EtcdClientTest.java │ │ └── EtcdInstanceRegisterRepositoryTest.java │ ├── shenyu-registry-eureka/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── eureka/ │ │ │ │ └── EurekaInstanceRegisterRepository.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── eureka/ │ │ └── EurekaInstanceRegisterRepositoryTest.java │ ├── shenyu-registry-kubernetes/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── kubernetes/ │ │ │ │ ├── KubernetesClient.java │ │ │ │ ├── KubernetesConfig.java │ │ │ │ ├── KubernetesInstance.java │ │ │ │ └── KubernetesInstanceRegisterRepository.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── kubernetes/ │ │ ├── KubernetesClientTest.java │ │ ├── KubernetesConfigTest.java │ │ ├── KubernetesInstanceRegisterRepositoryTest.java │ │ └── KubernetesInstanceTest.java │ ├── shenyu-registry-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── nacos/ │ │ │ │ └── NacosInstanceRegisterRepository.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── nacos/ │ │ └── NacosInstanceRegisterRepositoryTest.java │ ├── shenyu-registry-polaris/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── registry/ │ │ │ │ └── polaris/ │ │ │ │ └── PolarisInstanceRegisterRepository.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── registry/ │ │ └── polaris/ │ │ └── PolarisInstanceRegisterRepositoryTest.java │ └── shenyu-registry-zookeeper/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── registry/ │ │ │ └── zookeeper/ │ │ │ └── ZookeeperInstanceRegisterRepository.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── shenyu/ │ │ └── org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── registry/ │ └── zookeeper/ │ └── ZookeeperInstanceRegisterRepositoryTest.java ├── shenyu-sdk/ │ ├── pom.xml │ ├── shenyu-sdk-core/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sdk/ │ │ │ └── core/ │ │ │ ├── ShenyuRequest.java │ │ │ ├── ShenyuResponse.java │ │ │ ├── client/ │ │ │ │ ├── AbstractShenyuSdkClient.java │ │ │ │ ├── ShenyuSdkClient.java │ │ │ │ └── ShenyuSdkClientFactory.java │ │ │ ├── common/ │ │ │ │ └── RequestTemplate.java │ │ │ ├── interceptor/ │ │ │ │ └── ShenyuSdkRequestInterceptor.java │ │ │ ├── retry/ │ │ │ │ ├── RetryableException.java │ │ │ │ └── Retryer.java │ │ │ └── util/ │ │ │ ├── Types.java │ │ │ └── Util.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sdk/ │ │ └── core/ │ │ ├── ShenyuRequestTest.java │ │ ├── ShenyuResponseTest.java │ │ ├── client/ │ │ │ └── ShenyuSdkClientFactoryTest.java │ │ ├── common/ │ │ │ └── RequestTemplateTest.java │ │ ├── retry/ │ │ │ └── RetryableExceptionTest.java │ │ └── util/ │ │ ├── TypesTest.java │ │ └── UtilTest.java │ ├── shenyu-sdk-feign/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sdk/ │ │ │ └── feign/ │ │ │ ├── EnableShenyuClients.java │ │ │ ├── ShenyuClient.java │ │ │ ├── ShenyuClientCapability.java │ │ │ ├── ShenyuClientsRegistrar.java │ │ │ └── ShenyuDiscoveryClient.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sdk/ │ │ └── feign/ │ │ └── ShenyuClientsRegistrarTest.java │ ├── shenyu-sdk-httpclient/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── sdk/ │ │ │ │ └── httpclient/ │ │ │ │ └── HttpShenyuSdkClient.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.sdk.core.client.ShenyuSdkClient │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sdk/ │ │ └── httpclient/ │ │ └── HttpShenyuSdkClientTest.java │ ├── shenyu-sdk-okhttp/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── sdk/ │ │ │ │ └── okhttp/ │ │ │ │ └── OkHttpShenyuSdkClient.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── shenyu/ │ │ │ └── org.apache.shenyu.sdk.core.client.ShenyuSdkClient │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sdk/ │ │ └── okhttp/ │ │ └── OkHttpShenyuSdkClientTest.java │ └── shenyu-sdk-spring/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sdk/ │ │ └── spring/ │ │ ├── EnableShenyuClients.java │ │ ├── FallbackFactory.java │ │ ├── NoFallbackAvailableException.java │ │ ├── ShenyuClient.java │ │ ├── ShenyuClientFactoryBean.java │ │ ├── ShenyuClientsRegistrar.java │ │ ├── annotation/ │ │ │ ├── CookieValueParameterProcessor.java │ │ │ ├── PathVariableParameterProcessor.java │ │ │ ├── RequestBodyParameterProcessor.java │ │ │ ├── RequestHeaderParameterProcessor.java │ │ │ └── RequestParamParameterProcessor.java │ │ ├── factory/ │ │ │ ├── AnnotatedParameterProcessor.java │ │ │ └── Contract.java │ │ ├── proxy/ │ │ │ ├── ShenyuClientInvocationHandler.java │ │ │ ├── ShenyuClientMethodHandler.java │ │ │ └── ShenyuClientProxyFactory.java │ │ └── support/ │ │ └── SpringMvcContract.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── sdk/ │ └── spring/ │ ├── ShenyuClientsRegistrarTest.java │ ├── annotation/ │ │ ├── CookieValueParameterProcessorTest.java │ │ ├── PathVariableParameterProcessorTest.java │ │ ├── RequestBodyParameterProcessorTest.java │ │ ├── RequestHeaderParameterProcessorTest.java │ │ └── RequestParamParameterProcessorTest.java │ ├── proxy/ │ │ ├── AbstractProxyTest.java │ │ ├── ShenyuClientInvocationHandlerTest.java │ │ ├── ShenyuClientMethodHandlerTest.java │ │ └── ShenyuClientProxyFactoryTest.java │ ├── registrar/ │ │ ├── package1/ │ │ │ ├── TopLevelSubLevelTestConfig.java │ │ │ └── sub/ │ │ │ └── SubLevelClient.java │ │ └── package2/ │ │ └── ClientConfig.java │ └── support/ │ └── SpringMvcContractTest.java ├── shenyu-spi/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── spi/ │ │ ├── ExtensionFactory.java │ │ ├── ExtensionLoader.java │ │ ├── Join.java │ │ ├── SPI.java │ │ └── SpiExtensionFactory.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── spi/ │ │ ├── ExtensionLoaderTest.java │ │ ├── SpiExtensionFactoryTest.java │ │ └── fixture/ │ │ ├── ArrayListSPI.java │ │ ├── CanNotInstantiatedSPI.java │ │ ├── EmptySPI.java │ │ ├── HasDefaultSPI.java │ │ ├── JdbcSPI.java │ │ ├── LinkedListSPI.java │ │ ├── ListSPI.java │ │ ├── MysqlSPI.java │ │ ├── NoClassMatchSPI.java │ │ ├── NoJoinSPI.java │ │ ├── NopSPI.java │ │ ├── NotMatchSPI.java │ │ ├── OracleSPI.java │ │ ├── SubHasDefaultSPI.java │ │ ├── SubNoJoinSPI.java │ │ └── TreeListSPI.java │ └── resources/ │ └── META-INF/ │ └── shenyu/ │ ├── org.apache.shenyu.spi.fixture.EmptySPI │ ├── org.apache.shenyu.spi.fixture.HasDefaultSPI │ ├── org.apache.shenyu.spi.fixture.JdbcSPI │ ├── org.apache.shenyu.spi.fixture.ListSPI │ ├── org.apache.shenyu.spi.fixture.NoClassMatchSPI │ ├── org.apache.shenyu.spi.fixture.NoJoinSPI │ └── org.apache.shenyu.spi.fixture.NotMatchSPI ├── shenyu-spring-boot-starter/ │ ├── pom.xml │ ├── shenyu-spring-boot-starter-client/ │ │ ├── pom.xml │ │ ├── shenyu-spring-boot-starter-client-apache-dubbo/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── ShenyuApacheDubboClientConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── client/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── ShenyuApacheDubboClientConfigurationTest.java │ │ │ └── resources/ │ │ │ └── application.properties │ │ ├── shenyu-spring-boot-starter-client-beat/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── register/ │ │ │ │ └── client/ │ │ │ │ └── beat/ │ │ │ │ └── HeartbeatListenerConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── shenyu-spring-boot-starter-client-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── common/ │ │ │ │ │ └── config/ │ │ │ │ │ └── ShenyuClientCommonBeanConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── spring.factories │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── common/ │ │ │ └── config/ │ │ │ └── ShenyuClientCommonBeanConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-client-grpc/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── grpc/ │ │ │ │ │ ├── ShenyuGrpcClientConfiguration.java │ │ │ │ │ └── ShenyuGrpcDiscoveryConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── grpc/ │ │ │ ├── ShenyuGrpcClientConfigurationTest.java │ │ │ └── server/ │ │ │ └── ShenyuGrpcServerBuilderTest.java │ │ ├── shenyu-spring-boot-starter-client-mcp/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── mcp/ │ │ │ └── ShenyuMcpClientConfiguration.java │ │ ├── shenyu-spring-boot-starter-client-motan/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── motan/ │ │ │ │ │ ├── ShenyuMotanClientConfiguration.java │ │ │ │ │ └── property/ │ │ │ │ │ ├── RegistryConfig.java │ │ │ │ │ └── ShenyuMotanConfig.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── motan/ │ │ │ └── ShenyuMotanClientConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-client-sofa/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── sofa/ │ │ │ │ │ └── ShenyuSofaClientConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── sofa/ │ │ │ └── ShenyuSofaClientConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-client-spring-websocket/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── websocket/ │ │ │ │ │ ├── ShenyuSpringWebSocketClientConfiguration.java │ │ │ │ │ └── ShenyuSpringWebSocketDiscoveryConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── spring/ │ │ │ └── websocket/ │ │ │ └── ShenyuSpringWebSocketClientConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-client-springmvc/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── client/ │ │ │ │ │ └── springmvc/ │ │ │ │ │ ├── ShenyuSpringMvcClientConfiguration.java │ │ │ │ │ ├── ShenyuSpringMvcClientInfoRegisterConfiguration.java │ │ │ │ │ └── ShenyuSpringMvcDiscoveryConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── client/ │ │ │ └── springmvc/ │ │ │ └── ShenyuSpringMvcClientConfigurationTest.java │ │ └── shenyu-spring-boot-starter-client-tars/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── client/ │ │ │ │ └── tars/ │ │ │ │ └── ShenyuTarsClientConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── starter/ │ │ └── client/ │ │ └── tars/ │ │ └── ShenyuTarsClientConfigurationTest.java │ ├── shenyu-spring-boot-starter-gateway/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ ├── gateway/ │ │ │ │ │ └── ShenyuConfiguration.java │ │ │ │ └── netty/ │ │ │ │ └── ShenyuNettyWebServerConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── starter/ │ │ ├── gateway/ │ │ │ └── ShenyuConfigurationTest.java │ │ └── netty/ │ │ └── ShenyuNettyWebServerConfigurationTest.java │ ├── shenyu-spring-boot-starter-k8s/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── k8s/ │ │ │ └── IngressControllerConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-spring-boot-starter-plugin/ │ │ ├── pom.xml │ │ ├── shenyu-spring-boot-starter-plugin-ai-prompt/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── prompt/ │ │ │ │ └── AiPromptPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-ai-proxy/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── proxy/ │ │ │ │ └── AiProxyPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-ai-request-transformer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── transformer/ │ │ │ │ └── request/ │ │ │ │ └── AiRequestTransformerPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-ai-response-transformer/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── transformer/ │ │ │ │ └── response/ │ │ │ │ └── AiResponseTransformerPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-ai-token-limiter/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── ai/ │ │ │ │ └── token/ │ │ │ │ └── limiter/ │ │ │ │ └── AiTokenLimiterPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-basic-auth/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── basic/ │ │ │ │ └── auth/ │ │ │ │ └── BasicAuthPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-cache/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── cache/ │ │ │ │ └── CachePluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-casdoor/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── casdoor/ │ │ │ │ └── CasdoorPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-context-path/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── context/ │ │ │ │ │ └── path/ │ │ │ │ │ └── ContextPathPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── context/ │ │ │ └── path/ │ │ │ └── ContextPathPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-cryptor/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── cryptor/ │ │ │ │ │ └── CryptorPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── spring.factories │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── cryptor/ │ │ │ └── CryptorPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-divide/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── divide/ │ │ │ │ │ └── DividePluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── plugin/ │ │ │ └── divide/ │ │ │ └── DividePluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-dubbo/ │ │ │ ├── pom.xml │ │ │ ├── shenyu-spring-boot-starter-plugin-apache-dubbo/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ ├── java/ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ └── apache/ │ │ │ │ │ │ └── shenyu/ │ │ │ │ │ │ └── springboot/ │ │ │ │ │ │ └── starter/ │ │ │ │ │ │ └── plugin/ │ │ │ │ │ │ └── apache/ │ │ │ │ │ │ └── dubbo/ │ │ │ │ │ │ └── ApacheDubboPluginConfiguration.java │ │ │ │ │ └── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ ├── spring/ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ ├── spring.factories │ │ │ │ │ └── spring.provides │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── ApacheDubboPluginConfigurationTest.java │ │ │ └── shenyu-spring-boot-starter-plugin-dubbo-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── common/ │ │ │ │ │ └── DubboCommonConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── spring.factories │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── plugin/ │ │ │ └── dubbo/ │ │ │ └── common/ │ │ │ └── DubboCommonConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-general-context/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── general/ │ │ │ │ │ └── context/ │ │ │ │ │ └── GeneralContextPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── general/ │ │ │ └── context/ │ │ │ └── GeneralContextPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-global/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── global/ │ │ │ │ │ └── GlobalPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── global/ │ │ │ └── GlobalPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-grpc/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── grpc/ │ │ │ │ │ └── GrpcPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── grpc/ │ │ │ └── GrpcPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-httpclient/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── httpclient/ │ │ │ │ │ ├── HttpClientFactory.java │ │ │ │ │ └── HttpClientPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── httpclient/ │ │ │ └── HttpClientPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-hystrix/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── hystrix/ │ │ │ │ │ └── HystrixPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── hystrix/ │ │ │ └── HystrixPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-jwt/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── jwt/ │ │ │ │ │ └── JwtPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── jwt/ │ │ │ └── JwtPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-key-auth/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── key/ │ │ │ │ │ └── auth/ │ │ │ │ │ └── KeyAuthPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── key/ │ │ │ └── auth/ │ │ │ └── KeyAuthPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-aliyun-sls/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── aliyun/ │ │ │ │ │ └── sls/ │ │ │ │ │ └── LoggingAliyunSlsPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── aliyun/ │ │ │ └── sls/ │ │ │ └── LoggingAliyunSlsPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-clickhouse/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── clickhouse/ │ │ │ │ │ └── LoggingClickHousePluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── clickhouse/ │ │ │ └── LoggingClickHousePluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-console/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── console/ │ │ │ │ │ └── LoggingConsolePluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── console/ │ │ │ └── LoggingConsolePluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-elasticsearch/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── elasticsearch/ │ │ │ │ │ └── LoggingElasticSearchPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── elasticsearch/ │ │ │ └── LoggingElasticSearchPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-huawei-lts/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── huawei/ │ │ │ │ │ └── lts/ │ │ │ │ │ └── LoggingHuaweiLtsPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── huawei/ │ │ │ └── lts/ │ │ │ └── LoggingHuaweiLtsPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-kafka/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── kafka/ │ │ │ │ │ └── LoggingKafkaPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── kafka/ │ │ │ └── LoggingKafkaPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-pulsar/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── pulsar/ │ │ │ │ └── LoggingPulsarPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-logging-rabbitmq/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── logging/ │ │ │ │ └── rabbitmq/ │ │ │ │ └── LoggingRabbitmqPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-logging-rocketmq/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── rocketmq/ │ │ │ │ │ └── LoggingRocketMQPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── rocketmq/ │ │ │ └── LoggingRocketMQPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-logging-tencent-cls/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── logging/ │ │ │ │ │ └── tencent/ │ │ │ │ │ └── cls/ │ │ │ │ │ └── LoggingTencentClsPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── logging/ │ │ │ └── tencent/ │ │ │ └── cls/ │ │ │ └── LoggingTencentClsPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-mcp-server/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── mcp/ │ │ │ │ └── server/ │ │ │ │ └── McpServerPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-metrics/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── metrics/ │ │ │ │ ├── MetricsPluginConfiguration.java │ │ │ │ └── boot/ │ │ │ │ └── MetricsRunner.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-mock/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── mock/ │ │ │ │ └── MockPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ ├── shenyu-spring-boot-starter-plugin-modify-response/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── modify/ │ │ │ │ │ └── response/ │ │ │ │ │ └── ModifyResponsePluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── modify/ │ │ │ └── response/ │ │ │ └── ModifyResponsePluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-motan/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── motan/ │ │ │ │ │ └── MotanPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── motan/ │ │ │ └── MotanPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-mqtt/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── mqtt/ │ │ │ │ │ └── MqttPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── spring.factories │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── mqtt/ │ │ │ └── MqttPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-oauth2/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── oauth2/ │ │ │ │ │ └── OAuth2PluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── oauth2/ │ │ │ └── OAuth2PluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-param-mapping/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── param/ │ │ │ │ │ └── mapping/ │ │ │ │ │ └── ParamMappingPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── param/ │ │ │ └── mapping/ │ │ │ └── ParamMappingPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-ratelimiter/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── ratelimiter/ │ │ │ │ │ └── RateLimiterPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── ratelimiter/ │ │ │ └── RateLimiterPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-redirect/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── redirect/ │ │ │ │ │ └── RedirectPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── redirect/ │ │ │ └── RedirectPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-request/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── request/ │ │ │ │ │ └── RequestPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── request/ │ │ │ └── RequestPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-resilience4j/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── resilience4j/ │ │ │ │ │ └── Resilience4JPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── resilience4j/ │ │ │ └── Resilience4JPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-response/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── response/ │ │ │ │ │ └── ResponsePluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── response/ │ │ │ └── ResponsePluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-rewrite/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── rewrite/ │ │ │ │ │ └── RewritePluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── rewrite/ │ │ │ └── RewritePluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-sentinel/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── sentinel/ │ │ │ │ │ └── SentinelPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── sentinel/ │ │ │ └── SentinelPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-sign/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── sign/ │ │ │ │ │ └── SignPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── sign/ │ │ │ └── SignPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-sofa/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── sofa/ │ │ │ │ │ └── SofaPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── sofa/ │ │ │ └── SofaPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-tars/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── tars/ │ │ │ │ │ └── TarsPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── tars/ │ │ │ └── TarsPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-tcp/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── plugin/ │ │ │ │ └── tcp/ │ │ │ │ └── TcpPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── shenyu-spring-boot-starter-plugin-transform/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── transform/ │ │ │ │ │ └── TransformPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── transform/ │ │ │ └── TransformPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-uri/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── uri/ │ │ │ │ │ └── URIPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── uri/ │ │ │ └── URIPluginConfigurationTest.java │ │ ├── shenyu-spring-boot-starter-plugin-waf/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── shenyu/ │ │ │ │ │ └── springboot/ │ │ │ │ │ └── starter/ │ │ │ │ │ └── plugin/ │ │ │ │ │ └── waf/ │ │ │ │ │ └── WafPluginConfiguration.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ ├── spring.factories │ │ │ │ └── spring.provides │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── plugin/ │ │ │ └── waf/ │ │ │ └── WafPluginConfigurationTest.java │ │ └── shenyu-spring-boot-starter-plugin-websocket/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── plugin/ │ │ │ │ └── websocket/ │ │ │ │ └── WebSocketPluginConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── plugin/ │ │ └── websocket/ │ │ └── WebSocketPluginConfigurationTest.java │ ├── shenyu-spring-boot-starter-registry/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── registry/ │ │ │ ├── RegistryListener.java │ │ │ └── ShenyuRegistryConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-spring-boot-starter-sdk/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── sdk/ │ │ │ └── ShenyuSdkAutoConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-spring-boot-starter-sdk-feign/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── sdk/ │ │ │ └── feign/ │ │ │ └── ShenyuSdkAutoConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ └── shenyu-spring-boot-starter-sync-data-center/ │ ├── pom.xml │ ├── shenyu-spring-boot-starter-sync-data-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── sync/ │ │ │ │ └── data/ │ │ │ │ └── apollo/ │ │ │ │ └── ApolloSyncDataConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── sync/ │ │ └── data/ │ │ └── apollo/ │ │ └── ApolloSyncDataConfigurationTest.java │ ├── shenyu-spring-boot-starter-sync-data-consul/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── consul/ │ │ │ └── ConsulSyncDataConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-spring-boot-starter-sync-data-etcd/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── etcd/ │ │ │ └── EtcdSyncDataConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ ├── shenyu-spring-boot-starter-sync-data-http/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── sync/ │ │ │ │ └── data/ │ │ │ │ └── http/ │ │ │ │ └── HttpSyncDataConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── starter/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── http/ │ │ │ └── HttpClientPluginConfigurationTest.java │ │ └── resources/ │ │ └── mock_configs_fetch_response.json │ ├── shenyu-spring-boot-starter-sync-data-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── sync/ │ │ │ │ └── data/ │ │ │ │ └── nacos/ │ │ │ │ └── NacosSyncDataConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── starter/ │ │ └── sync/ │ │ └── data/ │ │ └── nacos/ │ │ ├── NacosMockConfigService.java │ │ └── NacosSyncDataConfigurationTest.java │ ├── shenyu-spring-boot-starter-sync-data-polaris/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── sync/ │ │ │ │ └── data/ │ │ │ │ └── polaris/ │ │ │ │ └── PolarisSyncDataConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── stater/ │ │ └── sync/ │ │ └── data/ │ │ └── polaris/ │ │ └── PolarisSyncDataConfigurationTest.java │ ├── shenyu-spring-boot-starter-sync-data-websocket/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── shenyu/ │ │ │ │ └── springboot/ │ │ │ │ └── starter/ │ │ │ │ └── sync/ │ │ │ │ └── data/ │ │ │ │ └── websocket/ │ │ │ │ └── WebsocketSyncDataConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ ├── spring.factories │ │ │ └── spring.provides │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── springboot/ │ │ └── starter/ │ │ └── sync/ │ │ └── data/ │ │ └── websocket/ │ │ └── WebsocketSyncDataConfigurationTest.java │ └── shenyu-spring-boot-starter-sync-data-zookeeper/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── springboot/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── zookeeper/ │ │ │ └── ZookeeperSyncDataConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── spring.provides │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── springboot/ │ └── sync/ │ └── data/ │ └── zookeeper/ │ └── ZookeeperSyncDataConfigurationTest.java ├── shenyu-sync-data-center/ │ ├── pom.xml │ ├── shenyu-sync-data-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ ├── api/ │ │ │ │ ├── AiProxyApiKeyDataSubscriber.java │ │ │ │ ├── AuthDataSubscriber.java │ │ │ │ ├── DiscoveryUpstreamDataSubscriber.java │ │ │ │ ├── MetaDataSubscriber.java │ │ │ │ ├── PluginDataSubscriber.java │ │ │ │ ├── ProxySelectorDataSubscriber.java │ │ │ │ └── SyncDataService.java │ │ │ └── core/ │ │ │ ├── AbstractNodeDataSyncService.java │ │ │ └── AbstractPathDataSyncService.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── core/ │ │ ├── AbstractNodeDataSyncServiceTest.java │ │ └── AbstractPathDataSyncServiceTest.java │ ├── shenyu-sync-data-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── apollo/ │ │ │ ├── ApolloDataService.java │ │ │ └── config/ │ │ │ └── ApolloConfig.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── apollo/ │ │ ├── ApolloDataServiceTest.java │ │ └── config/ │ │ └── ApolloConfigTest.java │ ├── shenyu-sync-data-consul/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── consul/ │ │ │ ├── ConsulSyncDataService.java │ │ │ └── config/ │ │ │ └── ConsulConfig.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── consul/ │ │ ├── ConsulSyncDataServiceTest.java │ │ └── config/ │ │ └── ConsulConfigTest.java │ ├── shenyu-sync-data-etcd/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── etcd/ │ │ │ └── EtcdSyncDataService.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── etcd/ │ │ └── EtcdSyncDataServiceTest.java │ ├── shenyu-sync-data-http/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── http/ │ │ │ ├── AccessTokenManager.java │ │ │ ├── HttpSyncDataService.java │ │ │ ├── config/ │ │ │ │ └── HttpConfig.java │ │ │ └── refresh/ │ │ │ ├── AbstractDataRefresh.java │ │ │ ├── AiProxyApiKeyDataRefresh.java │ │ │ ├── AppAuthDataRefresh.java │ │ │ ├── DataRefresh.java │ │ │ ├── DataRefreshFactory.java │ │ │ ├── DiscoveryUpstreamDataRefresh.java │ │ │ ├── MetaDataRefresh.java │ │ │ ├── PluginDataRefresh.java │ │ │ ├── ProxySelectorRefresh.java │ │ │ ├── RuleDataRefresh.java │ │ │ └── SelectorDataRefresh.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── http/ │ │ │ ├── AccessTokenManagerFixTest.java │ │ │ ├── AccessTokenManagerTest.java │ │ │ ├── HttpSyncDataServiceTest.java │ │ │ ├── config/ │ │ │ │ └── HttpConfigTest.java │ │ │ └── refresh/ │ │ │ ├── AppAuthDataRefreshTest.java │ │ │ ├── MetaDataRefreshTest.java │ │ │ ├── PluginDataRefreshTest.java │ │ │ ├── RuleDataRefreshTest.java │ │ │ └── SelectorDataRefreshTest.java │ │ └── resources/ │ │ └── logback.xml │ ├── shenyu-sync-data-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── nacos/ │ │ │ └── NacosSyncDataService.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── nacos/ │ │ ├── NacosSyncDataServiceTest.java │ │ └── handler/ │ │ └── NacosMockConfigService.java │ ├── shenyu-sync-data-polaris/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── polaris/ │ │ │ ├── PolarisSyncDataService.java │ │ │ └── config/ │ │ │ └── PolarisConfig.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── polaris/ │ │ ├── PolarisSyncDataServiceTest.java │ │ ├── config/ │ │ │ └── PolarisConfigTest.java │ │ └── handler/ │ │ ├── PolarisMockConfigFile.java │ │ └── PolarisMockConfigService.java │ ├── shenyu-sync-data-websocket/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── shenyu/ │ │ │ └── plugin/ │ │ │ └── sync/ │ │ │ └── data/ │ │ │ └── websocket/ │ │ │ ├── WebsocketSyncDataService.java │ │ │ ├── client/ │ │ │ │ └── ShenyuWebsocketClient.java │ │ │ ├── config/ │ │ │ │ └── WebsocketConfig.java │ │ │ └── handler/ │ │ │ ├── AbstractDataHandler.java │ │ │ ├── AiProxyApiKeyDataHandler.java │ │ │ ├── AuthDataHandler.java │ │ │ ├── DataHandler.java │ │ │ ├── DiscoveryUpstreamDataHandler.java │ │ │ ├── MetaDataHandler.java │ │ │ ├── PluginDataHandler.java │ │ │ ├── ProxySelectorDataHandler.java │ │ │ ├── RuleDataHandler.java │ │ │ ├── SelectorDataHandler.java │ │ │ └── WebsocketDataHandler.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── plugin/ │ │ └── sync/ │ │ └── data/ │ │ └── websocket/ │ │ ├── client/ │ │ │ └── ShenyuWebsocketClientTest.java │ │ ├── config/ │ │ │ └── WebsocketConfigTest.java │ │ └── handler/ │ │ ├── AuthDataHandlerTest.java │ │ ├── MetaDataHandlerTest.java │ │ ├── PluginDataHandlerTest.java │ │ ├── RuleDataHandlerTest.java │ │ ├── SelectorDataHandlerTest.java │ │ └── WebsocketDataHandlerTest.java │ └── shenyu-sync-data-zookeeper/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── apache/ │ │ └── shenyu/ │ │ └── sync/ │ │ └── data/ │ │ └── zookeeper/ │ │ └── ZookeeperSyncDataService.java │ └── test/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── sync/ │ └── data/ │ └── zookeeper/ │ └── ZookeeperSyncDataServiceTest.java └── shenyu-web/ ├── pom.xml └── src/ ├── main/ │ └── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── web/ │ ├── configuration/ │ │ ├── ErrorHandlerConfiguration.java │ │ ├── RestTemplateConfiguration.java │ │ ├── ShenyuExtConfiguration.java │ │ ├── ShenyuThreadPoolConfiguration.java │ │ └── SpringExtConfiguration.java │ ├── controller/ │ │ ├── LocalAppAuthController.java │ │ ├── LocalMetadataController.java │ │ └── LocalPluginController.java │ ├── endpoint/ │ │ └── ShenyuControllerEndpoint.java │ ├── fallback/ │ │ └── DefaultFallbackController.java │ ├── filter/ │ │ ├── AbstractWebFilter.java │ │ ├── CollapseSlashesFilter.java │ │ ├── CrossFilter.java │ │ ├── ExcludeFilter.java │ │ ├── FallbackFilter.java │ │ ├── FileSizeFilter.java │ │ ├── HealthFilter.java │ │ └── LocalDispatcherFilter.java │ ├── forward/ │ │ └── ForwardedRemoteAddressResolver.java │ ├── handler/ │ │ ├── GlobalErrorHandler.java │ │ └── ShenyuWebHandler.java │ └── loader/ │ ├── PluginJarParser.java │ ├── ShenyuExtPathPluginJarLoader.java │ ├── ShenyuLoaderResult.java │ ├── ShenyuLoaderService.java │ ├── ShenyuPluginClassLoader.java │ ├── ShenyuPluginClassLoaderHolder.java │ ├── ShenyuPluginLoader.java │ └── ShenyuPluginPathBuilder.java └── test/ ├── java/ │ └── org/ │ └── apache/ │ └── shenyu/ │ └── web/ │ ├── configuration/ │ │ ├── ErrorHandlerConfigurationTest.java │ │ ├── RestTemplateConfigurationTest.java │ │ ├── ShenyuExtConfigurationTest.java │ │ ├── ShenyuThreadPoolConfigurationTest.java │ │ └── SpringExtConfigurationTest.java │ ├── controller/ │ │ ├── LocalAppAuthControllerTest.java │ │ ├── LocalMetadataControllerTest.java │ │ ├── LocalPluginControllerTest.java │ │ └── TestObjectProvider.java │ ├── endpoint/ │ │ └── ShenyuControllerEndpointTest.java │ ├── fallback/ │ │ └── DefaultFallbackControllerTest.java │ ├── filter/ │ │ ├── CollapseSlashesFilterTest.java │ │ ├── CrossFilterTest.java │ │ ├── ExcludeFilterTest.java │ │ ├── FallbackFilterTest.java │ │ ├── FileSizeFilterTest.java │ │ ├── HealthFilterTest.java │ │ └── LocalDispatcherFilterTest.java │ ├── forward/ │ │ └── ForwardedRemoteAddressResolverTest.java │ ├── handler/ │ │ ├── GlobalErrorHandlerTest.java │ │ └── ShenyuWebHandlerTest.java │ └── loader/ │ ├── ShenyuLoaderResultTest.java │ ├── ShenyuLoaderServiceTest.java │ ├── ShenyuPluginClassLoaderHolderTest.java │ ├── ShenyuPluginLoaderTest.java │ └── ShenyuPluginPathBuilderTest.java └── resources/ └── plugin-jar-base64.txt