diff --git a/README-zh.md b/README-zh.md index bfe834aa..90afdc88 100644 --- a/README-zh.md +++ b/README-zh.md @@ -37,7 +37,7 @@ Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。 **[Dubbo](https://github.com/apache/incubator-dubbo)**:Apache Dubbo™ (incubating) 是一款高性能 Java RPC 框架。 -**[Fescar](https://github.com/alibaba/fescar)**:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。 +**[Seata](https://github.com/seata/seata)**:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。 **[Alibaba Cloud ACM](https://www.aliyun.com/product/acm)**:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。 @@ -70,7 +70,7 @@ Spring Cloud 使用 Maven 来构建,最快的使用方式是将本项目 clone - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies 0.2.1.RELEASE pom @@ -108,7 +108,7 @@ Example 列表: [RocketMQ Example](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/rocketmq-example/readme-zh.md) -[Fescar Example](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/fescar-example/readme-zh.md) +[Seata Example](https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/seata-example/readme-zh.md) [Alibaba Cloud OSS Example](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/oss-example/readme-zh.md) diff --git a/README.md b/README.md index 680fbea8..fb1115f6 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,9 @@ For more features, please refer to [Roadmap](https://github.com/spring-cloud-inc **[RocketMQ](https://rocketmq.apache.org/)**:A distributed messaging and streaming platform with low latency, high performance and reliability, trillion-level capacity and flexible scalability. -**[Dubbo](https://github.com/apache/incubator-dubbo)**:A high-performance, Java based open source RPC framework. +**[Dubbo](https://github.com/apache/dubbo)**:A high-performance, Java based open source RPC framework. -**[Fescar](https://github.com/alibaba/fescar)**:A distributed transaction solution with high performance and ease of use for microservices architecture. +**[Seata](https://github.com/seata/seata)**:A distributed transaction solution with high performance and ease of use for microservices architecture. **[Alibaba Cloud ACM](https://www.aliyun.com/product/acm)**:An application configuration center that enables you to centralize the management of application configurations, and accomplish real-time configuration push in a distributed environment. @@ -69,7 +69,7 @@ These artifacts are available from Maven Central and Spring Release repository v - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies 0.2.1.RELEASE pom diff --git a/Roadmap-zh.md b/Roadmap-zh.md index 8bf69a79..73559795 100644 --- a/Roadmap-zh.md +++ b/Roadmap-zh.md @@ -23,9 +23,9 @@ Apache RocketMQ™ 基于 Java 的高性能、高吞吐量的分布式消息和 **Dubbo** -Apache Dubbo™ (incubating) 是一款高性能 Java RPC 框架。 +Apache Dubbo™ 是一款高性能 Java RPC 框架。 -**Fescar** +**Seata** 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。 diff --git a/Roadmap.md b/Roadmap.md index e7b99498..32722c70 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -26,9 +26,9 @@ Apache RocketMQ™ is an open source distributed messaging and streaming data pl **Dubbo** -Apache Dubbo™ (incubating) is a high-performance, Java based open source RPC framework. +Apache Dubbo™ is a high-performance, Java based open source RPC framework. -**Fescar** +**Seata** A distributed transaction solution with high performance and ease of use for microservices architecture. diff --git a/pom.xml b/pom.xml index 61f31bd4..502696bd 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT pom @@ -101,7 +101,6 @@ spring-cloud-alibaba-dubbo spring-cloud-alicloud-context spring-cloud-alibaba-examples - spring-cloud-alibaba-test spring-cloud-alibaba-docs spring-cloud-starter-alibaba spring-cloud-starter-alicloud @@ -125,7 +124,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies ${project.version} pom diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml index ab9def6d..ad86c59d 100644 --- a/spring-cloud-alibaba-dependencies/pom.xml +++ b/spring-cloud-alibaba-dependencies/pom.xml @@ -10,6 +10,7 @@ + com.alibaba.cloud spring-cloud-alibaba-dependencies 0.2.3.BUILD-SNAPSHOT pom @@ -20,7 +21,7 @@ 1.6.2 3.1.0 0.5.1 - 1.0.1 + 1.1.1 0.8.0 1.0.9 1.0.1 @@ -178,7 +179,7 @@ ${sentinel.version} - org.springframework.cloud + com.alibaba.cloud sentinel-dubbo-api ${project.version} @@ -258,156 +259,156 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-datasource ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-oss ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-nacos-discovery ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-nacos-config ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-nacos-config-server ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-seata ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-acm ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-ans ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-schedulerx ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-sms ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-context ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-stream-binder-rocketmq ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dubbo ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-oss ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-seata ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config-server ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-ans ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-acm ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-schedulerx ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-bus-rocketmq ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-sms ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-dubbo ${project.version} diff --git a/spring-cloud-alibaba-docs/pom.xml b/spring-cloud-alibaba-docs/pom.xml index 2ce6b9b6..5d9a19fc 100644 --- a/spring-cloud-alibaba-docs/pom.xml +++ b/spring-cloud-alibaba-docs/pom.xml @@ -3,13 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-docs Spring Cloud Alibaba Documentation pom diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/acm.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/acm.adoc index 1de933a1..03e90861 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/acm.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/acm.adoc @@ -6,12 +6,12 @@ Spring Cloud AliCloud ACM 是 Config Server 和 Client 的替代方案,客户 === 如何引入 Spring Cloud AliCloud ACM -如果要在您的项目中引入 ACM,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-acm` 的 starter。 +如果要在您的项目中引入 ACM,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-acm` 的 starter。 [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-acm ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/ans.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/ans.adoc index 53fbf28f..8e43cdf6 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/ans.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/ans.adoc @@ -4,12 +4,12 @@ ANS(Application Naming Service) 是隶属于阿里云 EDAS 产品的组件 === 如何引入 Spring Cloud AliCloud ANS -如果要在您的项目中引入 ANS,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-ans` 的 starter。 +如果要在您的项目中引入 ANS,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-ans` 的 starter。 [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-ans ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc index ef5d96a4..82a5549c 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc @@ -10,7 +10,7 @@ Spring Cloud Alibaba BOM 包含了它所使用的所有依赖的版本。 - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc index 0cf53242..b68acea6 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc @@ -28,12 +28,12 @@ NOTE: 注意dataid是以 properties(默认的文件扩展名方式)为扩展名 ===== 客户端使用方式 -如果要在您的项目中使用 Nacos 来实现应用的外部化配置,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alibaba-nacos-config` 的 starter。 +如果要在您的项目中使用 Nacos 来实现应用的外部化配置,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alibaba-nacos-config` 的 starter。 [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc index 92f40c4a..66c6ade2 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc @@ -11,12 +11,12 @@ Discovery Starter 也将服务实例自身的一些元数据信息-例如 host ==== 如何引入 Nacos Discovery Starter -如果要在您的项目中使用 Nacos 来实现服务发现,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alibaba-nacos-discovery` 的 starter。 +如果要在您的项目中使用 Nacos 来实现服务发现,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alibaba-nacos-discovery` 的 starter。 [source,xml,indent=0] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery ---- @@ -61,7 +61,7 @@ Discovery Starter 也将服务实例自身的一些元数据信息-例如 host import - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring.cloud.alibaba.version} pom @@ -82,7 +82,7 @@ Discovery Starter 也将服务实例自身的一些元数据信息-例如 host - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/oss.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/oss.adoc index 4d025df1..42a4c7e6 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/oss.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/oss.adoc @@ -4,12 +4,12 @@ OSS(Object Storage Service)是阿里云的一款对象存储服务产品, === 如何引入 Spring Cloud AliCloud OSS -如果要在您的项目中引入 OSS,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-oss` 的 starter。 +如果要在您的项目中引入 OSS,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-oss` 的 starter。 [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-oss ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc index 557fe2e5..8c328533 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc @@ -121,7 +121,7 @@ messageChannel.send(MessageBuilder.withPayload("simple msg").build()); ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-stream-binder-rocketmq ``` @@ -130,7 +130,7 @@ messageChannel.send(MessageBuilder.withPayload("simple msg").build()); ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq ``` diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/schedulerx.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/schedulerx.adoc index f3526317..d26983d0 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/schedulerx.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/schedulerx.adoc @@ -4,12 +4,12 @@ SchedulerX(分布式任务调度) 是隶属于阿里云EDAS产品的组件 === 如何引入 Spring Cloud AliCloud SchedulerX -如果要在您的项目中引入 SchedulerX,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-schedulerX` 的 starter。 +如果要在您的项目中引入 SchedulerX,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-schedulerX` 的 starter。 [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-schedulerX ---- @@ -75,7 +75,7 @@ public class SimpleTask implements ScxSimpleJobProcessor { [source,text] ---- Job分组:测试——***-*-*-**** -Job处理接口:org.springframework.cloud.alibaba.cloud.examples.SimpleTask +Job处理接口:SimpleTask 类型:简单Job单机版 定时表达式:默认选项——0 * * * * ? Job描述:无 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc index 736a24b8..008bf27e 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc @@ -14,11 +14,11 @@ https://github.com/alibaba/Sentinel[Sentinel] 具有以下特征: ### 如何使用 Sentinel -如果要在您的项目中引入 Sentinel,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alibaba-sentinel` 的 starter。 +如果要在您的项目中引入 Sentinel,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alibaba-sentinel` 的 starter。 ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel ``` @@ -193,7 +193,7 @@ spring.cloud.sentinel.datasource.ds1.file.rule-type=flow #spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json #spring.cloud.sentinel.datasource.ds1.file.data-type=custom -#spring.cloud.sentinel.datasource.ds1.file.converter-class=org.springframework.cloud.alibaba.cloud.examples.JsonFlowRuleListConverter +#spring.cloud.sentinel.datasource.ds1.file.converter-class=JsonFlowRuleListConverter #spring.cloud.sentinel.datasource.ds1.file.rule-type=flow spring.cloud.sentinel.datasource.ds2.nacos.server-addr=localhost:8848 @@ -219,7 +219,7 @@ NOTE: d1, ds2, ds3, ds4 是 `ReadableDataSource` 的名字,可随意编写。 每种数据源都有两个共同的配置项: `data-type`、 `converter-class` 以及 `rule-type`。 -`data-type` 配置项表示 `Converter` 类型,Spring Cloud Alibaba Sentinel 默认提供两种内置的值,分别是 `json` 和 `xml` (不填默认是json)。 如果不想使用内置的 `json` 或 `xml` 这两种 `Converter`,可以填写 `custom` 表示自定义 `Converter`,然后再配置 `converter-class` 配置项,该配置项需要写类的全路径名(比如 `spring.cloud.sentinel.datasource.ds1.file.converter-class=org.springframework.cloud.alibaba.cloud.examples.JsonFlowRuleListConverter`)。 +`data-type` 配置项表示 `Converter` 类型,Spring Cloud Alibaba Sentinel 默认提供两种内置的值,分别是 `json` 和 `xml` (不填默认是json)。 如果不想使用内置的 `json` 或 `xml` 这两种 `Converter`,可以填写 `custom` 表示自定义 `Converter`,然后再配置 `converter-class` 配置项,该配置项需要写类的全路径名(比如 `spring.cloud.sentinel.datasource.ds1.file.converter-class=JsonFlowRuleListConverter`)。 `rule-type` 配置表示该数据源中的规则属于哪种类型的规则(`flow`,`degrade`,`authority`,`system`, `param-flow`)。 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc index 8e9086f2..e5af0329 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc @@ -4,12 +4,12 @@ === 如何引入 Spring Cloud AliCloud SMS -如果要在您的项目中引入 SMS,使用 group ID 为 `org.springframework.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-sms` 的 starter。 +如果要在您的项目中引入 SMS,使用 group ID 为 `com.alibaba.cloud` 和 artifact ID 为 `spring-cloud-starter-alicloud-sms` 的 starter。 [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-sms ---- @@ -181,7 +181,7 @@ spring.cloud.alicloud.sms.report-queue-name=Alicom-Queue-********-SmsReport */ @Component public class SmsReportMessageListener - implements org.springframework.cloud.alicloud.sms.SmsReportMessageListener { + implements SmsReportMessageListener { @Override public boolean dealMessage(Message message) { @@ -217,7 +217,7 @@ spring.cloud.alicloud.sms.up-queue-name=Alicom-Queue-********-SmsUp */ @Component public class SmsUpMessageListener - implements org.springframework.cloud.alicloud.sms.SmsUpMessageListener { + implements SmsUpMessageListener { @Override public boolean dealMessage(Message message) { diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/acm.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/acm.adoc index 6c31d073..b7e2c36f 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/acm.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/acm.adoc @@ -11,7 +11,7 @@ If you want to use ACM in your project, please use the starter with the group ID [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-acm ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/ans.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/ans.adoc index 4728bc11..f3d56108 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/ans.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/ans.adoc @@ -9,7 +9,7 @@ If you want to use ANS in your project, please use the starter with the group ID [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-ans ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc index 767a1e22..4ba7ee6a 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc @@ -8,7 +8,7 @@ If you’re a Maven Central user, add our BOM to your pom.xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-config.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-config.adoc index e1d5be46..b610cf4b 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-config.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-config.adoc @@ -28,12 +28,12 @@ NOTE: The default file extension of dataid is properties. ===== Usage on the Client -If you want to use Nacos to manage externalized configurations for your applications, please use the starter with the group ID as `org.springframework.cloud` and the artifact ID as `spring-cloud-starter-alibaba-nacos-config`. +If you want to use Nacos to manage externalized configurations for your applications, please use the starter with the group ID as `com.alibaba.cloud` and the artifact ID as `spring-cloud-starter-alibaba-nacos-config`. [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc index 65e26897..e1b31d26 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc @@ -11,12 +11,12 @@ Discovery Starter registers some of the metadata of the service instance, such a ==== How to Introduce Nacos Discovery Starter -please use the starter with the group ID as `org.springframework.cloud` and the artifact ID as `spring-cloud-starter-alibaba-nacos-discovery`. +please use the starter with the group ID as `com.alibaba.cloud` and the artifact ID as `spring-cloud-starter-alibaba-nacos-discovery`. [source,xml,indent=0] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery ---- @@ -61,7 +61,7 @@ The following sample illustrates how to register a service to Nacos. import - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring.cloud.alibaba.version} pom @@ -82,7 +82,7 @@ The following sample illustrates how to register a service to Nacos. - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/oss.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/oss.adoc index 75a98e7b..f9d61830 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/oss.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/oss.adoc @@ -11,7 +11,7 @@ We’ve released Spring Cloud Alibaba version 0.2.1. You will need to add depend - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-dependencies 0.2.2.BUILD-SNAPSHOT pom @@ -26,7 +26,7 @@ Next we need to introduce Spring Cloud Alibaba Cloud OSS Starter. [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-oss ---- diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc index b147b87d..48d7f750 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc @@ -120,7 +120,7 @@ For using the Spring Cloud Alibaba RocketMQ Binder, you just need to add it to y ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-stream-binder-rocketmq ``` @@ -129,7 +129,7 @@ Alternatively, you can also use the Spring Cloud Stream RocketMQ Starter: ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq ``` diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/schedulerx.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/schedulerx.adoc index 2c95df6b..38c79c50 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/schedulerx.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/schedulerx.adoc @@ -4,12 +4,12 @@ SchedulerX(Distributed job scheduling) is a component of EDAS, an Alibaba Cl === How to Introduce Spring Cloud Alibaba Cloud SchedulerX -If you want to use SchedulerX in your project, please use the starter with the group ID as `org.springframework.cloud` and the artifact ID as `spring-cloud-starter-alicloud-schedulerX`. +If you want to use SchedulerX in your project, please use the starter with the group ID as `com.alibaba.cloud` and the artifact ID as `spring-cloud-starter-alicloud-schedulerX`. [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-schedulerX ---- @@ -75,7 +75,7 @@ Go to the https://edas.console.aliyun.com/#/edasSchedulerXJob?regionNo=cn-test[S [source,text] ---- Job Group: Test——***-*-*-**** -Job process interface:org.springframework.cloud.alibaba.cloud.examples.SimpleTask +Job process interface:SimpleTask Type: Simple Single-Server Job Quartz Cron Expression: Default Option——0 * * * * ? Job Description: Empty diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc index a2a828b2..080fe307 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc @@ -14,11 +14,11 @@ https://github.com/alibaba/Sentinel[Sentinel] has the following features: ### How to Use Sentinel -If you want to use Sentinel in your project, please use the starter with the group ID as `org.springframework.cloud` and the artifact ID as `spring-cloud-starter-alibaba-sentinel`. +If you want to use Sentinel in your project, please use the starter with the group ID as `com.alibaba.cloud` and the artifact ID as `spring-cloud-starter-alibaba-sentinel`. ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel ``` @@ -195,7 +195,7 @@ spring.cloud.sentinel.datasource.ds1.file.rule-type=flow #spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json #spring.cloud.sentinel.datasource.ds1.file.data-type=custom -#spring.cloud.sentinel.datasource.ds1.file.converter-class=org.springframework.cloud.alibaba.cloud.examples.JsonFlowRuleListConverter +#spring.cloud.sentinel.datasource.ds1.file.converter-class=JsonFlowRuleListConverter #spring.cloud.sentinel.datasource.ds1.file.rule-type=flow spring.cloud.sentinel.datasource.ds2.nacos.server-addr=localhost:8848 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc index 0bc1f758..1bc6129d 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc @@ -6,12 +6,12 @@ Spring Cloud AliCloud SMS provide an easier-to-use API for quick access to Aliba === 如何引入 Spring Cloud AliCloud SMS -If you want to use SMS in your project, please use the starter with the group ID as `org.springframework.cloud` and the artifact ID as `spring-cloud-starter-alicloud-sms`. +If you want to use SMS in your project, please use the starter with the group ID as `com.alibaba.cloud` and the artifact ID as `spring-cloud-starter-alicloud-sms`. [source,xml] ---- - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-sms ---- @@ -165,7 +165,7 @@ spring.cloud.alicloud.sms.report-queue-name=Alicom-Queue-********-SmsReport ---- @Component public class SmsReportMessageListener - implements org.springframework.cloud.alicloud.sms.SmsReportMessageListener { + implements SmsReportMessageListener { @Override public boolean dealMessage(Message message) { @@ -195,7 +195,7 @@ spring.cloud.alicloud.sms.up-queue-name=Alicom-Queue-********-SmsUp ---- @Component public class SmsUpMessageListener - implements org.springframework.cloud.alicloud.sms.SmsUpMessageListener { + implements SmsUpMessageListener { @Override public boolean dealMessage(Message message) { diff --git a/spring-cloud-alibaba-dubbo/pom.xml b/spring-cloud-alibaba-dubbo/pom.xml index 39dfb4d8..2d4e16d3 100644 --- a/spring-cloud-alibaba-dubbo/pom.xml +++ b/spring-cloud-alibaba-dubbo/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -142,7 +142,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery true diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/actuate/DubboMetadataEndpointAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/actuate/DubboMetadataEndpointAutoConfiguration.java similarity index 82% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/actuate/DubboMetadataEndpointAutoConfiguration.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/actuate/DubboMetadataEndpointAutoConfiguration.java index d50a82a3..9f1999c7 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/actuate/DubboMetadataEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/actuate/DubboMetadataEndpointAutoConfiguration.java @@ -14,17 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.actuate; +package com.alibaba.cloud.dubbo.actuate; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.alibaba.dubbo.actuate.endpoint.DubboRestMetadataEndpoint; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; +import com.alibaba.cloud.dubbo.actuate.endpoint.DubboRestMetadataEndpoint; + /** * Dubbo Metadata Endpoints Auto-{@link Configuration} */ @@ -33,12 +34,10 @@ import org.springframework.context.annotation.PropertySource; @ManagementContextConfiguration public class DubboMetadataEndpointAutoConfiguration { - @Bean - @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - public DubboRestMetadataEndpoint dubboRestMetadataEndpoint() { - return new DubboRestMetadataEndpoint(); - } + @Bean + @ConditionalOnMissingBean + @ConditionalOnEnabledEndpoint + public DubboRestMetadataEndpoint dubboRestMetadataEndpoint() { + return new DubboRestMetadataEndpoint(); + } } - - diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/actuate/endpoint/DubboRestMetadataEndpoint.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/actuate/endpoint/DubboRestMetadataEndpoint.java similarity index 76% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/actuate/endpoint/DubboRestMetadataEndpoint.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/actuate/endpoint/DubboRestMetadataEndpoint.java index aa9234b0..8d0f13dd 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/actuate/endpoint/DubboRestMetadataEndpoint.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/actuate/endpoint/DubboRestMetadataEndpoint.java @@ -14,14 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.actuate.endpoint; +package com.alibaba.cloud.dubbo.actuate.endpoint; + +import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataService; -import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; +import com.alibaba.cloud.dubbo.service.DubboMetadataService; /** * Dubbo Rest Metadata {@link Endpoint} @@ -29,11 +30,11 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; @Endpoint(id = "dubborestmetadata") public class DubboRestMetadataEndpoint { - @Autowired - private DubboMetadataService dubboMetadataService; + @Autowired + private DubboMetadataService dubboMetadataService; - @ReadOperation(produces = APPLICATION_JSON_UTF8_VALUE) - public String get() { - return dubboMetadataService.getServiceRestMetadata(); - } + @ReadOperation(produces = APPLICATION_JSON_UTF8_VALUE) + public String get() { + return dubboMetadataService.getServiceRestMetadata(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/annotation/DubboTransported.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/annotation/DubboTransported.java new file mode 100644 index 00000000..26653a4a --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/annotation/DubboTransported.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.annotation; + +import static org.apache.dubbo.common.Constants.DEFAULT_RETRIES; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.apache.dubbo.common.Constants; +import org.apache.dubbo.config.annotation.Reference; +import org.apache.dubbo.rpc.ExporterListener; +import org.apache.dubbo.rpc.Filter; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.client.RestTemplate; + +/** + * {@link DubboTransported @DubboTransported} annotation indicates that the traditional + * Spring Cloud Service-to-Service call is transported by Dubbo under the hood, there are + * two main scenarios: + *
    + *
  1. {@link FeignClient @FeignClient} annotated classes: + *
      + * If {@link DubboTransported @DubboTransported} annotated classes, the invocation of all + * methods of {@link FeignClient @FeignClient} annotated classes. + *
    + *
      + * If {@link DubboTransported @DubboTransported} annotated methods of + * {@link FeignClient @FeignClient} annotated classes. + *
    + *
  2. + *
  3. {@link LoadBalanced @LoadBalanced} {@link RestTemplate} annotated field, method and + * parameters
  4. + *
+ *

+ * + * @see FeignClient + * @see LoadBalanced + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, + ElementType.PARAMETER }) +@Documented +public @interface DubboTransported { + + /** + * The protocol of Dubbo transport whose value could be used the placeholder + * "dubbo.transport.protocol" + * + * @return the default protocol is "dubbo" + */ + String protocol() default "${dubbo.transport.protocol:dubbo}"; + + /** + * The cluster of Dubbo transport whose value could be used the placeholder + * "dubbo.transport.cluster" + * + * @return the default cluster is "failover" + */ + String cluster() default "${dubbo.transport.cluster:failover}"; + + /** + * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by + * default, and the interval for retry connecting is 2000 ms + * + * @see Constants#DEFAULT_RECONNECT_PERIOD + * @see Reference#reconnect() + */ + String reconnect() default "${dubbo.transport.reconnect:2000}"; + + /** + * Maximum connections service provider can accept, default value is 0 - connection is + * shared + * + * @see Reference#connections() + */ + int connections() default 0; + + /** + * Service invocation retry times + * + * @see Constants#DEFAULT_RETRIES + * @see Reference#retries() + */ + int retries() default DEFAULT_RETRIES; + + /** + * Load balance strategy, legal values include: random, roundrobin, leastactive + * + * @see Constants#DEFAULT_LOADBALANCE + * @see Reference#loadbalance() + */ + String loadbalance() default "${dubbo.transport.loadbalance:}"; + + /** + * Maximum active requests allowed, default value is 0 + * + * @see Reference#actives() + */ + int actives() default 0; + + /** + * Timeout value for service invocation, default value is 0 + * + * @see Reference#timeout() + */ + int timeout() default 0; + + /** + * Specify cache implementation for service invocation, legal values include: lru, + * threadlocal, jcache + * + * @see Reference#cache() + */ + String cache() default "${dubbo.transport.cache:}"; + + /** + * Filters for service invocation + * + * @see Filter + * @see Reference#filter() + */ + String[] filter() default {}; + + /** + * Listeners for service exporting and unexporting + * + * @see ExporterListener + * @see Reference#listener() + */ + String[] listener() default {}; + + /** + * Customized parameter key-value pair, for example: {key1, value1, key2, value2} + * + * @see Reference#parameters() + */ + String[] parameters() default {}; +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java new file mode 100644 index 00000000..4117c7e8 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java @@ -0,0 +1,195 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.autoconfigure; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor; +import org.springframework.cloud.client.loadbalancer.RestTemplateCustomizer; +import org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.event.EventListener; +import org.springframework.core.env.Environment; +import org.springframework.core.type.MethodMetadata; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.util.CollectionUtils; +import org.springframework.web.client.RestTemplate; + +import com.alibaba.cloud.dubbo.annotation.DubboTransported; +import com.alibaba.cloud.dubbo.client.loadbalancer.DubboMetadataInitializerInterceptor; +import com.alibaba.cloud.dubbo.client.loadbalancer.DubboTransporterInterceptor; +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.metadata.resolver.DubboTransportedAttributesResolver; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; + +/** + * Dubbo Auto-{@link Configuration} for {@link LoadBalanced @LoadBalanced} + * {@link RestTemplate} + * + * @author Mercy + */ +@Configuration +@ConditionalOnClass(name = { "org.springframework.web.client.RestTemplate" }) +@AutoConfigureAfter(name = { + "org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration" }) +public class DubboLoadBalancedRestTemplateAutoConfiguration + implements BeanClassLoaderAware, SmartInitializingSingleton { + + private static final Class DUBBO_TRANSPORTED_CLASS = DubboTransported.class; + + private static final String DUBBO_TRANSPORTED_CLASS_NAME = DUBBO_TRANSPORTED_CLASS + .getName(); + + @Autowired + private DubboServiceMetadataRepository repository; + + @Autowired(required = false) + private LoadBalancerInterceptor loadBalancerInterceptor; + + @Autowired(required = false) + private RetryLoadBalancerInterceptor retryLoadBalancerInterceptor; + + @Autowired + private ConfigurableListableBeanFactory beanFactory; + + @Autowired + private DubboGenericServiceFactory serviceFactory; + + @Autowired + private DubboGenericServiceExecutionContextFactory contextFactory; + + @Autowired + private Environment environment; + + @LoadBalanced + @Autowired(required = false) + private Map restTemplates = Collections.emptyMap(); + + private ClassLoader classLoader; + + /** + * The {@link ClientHttpRequestInterceptor} bean that may be + * {@link LoadBalancerInterceptor} or {@link RetryLoadBalancerInterceptor} + */ + private ClientHttpRequestInterceptor loadBalancerInterceptorBean; + + @Override + public void afterSingletonsInstantiated() { + loadBalancerInterceptorBean = retryLoadBalancerInterceptor != null + ? retryLoadBalancerInterceptor + : loadBalancerInterceptor; + } + + /** + * Adapt the {@link RestTemplate} beans that are annotated + * {@link LoadBalanced @LoadBalanced} and {@link LoadBalanced @LoadBalanced} when + * Spring Boot application started (after the callback of + * {@link SmartInitializingSingleton} beans or + * {@link RestTemplateCustomizer#customize(RestTemplate) customization}) + */ + @EventListener(ApplicationStartedEvent.class) + public void adaptRestTemplates() { + + DubboTransportedAttributesResolver attributesResolver = new DubboTransportedAttributesResolver( + environment); + + for (Map.Entry entry : restTemplates.entrySet()) { + String beanName = entry.getKey(); + Map dubboTranslatedAttributes = getDubboTranslatedAttributes( + beanName, attributesResolver); + if (!CollectionUtils.isEmpty(dubboTranslatedAttributes)) { + adaptRestTemplate(entry.getValue(), dubboTranslatedAttributes); + } + } + } + + /** + * Gets the annotation attributes {@link RestTemplate} bean being annotated + * {@link DubboTransported @DubboTransported} + * + * @param beanName the bean name of {@link LoadBalanced @LoadBalanced} + * {@link RestTemplate} + * @param attributesResolver {@link DubboTransportedAttributesResolver} + * @return non-null {@link Map} + */ + private Map getDubboTranslatedAttributes(String beanName, + DubboTransportedAttributesResolver attributesResolver) { + Map attributes = Collections.emptyMap(); + BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); + if (beanDefinition instanceof AnnotatedBeanDefinition) { + AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition) beanDefinition; + MethodMetadata factoryMethodMetadata = annotatedBeanDefinition + .getFactoryMethodMetadata(); + attributes = factoryMethodMetadata != null + ? factoryMethodMetadata + .getAnnotationAttributes(DUBBO_TRANSPORTED_CLASS_NAME) + : Collections.emptyMap(); + } + return attributesResolver.resolve(attributes); + } + + /** + * Adapt the instance of {@link DubboTransporterInterceptor} to the + * {@link LoadBalancerInterceptor} Bean. + * + * @param restTemplate {@link LoadBalanced @LoadBalanced} {@link RestTemplate} Bean + * @param dubboTranslatedAttributes the annotation dubboTranslatedAttributes + * {@link RestTemplate} bean being annotated + * {@link DubboTransported @DubboTransported} + */ + private void adaptRestTemplate(RestTemplate restTemplate, + Map dubboTranslatedAttributes) { + + List interceptors = new ArrayList<>( + restTemplate.getInterceptors()); + + int index = loadBalancerInterceptorBean == null ? -1 + : interceptors.indexOf(loadBalancerInterceptorBean); + + index = index < 0 ? 0 : index; + + // Add ClientHttpRequestInterceptor instances before loadBalancerInterceptor + interceptors.add(index++, new DubboMetadataInitializerInterceptor(repository)); + + interceptors.add(index++, + new DubboTransporterInterceptor(repository, + restTemplate.getMessageConverters(), classLoader, + dubboTranslatedAttributes, serviceFactory, contextFactory)); + + restTemplate.setInterceptors(interceptors); + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboMetadataAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboMetadataAutoConfiguration.java new file mode 100644 index 00000000..ffb83035 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboMetadataAutoConfiguration.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.autoconfigure; + +import java.util.Collection; +import java.util.function.Supplier; + +import org.apache.dubbo.config.ProtocolConfig; +import org.apache.dubbo.config.spring.ServiceBean; +import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.event.ApplicationFailedEvent; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.event.ContextClosedEvent; +import org.springframework.context.event.EventListener; + +import com.alibaba.cloud.dubbo.metadata.DubboProtocolConfigSupplier; +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.metadata.resolver.DubboServiceBeanMetadataResolver; +import com.alibaba.cloud.dubbo.metadata.resolver.MetadataResolver; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceExporter; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy; +import com.alibaba.cloud.dubbo.service.IntrospectiveDubboMetadataService; +import com.alibaba.cloud.dubbo.util.JSONUtils; + +import feign.Contract; + +/** + * Spring Boot Auto-Configuration class for Dubbo Metadata + * + * @author Mercy + */ +@Configuration +@Import({ DubboServiceMetadataRepository.class, IntrospectiveDubboMetadataService.class, + DubboMetadataServiceExporter.class, JSONUtils.class }) +public class DubboMetadataAutoConfiguration { + + @Autowired + private ObjectProvider dubboServiceMetadataRepository; + + @Autowired + private MetadataResolver metadataResolver; + + @Autowired + private DubboMetadataServiceExporter dubboMetadataConfigServiceExporter; + + @Bean + @ConditionalOnMissingBean + public MetadataResolver metadataJsonResolver(ObjectProvider contract) { + return new DubboServiceBeanMetadataResolver(contract); + } + + @Bean + public Supplier dubboProtocolConfigSupplier( + ObjectProvider> protocols) { + return new DubboProtocolConfigSupplier(protocols); + } + + @Bean + @ConditionalOnMissingBean + public DubboMetadataServiceProxy dubboMetadataConfigServiceProxy( + DubboGenericServiceFactory factory) { + return new DubboMetadataServiceProxy(factory); + } + + // Event-Handling + + @EventListener(ServiceBeanExportedEvent.class) + public void onServiceBeanExported(ServiceBeanExportedEvent event) { + ServiceBean serviceBean = event.getServiceBean(); + publishServiceRestMetadata(serviceBean); + } + + @EventListener(ApplicationFailedEvent.class) + public void onApplicationFailed() { + unExportDubboMetadataConfigService(); + } + + @EventListener(ContextClosedEvent.class) + public void onContextClosed() { + unExportDubboMetadataConfigService(); + } + + private void publishServiceRestMetadata(ServiceBean serviceBean) { + dubboServiceMetadataRepository.getIfAvailable().publishServiceRestMetadata( + metadataResolver.resolveServiceRestMetadata(serviceBean)); + } + + private void unExportDubboMetadataConfigService() { + dubboMetadataConfigServiceExporter.unexport(); + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java new file mode 100644 index 00000000..0f282bf3 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.autoconfigure; + +import static com.alibaba.cloud.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration.TARGETER_CLASS_NAME; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.openfeign.TargeterBeanPostProcessor; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; + +/** + * Dubbo Feign Auto-{@link Configuration Configuration} + * + * @author Mercy + */ +@ConditionalOnClass(name = { "feign.Feign", TARGETER_CLASS_NAME }) +@AutoConfigureAfter(name = { + "org.springframework.cloud.openfeign.FeignAutoConfiguration" }) +@Configuration +public class DubboOpenFeignAutoConfiguration { + + public static final String TARGETER_CLASS_NAME = "org.springframework.cloud.openfeign.Targeter"; + + @Bean + public TargeterBeanPostProcessor targeterBeanPostProcessor(Environment environment, + DubboServiceMetadataRepository dubboServiceMetadataRepository, + DubboGenericServiceFactory dubboGenericServiceFactory, + DubboGenericServiceExecutionContextFactory contextFactory) { + return new TargeterBeanPostProcessor(environment, dubboServiceMetadataRepository, + dubboGenericServiceFactory, contextFactory); + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceAutoConfiguration.java new file mode 100644 index 00000000..b4f723ed --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceAutoConfiguration.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.autoconfigure; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.core.env.Environment; +import org.springframework.core.env.PropertyResolver; + +import com.alibaba.cloud.dubbo.env.DubboCloudProperties; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; +import com.alibaba.cloud.dubbo.service.parameter.PathVariableServiceParameterResolver; +import com.alibaba.cloud.dubbo.service.parameter.RequestBodyServiceParameterResolver; +import com.alibaba.cloud.dubbo.service.parameter.RequestHeaderServiceParameterResolver; +import com.alibaba.cloud.dubbo.service.parameter.RequestParamServiceParameterResolver; + +/** + * Spring Boot Auto-Configuration class for Dubbo Service + * + * @author Mercy + */ +@Configuration +@EnableConfigurationProperties(DubboCloudProperties.class) +public class DubboServiceAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public DubboGenericServiceFactory dubboGenericServiceFactory() { + return new DubboGenericServiceFactory(); + } + + @Configuration + @Import(value = { DubboGenericServiceExecutionContextFactory.class, + RequestParamServiceParameterResolver.class, + RequestBodyServiceParameterResolver.class, + RequestHeaderServiceParameterResolver.class, + PathVariableServiceParameterResolver.class }) + static class ParameterResolversConfiguration { + } + + /** + * Build a primary {@link PropertyResolver} bean to {@link Autowired @Autowired} + * + * @param environment {@link Environment} + * @return alias bean for {@link Environment} + */ + @Bean + @Primary + public PropertyResolver primaryPropertyResolver(Environment environment) { + return environment; + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java new file mode 100644 index 00000000..014b1c7d --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.autoconfigure; + +import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_CONFIGURATION_CLASS_NAME; +import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.EUREKA_AUTO_CONFIGURATION_CLASS_NAME; +import static org.springframework.util.ObjectUtils.isEmpty; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.apache.dubbo.config.spring.ServiceBean; +import org.aspectj.lang.annotation.Aspect; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.aop.support.AopUtils; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.serviceregistry.Registration; +import org.springframework.cloud.consul.serviceregistry.ConsulRegistration; +import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration; +import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; +import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry; +import org.springframework.context.SmartLifecycle; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.event.EventListener; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.registry.DubboServiceRegistrationEventPublishingAspect; +import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreRegisteredEvent; + +import com.ecwid.consul.v1.agent.model.NewService; +import com.netflix.appinfo.InstanceInfo; + +/** + * Dubbo Service Registration Auto-{@link Configuration} + * + * @author Mercy + */ +@Configuration +@Import({ DubboServiceRegistrationEventPublishingAspect.class }) +@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) +@AutoConfigureAfter(name = { EUREKA_AUTO_CONFIGURATION_CLASS_NAME, + CONSUL_AUTO_CONFIGURATION_CLASS_NAME, + "org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration" }, value = { + DubboMetadataAutoConfiguration.class }) +public class DubboServiceRegistrationAutoConfiguration { + + public static final String EUREKA_AUTO_CONFIGURATION_CLASS_NAME = "org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration"; + + public static final String CONSUL_AUTO_CONFIGURATION_CLASS_NAME = "org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationAutoConfiguration"; + + public static final String CONSUL_AUTO_REGISTRATION_CLASS_NAME = "org.springframework.cloud.consul.serviceregistry.ConsulAutoRegistration"; + + public static final String ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME = "org.springframework.cloud.zookeeper.serviceregistry.ZookeeperAutoServiceRegistrationAutoConfiguration"; + + private static final Logger logger = LoggerFactory + .getLogger(DubboServiceRegistrationAutoConfiguration.class); + + @Autowired + private DubboServiceMetadataRepository dubboServiceMetadataRepository; + + @EventListener(ServiceInstancePreRegisteredEvent.class) + public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) { + Registration registration = event.getSource(); + attachDubboMetadataServiceMetadata(registration); + } + + @Configuration + @ConditionalOnBean(name = EUREKA_AUTO_CONFIGURATION_CLASS_NAME) + @Aspect + class EurekaConfiguration implements SmartInitializingSingleton { + + @Autowired + private ObjectProvider> serviceBeans; + + @EventListener(ServiceInstancePreRegisteredEvent.class) + public void onServiceInstancePreRegistered( + ServiceInstancePreRegisteredEvent event) { + Registration registration = event.getSource(); + EurekaRegistration eurekaRegistration = EurekaRegistration.class + .cast(registration); + InstanceInfo instanceInfo = eurekaRegistration.getApplicationInfoManager() + .getInfo(); + attachDubboMetadataServiceMetadata(instanceInfo.getMetadata()); + } + + /** + * {@link EurekaServiceRegistry} will register current {@link ServiceInstance + * service instance} on {@link EurekaAutoServiceRegistration#start()} execution(in + * {@link SmartLifecycle#start() start phase}), thus this method must + * {@link ServiceBean#export() export} all {@link ServiceBean ServiceBeans} in + * advance. + */ + @Override + public void afterSingletonsInstantiated() { + Collection serviceBeans = this.serviceBeans.getIfAvailable(); + if (!isEmpty(serviceBeans)) { + serviceBeans.forEach(ServiceBean::export); + } + } + } + + @Configuration + @ConditionalOnBean(name = CONSUL_AUTO_CONFIGURATION_CLASS_NAME) + @AutoConfigureOrder + class ConsulConfiguration { + + /** + * Handle the pre-registered event of {@link ServiceInstance} for Consul + * + * @param event {@link ServiceInstancePreRegisteredEvent} + */ + @EventListener(ServiceInstancePreRegisteredEvent.class) + public void onServiceInstancePreRegistered( + ServiceInstancePreRegisteredEvent event) { + Registration registration = event.getSource(); + Class registrationClass = AopUtils.getTargetClass(registration); + String registrationClassName = registrationClass.getName(); + if (CONSUL_AUTO_REGISTRATION_CLASS_NAME + .equalsIgnoreCase(registrationClassName)) { + ConsulRegistration consulRegistration = (ConsulRegistration) registration; + attachURLsIntoMetadata(consulRegistration); + } + } + + private void attachURLsIntoMetadata(ConsulRegistration consulRegistration) { + NewService newService = consulRegistration.getService(); + Map serviceMetadata = dubboServiceMetadataRepository + .getDubboMetadataServiceMetadata(); + if (!isEmpty(serviceMetadata)) { + List tags = newService.getTags(); + for (Map.Entry entry : serviceMetadata.entrySet()) { + tags.add(entry.getKey() + "=" + entry.getValue()); + } + } + } + } + + private void attachDubboMetadataServiceMetadata(Registration registration) { + if (registration == null) { + return; + } + synchronized (registration) { + Map metadata = registration.getMetadata(); + attachDubboMetadataServiceMetadata(metadata); + } + } + + private void attachDubboMetadataServiceMetadata(Map metadata) { + Map serviceMetadata = dubboServiceMetadataRepository + .getDubboMetadataServiceMetadata(); + if (!isEmpty(serviceMetadata)) { + metadata.putAll(serviceMetadata); + } + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java new file mode 100644 index 00000000..e7836044 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java @@ -0,0 +1,171 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.autoconfigure; + +import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_CONFIGURATION_CLASS_NAME; +import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME; + +import java.util.List; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.config.spring.ServiceBean; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.serviceregistry.Registration; +import org.springframework.cloud.client.serviceregistry.ServiceRegistry; +import org.springframework.cloud.consul.serviceregistry.ConsulAutoRegistration; +import org.springframework.cloud.consul.serviceregistry.ConsulRegistration; +import org.springframework.cloud.zookeeper.serviceregistry.ServiceInstanceRegistration; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.event.EventListener; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreRegisteredEvent; + +import com.ecwid.consul.v1.agent.model.NewService; + +/** + * Dubbo Service Registration Auto-{@link Configuration} for Non-Web application + * + * @author Mercy + */ +@Configuration +@ConditionalOnNotWebApplication +@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) +@AutoConfigureAfter(DubboServiceRegistrationAutoConfiguration.class) +@Aspect +public class DubboServiceRegistrationNonWebApplicationAutoConfiguration { + + private static final String REST_PROTOCOL = "rest"; + + @Autowired + private ServiceRegistry serviceRegistry; + + @Autowired + private Registration registration; + + private volatile Integer serverPort = null; + + private volatile boolean registered = false; + + @Autowired + private DubboServiceMetadataRepository repository; + + @Around("execution(* org.springframework.cloud.client.serviceregistry.Registration.getPort())") + public Object getPort(ProceedingJoinPoint pjp) throws Throwable { + return serverPort != null ? serverPort : pjp.proceed(); + } + + @EventListener(ApplicationStartedEvent.class) + public void onApplicationStarted() { + setServerPort(); + register(); + } + + private void register() { + if (registered) { + return; + } + serviceRegistry.register(registration); + registered = true; + } + + /** + * Set web port from {@link ServiceBean#getExportedUrls() exported URLs} if "rest" + * protocol is present. + */ + private void setServerPort() { + if (serverPort == null) { + for (List urls : repository.getAllExportedUrls().values()) { + urls.stream() + .filter(url -> REST_PROTOCOL.equalsIgnoreCase(url.getProtocol())) + .findFirst().ifPresent(url -> { + serverPort = url.getPort(); + }); + + // If REST protocol is not present, use any applied port. + if (serverPort == null) { + urls.stream().findAny().ifPresent(url -> { + serverPort = url.getPort(); + }); + } + } + } + } + + @Configuration + @ConditionalOnBean(name = ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME) + class ZookeeperConfiguration implements SmartInitializingSingleton { + + @Autowired + private ServiceInstanceRegistration registration; + + @EventListener(ServiceInstancePreRegisteredEvent.class) + public void onServiceInstancePreRegistered( + ServiceInstancePreRegisteredEvent event) { + registration.setPort(serverPort); + } + + @Override + public void afterSingletonsInstantiated() { + // invoke getServiceInstance() method to trigger the ServiceInstance building + // before register + registration.getServiceInstance(); + } + } + + @Configuration + @ConditionalOnBean(name = CONSUL_AUTO_CONFIGURATION_CLASS_NAME) + class ConsulConfiguration { + + /** + * Handle the pre-registered event of {@link ServiceInstance} for Consul + * + * @param event {@link ServiceInstancePreRegisteredEvent} + */ + @EventListener(ServiceInstancePreRegisteredEvent.class) + public void onServiceInstancePreRegistered( + ServiceInstancePreRegisteredEvent event) { + Registration registration = event.getSource(); + ConsulAutoRegistration consulRegistration = (ConsulAutoRegistration) registration; + setPort(consulRegistration); + } + + /** + * Set port on Non-Web Application + * + * @param consulRegistration {@link ConsulRegistration} + */ + private void setPort(ConsulAutoRegistration consulRegistration) { + int port = consulRegistration.getPort(); + NewService newService = consulRegistration.getService(); + if (newService.getPort() == null) { + newService.setPort(port); + } + } + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboClientHttpResponse.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboClientHttpResponse.java similarity index 50% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboClientHttpResponse.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboClientHttpResponse.java index ca720625..be001896 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboClientHttpResponse.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboClientHttpResponse.java @@ -14,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.client.loadbalancer; +package com.alibaba.cloud.dubbo.client.loadbalancer; + +import java.io.IOException; +import java.io.InputStream; import org.apache.dubbo.rpc.service.GenericException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; -import java.io.IOException; -import java.io.InputStream; - /** * Dubbo {@link ClientHttpResponse} implementation * @@ -32,47 +32,50 @@ import java.io.InputStream; */ class DubboClientHttpResponse implements ClientHttpResponse { - private final HttpStatus httpStatus; + private final HttpStatus httpStatus; - private final String statusText; + private final String statusText; - private final HttpHeaders httpHeaders = new HttpHeaders(); + private final HttpHeaders httpHeaders = new HttpHeaders(); - private final DubboHttpOutputMessage httpOutputMessage; + private final DubboHttpOutputMessage httpOutputMessage; - public DubboClientHttpResponse(DubboHttpOutputMessage httpOutputMessage, GenericException exception) { - this.httpStatus = exception != null ? HttpStatus.INTERNAL_SERVER_ERROR : HttpStatus.OK; - this.statusText = exception != null ? exception.getExceptionMessage() : httpStatus.getReasonPhrase(); - this.httpOutputMessage = httpOutputMessage; - this.httpHeaders.putAll(httpOutputMessage.getHeaders()); - } + public DubboClientHttpResponse(DubboHttpOutputMessage httpOutputMessage, + GenericException exception) { + this.httpStatus = exception != null ? HttpStatus.INTERNAL_SERVER_ERROR + : HttpStatus.OK; + this.statusText = exception != null ? exception.getExceptionMessage() + : httpStatus.getReasonPhrase(); + this.httpOutputMessage = httpOutputMessage; + this.httpHeaders.putAll(httpOutputMessage.getHeaders()); + } - @Override - public HttpStatus getStatusCode() throws IOException { - return httpStatus; - } + @Override + public HttpStatus getStatusCode() throws IOException { + return httpStatus; + } - @Override - public int getRawStatusCode() throws IOException { - return httpStatus.value(); - } + @Override + public int getRawStatusCode() throws IOException { + return httpStatus.value(); + } - @Override - public String getStatusText() throws IOException { - return statusText; - } + @Override + public String getStatusText() throws IOException { + return statusText; + } - @Override - public void close() { - } + @Override + public void close() { + } - @Override - public InputStream getBody() throws IOException { - return httpOutputMessage.getBody().getInputStream(); - } + @Override + public InputStream getBody() throws IOException { + return httpOutputMessage.getBody().getInputStream(); + } - @Override - public HttpHeaders getHeaders() { - return httpHeaders; - } + @Override + public HttpHeaders getHeaders() { + return httpHeaders; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboClientHttpResponseFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboClientHttpResponseFactory.java new file mode 100644 index 00000000..a99e21d0 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboClientHttpResponseFactory.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.client.loadbalancer; + +import java.io.IOException; +import java.util.List; + +import org.apache.dubbo.rpc.service.GenericException; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.HttpMessageConverter; + +import com.alibaba.cloud.dubbo.http.converter.HttpMessageConverterHolder; +import com.alibaba.cloud.dubbo.http.util.HttpMessageConverterResolver; +import com.alibaba.cloud.dubbo.metadata.RequestMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + +/** + * Dubbo {@link ClientHttpResponse} Factory + * + * @author Mercy + */ +class DubboClientHttpResponseFactory { + + private final HttpMessageConverterResolver httpMessageConverterResolver; + + public DubboClientHttpResponseFactory(List> messageConverters, + ClassLoader classLoader) { + this.httpMessageConverterResolver = new HttpMessageConverterResolver( + messageConverters, classLoader); + } + + public ClientHttpResponse build(Object result, GenericException exception, + RequestMetadata requestMetadata, RestMethodMetadata restMethodMetadata) { + + DubboHttpOutputMessage httpOutputMessage = new DubboHttpOutputMessage(); + + HttpMessageConverterHolder httpMessageConverterHolder = httpMessageConverterResolver + .resolve(requestMetadata, restMethodMetadata); + + if (httpMessageConverterHolder != null) { + MediaType mediaType = httpMessageConverterHolder.getMediaType(); + HttpMessageConverter converter = httpMessageConverterHolder.getConverter(); + try { + converter.write(result, mediaType, httpOutputMessage); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + return new DubboClientHttpResponse(httpOutputMessage, exception); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboHttpOutputMessage.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboHttpOutputMessage.java similarity index 73% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboHttpOutputMessage.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboHttpOutputMessage.java index 1906aeb0..96a3e6c8 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboHttpOutputMessage.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboHttpOutputMessage.java @@ -14,14 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.client.loadbalancer; +package com.alibaba.cloud.dubbo.client.loadbalancer; + +import java.io.IOException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpOutputMessage; import org.springframework.util.FastByteArrayOutputStream; -import java.io.IOException; - /** * Dubbo {@link HttpOutputMessage} implementation * @@ -29,17 +29,17 @@ import java.io.IOException; */ class DubboHttpOutputMessage implements HttpOutputMessage { - private final FastByteArrayOutputStream outputStream = new FastByteArrayOutputStream(); + private final FastByteArrayOutputStream outputStream = new FastByteArrayOutputStream(); - private final HttpHeaders httpHeaders = new HttpHeaders(); + private final HttpHeaders httpHeaders = new HttpHeaders(); - @Override - public FastByteArrayOutputStream getBody() throws IOException { - return outputStream; - } + @Override + public FastByteArrayOutputStream getBody() throws IOException { + return outputStream; + } - @Override - public HttpHeaders getHeaders() { - return httpHeaders; - } + @Override + public HttpHeaders getHeaders() { + return httpHeaders; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboMetadataInitializerInterceptor.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboMetadataInitializerInterceptor.java similarity index 62% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboMetadataInitializerInterceptor.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboMetadataInitializerInterceptor.java index de488e67..ba7606b3 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboMetadataInitializerInterceptor.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboMetadataInitializerInterceptor.java @@ -14,41 +14,44 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.client.loadbalancer; +package com.alibaba.cloud.dubbo.client.loadbalancer; + +import java.io.IOException; +import java.net.URI; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; -import java.io.IOException; -import java.net.URI; +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; /** - * Dubbo Metadata {@link ClientHttpRequestInterceptor} Initializing Interceptor executes intercept before - * {@link DubboTransporterInterceptor} + * Dubbo Metadata {@link ClientHttpRequestInterceptor} Initializing Interceptor executes + * intercept before {@link DubboTransporterInterceptor} * * @author Mercy */ public class DubboMetadataInitializerInterceptor implements ClientHttpRequestInterceptor { - private final DubboServiceMetadataRepository repository; + private final DubboServiceMetadataRepository repository; - public DubboMetadataInitializerInterceptor(DubboServiceMetadataRepository repository) { - this.repository = repository; - } + public DubboMetadataInitializerInterceptor( + DubboServiceMetadataRepository repository) { + this.repository = repository; + } - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, + ClientHttpRequestExecution execution) throws IOException { - URI originalUri = request.getURI(); + URI originalUri = request.getURI(); - String serviceName = originalUri.getHost(); + String serviceName = originalUri.getHost(); - repository.initialize(serviceName); + repository.initialize(serviceName); - // Execute next - return execution.execute(request, body); - } + // Execute next + return execution.execute(request, body); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboTransporterInterceptor.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboTransporterInterceptor.java new file mode 100644 index 00000000..2b356485 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/client/loadbalancer/DubboTransporterInterceptor.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.client.loadbalancer; + +import static org.springframework.web.util.UriComponentsBuilder.fromUri; + +import java.io.IOException; +import java.net.URI; +import java.util.List; +import java.util.Map; + +import org.apache.dubbo.rpc.service.GenericException; +import org.apache.dubbo.rpc.service.GenericService; +import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.CollectionUtils; +import org.springframework.util.PathMatcher; +import org.springframework.web.util.UriComponents; + +import com.alibaba.cloud.dubbo.http.MutableHttpServerRequest; +import com.alibaba.cloud.dubbo.metadata.DubboRestServiceMetadata; +import com.alibaba.cloud.dubbo.metadata.RequestMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContext; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; + +/** + * Dubbo Transporter {@link ClientHttpRequestInterceptor} implementation + * + * @author Mercy + * @see LoadBalancerInterceptor + */ +public class DubboTransporterInterceptor implements ClientHttpRequestInterceptor { + + private final DubboServiceMetadataRepository repository; + + private final DubboClientHttpResponseFactory clientHttpResponseFactory; + + private final Map dubboTranslatedAttributes; + + private final DubboGenericServiceFactory serviceFactory; + + private final DubboGenericServiceExecutionContextFactory contextFactory; + + private final PathMatcher pathMatcher = new AntPathMatcher(); + + public DubboTransporterInterceptor( + DubboServiceMetadataRepository dubboServiceMetadataRepository, + List> messageConverters, ClassLoader classLoader, + Map dubboTranslatedAttributes, + DubboGenericServiceFactory serviceFactory, + DubboGenericServiceExecutionContextFactory contextFactory) { + this.repository = dubboServiceMetadataRepository; + this.dubboTranslatedAttributes = dubboTranslatedAttributes; + this.clientHttpResponseFactory = new DubboClientHttpResponseFactory( + messageConverters, classLoader); + this.serviceFactory = serviceFactory; + this.contextFactory = contextFactory; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, + ClientHttpRequestExecution execution) throws IOException { + + URI originalUri = request.getURI(); + + String serviceName = originalUri.getHost(); + + RequestMetadata clientMetadata = buildRequestMetadata(request); + + DubboRestServiceMetadata metadata = repository.get(serviceName, clientMetadata); + + if (metadata == null) { + // if DubboServiceMetadata is not found, executes next + return execution.execute(request, body); + } + + RestMethodMetadata dubboRestMethodMetadata = metadata.getRestMethodMetadata(); + + GenericService genericService = serviceFactory.create(metadata, + dubboTranslatedAttributes); + + MutableHttpServerRequest httpServerRequest = new MutableHttpServerRequest(request, + body); + + customizeRequest(httpServerRequest, dubboRestMethodMetadata, clientMetadata); + + DubboGenericServiceExecutionContext context = contextFactory + .create(dubboRestMethodMetadata, httpServerRequest); + + Object result = null; + GenericException exception = null; + + try { + result = genericService.$invoke(context.getMethodName(), + context.getParameterTypes(), context.getParameters()); + } + catch (GenericException e) { + exception = e; + } + + return clientHttpResponseFactory.build(result, exception, clientMetadata, + dubboRestMethodMetadata); + } + + protected void customizeRequest(MutableHttpServerRequest httpServerRequest, + RestMethodMetadata dubboRestMethodMetadata, RequestMetadata clientMetadata) { + + RequestMetadata dubboRequestMetadata = dubboRestMethodMetadata.getRequest(); + String pathPattern = dubboRequestMetadata.getPath(); + + Map pathVariables = pathMatcher + .extractUriTemplateVariables(pathPattern, httpServerRequest.getPath()); + + if (!CollectionUtils.isEmpty(pathVariables)) { + // Put path variables Map into query parameters Map + httpServerRequest.params(pathVariables); + } + + } + + private RequestMetadata buildRequestMetadata(HttpRequest request) { + UriComponents uriComponents = fromUri(request.getURI()).build(true); + RequestMetadata requestMetadata = new RequestMetadata(); + requestMetadata.setPath(uriComponents.getPath()); + requestMetadata.setMethod(request.getMethod().name()); + requestMetadata.setParams(uriComponents.getQueryParams()); + requestMetadata.setHeaders(request.getHeaders()); + return requestMetadata; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/context/DubboServiceRegistrationApplicationContextInitializer.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/context/DubboServiceRegistrationApplicationContextInitializer.java similarity index 59% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/context/DubboServiceRegistrationApplicationContextInitializer.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/context/DubboServiceRegistrationApplicationContextInitializer.java index f1283e91..e9c747cf 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/context/DubboServiceRegistrationApplicationContextInitializer.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/context/DubboServiceRegistrationApplicationContextInitializer.java @@ -14,25 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.context; +package com.alibaba.cloud.dubbo.context; -import org.springframework.cloud.alibaba.dubbo.registry.SpringCloudRegistryFactory; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; +import com.alibaba.cloud.dubbo.registry.SpringCloudRegistryFactory; + /** - * The Dubbo services will be registered as the specified Spring cloud applications that will not be considered - * normal ones, but only are used to Dubbo's service discovery even if it is based on Spring Cloud Commons abstraction. - * However, current application will be registered by other DiscoveryClientAutoConfiguration. + * The Dubbo services will be registered as the specified Spring cloud applications that + * will not be considered normal ones, but only are used to Dubbo's service discovery even + * if it is based on Spring Cloud Commons abstraction. However, current application will + * be registered by other DiscoveryClientAutoConfiguration. * * @author Mercy */ -public class DubboServiceRegistrationApplicationContextInitializer implements - ApplicationContextInitializer { +public class DubboServiceRegistrationApplicationContextInitializer + implements ApplicationContextInitializer { - @Override - public void initialize(ConfigurableApplicationContext applicationContext) { - // Set ApplicationContext into SpringCloudRegistryFactory before Dubbo Service Register - SpringCloudRegistryFactory.setApplicationContext(applicationContext); - } + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + // Set ApplicationContext into SpringCloudRegistryFactory before Dubbo Service + // Register + SpringCloudRegistryFactory.setApplicationContext(applicationContext); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/env/DubboCloudProperties.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboCloudProperties.java similarity index 51% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/env/DubboCloudProperties.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboCloudProperties.java index bb4d3864..b9d33c37 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/env/DubboCloudProperties.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboCloudProperties.java @@ -14,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.env; +package com.alibaba.cloud.dubbo.env; -import org.springframework.boot.context.properties.ConfigurationProperties; +import static org.springframework.util.StringUtils.commaDelimitedListToStringArray; +import static org.springframework.util.StringUtils.hasText; +import static org.springframework.util.StringUtils.trimAllWhitespace; import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; -import static org.springframework.util.StringUtils.commaDelimitedListToStringArray; -import static org.springframework.util.StringUtils.hasText; -import static org.springframework.util.StringUtils.trimAllWhitespace; +import org.springframework.boot.context.properties.ConfigurationProperties; /** * Dubbo Cloud {@link ConfigurationProperties Properties} @@ -34,48 +34,49 @@ import static org.springframework.util.StringUtils.trimAllWhitespace; @ConfigurationProperties(prefix = "dubbo.cloud") public class DubboCloudProperties { - /** - * All services of Dubbo - */ - public static final String ALL_DUBBO_SERVICES = "*"; + /** + * All services of Dubbo + */ + public static final String ALL_DUBBO_SERVICES = "*"; - /** - * The subscribed services, the default value is "*". The multiple value will use comma(",") as the separator. - * - * @see #ALL_DUBBO_SERVICES - */ - private String subscribedServices = ALL_DUBBO_SERVICES; + /** + * The subscribed services, the default value is "*". The multiple value will use + * comma(",") as the separator. + * + * @see #ALL_DUBBO_SERVICES + */ + private String subscribedServices = ALL_DUBBO_SERVICES; - public String getSubscribedServices() { - return subscribedServices; - } + public String getSubscribedServices() { + return subscribedServices; + } - public void setSubscribedServices(String subscribedServices) { - this.subscribedServices = subscribedServices; - } + public void setSubscribedServices(String subscribedServices) { + this.subscribedServices = subscribedServices; + } - /** - * Get the subscribed services as a {@link Set} with configuration order. - * - * @return non-null Read-only {@link Set} - */ - public Set subscribedServices() { + /** + * Get the subscribed services as a {@link Set} with configuration order. + * + * @return non-null Read-only {@link Set} + */ + public Set subscribedServices() { - String[] services = commaDelimitedListToStringArray(getSubscribedServices()); + String[] services = commaDelimitedListToStringArray(getSubscribedServices()); - if (services.length < 1) { - return Collections.emptySet(); - } + if (services.length < 1) { + return Collections.emptySet(); + } - Set subscribedServices = new LinkedHashSet<>(); + Set subscribedServices = new LinkedHashSet<>(); - for (String service : services) { - if (hasText(service)) { // filter blank service name - // remove all whitespace - subscribedServices.add(trimAllWhitespace(service)); - } - } + for (String service : services) { + if (hasText(service)) { // filter blank service name + // remove all whitespace + subscribedServices.add(trimAllWhitespace(service)); + } + } - return Collections.unmodifiableSet(subscribedServices); - } + return Collections.unmodifiableSet(subscribedServices); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java new file mode 100644 index 00000000..d78adf47 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java @@ -0,0 +1,226 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.env; + +import static org.apache.dubbo.common.Constants.DEFAULT_PROTOCOL; +import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.Ordered; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertySource; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +/** + * Dubbo {@link WebApplicationType#NONE Non-Web Application} + * {@link EnvironmentPostProcessor} + * + * @author Mercy + */ +public class DubboNonWebApplicationEnvironmentPostProcessor + implements EnvironmentPostProcessor, Ordered { + + private static final String DOT = "."; + + /** + * The name of default {@link PropertySource} defined in + * SpringApplication#configurePropertySources method. + */ + private static final String PROPERTY_SOURCE_NAME = "defaultProperties"; + + private static final String SERVER_PORT_PROPERTY_NAME = "server.port"; + + private static final String PORT_PROPERTY_NAME = "port"; + + private static final String PROTOCOL_PROPERTY_NAME_PREFIX = "dubbo.protocol"; + + private static final String PROTOCOL_NAME_PROPERTY_NAME_SUFFIX = DOT + "name"; + + private static final String PROTOCOL_PORT_PROPERTY_NAME_SUFFIX = DOT + + PORT_PROPERTY_NAME; + + private static final String PROTOCOL_PORT_PROPERTY_NAME = PROTOCOL_PROPERTY_NAME_PREFIX + + PROTOCOL_PORT_PROPERTY_NAME_SUFFIX; + + private static final String PROTOCOL_NAME_PROPERTY_NAME = PROTOCOL_PROPERTY_NAME_PREFIX + + PROTOCOL_NAME_PROPERTY_NAME_SUFFIX; + + private static final String PROTOCOLS_PROPERTY_NAME_PREFIX = "dubbo.protocols"; + + private static final String REST_PROTOCOL = "rest"; + + private final Logger logger = LoggerFactory + .getLogger(DubboNonWebApplicationEnvironmentPostProcessor.class); + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, + SpringApplication application) { + WebApplicationType webApplicationType = application.getWebApplicationType(); + + if (!WebApplicationType.NONE.equals(webApplicationType)) { // Just works in + // Non-Web Application + if (logger.isDebugEnabled()) { + logger.debug( + "Current application is a Web Application, the process will be ignored."); + } + return; + } + + MutablePropertySources propertySources = environment.getPropertySources(); + Map defaultProperties = createDefaultProperties(environment); + if (!CollectionUtils.isEmpty(defaultProperties)) { + addOrReplace(propertySources, defaultProperties); + } + } + + private Map createDefaultProperties( + ConfigurableEnvironment environment) { + Map defaultProperties = new HashMap(); + resetServerPort(environment, defaultProperties); + return defaultProperties; + } + + /** + * Reset server port property if it's absent, whose value is configured by + * "dubbbo.protocol.port" or "dubbo.protcols.rest.port" + * + * @param environment + * @param defaultProperties + */ + private void resetServerPort(ConfigurableEnvironment environment, + Map defaultProperties) { + + String serverPort = environment.getProperty(SERVER_PORT_PROPERTY_NAME, + environment.getProperty(PORT_PROPERTY_NAME)); + + if (serverPort != null) { + return; + } + + serverPort = getRestPortFromProtocolProperty(environment); + + if (serverPort == null) { + serverPort = getRestPortFromProtocolsProperties(environment); + } + + setServerPort(environment, serverPort, defaultProperties); + } + + private String getRestPortFromProtocolProperty(ConfigurableEnvironment environment) { + + String protocol = environment.getProperty(PROTOCOL_NAME_PROPERTY_NAME, + DEFAULT_PROTOCOL); + + return isRestProtocol(protocol) + ? environment.getProperty(PROTOCOL_PORT_PROPERTY_NAME) + : null; + } + + private String getRestPortFromProtocolsProperties( + ConfigurableEnvironment environment) { + + String restPort = null; + + Map subProperties = getSubProperties(environment, + PROTOCOLS_PROPERTY_NAME_PREFIX); + + Properties properties = new Properties(); + + properties.putAll(subProperties); + + for (String propertyName : properties.stringPropertyNames()) { + if (propertyName.endsWith(PROTOCOL_NAME_PROPERTY_NAME_SUFFIX)) { // protocol + // name + // property + String protocol = properties.getProperty(propertyName); + if (isRestProtocol(protocol)) { + String beanName = resolveBeanName(propertyName); + if (StringUtils.hasText(beanName)) { + restPort = properties.getProperty( + beanName + PROTOCOL_PORT_PROPERTY_NAME_SUFFIX); + break; + } + } + } + } + + return restPort; + } + + private String resolveBeanName(String propertyName) { + int index = propertyName.indexOf(DOT); + return index > -1 ? propertyName.substring(0, index) : null; + } + + private void setServerPort(ConfigurableEnvironment environment, String serverPort, + Map defaultProperties) { + if (serverPort == null) { + return; + } + + defaultProperties.put(SERVER_PORT_PROPERTY_NAME, serverPort); + + } + + /** + * Copy from BusEnvironmentPostProcessor#addOrReplace(MutablePropertySources, Map) + * + * @param propertySources {@link MutablePropertySources} + * @param map Default Dubbo Properties + */ + private void addOrReplace(MutablePropertySources propertySources, + Map map) { + MapPropertySource target = null; + if (propertySources.contains(PROPERTY_SOURCE_NAME)) { + PropertySource source = propertySources.get(PROPERTY_SOURCE_NAME); + if (source instanceof MapPropertySource) { + target = (MapPropertySource) source; + for (String key : map.keySet()) { + if (!target.containsProperty(key)) { + target.getSource().put(key, map.get(key)); + } + } + } + } + if (target == null) { + target = new MapPropertySource(PROPERTY_SOURCE_NAME, map); + } + if (!propertySources.contains(PROPERTY_SOURCE_NAME)) { + propertySources.addLast(target); + } + } + + @Override + public int getOrder() { // Keep LOWEST_PRECEDENCE + return LOWEST_PRECEDENCE; + } + + private static boolean isRestProtocol(String protocol) { + return REST_PROTOCOL.equalsIgnoreCase(protocol); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/ByteArrayHttpInputMessage.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/ByteArrayHttpInputMessage.java similarity index 66% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/ByteArrayHttpInputMessage.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/ByteArrayHttpInputMessage.java index ccd294d7..c8f4cdb3 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/ByteArrayHttpInputMessage.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/ByteArrayHttpInputMessage.java @@ -14,15 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http; +package com.alibaba.cloud.dubbo.http; + +import java.io.IOException; +import java.io.InputStream; import org.apache.dubbo.common.io.UnsafeByteArrayInputStream; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpInputMessage; -import java.io.IOException; -import java.io.InputStream; - /** * Byte array {@link HttpInputMessage} implementation * @@ -30,26 +30,26 @@ import java.io.InputStream; */ class ByteArrayHttpInputMessage implements HttpInputMessage { - private final HttpHeaders httpHeaders; + private final HttpHeaders httpHeaders; - private final InputStream inputStream; + private final InputStream inputStream; - public ByteArrayHttpInputMessage(byte[] body) { - this(new HttpHeaders(), body); - } + public ByteArrayHttpInputMessage(byte[] body) { + this(new HttpHeaders(), body); + } - public ByteArrayHttpInputMessage(HttpHeaders httpHeaders, byte[] body) { - this.httpHeaders = httpHeaders; - this.inputStream = new UnsafeByteArrayInputStream(body); - } + public ByteArrayHttpInputMessage(HttpHeaders httpHeaders, byte[] body) { + this.httpHeaders = httpHeaders; + this.inputStream = new UnsafeByteArrayInputStream(body); + } - @Override - public InputStream getBody() throws IOException { - return inputStream; - } + @Override + public InputStream getBody() throws IOException { + return inputStream; + } - @Override - public HttpHeaders getHeaders() { - return httpHeaders; - } + @Override + public HttpHeaders getHeaders() { + return httpHeaders; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/DefaultHttpRequest.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/DefaultHttpRequest.java new file mode 100644 index 00000000..8d27c577 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/DefaultHttpRequest.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http; + +import static org.springframework.web.util.UriComponentsBuilder.fromPath; + +import java.net.URI; +import java.util.List; +import java.util.Map; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.util.UriComponentsBuilder; + +/** + * Default {@link HttpRequest} implementation + * + * @author Mercy + */ +public class DefaultHttpRequest implements HttpRequest { + + private final String method; + + private final URI uri; + + private final HttpHeaders headers = new HttpHeaders(); + + public DefaultHttpRequest(String method, String path, + Map> params, Map> headers) { + this.method = method == null ? HttpMethod.GET.name() : method.toUpperCase(); + this.uri = buildURI(path, params); + this.headers.putAll(headers); + } + + private URI buildURI(String path, Map> params) { + UriComponentsBuilder builder = fromPath(path) + .queryParams(new LinkedMultiValueMap<>(params)); + return builder.build().toUri(); + } + + @Override + public HttpMethod getMethod() { + return HttpMethod.resolve(getMethodValue()); + } + + public String getMethodValue() { + return method; + } + + @Override + public URI getURI() { + return uri; + } + + @Override + public HttpHeaders getHeaders() { + return headers; + } + + public static Builder builder() { + return new Builder(); + } + + /** + * {@link HttpRequest} Builder + */ + public static class Builder { + + String method; + + String path; + + MultiValueMap params = new LinkedMultiValueMap<>(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + + public Builder method(String method) { + this.method = method; + return this; + } + + public Builder path(String path) { + this.path = path; + return this; + } + + public Builder param(String name, String value) { + this.params.add(name, value); + return this; + } + + public Builder header(String name, String value) { + this.headers.add(name, value); + return this; + } + + public Builder params(Map> params) { + this.params.putAll(params); + return this; + } + + public Builder headers(Map> headers) { + this.headers.putAll(headers); + return this; + } + + public HttpRequest build() { + return new DefaultHttpRequest(method, path, params, headers); + } + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/HttpServerRequest.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/HttpServerRequest.java similarity index 79% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/HttpServerRequest.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/HttpServerRequest.java index f56a3f93..11af6767 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/HttpServerRequest.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/HttpServerRequest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http; +package com.alibaba.cloud.dubbo.http; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpRequest; @@ -27,16 +27,16 @@ import org.springframework.util.MultiValueMap; */ public interface HttpServerRequest extends HttpRequest, HttpInputMessage { - /** - * Return a path of current HTTP request - * - * @return - */ - String getPath(); + /** + * Return a path of current HTTP request + * + * @return + */ + String getPath(); - /** - * Return a map with parsed and decoded query parameter values. - */ - MultiValueMap getQueryParams(); + /** + * Return a map with parsed and decoded query parameter values. + */ + MultiValueMap getQueryParams(); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/MutableHttpServerRequest.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/MutableHttpServerRequest.java new file mode 100644 index 00000000..9b1d9ee2 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/MutableHttpServerRequest.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http; + +import static com.alibaba.cloud.dubbo.http.util.HttpUtils.getParameters; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.util.Map; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; +import org.springframework.util.MultiValueMap; + +/** + * Mutable {@link HttpServerRequest} implementation + * + * @author Mercy + */ +public class MutableHttpServerRequest implements HttpServerRequest { + + private final HttpMethod httpMethod; + + private final URI uri; + + private final String path; + + private final MultiValueMap queryParams; + + private final HttpHeaders httpHeaders; + + private final HttpInputMessage httpInputMessage; + + public MutableHttpServerRequest(HttpRequest httpRequest, byte[] body) { + this.httpMethod = httpRequest.getMethod(); + this.uri = httpRequest.getURI(); + this.path = uri.getPath(); + this.httpHeaders = httpRequest.getHeaders(); + this.queryParams = getParameters(httpRequest); + this.httpInputMessage = new ByteArrayHttpInputMessage(body); + } + + public MutableHttpServerRequest params(Map params) { + queryParams.setAll(params); + return this; + } + + @Override + public InputStream getBody() throws IOException { + return httpInputMessage.getBody(); + } + + @Override + public HttpMethod getMethod() { + return httpMethod; + } + + // Override method since Spring Framework 5.0 + public String getMethodValue() { + return httpMethod.name(); + } + + @Override + public URI getURI() { + return uri; + } + + @Override + public HttpHeaders getHeaders() { + return httpHeaders; + } + + @Override + public String getPath() { + return path; + } + + @Override + public MultiValueMap getQueryParams() { + return queryParams; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/converter/HttpMessageConverterHolder.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/converter/HttpMessageConverterHolder.java similarity index 69% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/converter/HttpMessageConverterHolder.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/converter/HttpMessageConverterHolder.java index e0d7d11f..67d2f30b 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/converter/HttpMessageConverterHolder.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/converter/HttpMessageConverterHolder.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.converter; +package com.alibaba.cloud.dubbo.http.converter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; @@ -26,20 +26,21 @@ import org.springframework.http.converter.HttpMessageConverter; */ public class HttpMessageConverterHolder { - private final MediaType mediaType; + private final MediaType mediaType; - private final HttpMessageConverter converter; + private final HttpMessageConverter converter; - public HttpMessageConverterHolder(MediaType mediaType, HttpMessageConverter converter) { - this.mediaType = mediaType; - this.converter = converter; - } + public HttpMessageConverterHolder(MediaType mediaType, + HttpMessageConverter converter) { + this.mediaType = mediaType; + this.converter = converter; + } - public MediaType getMediaType() { - return mediaType; - } + public MediaType getMediaType() { + return mediaType; + } - public HttpMessageConverter getConverter() { - return converter; - } + public HttpMessageConverter getConverter() { + return converter; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java new file mode 100644 index 00000000..4bc1c281 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.Collection; +import java.util.Iterator; + +/** + * Abstract {@link HttpRequestMatcher} implementation + * + * @author Rossen Stoyanchev + * @author Mercy + */ +public abstract class AbstractHttpRequestMatcher implements HttpRequestMatcher { + + /** + * Return the discrete items a request condition is composed of. + *

+ * For example URL patterns, HTTP request methods, param expressions, etc. + * + * @return a collection of objects, never {@code null} + */ + protected abstract Collection getContent(); + + /** + * The notation to use when printing discrete items of content. + *

+ * For example {@code " || "} for URL patterns or {@code " && "} for param + * expressions. + */ + protected abstract String getToStringInfix(); + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (other == null || getClass() != other.getClass()) { + return false; + } + return getContent().equals(((AbstractHttpRequestMatcher) other).getContent()); + } + + @Override + public int hashCode() { + return getContent().hashCode(); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder("["); + for (Iterator iterator = getContent().iterator(); iterator.hasNext();) { + Object expression = iterator.next(); + builder.append(expression.toString()); + if (iterator.hasNext()) { + builder.append(getToStringInfix()); + } + } + builder.append("]"); + return builder.toString(); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractMediaTypeExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractMediaTypeExpression.java new file mode 100644 index 00000000..60e8939f --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractMediaTypeExpression.java @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import org.springframework.http.MediaType; + +/** + * The some source code is scratched from + * org.springframework.web.servlet.mvc.condition.AbstractMediaTypeExpression + * + * @author Arjen Poutsma + * @author Rossen Stoyanchev + * @author Mercy + */ +public class AbstractMediaTypeExpression + implements MediaTypeExpression, Comparable { + + private final MediaType mediaType; + + private final boolean negated; + + AbstractMediaTypeExpression(String expression) { + if (expression.startsWith("!")) { + this.negated = true; + expression = expression.substring(1); + } + else { + this.negated = false; + } + this.mediaType = MediaType.parseMediaType(expression); + } + + AbstractMediaTypeExpression(MediaType mediaType, boolean negated) { + this.mediaType = mediaType; + this.negated = negated; + } + + @Override + public MediaType getMediaType() { + return this.mediaType; + } + + @Override + public boolean isNegated() { + return this.negated; + } + + @Override + public int compareTo(AbstractMediaTypeExpression other) { + return MediaType.SPECIFICITY_COMPARATOR.compare(this.getMediaType(), + other.getMediaType()); + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (other == null || getClass() != other.getClass()) { + return false; + } + AbstractMediaTypeExpression otherExpr = (AbstractMediaTypeExpression) other; + return (this.mediaType.equals(otherExpr.mediaType) + && this.negated == otherExpr.negated); + } + + @Override + public int hashCode() { + return this.mediaType.hashCode(); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + if (this.negated) { + builder.append('!'); + } + builder.append(this.mediaType.toString()); + return builder.toString(); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractNameValueExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractNameValueExpression.java new file mode 100644 index 00000000..fe50e187 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractNameValueExpression.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import static org.springframework.util.StringUtils.trimWhitespace; + +import org.springframework.http.HttpRequest; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +/** + * The some source code is scratched from + * org.springframework.web.servlet.mvc.condition.AbstractNameValueExpression + * + * @author Rossen Stoyanchev + * @author Arjen Poutsma + * @author Mercy + */ +abstract class AbstractNameValueExpression implements NameValueExpression { + + protected final String name; + + protected final T value; + + protected final boolean negated; + + AbstractNameValueExpression(String expression) { + int separator = expression.indexOf('='); + if (separator == -1) { + this.negated = expression.startsWith("!"); + this.name = trimWhitespace( + (this.negated ? expression.substring(1) : expression)); + this.value = null; + } + else { + this.negated = (separator > 0) && (expression.charAt(separator - 1) == '!'); + this.name = trimWhitespace( + (this.negated ? expression.substring(0, separator - 1) + : expression.substring(0, separator))); + String valueExpression = getValueExpression(expression, separator); + this.value = isExcludedValue(valueExpression) ? null + : parseValue(valueExpression); + } + } + + private String getValueExpression(String expression, int separator) { + return trimWhitespace(expression.substring(separator + 1)); + } + + /** + * Exclude the pattern value Expression: "{value}", subclass could override this + * method. + * + * @param valueExpression + * @return + */ + protected boolean isExcludedValue(String valueExpression) { + return StringUtils.hasText(valueExpression) && valueExpression.startsWith("{") + && valueExpression.endsWith("}"); + } + + @Override + public String getName() { + return this.name; + } + + @Override + public T getValue() { + return this.value; + } + + @Override + public boolean isNegated() { + return this.negated; + } + + public final boolean match(HttpRequest request) { + boolean isMatch; + if (this.value != null) { + isMatch = matchValue(request); + } + else { + isMatch = matchName(request); + } + return (this.negated ? !isMatch : isMatch); + } + + protected abstract boolean isCaseSensitiveName(); + + protected abstract T parseValue(String valueExpression); + + protected abstract boolean matchName(HttpRequest request); + + protected abstract boolean matchValue(HttpRequest request); + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (other == null || getClass() != other.getClass()) { + return false; + } + AbstractNameValueExpression that = (AbstractNameValueExpression) other; + return ((isCaseSensitiveName() ? this.name.equals(that.name) + : this.name.equalsIgnoreCase(that.name)) + && ObjectUtils.nullSafeEquals(this.value, that.value) + && this.negated == that.negated); + } + + @Override + public int hashCode() { + int result = (isCaseSensitiveName() ? this.name.hashCode() + : this.name.toLowerCase().hashCode()); + result = 31 * result + (this.value != null ? this.value.hashCode() : 0); + result = 31 * result + (this.negated ? 1 : 0); + return result; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + if (this.value != null) { + builder.append(this.name); + if (this.negated) { + builder.append('!'); + } + builder.append('='); + builder.append(this.value); + } + else { + if (this.negated) { + builder.append('!'); + } + builder.append(this.name); + } + return builder.toString(); + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/CompositeHttpRequestMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/CompositeHttpRequestMatcher.java new file mode 100644 index 00000000..2e634732 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/CompositeHttpRequestMatcher.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +import org.springframework.http.HttpRequest; + +/** + * Composite {@link HttpRequestMatcher} implementation + * + * @author Mercy + */ +public abstract class CompositeHttpRequestMatcher extends AbstractHttpRequestMatcher { + + private final List matchers = new LinkedList<>(); + + public CompositeHttpRequestMatcher(HttpRequestMatcher... matchers) { + this.matchers.addAll(Arrays.asList(matchers)); + } + + public CompositeHttpRequestMatcher and(HttpRequestMatcher matcher) { + this.matchers.add(matcher); + return this; + } + + @Override + public boolean match(HttpRequest request) { + for (HttpRequestMatcher matcher : matchers) { + if (!matcher.match(request)) { + return false; + } + } + return true; + } + + protected List getMatchers() { + return this.matchers; + } + + @Override + protected Collection getContent() { + List content = new LinkedList<>(); + for (HttpRequestMatcher matcher : getMatchers()) { + if (matcher instanceof AbstractHttpRequestMatcher) { + content.addAll(((AbstractHttpRequestMatcher) matcher).getContent()); + } + } + return content; + } + + @Override + protected String getToStringInfix() { + return " && "; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ConsumeMediaTypeExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ConsumeMediaTypeExpression.java similarity index 73% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ConsumeMediaTypeExpression.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ConsumeMediaTypeExpression.java index 3fe1f016..e34c394a 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ConsumeMediaTypeExpression.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ConsumeMediaTypeExpression.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; import org.springframework.http.MediaType; @@ -29,16 +29,16 @@ import org.springframework.http.MediaType; */ class ConsumeMediaTypeExpression extends AbstractMediaTypeExpression { - ConsumeMediaTypeExpression(String expression) { - super(expression); - } + ConsumeMediaTypeExpression(String expression) { + super(expression); + } - ConsumeMediaTypeExpression(MediaType mediaType, boolean negated) { - super(mediaType, negated); - } + ConsumeMediaTypeExpression(MediaType mediaType, boolean negated) { + super(mediaType, negated); + } - public final boolean match(MediaType contentType) { - boolean match = getMediaType().includes(contentType); - return (!isNegated() ? match : !match); - } + public final boolean match(MediaType contentType) { + boolean match = getMediaType().includes(contentType); + return (!isNegated() ? match : !match); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HeaderExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HeaderExpression.java similarity index 57% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HeaderExpression.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HeaderExpression.java index d831a3b9..1f2e80cf 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HeaderExpression.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HeaderExpression.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; @@ -23,7 +23,8 @@ import org.springframework.util.ObjectUtils; /** * Parses and matches a single header expression to a request. *

- * The some source code is scratched from org.springframework.web.servlet.mvc.condition.HeadersRequestCondition.HeaderExpression + * The some source code is scratched from + * org.springframework.web.servlet.mvc.condition.HeadersRequestCondition.HeaderExpression * * @author Arjen Poutsma * @author Rossen Stoyanchev @@ -31,30 +32,30 @@ import org.springframework.util.ObjectUtils; */ class HeaderExpression extends AbstractNameValueExpression { - HeaderExpression(String expression) { - super(expression); - } + HeaderExpression(String expression) { + super(expression); + } - @Override - protected boolean isCaseSensitiveName() { - return false; - } + @Override + protected boolean isCaseSensitiveName() { + return false; + } - @Override - protected String parseValue(String valueExpression) { - return valueExpression; - } + @Override + protected String parseValue(String valueExpression) { + return valueExpression; + } - @Override - protected boolean matchName(HttpRequest request) { - HttpHeaders httpHeaders = request.getHeaders(); - return httpHeaders.containsKey(this.name); - } + @Override + protected boolean matchName(HttpRequest request) { + HttpHeaders httpHeaders = request.getHeaders(); + return httpHeaders.containsKey(this.name); + } - @Override - protected boolean matchValue(HttpRequest request) { - HttpHeaders httpHeaders = request.getHeaders(); - String headerValue = httpHeaders.getFirst(this.name); - return ObjectUtils.nullSafeEquals(this.value, headerValue); - } + @Override + protected boolean matchValue(HttpRequest request) { + HttpHeaders httpHeaders = request.getHeaders(); + String headerValue = httpHeaders.getFirst(this.name); + return ObjectUtils.nullSafeEquals(this.value, headerValue); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestConsumersMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestConsumersMatcher.java new file mode 100644 index 00000000..3d341f5b --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestConsumersMatcher.java @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; + +/** + * {@link HttpRequest} 'Content-Type' header {@link HttpRequestMatcher matcher} + * + * @author Arjen Poutsma + * @author Rossen Stoyanchev + * @author Mercy + */ +public class HttpRequestConsumersMatcher extends AbstractHttpRequestMatcher { + + private final List expressions; + + /** + * Creates a new instance from 0 or more "consumes" expressions. + * + * @param consumes consumes expressions if 0 expressions are provided, the condition + * will match to every request + */ + public HttpRequestConsumersMatcher(String... consumes) { + this(consumes, null); + } + + /** + * Creates a new instance with "consumes" and "header" expressions. "Header" + * expressions where the header name is not 'Content-Type' or have no header value + * defined are ignored. If 0 expressions are provided in total, the condition will + * match to every request + * + * @param consumes consumes expressions + * @param headers headers expressions + */ + public HttpRequestConsumersMatcher(String[] consumes, String[] headers) { + this(parseExpressions(consumes, headers)); + } + + /** + * Private constructor accepting parsed media type expressions. + */ + private HttpRequestConsumersMatcher( + Collection expressions) { + this.expressions = new ArrayList<>(expressions); + Collections.sort(this.expressions); + } + + @Override + public boolean match(HttpRequest request) { + + if (expressions.isEmpty()) { + return true; + } + + HttpHeaders httpHeaders = request.getHeaders(); + + MediaType contentType = httpHeaders.getContentType(); + + if (contentType == null) { + contentType = MediaType.APPLICATION_OCTET_STREAM; + } + + for (ConsumeMediaTypeExpression expression : expressions) { + if (!expression.match(contentType)) { + return false; + } + } + + return true; + } + + private static Set parseExpressions(String[] consumes, + String[] headers) { + Set result = new LinkedHashSet<>(); + if (headers != null) { + for (String header : headers) { + HeaderExpression expr = new HeaderExpression(header); + if ("Content-Type".equalsIgnoreCase(expr.name) && expr.value != null) { + for (MediaType mediaType : MediaType.parseMediaTypes(expr.value)) { + result.add( + new ConsumeMediaTypeExpression(mediaType, expr.negated)); + } + } + } + } + for (String consume : consumes) { + result.add(new ConsumeMediaTypeExpression(consume)); + } + return result; + } + + @Override + protected Collection getContent() { + return this.expressions; + } + + @Override + protected String getToStringInfix() { + return " || "; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestHeadersMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestHeadersMatcher.java new file mode 100644 index 00000000..8ad427e4 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestHeadersMatcher.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; + +/** + * {@link HttpRequest} headers {@link HttpRequestMatcher matcher} + * + * @author Mercy + */ +public class HttpRequestHeadersMatcher extends AbstractHttpRequestMatcher { + + private final Set expressions; + + public HttpRequestHeadersMatcher(String... headers) { + this.expressions = parseExpressions(headers); + } + + private static Set parseExpressions(String... headers) { + Set expressions = new LinkedHashSet<>(); + for (String header : headers) { + HeaderExpression expr = new HeaderExpression(header); + if (HttpHeaders.ACCEPT.equalsIgnoreCase(expr.name) + || HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(expr.name)) { + continue; + } + expressions.add(expr); + } + return expressions; + } + + @Override + public boolean match(HttpRequest request) { + for (HeaderExpression expression : this.expressions) { + if (!expression.match(request)) { + return false; + } + } + return true; + } + + @Override + protected Collection getContent() { + return this.expressions; + } + + @Override + protected String getToStringInfix() { + return " && "; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMatcher.java similarity index 77% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMatcher.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMatcher.java index ddc395e7..d53536b9 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMatcher.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMatcher.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; import org.springframework.http.HttpRequest; @@ -25,11 +25,11 @@ import org.springframework.http.HttpRequest; */ public interface HttpRequestMatcher { - /** - * Match {@link HttpRequest} or not - * - * @param request The {@link HttpRequest} instance - * @return if matched, return true, or false. - */ - boolean match(HttpRequest request); + /** + * Match {@link HttpRequest} or not + * + * @param request The {@link HttpRequest} instance + * @return if matched, return true, or false. + */ + boolean match(HttpRequest request); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMethodsMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMethodsMatcher.java similarity index 50% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMethodsMatcher.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMethodsMatcher.java index dd130b87..d520f792 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMethodsMatcher.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMethodsMatcher.java @@ -14,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpRequest; -import org.springframework.util.StringUtils; +import static org.springframework.http.HttpMethod.resolve; import java.util.Collection; import java.util.LinkedHashSet; import java.util.Set; -import static org.springframework.http.HttpMethod.resolve; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; +import org.springframework.util.StringUtils; /** * {@link HttpRequest} {@link HttpMethod methods} {@link HttpRequestMatcher matcher} @@ -33,50 +33,50 @@ import static org.springframework.http.HttpMethod.resolve; */ public class HttpRequestMethodsMatcher extends AbstractHttpRequestMatcher { - private final Set methods; + private final Set methods; - public HttpRequestMethodsMatcher(String... methods) { - this.methods = resolveHttpMethods(methods); - } + public HttpRequestMethodsMatcher(String... methods) { + this.methods = resolveHttpMethods(methods); + } - private Set resolveHttpMethods(String[] methods) { - Set httpMethods = new LinkedHashSet<>(methods.length); - for (String method : methods) { - if (!StringUtils.hasText(method)) { - continue; - } - HttpMethod httpMethod = resolve(method); - httpMethods.add(httpMethod); - } - return httpMethods; - } + private Set resolveHttpMethods(String[] methods) { + Set httpMethods = new LinkedHashSet<>(methods.length); + for (String method : methods) { + if (!StringUtils.hasText(method)) { + continue; + } + HttpMethod httpMethod = resolve(method); + httpMethods.add(httpMethod); + } + return httpMethods; + } - public Set getMethods() { - return methods; - } + public Set getMethods() { + return methods; + } - @Override - public boolean match(HttpRequest request) { - boolean matched = false; - HttpMethod httpMethod = request.getMethod(); - if (httpMethod != null) { - for (HttpMethod method : getMethods()) { - if (httpMethod.equals(method)) { - matched = true; - break; - } - } - } - return matched; - } + @Override + public boolean match(HttpRequest request) { + boolean matched = false; + HttpMethod httpMethod = request.getMethod(); + if (httpMethod != null) { + for (HttpMethod method : getMethods()) { + if (httpMethod.equals(method)) { + matched = true; + break; + } + } + } + return matched; + } - @Override - protected Collection getContent() { - return methods; - } + @Override + protected Collection getContent() { + return methods; + } - @Override - protected String getToStringInfix() { - return " || "; - } + @Override + protected String getToStringInfix() { + return " || "; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestParamsMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestParamsMatcher.java new file mode 100644 index 00000000..1db0cfd7 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestParamsMatcher.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.springframework.http.HttpRequest; +import org.springframework.util.CollectionUtils; + +/** + * {@link HttpRequest} parameters {@link HttpRequestMatcher matcher} + * + * @author Mercy + */ +public class HttpRequestParamsMatcher extends AbstractHttpRequestMatcher { + + private final Set expressions; + + /** + * @param params The pattern of params : + *

    + *
  • name=value
  • + *
  • name
  • + *
+ */ + public HttpRequestParamsMatcher(String... params) { + this.expressions = parseExpressions(params); + } + + @Override + public boolean match(HttpRequest request) { + if (CollectionUtils.isEmpty(expressions)) { + return true; + } + for (ParamExpression paramExpression : expressions) { + if (paramExpression.match(request)) { + return true; + } + } + return false; + } + + private static Set parseExpressions(String... params) { + Set expressions = new LinkedHashSet<>(); + for (String param : params) { + expressions.add(new ParamExpression(param)); + } + return expressions; + } + + @Override + protected Collection getContent() { + return this.expressions; + } + + @Override + protected String getToStringInfix() { + return " && "; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestPathMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestPathMatcher.java new file mode 100644 index 00000000..e67d3545 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestPathMatcher.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.http.HttpRequest; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.PathMatcher; +import org.springframework.util.StringUtils; + +/** + * {@link HttpRequest} {@link URI} {@link HttpRequestMatcher matcher} + * + * @author Mercy + */ +public class HttpRequestPathMatcher extends AbstractHttpRequestMatcher { + + private final Set patterns; + + private final PathMatcher pathMatcher; + + public HttpRequestPathMatcher(String... patterns) { + this.patterns = Collections.unmodifiableSet(prependLeadingSlash(patterns)); + this.pathMatcher = new AntPathMatcher(); + } + + @Override + public boolean match(HttpRequest request) { + List matches = getMatchingPatterns(request); + return !matches.isEmpty(); + } + + public List getMatchingPatterns(HttpRequest request) { + String path = getPath(request); + List matches = getMatchingPatterns(path); + return matches; + } + + public List getMatchingPatterns(String lookupPath) { + List matches = new ArrayList<>(); + for (String pattern : this.patterns) { + String match = getMatchingPattern(pattern, lookupPath); + if (match != null) { + matches.add(match); + } + } + if (matches.size() > 1) { + matches.sort(this.pathMatcher.getPatternComparator(lookupPath)); + } + return matches; + } + + private String getMatchingPattern(String pattern, String lookupPath) { + if (pattern.equals(lookupPath)) { + return pattern; + } + boolean hasSuffix = pattern.indexOf('.') != -1; + if (!hasSuffix && this.pathMatcher.match(pattern + ".*", lookupPath)) { + return pattern + ".*"; + } + if (this.pathMatcher.match(pattern, lookupPath)) { + return pattern; + } + + if (!pattern.endsWith("/") && this.pathMatcher.match(pattern + "/", lookupPath)) { + return pattern + "/"; + } + return null; + } + + private String getPath(HttpRequest request) { + URI uri = request.getURI(); + return uri.getPath(); + } + + private static Set prependLeadingSlash(String[] patterns) { + Set result = new LinkedHashSet<>(patterns.length); + for (String pattern : patterns) { + if (StringUtils.hasLength(pattern) && !pattern.startsWith("/")) { + pattern = "/" + pattern; + } + result.add(pattern); + } + return result; + } + + @Override + protected Collection getContent() { + return this.patterns; + } + + @Override + protected String getToStringInfix() { + return " || "; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestProducesMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestProducesMatcher.java new file mode 100644 index 00000000..a2fb5b80 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestProducesMatcher.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; + +/** + * {@link HttpRequest} 'Accept' header {@link HttpRequestMatcher matcher} + * + * @author Arjen Poutsma + * @author Rossen Stoyanchev + * @author Mercy + */ +public class HttpRequestProducesMatcher extends AbstractHttpRequestMatcher { + + private final List expressions; + + /** + * Creates a new instance from "produces" expressions. If 0 expressions are provided + * in total, this condition will match to any request. + * + * @param produces produces expressions + */ + public HttpRequestProducesMatcher(String... produces) { + this(produces, null); + } + + /** + * Creates a new instance with "produces" and "header" expressions. "Header" + * expressions where the header name is not 'Accept' or have no header value defined + * are ignored. If 0 expressions are provided in total, this condition will match to + * any request. + * + * @param produces produces expressions + * @param headers headers expressions + */ + public HttpRequestProducesMatcher(String[] produces, String[] headers) { + this(parseExpressions(produces, headers)); + } + + /** + * Private constructor accepting parsed media type expressions. + */ + private HttpRequestProducesMatcher( + Collection expressions) { + this.expressions = new ArrayList<>(expressions); + Collections.sort(this.expressions); + } + + @Override + public boolean match(HttpRequest request) { + + if (expressions.isEmpty()) { + return true; + } + + HttpHeaders httpHeaders = request.getHeaders(); + + List acceptedMediaTypes = httpHeaders.getAccept(); + + for (ProduceMediaTypeExpression expression : expressions) { + if (!expression.match(acceptedMediaTypes)) { + return false; + } + } + + return true; + } + + private static Set parseExpressions(String[] produces, + String[] headers) { + Set result = new LinkedHashSet<>(); + if (headers != null) { + for (String header : headers) { + HeaderExpression expr = new HeaderExpression(header); + if (HttpHeaders.ACCEPT.equalsIgnoreCase(expr.name) + && expr.value != null) { + for (MediaType mediaType : MediaType.parseMediaTypes(expr.value)) { + result.add( + new ProduceMediaTypeExpression(mediaType, expr.negated)); + } + } + } + } + for (String produce : produces) { + result.add(new ProduceMediaTypeExpression(produce)); + } + return result; + } + + @Override + protected Collection getContent() { + return expressions; + } + + @Override + protected String getToStringInfix() { + return " || "; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/MediaTypeExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/MediaTypeExpression.java similarity index 77% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/MediaTypeExpression.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/MediaTypeExpression.java index 8597b619..5f33de34 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/MediaTypeExpression.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/MediaTypeExpression.java @@ -14,22 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; import org.springframework.http.MediaType; /** - * A contract for media type expressions (e.g. "text/plain", "!text/plain") as - * defined in the for "consumes" and "produces". + * A contract for media type expressions (e.g. "text/plain", "!text/plain") as defined in + * the for "consumes" and "produces". *

- * The source code is scratched from org.springframework.web.servlet.mvc.condition.MediaTypeExpression + * The source code is scratched from + * org.springframework.web.servlet.mvc.condition.MediaTypeExpression * * @author Rossen Stoyanchev */ interface MediaTypeExpression { - MediaType getMediaType(); + MediaType getMediaType(); - boolean isNegated(); + boolean isNegated(); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/NameValueExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/NameValueExpression.java similarity index 82% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/NameValueExpression.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/NameValueExpression.java index 4f22cc9c..bbf3a96a 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/NameValueExpression.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/NameValueExpression.java @@ -14,14 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - +package com.alibaba.cloud.dubbo.http.matcher; /** * A contract for {@code "name!=value"} style expression used to specify request * parameters and request header in HTTP request *

- * The some source code is scratched from org.springframework.web.servlet.mvc.condition.NameValueExpression + * The some source code is scratched from + * org.springframework.web.servlet.mvc.condition.NameValueExpression * * @param the value type * @author Rossen Stoyanchev @@ -29,10 +29,10 @@ package org.springframework.cloud.alibaba.dubbo.http.matcher; */ interface NameValueExpression { - String getName(); + String getName(); - T getValue(); + T getValue(); - boolean isNegated(); + boolean isNegated(); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ParamExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ParamExpression.java similarity index 53% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ParamExpression.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ParamExpression.java index 90bfccc5..555d1d57 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ParamExpression.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ParamExpression.java @@ -14,18 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; + +import static com.alibaba.cloud.dubbo.http.util.HttpUtils.getParameters; import org.springframework.http.HttpRequest; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; -import static org.springframework.cloud.alibaba.dubbo.http.util.HttpUtils.getParameters; - /** * Parses and matches a single param expression to a request. *

- * The some source code is scratched from org.springframework.web.servlet.mvc.condition.ParamsRequestCondition.ParamExpression + * The some source code is scratched from + * org.springframework.web.servlet.mvc.condition.ParamsRequestCondition.ParamExpression * * @author Arjen Poutsma * @author Rossen Stoyanchev @@ -33,30 +34,30 @@ import static org.springframework.cloud.alibaba.dubbo.http.util.HttpUtils.getPar */ class ParamExpression extends AbstractNameValueExpression { - ParamExpression(String expression) { - super(expression); - } + ParamExpression(String expression) { + super(expression); + } - @Override - protected boolean isCaseSensitiveName() { - return true; - } + @Override + protected boolean isCaseSensitiveName() { + return true; + } - @Override - protected String parseValue(String valueExpression) { - return valueExpression; - } + @Override + protected String parseValue(String valueExpression) { + return valueExpression; + } - @Override - protected boolean matchName(HttpRequest request) { - MultiValueMap parametersMap = getParameters(request); - return parametersMap.containsKey(this.name); - } + @Override + protected boolean matchName(HttpRequest request) { + MultiValueMap parametersMap = getParameters(request); + return parametersMap.containsKey(this.name); + } - @Override - protected boolean matchValue(HttpRequest request) { - MultiValueMap parametersMap = getParameters(request); - String parameterValue = parametersMap.getFirst(this.name); - return ObjectUtils.nullSafeEquals(this.value, parameterValue); - } + @Override + protected boolean matchValue(HttpRequest request) { + MultiValueMap parametersMap = getParameters(request); + String parameterValue = parametersMap.getFirst(this.name); + return ObjectUtils.nullSafeEquals(this.value, parameterValue); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ProduceMediaTypeExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ProduceMediaTypeExpression.java similarity index 62% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ProduceMediaTypeExpression.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ProduceMediaTypeExpression.java index 2e223bf9..7b9cfe3f 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ProduceMediaTypeExpression.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/ProduceMediaTypeExpression.java @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.MediaType; +package com.alibaba.cloud.dubbo.http.matcher; import java.util.List; +import org.springframework.http.MediaType; + /** * Parses and matches a single media type expression to a request's 'Accept' header. *

@@ -31,25 +31,25 @@ import java.util.List; */ class ProduceMediaTypeExpression extends AbstractMediaTypeExpression { - ProduceMediaTypeExpression(String expression) { - super(expression); - } + ProduceMediaTypeExpression(String expression) { + super(expression); + } - ProduceMediaTypeExpression(MediaType mediaType, boolean negated) { - super(mediaType, negated); - } + ProduceMediaTypeExpression(MediaType mediaType, boolean negated) { + super(mediaType, negated); + } - public final boolean match(List acceptedMediaTypes) { - boolean match = matchMediaType(acceptedMediaTypes); - return (!isNegated() ? match : !match); - } + public final boolean match(List acceptedMediaTypes) { + boolean match = matchMediaType(acceptedMediaTypes); + return (!isNegated() ? match : !match); + } - private boolean matchMediaType(List acceptedMediaTypes) { - for (MediaType acceptedMediaType : acceptedMediaTypes) { - if (getMediaType().isCompatibleWith(acceptedMediaType)) { - return true; - } - } - return false; - } + private boolean matchMediaType(List acceptedMediaTypes) { + for (MediaType acceptedMediaType : acceptedMediaTypes) { + if (getMediaType().isCompatibleWith(acceptedMediaType)) { + return true; + } + } + return false; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/RequestMetadataMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/RequestMetadataMatcher.java similarity index 51% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/RequestMetadataMatcher.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/RequestMetadataMatcher.java index 6e3e9519..0385bd34 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/RequestMetadataMatcher.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/RequestMetadataMatcher.java @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; -import org.springframework.cloud.alibaba.dubbo.metadata.RequestMetadata; +import static com.alibaba.cloud.dubbo.http.util.HttpUtils.toNameAndValues; -import static org.springframework.cloud.alibaba.dubbo.http.util.HttpUtils.toNameAndValues; +import com.alibaba.cloud.dubbo.metadata.RequestMetadata; /** * {@link RequestMetadata} {@link HttpRequestMatcher} implementation @@ -27,20 +27,21 @@ import static org.springframework.cloud.alibaba.dubbo.http.util.HttpUtils.toName */ public class RequestMetadataMatcher extends CompositeHttpRequestMatcher { - public RequestMetadataMatcher(RequestMetadata metadata) { - super( - // method - new HttpRequestMethodsMatcher(metadata.getMethod()), - // url - new HttpRequestPathMatcher(metadata.getPath()), - // params - new HttpRequestParamsMatcher(toNameAndValues(metadata.getParams())), - // headers - new HttpRequestHeadersMatcher(toNameAndValues(metadata.getHeaders())), - // consumes - new HttpRequestConsumersMatcher(metadata.getConsumes().toArray(new String[0])), - // produces - new HttpRequestProducesMatcher(metadata.getProduces().toArray(new String[0])) - ); - } + public RequestMetadataMatcher(RequestMetadata metadata) { + super( + // method + new HttpRequestMethodsMatcher(metadata.getMethod()), + // url + new HttpRequestPathMatcher(metadata.getPath()), + // params + new HttpRequestParamsMatcher(toNameAndValues(metadata.getParams())), + // headers + new HttpRequestHeadersMatcher(toNameAndValues(metadata.getHeaders())), + // consumes + new HttpRequestConsumersMatcher( + metadata.getConsumes().toArray(new String[0])), + // produces + new HttpRequestProducesMatcher( + metadata.getProduces().toArray(new String[0]))); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/util/HttpMessageConverterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/util/HttpMessageConverterResolver.java new file mode 100644 index 00000000..e27b0df6 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/util/HttpMessageConverterResolver.java @@ -0,0 +1,247 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.util; + +import static java.util.Collections.unmodifiableList; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.MediaType; +import org.springframework.http.converter.GenericHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.util.ClassUtils; +import org.springframework.util.CollectionUtils; + +import com.alibaba.cloud.dubbo.http.converter.HttpMessageConverterHolder; +import com.alibaba.cloud.dubbo.metadata.RequestMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + +/** + * {@link HttpMessageConverter} Resolver + * + * @author Mercy + */ +public class HttpMessageConverterResolver { + + private static final MediaType MEDIA_TYPE_APPLICATION = new MediaType("application"); + + private final List> messageConverters; + + private final List allSupportedMediaTypes; + + private final ClassLoader classLoader; + + public HttpMessageConverterResolver(List> messageConverters, + ClassLoader classLoader) { + this.messageConverters = messageConverters; + this.allSupportedMediaTypes = getAllSupportedMediaTypes(messageConverters); + this.classLoader = classLoader; + } + + public HttpMessageConverterHolder resolve(HttpRequest request, + Class parameterType) { + + HttpMessageConverterHolder httpMessageConverterHolder = null; + + HttpHeaders httpHeaders = request.getHeaders(); + + MediaType contentType = httpHeaders.getContentType(); + + if (contentType == null) { + contentType = MediaType.APPLICATION_OCTET_STREAM; + } + + for (HttpMessageConverter converter : this.messageConverters) { + if (converter instanceof GenericHttpMessageConverter) { + GenericHttpMessageConverter genericConverter = (GenericHttpMessageConverter) converter; + if (genericConverter.canRead(parameterType, parameterType, contentType)) { + httpMessageConverterHolder = new HttpMessageConverterHolder( + contentType, converter); + break; + } + } + else { + if (converter.canRead(parameterType, contentType)) { + httpMessageConverterHolder = new HttpMessageConverterHolder( + contentType, converter); + break; + } + } + + } + + return httpMessageConverterHolder; + } + + /** + * Resolve the most match {@link HttpMessageConverter} from {@link RequestMetadata} + * + * @param requestMetadata {@link RequestMetadata} + * @param restMethodMetadata {@link RestMethodMetadata} + * @return + */ + public HttpMessageConverterHolder resolve(RequestMetadata requestMetadata, + RestMethodMetadata restMethodMetadata) { + + HttpMessageConverterHolder httpMessageConverterHolder = null; + + Class returnValueClass = resolveReturnValueClass(restMethodMetadata); + + /** + * @see AbstractMessageConverterMethodProcessor#writeWithMessageConverters(Object, + * MethodParameter, ServletServerHttpRequest, ServletServerHttpResponse) + */ + List requestedMediaTypes = getAcceptableMediaTypes(requestMetadata); + List producibleMediaTypes = getProducibleMediaTypes(restMethodMetadata, + returnValueClass); + + Set compatibleMediaTypes = new LinkedHashSet(); + for (MediaType requestedType : requestedMediaTypes) { + for (MediaType producibleType : producibleMediaTypes) { + if (requestedType.isCompatibleWith(producibleType)) { + compatibleMediaTypes + .add(getMostSpecificMediaType(requestedType, producibleType)); + } + } + } + + if (compatibleMediaTypes.isEmpty()) { + return httpMessageConverterHolder; + } + + List mediaTypes = new ArrayList<>(compatibleMediaTypes); + + MediaType.sortBySpecificityAndQuality(mediaTypes); + + MediaType selectedMediaType = null; + for (MediaType mediaType : mediaTypes) { + if (mediaType.isConcrete()) { + selectedMediaType = mediaType; + break; + } + else if (mediaType.equals(MediaType.ALL) + || mediaType.equals(MEDIA_TYPE_APPLICATION)) { + selectedMediaType = MediaType.APPLICATION_OCTET_STREAM; + break; + } + } + + if (selectedMediaType != null) { + selectedMediaType = selectedMediaType.removeQualityValue(); + for (HttpMessageConverter messageConverter : this.messageConverters) { + if (messageConverter.canWrite(returnValueClass, selectedMediaType)) { + httpMessageConverterHolder = new HttpMessageConverterHolder( + selectedMediaType, messageConverter); + break; + } + } + } + + return httpMessageConverterHolder; + } + + public List getAllSupportedMediaTypes() { + return unmodifiableList(allSupportedMediaTypes); + } + + private Class resolveReturnValueClass(RestMethodMetadata restMethodMetadata) { + String returnClassName = restMethodMetadata.getMethod().getReturnType(); + return ClassUtils.resolveClassName(returnClassName, classLoader); + } + + /** + * Resolve the {@link MediaType media-types} + * + * @param requestMetadata {@link RequestMetadata} from client side + * @return non-null {@link List} + */ + private List getAcceptableMediaTypes(RequestMetadata requestMetadata) { + return requestMetadata.getProduceMediaTypes(); + } + + /** + * Returns the media types that can be produced: + *

    + *
  • The producible media types specified in the request mappings, or + *
  • Media types of configured converters that can write the specific return value, + * or + *
  • {@link MediaType#ALL} + *
+ * + * @param restMethodMetadata {@link RestMethodMetadata} from server side + * @param returnValueClass the class of return value + * @return non-null {@link List} + */ + private List getProducibleMediaTypes(RestMethodMetadata restMethodMetadata, + Class returnValueClass) { + RequestMetadata serverRequestMetadata = restMethodMetadata.getRequest(); + List mediaTypes = serverRequestMetadata.getProduceMediaTypes(); + if (!CollectionUtils.isEmpty(mediaTypes)) { // Empty + return mediaTypes; + } + else if (!this.allSupportedMediaTypes.isEmpty()) { + List result = new ArrayList<>(); + for (HttpMessageConverter converter : this.messageConverters) { + if (converter.canWrite(returnValueClass, null)) { + result.addAll(converter.getSupportedMediaTypes()); + } + } + return result; + } + else { + return Collections.singletonList(MediaType.ALL); + } + } + + /** + * Return the media types supported by all provided message converters sorted by + * specificity via {@link MediaType#sortBySpecificity(List)}. + * + * @param messageConverters + * @return + */ + private List getAllSupportedMediaTypes( + List> messageConverters) { + Set allSupportedMediaTypes = new LinkedHashSet(); + for (HttpMessageConverter messageConverter : messageConverters) { + allSupportedMediaTypes.addAll(messageConverter.getSupportedMediaTypes()); + } + List result = new ArrayList(allSupportedMediaTypes); + MediaType.sortBySpecificity(result); + return unmodifiableList(result); + } + + /** + * Return the more specific of the acceptable and the producible media types with the + * q-value of the former. + */ + private MediaType getMostSpecificMediaType(MediaType acceptType, + MediaType produceType) { + MediaType produceTypeToUse = produceType.copyQualityValue(acceptType); + return (MediaType.SPECIFICITY_COMPARATOR.compare(acceptType, + produceTypeToUse) <= 0 ? acceptType : produceTypeToUse); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/util/HttpUtils.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/util/HttpUtils.java new file mode 100644 index 00000000..30620cc5 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/util/HttpUtils.java @@ -0,0 +1,247 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.util; + +import static org.springframework.util.StringUtils.delimitedListToStringArray; +import static org.springframework.util.StringUtils.hasText; +import static org.springframework.util.StringUtils.trimAllWhitespace; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.http.HttpRequest; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; + +/** + * Http Utilities class + * + * @author Mercy + */ +public abstract class HttpUtils { + + private static final String UTF_8 = "UTF-8"; + + private static final String EQUAL = "="; + + private static final String AND = "&"; + + private static final String SEMICOLON = ";"; + + private static final String QUESTION_MASK = "?"; + + /** + * The empty value + */ + private static final String EMPTY_VALUE = ""; + + /** + * Normalize path: + *
    + *
  1. To remove query string if presents
  2. + *
  3. To remove duplicated slash("/") if exists
  4. + *
+ * + * @param path path to be normalized + * @return a normalized path if required + */ + public static String normalizePath(String path) { + if (!hasText(path)) { + return path; + } + String normalizedPath = path; + int index = normalizedPath.indexOf(QUESTION_MASK); + if (index > -1) { + normalizedPath = normalizedPath.substring(0, index); + } + return StringUtils.replace(normalizedPath, "//", "/"); + } + + /** + * Get Parameters from the specified {@link HttpRequest request} + * + * @param request the specified {@link HttpRequest request} + * @return + */ + public static MultiValueMap getParameters(HttpRequest request) { + URI uri = request.getURI(); + return getParameters(uri.getQuery()); + } + + /** + * Get Parameters from the specified query string. + *

+ * + * @param queryString The query string + * @return The query parameters + */ + public static MultiValueMap getParameters(String queryString) { + return getParameters(delimitedListToStringArray(queryString, AND)); + } + + /** + * Get Parameters from the specified pairs of name-value. + *

+ * + * @param pairs The pairs of name-value + * @return The query parameters + */ + public static MultiValueMap getParameters(Iterable pairs) { + MultiValueMap parameters = new LinkedMultiValueMap<>(); + if (pairs != null) { + for (String pair : pairs) { + String[] nameAndValue = delimitedListToStringArray(pair, EQUAL); + String name = decode(nameAndValue[0]); + String value = nameAndValue.length < 2 ? null : nameAndValue[1]; + value = decode(value); + addParam(parameters, name, value); + } + } + return parameters; + } + + /** + * Get Parameters from the specified pairs of name-value. + *

+ * + * @param pairs The pairs of name-value + * @return The query parameters + */ + public static MultiValueMap getParameters(String... pairs) { + return getParameters(Arrays.asList(pairs)); + } + + // /** + // * Parse a read-only {@link MultiValueMap} of {@link HttpCookie} from {@link + // HttpHeaders} + // * + // * @param httpHeaders {@link HttpHeaders} + // * @return non-null, the key is a cookie name , the value is {@link HttpCookie} + // */ + // public static MultiValueMap parseCookies(HttpHeaders + // httpHeaders) { + // + // String cookie = httpHeaders.getFirst(COOKIE); + // + // String[] cookieNameAndValues = StringUtils.delimitedListToStringArray(cookie, + // SEMICOLON); + // + // MultiValueMap cookies = new + // LinkedMultiValueMap<>(cookieNameAndValues.length); + // + // for (String cookeNameAndValue : cookieNameAndValues) { + // String[] nameAndValue = + // delimitedListToStringArray(trimWhitespace(cookeNameAndValue), EQUAL); + // String name = nameAndValue[0]; + // String value = nameAndValue.length < 2 ? null : nameAndValue[1]; + // HttpCookie httpCookie = new HttpCookie(name, value); + // cookies.add(name, httpCookie); + // } + // + // return cookies; + // } + + /** + * To the name and value line sets + * + * @param nameAndValuesMap {@link MultiValueMap} the map of name and values + * @return non-null + */ + public static Set toNameAndValuesSet( + Map> nameAndValuesMap) { + Set nameAndValues = new LinkedHashSet<>(); + for (Map.Entry> entry : nameAndValuesMap.entrySet()) { + String name = entry.getKey(); + List values = entry.getValue(); + for (String value : values) { + String nameAndValue = name + EQUAL + value; + nameAndValues.add(nameAndValue); + } + } + return nameAndValues; + } + + public static String[] toNameAndValues(Map> nameAndValuesMap) { + return toNameAndValuesSet(nameAndValuesMap).toArray(new String[0]); + } + + /** + * Generate a string of query string from the specified request parameters {@link Map} + * + * @param params the specified request parameters {@link Map} + * @return non-null + */ + public static String toQueryString(Map> params) { + StringBuilder builder = new StringBuilder(); + for (String line : toNameAndValuesSet(params)) { + builder.append(line).append(AND); + } + return builder.toString(); + } + + /** + * Decode value + * + * @param value the value requires to decode + * @return the decoded value + */ + public static String decode(String value) { + if (value == null) { + return value; + } + String decodedValue = value; + try { + decodedValue = URLDecoder.decode(value, UTF_8); + } + catch (UnsupportedEncodingException ex) { + } + return decodedValue; + } + + /** + * encode value + * + * @param value the value requires to encode + * @return the encoded value + */ + public static String encode(String value) { + String encodedValue = value; + try { + encodedValue = URLEncoder.encode(value, UTF_8); + } + catch (UnsupportedEncodingException ex) { + } + return encodedValue; + } + + private static void addParam(MultiValueMap paramsMap, String name, + String value) { + String paramValue = trimAllWhitespace(value); + if (!StringUtils.hasText(paramValue)) { + paramValue = EMPTY_VALUE; + } + paramsMap.add(trimAllWhitespace(name), paramValue); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboProtocolConfigSupplier.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboProtocolConfigSupplier.java similarity index 51% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboProtocolConfigSupplier.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboProtocolConfigSupplier.java index dd02429d..64fff983 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboProtocolConfigSupplier.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboProtocolConfigSupplier.java @@ -14,18 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.metadata; +package com.alibaba.cloud.dubbo.metadata; -import org.apache.dubbo.config.ProtocolConfig; - -import org.springframework.beans.factory.ObjectProvider; +import static org.apache.dubbo.common.Constants.DEFAULT_PROTOCOL; +import static org.springframework.util.CollectionUtils.isEmpty; import java.util.Collection; import java.util.Iterator; import java.util.function.Supplier; -import static org.apache.dubbo.common.Constants.DEFAULT_PROTOCOL; -import static org.springframework.util.CollectionUtils.isEmpty; +import org.apache.dubbo.config.ProtocolConfig; +import org.springframework.beans.factory.ObjectProvider; /** * Dubbo's {@link ProtocolConfig} {@link Supplier} @@ -34,38 +33,40 @@ import static org.springframework.util.CollectionUtils.isEmpty; */ public class DubboProtocolConfigSupplier implements Supplier { - private final ObjectProvider> protocols; + private final ObjectProvider> protocols; - public DubboProtocolConfigSupplier(ObjectProvider> protocols) { - this.protocols = protocols; - } + public DubboProtocolConfigSupplier( + ObjectProvider> protocols) { + this.protocols = protocols; + } - @Override - public ProtocolConfig get() { - ProtocolConfig protocolConfig = null; - Collection protocols = this.protocols.getIfAvailable(); + @Override + public ProtocolConfig get() { + ProtocolConfig protocolConfig = null; + Collection protocols = this.protocols.getIfAvailable(); - if (!isEmpty(protocols)) { - for (ProtocolConfig protocol : protocols) { - String protocolName = protocol.getName(); - if (DEFAULT_PROTOCOL.equals(protocolName)) { - protocolConfig = protocol; - break; - } - } + if (!isEmpty(protocols)) { + for (ProtocolConfig protocol : protocols) { + String protocolName = protocol.getName(); + if (DEFAULT_PROTOCOL.equals(protocolName)) { + protocolConfig = protocol; + break; + } + } - if (protocolConfig == null) { // If The ProtocolConfig bean named "dubbo" is absent, take first one of them - Iterator iterator = protocols.iterator(); - protocolConfig = iterator.hasNext() ? iterator.next() : null; - } - } + if (protocolConfig == null) { // If The ProtocolConfig bean named "dubbo" is + // absent, take first one of them + Iterator iterator = protocols.iterator(); + protocolConfig = iterator.hasNext() ? iterator.next() : null; + } + } - if (protocolConfig == null) { - protocolConfig = new ProtocolConfig(); - protocolConfig.setName(DEFAULT_PROTOCOL); - protocolConfig.setPort(-1); - } + if (protocolConfig == null) { + protocolConfig = new ProtocolConfig(); + protocolConfig.setName(DEFAULT_PROTOCOL); + protocolConfig.setPort(-1); + } - return protocolConfig; - } + return protocolConfig; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboRestServiceMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboRestServiceMetadata.java new file mode 100644 index 00000000..38b00da8 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboRestServiceMetadata.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import java.util.Objects; + +/** + * Dubbo Rest Service Metadata + * + * @author Mercy + */ +public class DubboRestServiceMetadata { + + private final ServiceRestMetadata serviceRestMetadata; + + private final RestMethodMetadata restMethodMetadata; + + public DubboRestServiceMetadata(ServiceRestMetadata serviceRestMetadata, + RestMethodMetadata restMethodMetadata) { + this.serviceRestMetadata = serviceRestMetadata; + this.restMethodMetadata = restMethodMetadata; + } + + public ServiceRestMetadata getServiceRestMetadata() { + return serviceRestMetadata; + } + + public RestMethodMetadata getRestMethodMetadata() { + return restMethodMetadata; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof DubboRestServiceMetadata)) + return false; + DubboRestServiceMetadata that = (DubboRestServiceMetadata) o; + return Objects.equals(serviceRestMetadata, that.serviceRestMetadata) + && Objects.equals(restMethodMetadata, that.restMethodMetadata); + } + + @Override + public int hashCode() { + return Objects.hash(serviceRestMetadata, restMethodMetadata); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboTransportedMethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboTransportedMethodMetadata.java new file mode 100644 index 00000000..c9d8b55a --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/DubboTransportedMethodMetadata.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import com.alibaba.cloud.dubbo.annotation.DubboTransported; + +/** + * {@link MethodMetadata} annotated {@link DubboTransported @DubboTransported} + * + * @author Mercy + */ +public class DubboTransportedMethodMetadata { + + private final MethodMetadata methodMetadata; + + private final Map attributes; + + public DubboTransportedMethodMetadata(Method method, Map attributes) { + this.methodMetadata = new MethodMetadata(method); + this.attributes = attributes; + } + + public String getName() { + return methodMetadata.getName(); + } + + public void setName(String name) { + methodMetadata.setName(name); + } + + public String getReturnType() { + return methodMetadata.getReturnType(); + } + + public void setReturnType(String returnType) { + methodMetadata.setReturnType(returnType); + } + + public List getParams() { + return methodMetadata.getParams(); + } + + public void setParams(List params) { + methodMetadata.setParams(params); + } + + public Method getMethod() { + return methodMetadata.getMethod(); + } + + public MethodMetadata getMethodMetadata() { + return methodMetadata; + } + + public Map getAttributes() { + return attributes; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof DubboTransportedMethodMetadata)) + return false; + DubboTransportedMethodMetadata that = (DubboTransportedMethodMetadata) o; + return Objects.equals(methodMetadata, that.methodMetadata) + && Objects.equals(attributes, that.attributes); + } + + @Override + public int hashCode() { + return Objects.hash(methodMetadata, attributes); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/MethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/MethodMetadata.java new file mode 100644 index 00000000..a5e3bcc9 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/MethodMetadata.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * {@link Method} Metadata + * + * @author Mercy + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MethodMetadata { + + private String name; + + @JsonProperty("return-type") + private String returnType; + + private List params; + + @JsonIgnore + private Method method; + + public MethodMetadata() { + this.params = new LinkedList<>(); + } + + public MethodMetadata(Method method) { + this.name = method.getName(); + this.returnType = method.getReturnType().getName(); + this.params = initParameters(method); + this.method = method; + } + + private List initParameters(Method method) { + int parameterCount = method.getParameterCount(); + if (parameterCount < 1) { + return Collections.emptyList(); + } + List params = new ArrayList<>(parameterCount); + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameterCount; i++) { + Parameter parameter = parameters[i]; + MethodParameterMetadata param = toMethodParameterMetadata(i, parameter); + params.add(param); + } + return params; + } + + private MethodParameterMetadata toMethodParameterMetadata(int index, + Parameter parameter) { + MethodParameterMetadata metadata = new MethodParameterMetadata(); + metadata.setIndex(index); + metadata.setName(parameter.getName()); + metadata.setType(parameter.getType().getTypeName()); + return metadata; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getReturnType() { + return returnType; + } + + public void setReturnType(String returnType) { + this.returnType = returnType; + } + + public List getParams() { + return params; + } + + public void setParams(List params) { + this.params = params; + } + + public Method getMethod() { + return method; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + MethodMetadata that = (MethodMetadata) o; + return Objects.equals(name, that.name) + && Objects.equals(returnType, that.returnType) + && Objects.equals(params, that.params); + } + + @Override + public int hashCode() { + return Objects.hash(name, returnType, params); + } + + @Override + public String toString() { + return "MethodMetadata{" + "name='" + name + '\'' + ", returnType='" + returnType + + '\'' + ", params=" + params + ", method=" + method + '}'; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/MethodParameterMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/MethodParameterMetadata.java new file mode 100644 index 00000000..2b6e723d --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/MethodParameterMetadata.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import java.lang.reflect.Method; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; + +/** + * {@link Method} Parameter Metadata + * + * @author Mercy + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MethodParameterMetadata { + + private int index; + + private String name; + + private String type; + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + MethodParameterMetadata that = (MethodParameterMetadata) o; + return index == that.index && Objects.equals(name, that.name) + && Objects.equals(type, that.type); + } + + @Override + public int hashCode() { + return Objects.hash(index, name, type); + } + + @Override + public String toString() { + return "MethodParameterMetadata{" + "index=" + index + ", name='" + name + '\'' + + ", type='" + type + '\'' + '}'; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/RequestMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/RequestMetadata.java new file mode 100644 index 00000000..012a3ad0 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/RequestMetadata.java @@ -0,0 +1,273 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import static org.springframework.http.MediaType.parseMediaTypes; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.NavigableMap; +import java.util.Objects; +import java.util.Set; +import java.util.SortedMap; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; + +import com.alibaba.cloud.dubbo.http.util.HttpUtils; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + +import feign.RequestTemplate; + +/** + * Request Metadata + * + * @author Mercy + */ +public class RequestMetadata { + + private String method; + + private String path; + + @JsonProperty("params") + private MultiValueMap params = new LinkedMultiValueMap<>(); + + @JsonProperty("headers") + private HttpHeaders headers = new HttpHeaders(); + + private Set consumes = new LinkedHashSet<>(); + + private Set produces = new LinkedHashSet<>(); + + public RequestMetadata() { + } + + public RequestMetadata(RequestTemplate requestTemplate) { + setMethod(requestTemplate.method()); + setPath(requestTemplate.url()); + params(requestTemplate.queries()); + headers(requestTemplate.headers()); + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method.toUpperCase(); + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = HttpUtils.normalizePath(path); + } + + public MultiValueMap getParams() { + return params; + } + + public void setParams(Map> params) { + params(params); + } + + public Map> getHeaders() { + return headers; + } + + public void setHeaders(Map> headers) { + headers(headers); + } + + public Set getConsumes() { + return consumes; + } + + public void setConsumes(Set consumes) { + this.consumes = consumes; + } + + public Set getProduces() { + return produces; + } + + public void setProduces(Set produces) { + this.produces = produces; + } + + // @JsonIgnore properties + @JsonIgnore + public Set getParamNames() { + return params.keySet(); + } + + @JsonIgnore + public Set getHeaderNames() { + return headers.keySet(); + } + + @JsonIgnore + public List getConsumeMediaTypes() { + return toMediaTypes(consumes); + } + + @JsonIgnore + public List getProduceMediaTypes() { + return toMediaTypes(produces); + } + + public String getParameter(String name) { + return this.params.getFirst(name); + } + + public String getHeader(String name) { + return this.headers.getFirst(name); + } + + public RequestMetadata addParam(String name, String value) { + add(name, value, this.params); + return this; + } + + public RequestMetadata addHeader(String name, String value) { + add(name, value, this.headers); + return this; + } + + private > RequestMetadata params(Map params) { + addAll(params, this.params); + return this; + } + + private > RequestMetadata headers( + Map headers) { + if (!CollectionUtils.isEmpty(headers)) { + HttpHeaders httpHeaders = new HttpHeaders(); + // Add all headers + addAll(headers, httpHeaders); + // Handles "Content-Type" and "Accept" headers if present + mediaTypes(httpHeaders, HttpHeaders.CONTENT_TYPE, this.consumes); + mediaTypes(httpHeaders, HttpHeaders.ACCEPT, this.produces); + this.headers.putAll(httpHeaders); + } + return this; + } + + /** + * Get the best matched {@link RequestMetadata} via specified {@link RequestMetadata} + * + * @param requestMetadataMap the source of {@link NavigableMap} + * @param requestMetadata the match object + * @return if not matched, return null + */ + public static RequestMetadata getBestMatch( + NavigableMap requestMetadataMap, + RequestMetadata requestMetadata) { + + RequestMetadata key = requestMetadata; + + RequestMetadata result = requestMetadataMap.get(key); + + if (result == null) { + SortedMap headMap = requestMetadataMap + .headMap(key, true); + result = headMap.isEmpty() ? null : requestMetadataMap.get(headMap.lastKey()); + } + + return result; + } + + private static void add(String key, String value, + MultiValueMap destination) { + destination.add(key, value); + } + + private static > void addAll(Map source, + MultiValueMap destination) { + for (Map.Entry entry : source.entrySet()) { + String key = entry.getKey(); + for (String value : entry.getValue()) { + add(key, value, destination); + } + } + } + + private static void mediaTypes(HttpHeaders httpHeaders, String headerName, + Collection destination) { + List value = httpHeaders.get(headerName); + List mediaTypes = parseMediaTypes(value); + destination.addAll(toMediaTypeValues(mediaTypes)); + } + + private static List toMediaTypeValues(List mediaTypes) { + List list = new ArrayList<>(mediaTypes.size()); + for (MediaType mediaType : mediaTypes) { + list.add(mediaType.toString()); + } + return list; + } + + private static List toMediaTypes(Collection mediaTypeValues) { + if (mediaTypeValues.isEmpty()) { + return Collections.singletonList(MediaType.ALL); + } + return parseMediaTypes(new LinkedList<>(mediaTypeValues)); + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof RequestMetadata)) + return false; + RequestMetadata that = (RequestMetadata) o; + return Objects.equals(method, that.method) && Objects.equals(path, that.path) + && Objects.equals(consumes, that.consumes) + && Objects.equals(produces, that.produces) && + // Metadata should not compare the values + Objects.equals(getParamNames(), that.getParamNames()) + && Objects.equals(getHeaderNames(), that.getHeaderNames()); + + } + + @Override + public int hashCode() { + // The values of metadata should not use for the hashCode() method + return Objects.hash(method, path, consumes, produces, getParamNames(), + getHeaderNames()); + } + + @Override + public String toString() { + return "RequestMetadata{" + "method='" + method + '\'' + ", path='" + path + '\'' + + ", params=" + params + ", headers=" + headers + ", consumes=" + consumes + + ", produces=" + produces + '}'; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/RestMethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/RestMethodMetadata.java new file mode 100644 index 00000000..d74fce13 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/RestMethodMetadata.java @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import org.springframework.core.ResolvableType; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Method Request Metadata + * + * @author Mercy + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RestMethodMetadata { + + private MethodMetadata method; + + private RequestMetadata request; + + @JsonProperty("url-index") + private Integer urlIndex; + + @JsonProperty("setBody-index") + private Integer bodyIndex; + + @JsonProperty("header-map-index") + private Integer headerMapIndex; + + @JsonProperty("query-map-index") + private Integer queryMapIndex; + + @JsonProperty("query-map-encoded") + private boolean queryMapEncoded; + + @JsonProperty("return-type") + private String returnType; + + @JsonProperty("setBody-type") + private String bodyType; + + @JsonProperty("index-to-name") + private Map> indexToName; + + @JsonProperty("form-params") + private List formParams; + + @JsonProperty("index-to-encoded") + private Map indexToEncoded; + + public RestMethodMetadata() { + } + + public RestMethodMetadata(feign.MethodMetadata methodMetadata) { + this.request = new RequestMetadata(methodMetadata.template()); + this.urlIndex = methodMetadata.urlIndex(); + this.bodyIndex = methodMetadata.bodyIndex(); + this.headerMapIndex = methodMetadata.headerMapIndex(); + this.queryMapEncoded = methodMetadata.queryMapEncoded(); + this.queryMapEncoded = methodMetadata.queryMapEncoded(); + this.returnType = getClassName(methodMetadata.returnType()); + this.bodyType = getClassName(methodMetadata.bodyType()); + this.indexToName = methodMetadata.indexToName(); + this.formParams = methodMetadata.formParams(); + this.indexToEncoded = methodMetadata.indexToEncoded(); + } + + public MethodMetadata getMethod() { + return method; + } + + public void setMethod(MethodMetadata method) { + this.method = method; + } + + public RequestMetadata getRequest() { + return request; + } + + public void setRequest(RequestMetadata request) { + this.request = request; + } + + public Map> getIndexToName() { + return indexToName; + } + + public void setIndexToName(Map> indexToName) { + this.indexToName = indexToName; + } + + public Integer getUrlIndex() { + return urlIndex; + } + + public void setUrlIndex(Integer urlIndex) { + this.urlIndex = urlIndex; + } + + public Integer getBodyIndex() { + return bodyIndex; + } + + public void setBodyIndex(Integer bodyIndex) { + this.bodyIndex = bodyIndex; + } + + public Integer getHeaderMapIndex() { + return headerMapIndex; + } + + public void setHeaderMapIndex(Integer headerMapIndex) { + this.headerMapIndex = headerMapIndex; + } + + public Integer getQueryMapIndex() { + return queryMapIndex; + } + + public void setQueryMapIndex(Integer queryMapIndex) { + this.queryMapIndex = queryMapIndex; + } + + public boolean isQueryMapEncoded() { + return queryMapEncoded; + } + + public void setQueryMapEncoded(boolean queryMapEncoded) { + this.queryMapEncoded = queryMapEncoded; + } + + public String getReturnType() { + return returnType; + } + + public void setReturnType(String returnType) { + this.returnType = returnType; + } + + public String getBodyType() { + return bodyType; + } + + public void setBodyType(String bodyType) { + this.bodyType = bodyType; + } + + public List getFormParams() { + return formParams; + } + + public void setFormParams(List formParams) { + this.formParams = formParams; + } + + public Map getIndexToEncoded() { + return indexToEncoded; + } + + public void setIndexToEncoded(Map indexToEncoded) { + this.indexToEncoded = indexToEncoded; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof RestMethodMetadata)) + return false; + RestMethodMetadata that = (RestMethodMetadata) o; + return queryMapEncoded == that.queryMapEncoded + && Objects.equals(method, that.method) + && Objects.equals(request, that.request) + && Objects.equals(urlIndex, that.urlIndex) + && Objects.equals(bodyIndex, that.bodyIndex) + && Objects.equals(headerMapIndex, that.headerMapIndex) + && Objects.equals(queryMapIndex, that.queryMapIndex) + && Objects.equals(returnType, that.returnType) + && Objects.equals(bodyType, that.bodyType) + && Objects.equals(indexToName, that.indexToName) + && Objects.equals(formParams, that.formParams) + && Objects.equals(indexToEncoded, that.indexToEncoded); + } + + @Override + public int hashCode() { + return Objects.hash(method, request, urlIndex, bodyIndex, headerMapIndex, + queryMapIndex, queryMapEncoded, returnType, bodyType, indexToName, + formParams, indexToEncoded); + } + + private String getClassName(Type type) { + if (type == null) { + return null; + } + ResolvableType resolvableType = ResolvableType.forType(type); + return resolvableType.resolve().getName(); + } + + @Override + public String toString() { + return "RestMethodMetadata{" + "method=" + method + ", request=" + request + + ", urlIndex=" + urlIndex + ", bodyIndex=" + bodyIndex + + ", headerMapIndex=" + headerMapIndex + ", queryMapIndex=" + + queryMapIndex + ", queryMapEncoded=" + queryMapEncoded + + ", returnType='" + returnType + '\'' + ", bodyType='" + bodyType + '\'' + + ", indexToName=" + indexToName + ", formParams=" + formParams + + ", indexToEncoded=" + indexToEncoded + '}'; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/ServiceRestMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/ServiceRestMetadata.java similarity index 57% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/ServiceRestMetadata.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/ServiceRestMetadata.java index 14cc3ac6..64389371 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/ServiceRestMetadata.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/ServiceRestMetadata.java @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import com.fasterxml.jackson.annotation.JsonInclude; +package com.alibaba.cloud.dubbo.metadata; import java.util.Objects; import java.util.Set; +import com.fasterxml.jackson.annotation.JsonInclude; + /** * Service Rest Metadata * @@ -30,37 +30,38 @@ import java.util.Set; @JsonInclude(JsonInclude.Include.NON_NULL) public class ServiceRestMetadata { - private String url; + private String url; - private Set meta; + private Set meta; - public String getUrl() { - return url; - } + public String getUrl() { + return url; + } - public void setUrl(String url) { - this.url = url; - } + public void setUrl(String url) { + this.url = url; + } - public Set getMeta() { - return meta; - } + public Set getMeta() { + return meta; + } - public void setMeta(Set meta) { - this.meta = meta; - } + public void setMeta(Set meta) { + this.meta = meta; + } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ServiceRestMetadata)) return false; - ServiceRestMetadata that = (ServiceRestMetadata) o; - return Objects.equals(url, that.url) && - Objects.equals(meta, that.meta); - } + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof ServiceRestMetadata)) + return false; + ServiceRestMetadata that = (ServiceRestMetadata) o; + return Objects.equals(url, that.url) && Objects.equals(meta, that.meta); + } - @Override - public int hashCode() { - return Objects.hash(url, meta); - } + @Override + public int hashCode() { + return Objects.hash(url, meta); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java new file mode 100644 index 00000000..c4c31403 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java @@ -0,0 +1,554 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata.repository; + +import static java.lang.String.format; +import static java.lang.String.valueOf; +import static java.util.Collections.emptyList; +import static java.util.Collections.emptySet; +import static java.util.Collections.unmodifiableList; +import static java.util.Collections.unmodifiableMap; +import static java.util.Collections.unmodifiableSet; +import static org.apache.dubbo.common.Constants.APPLICATION_KEY; +import static org.apache.dubbo.common.Constants.VERSION_KEY; +import static org.springframework.util.CollectionUtils.isEmpty; +import static org.springframework.util.StringUtils.hasText; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.annotation.PostConstruct; + +import org.apache.dubbo.common.URL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.http.HttpRequest; +import org.springframework.stereotype.Repository; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; + +import com.alibaba.cloud.dubbo.env.DubboCloudProperties; +import com.alibaba.cloud.dubbo.http.DefaultHttpRequest; +import com.alibaba.cloud.dubbo.http.matcher.RequestMetadataMatcher; +import com.alibaba.cloud.dubbo.metadata.DubboRestServiceMetadata; +import com.alibaba.cloud.dubbo.metadata.RequestMetadata; +import com.alibaba.cloud.dubbo.metadata.ServiceRestMetadata; +import com.alibaba.cloud.dubbo.service.DubboMetadataService; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceExporter; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy; +import com.alibaba.cloud.dubbo.util.JSONUtils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.TypeFactory; + +/** + * Dubbo Service Metadata {@link Repository} + * + * @author Mercy + */ +@Repository +public class DubboServiceMetadataRepository { + + /** + * The prefix of {@link DubboMetadataService} : "dubbo.metadata-service." + */ + public static final String DUBBO_METADATA_SERVICE_PREFIX = "dubbo.metadata-service."; + + /** + * The {@link URL URLs} property name of {@link DubboMetadataService} : + * "dubbo.metadata-service.urls" + */ + public static final String DUBBO_METADATA_SERVICE_URLS_PROPERTY_NAME = DUBBO_METADATA_SERVICE_PREFIX + + "urls"; + + /** + * The {@link String#format(String, Object...) pattern} of dubbo protocols port + */ + public static final String DUBBO_PROTOCOLS_PORT_PROPERTY_NAME_PATTERN = "dubbo.protocols.%s.port"; + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + private final ObjectMapper objectMapper = new ObjectMapper(); + + // =================================== Registration + // =================================== // + + /** + * All exported {@link URL urls} {@link Map} whose key is the return value of + * {@link URL#getServiceKey()} method and value is the {@link List} of {@link URL + * URLs} + */ + private final MultiValueMap allExportedURLs = new LinkedMultiValueMap<>(); + + // ==================================================================================== + // // + + // =================================== Subscription + // =================================== // + + private Set subscribedServices; + + /** + * The subscribed {@link URL urls} {@link Map} of {@link DubboMetadataService}, whose + * key is the return value of {@link URL#getServiceKey()} method and value is the + * {@link List} of {@link URL URLs} + */ + private final MultiValueMap subscribedDubboMetadataServiceURLs = new LinkedMultiValueMap<>(); + + // ==================================================================================== + // // + + // =================================== REST Metadata + // ================================== // + + /** + * A Map to store REST metadata temporary, its' key is the special service name for a + * Dubbo service, the value is a JSON content of JAX-RS or Spring MVC REST metadata + * from the annotated methods. + */ + private final Set serviceRestMetadata = new LinkedHashSet<>(); + + /** + * Key is application name Value is Map + */ + private Map> dubboRestServiceMetadataRepository = newHashMap(); + + // ==================================================================================== + // // + + // =================================== Dependencies + // =================================== // + + @Autowired + private DubboCloudProperties dubboCloudProperties; + + @Autowired + private DubboMetadataServiceProxy dubboMetadataConfigServiceProxy; + + @Autowired + private DiscoveryClient discoveryClient; + + @Autowired + private JSONUtils jsonUtils; + + @Value("${spring.application.name}") + private String currentApplicationName; + + @Autowired + private DubboMetadataServiceExporter dubboMetadataServiceExporter; + + // ==================================================================================== + // // + + @PostConstruct + public void init() { + // Keep the order in following invocations + initSubscribedServices(); + initSubscribedDubboMetadataServices(); + initDubboRestServiceMetadataRepository(); + } + + /** + * Get the metadata {@link Map} of {@link DubboMetadataService} + * + * @return non-null read-only {@link Map} + */ + public Map getDubboMetadataServiceMetadata() { + + List dubboMetadataServiceURLs = dubboMetadataServiceExporter.export(); + + // remove the exported URLs of DubboMetadataService + removeDubboMetadataServiceURLs(dubboMetadataServiceURLs); + + Map metadata = newHashMap(); + + addDubboMetadataServiceURLsMetadata(metadata, dubboMetadataServiceURLs); + addDubboProtocolsPortMetadata(metadata); + + return Collections.unmodifiableMap(metadata); + } + + private void removeDubboMetadataServiceURLs(List dubboMetadataServiceURLs) { + dubboMetadataServiceURLs.forEach(this::unexportURL); + } + + private void addDubboMetadataServiceURLsMetadata(Map metadata, + List dubboMetadataServiceURLs) { + String dubboMetadataServiceURLsJSON = jsonUtils.toJSON(dubboMetadataServiceURLs); + metadata.put(DUBBO_METADATA_SERVICE_URLS_PROPERTY_NAME, + dubboMetadataServiceURLsJSON); + } + + private void addDubboProtocolsPortMetadata(Map metadata) { + + allExportedURLs.values().stream().flatMap(v -> v.stream()).forEach(url -> { + String protocol = url.getProtocol(); + String propertyName = getDubboProtocolPropertyName(protocol); + String propertyValue = valueOf(url.getPort()); + metadata.put(propertyName, propertyValue); + }); + } + + /** + * Get the property name of Dubbo Protocol + * + * @param protocol Dubbo Protocol + * @return non-null + */ + public String getDubboProtocolPropertyName(String protocol) { + return format(DUBBO_PROTOCOLS_PORT_PROPERTY_NAME_PATTERN, protocol); + } + + /** + * Publish the {@link Set} of {@link ServiceRestMetadata} + * + * @param serviceRestMetadataSet the {@link Set} of {@link ServiceRestMetadata} + */ + public void publishServiceRestMetadata( + Set serviceRestMetadataSet) { + for (ServiceRestMetadata serviceRestMetadata : serviceRestMetadataSet) { + if (!isEmpty(serviceRestMetadata.getMeta())) { + this.serviceRestMetadata.add(serviceRestMetadata); + } + } + } + + /** + * Get the {@link Set} of {@link ServiceRestMetadata} + * + * @return non-null read-only {@link Set} + */ + public Set getServiceRestMetadata() { + return unmodifiableSet(serviceRestMetadata); + } + + // /** + // * Get The subscribed {@link DubboMetadataService}'s {@link URL URLs} + // * + // * @return non-null read-only {@link List} + // */ + // public List getSubscribedDubboMetadataServiceURLs() { + // return Collections.unmodifiableList(subscribedDubboMetadataServiceURLs); + // } + + public List findSubscribedDubboMetadataServiceURLs(String serviceName, + String group, String version, String protocol) { + String serviceKey = URL.buildKey(serviceName, group, version); + List urls = subscribedDubboMetadataServiceURLs.get(serviceKey); + + if (isEmpty(urls)) { + return emptyList(); + } + + return hasText(protocol) + ? urls.stream() + .filter(url -> url.getProtocol().equalsIgnoreCase(protocol)) + .collect(Collectors.toList()) + : unmodifiableList(urls); + } + + /** + * The specified service is subscribe or not + * + * @param serviceName the service name + * @return + */ + public boolean isSubscribedService(String serviceName) { + return subscribedServices.contains(serviceName); + } + + public void exportURL(URL url) { + this.allExportedURLs.add(url.getServiceKey(), url); + } + + public void unexportURL(URL url) { + String key = url.getServiceKey(); + List urls = allExportedURLs.get(key); + urls.remove(url); + this.allExportedURLs.addAll(key, urls); + } + + /** + * Get all exported {@link URL urls}. + * + * @return non-null read-only + */ + public Map> getAllExportedUrls() { + return unmodifiableMap(allExportedURLs); + } + + /** + * Get all exported {@link URL#getServiceKey() service keys} + * + * @return non-null read-only + */ + public Set getAllServiceKeys() { + return allExportedURLs.keySet(); + } + + /** + * Get the {@link URL urls} that {@link DubboMetadataService} exported by the + * specified {@link ServiceInstance} + * + * @param serviceInstance {@link ServiceInstance} + * @return the mutable {@link URL urls} + */ + public List getDubboMetadataServiceURLs(ServiceInstance serviceInstance) { + Map metadata = serviceInstance.getMetadata(); + String dubboURLsJSON = metadata.get(DUBBO_METADATA_SERVICE_URLS_PROPERTY_NAME); + return jsonUtils.toURLs(dubboURLsJSON); + } + + public Integer getDubboProtocolPort(ServiceInstance serviceInstance, + String protocol) { + String protocolProperty = getDubboProtocolPropertyName(protocol); + Map metadata = serviceInstance.getMetadata(); + String protocolPort = metadata.get(protocolProperty); + return hasText(protocolPort) ? Integer.valueOf(protocolPort) : null; + } + + public List getExportedURLs(String serviceInterface, String group, + String version) { + String serviceKey = URL.buildKey(serviceInterface, group, version); + return allExportedURLs.getOrDefault(serviceKey, Collections.emptyList()); + } + + /** + * Initialize the specified service's {@link ServiceRestMetadata} + * + * @param serviceName the service name + */ + public void initialize(String serviceName) { + + if (dubboRestServiceMetadataRepository.containsKey(serviceName)) { + return; + } + + Set serviceRestMetadataSet = getServiceRestMetadataSet( + serviceName); + + if (isEmpty(serviceRestMetadataSet)) { + if (logger.isWarnEnabled()) { + logger.warn( + "The Spring application[name : {}] does not expose The REST metadata in the Dubbo services.", + serviceName); + } + return; + } + + Map metadataMap = getMetadataMap( + serviceName); + + for (ServiceRestMetadata serviceRestMetadata : serviceRestMetadataSet) { + + serviceRestMetadata.getMeta().forEach(restMethodMetadata -> { + RequestMetadata requestMetadata = restMethodMetadata.getRequest(); + RequestMetadataMatcher matcher = new RequestMetadataMatcher( + requestMetadata); + DubboRestServiceMetadata metadata = new DubboRestServiceMetadata( + serviceRestMetadata, restMethodMetadata); + metadataMap.put(matcher, metadata); + }); + } + + if (logger.isInfoEnabled()) { + logger.info( + "The REST metadata in the dubbo services has been loaded in the Spring application[name : {}]", + serviceName); + } + } + + /** + * Get a {@link DubboRestServiceMetadata} by the specified service name if + * {@link RequestMetadata} matched + * + * @param serviceName service name + * @param requestMetadata {@link RequestMetadata} to be matched + * @return {@link DubboRestServiceMetadata} if matched, or null + */ + public DubboRestServiceMetadata get(String serviceName, + RequestMetadata requestMetadata) { + return match(dubboRestServiceMetadataRepository, serviceName, requestMetadata); + } + + public Set getSubscribedServices() { + return Collections.unmodifiableSet(subscribedServices); + } + + private T match(Map> repository, + String serviceName, RequestMetadata requestMetadata) { + + Map map = repository.get(serviceName); + + T object = null; + + if (!isEmpty(map)) { + RequestMetadataMatcher matcher = new RequestMetadataMatcher(requestMetadata); + object = map.get(matcher); + if (object == null) { // Can't match exactly + // Require to match one by one + HttpRequest request = DefaultHttpRequest.builder() + .method(requestMetadata.getMethod()) + .path(requestMetadata.getPath()) + .params(requestMetadata.getParams()) + .headers(requestMetadata.getHeaders()).build(); + + for (Map.Entry entry : map.entrySet()) { + RequestMetadataMatcher possibleMatcher = entry.getKey(); + if (possibleMatcher.match(request)) { + object = entry.getValue(); + break; + } + } + } + } + + if (object == null) { + if (logger.isWarnEnabled()) { + logger.warn( + "DubboServiceMetadata can't be found in the Spring application [%s] and %s", + serviceName, requestMetadata); + } + } + + return object; + } + + private Map getMetadataMap( + String serviceName) { + return getMap(dubboRestServiceMetadataRepository, serviceName); + } + + private Set getServiceRestMetadataSet(String serviceName) { + + Set metadata = emptySet(); + + DubboMetadataService dubboMetadataService = dubboMetadataConfigServiceProxy + .getProxy(serviceName); + + if (dubboMetadataService != null) { + try { + String serviceRestMetadataJsonConfig = dubboMetadataService + .getServiceRestMetadata(); + if (hasText(serviceRestMetadataJsonConfig)) { + metadata = objectMapper.readValue(serviceRestMetadataJsonConfig, + TypeFactory.defaultInstance().constructCollectionType( + LinkedHashSet.class, ServiceRestMetadata.class)); + } + } + catch (Exception e) { + if (logger.isErrorEnabled()) { + logger.error(e.getMessage(), e); + } + } + } + return metadata; + } + + private static Map getMap(Map> repository, + String key) { + return getOrDefault(repository, key, newHashMap()); + } + + private static V getOrDefault(Map source, K key, V defaultValue) { + V value = source.get(key); + if (value == null) { + value = defaultValue; + source.put(key, value); + } + return value; + } + + private static Map newHashMap() { + return new LinkedHashMap<>(); + } + + private void initSubscribedServices() { + // If subscribes all services + if (DubboCloudProperties.ALL_DUBBO_SERVICES + .equals(dubboCloudProperties.getSubscribedServices())) { + List services = discoveryClient.getServices(); + subscribedServices = new HashSet<>(services); + if (logger.isWarnEnabled()) { + logger.warn( + "Current application will subscribe all services(size:{}) in registry, " + + "a lot of memory and CPU cycles may be used, " + + "thus it's strongly recommend you using the externalized property '{}' " + + "to specify the services", + subscribedServices.size(), "dubbo.cloud.subscribed-services"); + } + } + else { + subscribedServices = new HashSet<>(dubboCloudProperties.subscribedServices()); + } + + excludeSelf(subscribedServices); + } + + private void excludeSelf(Set subscribedServices) { + subscribedServices.remove(currentApplicationName); + } + + private void initSubscribedDubboMetadataServices() { + // clear subscribedDubboMetadataServiceURLs + subscribedDubboMetadataServiceURLs.clear(); + + subscribedServices.stream().map(discoveryClient::getInstances) + .filter(this::isNotEmpty).forEach(serviceInstances -> { + ServiceInstance serviceInstance = serviceInstances.get(0); + getDubboMetadataServiceURLs(serviceInstance) + .forEach(dubboMetadataServiceURL -> { + initSubscribedDubboMetadataServiceURLs( + dubboMetadataServiceURL); + initDubboMetadataServiceProxy(dubboMetadataServiceURL); + }); + }); + } + + private void initSubscribedDubboMetadataServiceURLs(URL dubboMetadataServiceURL) { + // add subscriptions + String serviceKey = dubboMetadataServiceURL.getServiceKey(); + subscribedDubboMetadataServiceURLs.add(serviceKey, dubboMetadataServiceURL); + } + + private void initDubboMetadataServiceProxy(URL dubboMetadataServiceURL) { + String serviceName = dubboMetadataServiceURL.getParameter(APPLICATION_KEY); + String version = dubboMetadataServiceURL.getParameter(VERSION_KEY); + // Initialize DubboMetadataService with right version + dubboMetadataConfigServiceProxy.initProxy(serviceName, version); + } + + private void initDubboRestServiceMetadataRepository() { + subscribedServices.forEach(this::initialize); + } + + private boolean isNotEmpty(Collection collection) { + return !CollectionUtils.isEmpty(collection); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboServiceBeanMetadataResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboServiceBeanMetadataResolver.java new file mode 100644 index 00000000..5dd97023 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboServiceBeanMetadataResolver.java @@ -0,0 +1,204 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata.resolver; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.config.spring.ServiceBean; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.util.ClassUtils; + +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; +import com.alibaba.cloud.dubbo.metadata.ServiceRestMetadata; + +import feign.Contract; +import feign.Feign; +import feign.MethodMetadata; +import feign.Util; + +/** + * The metadata resolver for {@link Feign} for {@link ServiceBean Dubbo Service Bean} in + * the provider side. + * + * @author Mercy + */ +public class DubboServiceBeanMetadataResolver + implements BeanClassLoaderAware, SmartInitializingSingleton, MetadataResolver { + + private static final String[] CONTRACT_CLASS_NAMES = { "feign.jaxrs2.JAXRS2Contract", + "org.springframework.cloud.openfeign.support.SpringMvcContract", }; + + private final ObjectProvider contractObjectProvider; + + private ClassLoader classLoader; + + /** + * Feign Contracts + */ + private Collection contracts; + + public DubboServiceBeanMetadataResolver( + ObjectProvider contractObjectProvider) { + this.contractObjectProvider = contractObjectProvider; + } + + @Override + public void afterSingletonsInstantiated() { + + LinkedList contracts = new LinkedList<>(); + + // Add injected Contract if available, for example SpringMvcContract Bean under + // Spring Cloud Open Feign + Contract contract = contractObjectProvider.getIfAvailable(); + + if (contract != null) { + contracts.add(contract); + } + + Stream.of(CONTRACT_CLASS_NAMES).filter(this::isClassPresent) // filter the existed + // classes + .map(this::loadContractClass) // load Contract Class + .map(this::createContract) // createServiceInstance instance by the + // specified class + .forEach(contracts::add); // add the Contract instance into contracts + + this.contracts = Collections.unmodifiableCollection(contracts); + } + + private Contract createContract(Class contractClassName) { + return (Contract) BeanUtils.instantiateClass(contractClassName); + } + + private Class loadContractClass(String contractClassName) { + return ClassUtils.resolveClassName(contractClassName, classLoader); + } + + private boolean isClassPresent(String className) { + return ClassUtils.isPresent(className, classLoader); + } + + @Override + public Set resolveServiceRestMetadata(ServiceBean serviceBean) { + + Object bean = serviceBean.getRef(); + + Class beanType = bean.getClass(); + + Set serviceRestMetadata = new LinkedHashSet<>(); + + Set methodRestMetadata = resolveMethodRestMetadata(beanType); + + List urls = serviceBean.getExportedUrls(); + + urls.stream().map(URL::toString).forEach(url -> { + ServiceRestMetadata metadata = new ServiceRestMetadata(); + metadata.setUrl(url); + metadata.setMeta(methodRestMetadata); + serviceRestMetadata.add(metadata); + }); + + return serviceRestMetadata; + } + + @Override + public Set resolveMethodRestMetadata(Class targetType) { + List feignContractMethods = selectFeignContractMethods(targetType); + return contracts.stream() + .map(contract -> parseAndValidateMetadata(contract, targetType)) + .flatMap(v -> v.stream()) + .map(methodMetadata -> resolveMethodRestMetadata(methodMetadata, + targetType, feignContractMethods)) + .collect(Collectors.toSet()); + } + + private List parseAndValidateMetadata(Contract contract, + Class targetType) { + List methodMetadataList = Collections.emptyList(); + try { + methodMetadataList = contract.parseAndValidatateMetadata(targetType); + } + catch (Throwable ignored) { + // ignore + } + return methodMetadataList; + } + + /** + * Select feign contract methods + *

+ * extract some code from + * {@link Contract.BaseContract#parseAndValidatateMetadata(java.lang.Class)} + * + * @param targetType + * @return non-null + */ + private List selectFeignContractMethods(Class targetType) { + List methods = new LinkedList<>(); + for (Method method : targetType.getMethods()) { + if (method.getDeclaringClass() == Object.class + || (method.getModifiers() & Modifier.STATIC) != 0 + || Util.isDefault(method)) { + continue; + } + methods.add(method); + } + return methods; + } + + protected RestMethodMetadata resolveMethodRestMetadata(MethodMetadata methodMetadata, + Class targetType, List feignContractMethods) { + String configKey = methodMetadata.configKey(); + Method feignContractMethod = getMatchedFeignContractMethod(targetType, + feignContractMethods, configKey); + RestMethodMetadata metadata = new RestMethodMetadata(methodMetadata); + metadata.setMethod( + new com.alibaba.cloud.dubbo.metadata.MethodMetadata(feignContractMethod)); + return metadata; + } + + private Method getMatchedFeignContractMethod(Class targetType, + List methods, String expectedConfigKey) { + Method matchedMethod = null; + for (Method method : methods) { + String configKey = Feign.configKey(targetType, method); + if (expectedConfigKey.equals(configKey)) { + matchedMethod = method; + break; + } + } + return matchedMethod; + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedAttributesResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedAttributesResolver.java similarity index 53% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedAttributesResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedAttributesResolver.java index e403139e..aafd94ca 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedAttributesResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedAttributesResolver.java @@ -14,15 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.metadata.resolver; +package com.alibaba.cloud.dubbo.metadata.resolver; -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; -import org.springframework.core.env.PropertyResolver; +import static org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes; import java.util.LinkedHashMap; import java.util.Map; -import static org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes; +import org.springframework.core.env.PropertyResolver; + +import com.alibaba.cloud.dubbo.annotation.DubboTransported; /** * {@link DubboTransported} annotation attributes resolver @@ -31,26 +32,26 @@ import static org.springframework.core.annotation.AnnotationUtils.getAnnotationA */ public class DubboTransportedAttributesResolver { - private final PropertyResolver propertyResolver; + private final PropertyResolver propertyResolver; - public DubboTransportedAttributesResolver(PropertyResolver propertyResolver) { - this.propertyResolver = propertyResolver; - } + public DubboTransportedAttributesResolver(PropertyResolver propertyResolver) { + this.propertyResolver = propertyResolver; + } - public Map resolve(DubboTransported dubboTransported) { - Map attributes = getAnnotationAttributes(dubboTransported); - return resolve(attributes); - } + public Map resolve(DubboTransported dubboTransported) { + Map attributes = getAnnotationAttributes(dubboTransported); + return resolve(attributes); + } - public Map resolve(Map attributes) { - Map resolvedAttributes = new LinkedHashMap<>(); - for (Map.Entry entry : attributes.entrySet()) { - Object value = entry.getValue(); - if (value instanceof String) { - value = propertyResolver.resolvePlaceholders(value.toString()); - } - resolvedAttributes.put(entry.getKey(), value); - } - return resolvedAttributes; - } + public Map resolve(Map attributes) { + Map resolvedAttributes = new LinkedHashMap<>(); + for (Map.Entry entry : attributes.entrySet()) { + Object value = entry.getValue(); + if (value instanceof String) { + value = propertyResolver.resolvePlaceholders(value.toString()); + } + resolvedAttributes.put(entry.getKey(), value); + } + return resolvedAttributes; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolver.java new file mode 100644 index 00000000..8ef05379 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolver.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata.resolver; + +import static feign.Feign.configKey; + +import java.lang.reflect.Method; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.env.PropertyResolver; + +import com.alibaba.cloud.dubbo.annotation.DubboTransported; +import com.alibaba.cloud.dubbo.metadata.DubboTransportedMethodMetadata; +import com.alibaba.cloud.dubbo.metadata.MethodMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + +import feign.Contract; + +/** + * {@link MethodMetadata} Resolver for the {@link DubboTransported} annotated classes or + * methods in client side. + * + * @author Mercy + * @see DubboTransportedMethodMetadata + */ +public class DubboTransportedMethodMetadataResolver { + + private static final Class DUBBO_TRANSPORTED_CLASS = DubboTransported.class; + + private final DubboTransportedAttributesResolver attributesResolver; + + private final Contract contract; + + public DubboTransportedMethodMetadataResolver(PropertyResolver propertyResolver, + Contract contract) { + this.attributesResolver = new DubboTransportedAttributesResolver( + propertyResolver); + this.contract = contract; + } + + public Map resolve( + Class targetType) { + Set dubboTransportedMethodMetadataSet = resolveDubboTransportedMethodMetadataSet( + targetType); + Map restMethodMetadataMap = resolveRestRequestMetadataMap( + targetType); + return dubboTransportedMethodMetadataSet.stream().collect( + Collectors.toMap(methodMetadata -> methodMetadata, methodMetadata -> { + RestMethodMetadata restMethodMetadata = restMethodMetadataMap + .get(configKey(targetType, methodMetadata.getMethod())); + restMethodMetadata.setMethod(methodMetadata.getMethodMetadata()); + return restMethodMetadata; + })); + } + + protected Set resolveDubboTransportedMethodMetadataSet( + Class targetType) { + // The public methods of target interface + Method[] methods = targetType.getMethods(); + + Set methodMetadataSet = new LinkedHashSet<>(); + + for (Method method : methods) { + DubboTransported dubboTransported = resolveDubboTransported(method); + if (dubboTransported != null) { + DubboTransportedMethodMetadata methodMetadata = createDubboTransportedMethodMetadata( + method, dubboTransported); + methodMetadataSet.add(methodMetadata); + } + } + return methodMetadataSet; + } + + private Map resolveRestRequestMetadataMap( + Class targetType) { + return contract.parseAndValidatateMetadata(targetType).stream().collect(Collectors + .toMap(feign.MethodMetadata::configKey, this::restMethodMetadata)); + } + + private RestMethodMetadata restMethodMetadata(feign.MethodMetadata methodMetadata) { + return new RestMethodMetadata(methodMetadata); + } + + private DubboTransportedMethodMetadata createDubboTransportedMethodMetadata( + Method method, DubboTransported dubboTransported) { + Map attributes = attributesResolver.resolve(dubboTransported); + return new DubboTransportedMethodMetadata(method, attributes); + } + + private DubboTransported resolveDubboTransported(Method method) { + DubboTransported dubboTransported = AnnotationUtils.findAnnotation(method, + DUBBO_TRANSPORTED_CLASS); + if (dubboTransported == null) { // Attempt to find @DubboTransported in the + // declaring class + Class declaringClass = method.getDeclaringClass(); + dubboTransported = AnnotationUtils.findAnnotation(declaringClass, + DUBBO_TRANSPORTED_CLASS); + } + return dubboTransported; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/MetadataResolver.java similarity index 56% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/MetadataResolver.java index c4d0a1c7..3938d8b8 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/resolver/MetadataResolver.java @@ -14,14 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.metadata.resolver; - -import org.apache.dubbo.config.spring.ServiceBean; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata; +package com.alibaba.cloud.dubbo.metadata.resolver; import java.util.Set; +import org.apache.dubbo.config.spring.ServiceBean; + +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; +import com.alibaba.cloud.dubbo.metadata.ServiceRestMetadata; + /** * The REST metadata resolver * @@ -29,19 +30,19 @@ import java.util.Set; */ public interface MetadataResolver { - /** - * Resolve the {@link ServiceRestMetadata} {@link Set set} from {@link ServiceBean} - * - * @param serviceBean {@link ServiceBean} - * @return non-null {@link Set} - */ - Set resolveServiceRestMetadata(ServiceBean serviceBean); + /** + * Resolve the {@link ServiceRestMetadata} {@link Set set} from {@link ServiceBean} + * + * @param serviceBean {@link ServiceBean} + * @return non-null {@link Set} + */ + Set resolveServiceRestMetadata(ServiceBean serviceBean); - /** - * Resolve {@link RestMethodMetadata} {@link Set set} from {@link Class target type} - * - * @param targetType {@link Class target type} - * @return non-null {@link Set} - */ - Set resolveMethodRestMetadata(Class targetType); + /** + * Resolve {@link RestMethodMetadata} {@link Set set} from {@link Class target type} + * + * @param targetType {@link Class target type} + * @return non-null {@link Set} + */ + Set resolveMethodRestMetadata(Class targetType); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/DubboInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/DubboInvocationHandler.java new file mode 100644 index 00000000..48dbe609 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/DubboInvocationHandler.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.openfeign; + +import static org.apache.dubbo.common.utils.PojoUtils.realize; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Map; + +import org.apache.dubbo.rpc.service.GenericService; +import org.springframework.util.ClassUtils; + +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContext; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; + +/** + * Dubbo {@link GenericService} for {@link InvocationHandler} + * + * @author Mercy + */ +public class DubboInvocationHandler implements InvocationHandler { + + private final Map feignMethodMetadataMap; + + private final InvocationHandler defaultInvocationHandler; + + private final DubboGenericServiceExecutionContextFactory contextFactory; + + private final ClassLoader classLoader; + + public DubboInvocationHandler(Map feignMethodMetadataMap, + InvocationHandler defaultInvocationHandler, ClassLoader classLoader, + DubboGenericServiceExecutionContextFactory contextFactory) { + this.feignMethodMetadataMap = feignMethodMetadataMap; + this.defaultInvocationHandler = defaultInvocationHandler; + this.classLoader = classLoader; + this.contextFactory = contextFactory; + } + + @Override + public Object invoke(Object proxy, Method feignMethod, Object[] args) + throws Throwable { + + FeignMethodMetadata feignMethodMetadata = feignMethodMetadataMap.get(feignMethod); + + if (feignMethodMetadata == null) { + return defaultInvocationHandler.invoke(proxy, feignMethod, args); + } + + GenericService dubboGenericService = feignMethodMetadata.getDubboGenericService(); + RestMethodMetadata dubboRestMethodMetadata = feignMethodMetadata + .getDubboRestMethodMetadata(); + RestMethodMetadata feignRestMethodMetadata = feignMethodMetadata + .getFeignMethodMetadata(); + + DubboGenericServiceExecutionContext context = contextFactory + .create(dubboRestMethodMetadata, feignRestMethodMetadata, args); + + String methodName = context.getMethodName(); + String[] parameterTypes = context.getParameterTypes(); + Object[] parameters = context.getParameters(); + + Object result = dubboGenericService.$invoke(methodName, parameterTypes, + parameters); + + Class returnType = getReturnType(dubboRestMethodMetadata); + + return realize(result, returnType); + } + + private Class getReturnType(RestMethodMetadata dubboRestMethodMetadata) { + String returnType = dubboRestMethodMetadata.getReturnType(); + return ClassUtils.resolveClassName(returnType, classLoader); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/FeignMethodMetadata.java similarity index 52% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/FeignMethodMetadata.java index 52ee10e5..e2fb23bf 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/FeignMethodMetadata.java @@ -14,13 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.openfeign; - -import org.apache.dubbo.rpc.service.GenericService; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; +package com.alibaba.cloud.dubbo.openfeign; import java.lang.reflect.Method; +import org.apache.dubbo.rpc.service.GenericService; + +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + /** * Feign {@link Method} Metadata * @@ -28,29 +29,29 @@ import java.lang.reflect.Method; */ class FeignMethodMetadata { - private final GenericService dubboGenericService; + private final GenericService dubboGenericService; - private final RestMethodMetadata dubboRestMethodMetadata; + private final RestMethodMetadata dubboRestMethodMetadata; - private final RestMethodMetadata feignMethodMetadata; + private final RestMethodMetadata feignMethodMetadata; + FeignMethodMetadata(GenericService dubboGenericService, + RestMethodMetadata dubboRestMethodMetadata, + RestMethodMetadata feignMethodMetadata) { + this.dubboGenericService = dubboGenericService; + this.dubboRestMethodMetadata = dubboRestMethodMetadata; + this.feignMethodMetadata = feignMethodMetadata; + } - FeignMethodMetadata(GenericService dubboGenericService, RestMethodMetadata dubboRestMethodMetadata, - RestMethodMetadata feignMethodMetadata) { - this.dubboGenericService = dubboGenericService; - this.dubboRestMethodMetadata = dubboRestMethodMetadata; - this.feignMethodMetadata = feignMethodMetadata; - } + GenericService getDubboGenericService() { + return dubboGenericService; + } - GenericService getDubboGenericService() { - return dubboGenericService; - } + RestMethodMetadata getDubboRestMethodMetadata() { + return dubboRestMethodMetadata; + } - RestMethodMetadata getDubboRestMethodMetadata() { - return dubboRestMethodMetadata; - } - - RestMethodMetadata getFeignMethodMetadata() { - return feignMethodMetadata; - } + RestMethodMetadata getFeignMethodMetadata() { + return feignMethodMetadata; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/TargeterBeanPostProcessor.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/TargeterBeanPostProcessor.java new file mode 100644 index 00000000..e1d0c9d9 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/TargeterBeanPostProcessor.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.openfeign; + +import static com.alibaba.cloud.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration.TARGETER_CLASS_NAME; +import static java.lang.reflect.Proxy.newProxyInstance; +import static org.springframework.util.ClassUtils.getUserClass; +import static org.springframework.util.ClassUtils.isPresent; +import static org.springframework.util.ClassUtils.resolveClassName; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.core.env.Environment; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; + +/** + * org.springframework.cloud.openfeign.Targeter {@link BeanPostProcessor} + * + * @author Mercy + */ +public class TargeterBeanPostProcessor + implements BeanPostProcessor, BeanClassLoaderAware { + + private final Environment environment; + + private final DubboServiceMetadataRepository dubboServiceMetadataRepository; + + private final DubboGenericServiceFactory dubboGenericServiceFactory; + + private final DubboGenericServiceExecutionContextFactory contextFactory; + + private ClassLoader classLoader; + + public TargeterBeanPostProcessor(Environment environment, + DubboServiceMetadataRepository dubboServiceMetadataRepository, + DubboGenericServiceFactory dubboGenericServiceFactory, + DubboGenericServiceExecutionContextFactory contextFactory) { + this.environment = environment; + this.dubboServiceMetadataRepository = dubboServiceMetadataRepository; + this.dubboGenericServiceFactory = dubboGenericServiceFactory; + this.contextFactory = contextFactory; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + throws BeansException { + return bean; + } + + @Override + public Object postProcessAfterInitialization(final Object bean, String beanName) + throws BeansException { + if (isPresent(TARGETER_CLASS_NAME, classLoader)) { + Class beanClass = getUserClass(bean.getClass()); + Class targetClass = resolveClassName(TARGETER_CLASS_NAME, classLoader); + if (targetClass.isAssignableFrom(beanClass)) { + return newProxyInstance(classLoader, new Class[] { targetClass }, + new TargeterInvocationHandler(bean, environment, classLoader, + dubboServiceMetadataRepository, + dubboGenericServiceFactory, contextFactory)); + } + } + return bean; + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/TargeterInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/TargeterInvocationHandler.java new file mode 100644 index 00000000..b3220653 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/openfeign/TargeterInvocationHandler.java @@ -0,0 +1,187 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.openfeign; + +import static java.lang.reflect.Proxy.newProxyInstance; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.HashMap; +import java.util.Map; + +import org.apache.dubbo.rpc.service.GenericService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FeignContext; +import org.springframework.core.env.Environment; + +import com.alibaba.cloud.dubbo.annotation.DubboTransported; +import com.alibaba.cloud.dubbo.metadata.DubboRestServiceMetadata; +import com.alibaba.cloud.dubbo.metadata.DubboTransportedMethodMetadata; +import com.alibaba.cloud.dubbo.metadata.MethodMetadata; +import com.alibaba.cloud.dubbo.metadata.RequestMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.metadata.resolver.DubboTransportedMethodMetadataResolver; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; +import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; + +import feign.Contract; +import feign.Target; + +/** + * org.springframework.cloud.openfeign.Targeter {@link InvocationHandler} + * + * @author Mercy + */ +class TargeterInvocationHandler implements InvocationHandler { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + private final Object bean; + + private final Environment environment; + + private final ClassLoader classLoader; + + private final DubboServiceMetadataRepository repository; + + private final DubboGenericServiceFactory dubboGenericServiceFactory; + + private final DubboGenericServiceExecutionContextFactory contextFactory; + + TargeterInvocationHandler(Object bean, Environment environment, + ClassLoader classLoader, DubboServiceMetadataRepository repository, + DubboGenericServiceFactory dubboGenericServiceFactory, + DubboGenericServiceExecutionContextFactory contextFactory) { + this.bean = bean; + this.environment = environment; + this.classLoader = classLoader; + this.repository = repository; + this.dubboGenericServiceFactory = dubboGenericServiceFactory; + this.contextFactory = contextFactory; + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + /** + * args[0]: FeignClientFactoryBean factory args[1]: Feign.Builder feign args[2]: + * FeignContext context args[3]: Target.HardCodedTarget target + */ + FeignContext feignContext = cast(args[2]); + Target.HardCodedTarget target = cast(args[3]); + + // Execute Targeter#target method first + method.setAccessible(true); + // Get the default proxy object + Object defaultProxy = method.invoke(bean, args); + // Create Dubbo Proxy if required + return createDubboProxyIfRequired(feignContext, target, defaultProxy); + } + + private Object createDubboProxyIfRequired(FeignContext feignContext, Target target, + Object defaultProxy) { + + DubboInvocationHandler dubboInvocationHandler = createDubboInvocationHandler( + feignContext, target, defaultProxy); + + if (dubboInvocationHandler == null) { + return defaultProxy; + } + + return newProxyInstance(target.type().getClassLoader(), + new Class[] { target.type() }, dubboInvocationHandler); + } + + private DubboInvocationHandler createDubboInvocationHandler(FeignContext feignContext, + Target target, Object defaultFeignClientProxy) { + + // Service name equals @FeignClient.name() + String serviceName = target.name(); + Class targetType = target.type(); + + // Get Contract Bean from FeignContext + Contract contract = feignContext.getInstance(serviceName, Contract.class); + + DubboTransportedMethodMetadataResolver resolver = new DubboTransportedMethodMetadataResolver( + environment, contract); + + Map feignRestMethodMetadataMap = resolver + .resolve(targetType); + + if (feignRestMethodMetadataMap.isEmpty()) { // @DubboTransported method was not + // found from the Client interface + if (logger.isDebugEnabled()) { + logger.debug("@{} method was not found in the Feign target type[{}]", + DubboTransported.class.getSimpleName(), targetType.getName()); + } + return null; + } + + // Update Metadata + repository.initialize(serviceName); + + Map feignMethodMetadataMap = getFeignMethodMetadataMap( + serviceName, feignRestMethodMetadataMap); + + InvocationHandler defaultFeignClientInvocationHandler = Proxy + .getInvocationHandler(defaultFeignClientProxy); + + DubboInvocationHandler dubboInvocationHandler = new DubboInvocationHandler( + feignMethodMetadataMap, defaultFeignClientInvocationHandler, classLoader, + contextFactory); + + return dubboInvocationHandler; + } + + private Map getFeignMethodMetadataMap(String serviceName, + Map feignRestMethodMetadataMap) { + Map feignMethodMetadataMap = new HashMap<>(); + + for (Map.Entry entry : feignRestMethodMetadataMap + .entrySet()) { + RestMethodMetadata feignRestMethodMetadata = entry.getValue(); + RequestMetadata feignRequestMetadata = feignRestMethodMetadata.getRequest(); + DubboRestServiceMetadata metadata = repository.get(serviceName, + feignRequestMetadata); + if (metadata != null) { + DubboTransportedMethodMetadata dubboTransportedMethodMetadata = entry + .getKey(); + Map dubboTranslatedAttributes = dubboTransportedMethodMetadata + .getAttributes(); + Method method = dubboTransportedMethodMetadata.getMethod(); + GenericService dubboGenericService = dubboGenericServiceFactory + .create(metadata, dubboTranslatedAttributes); + RestMethodMetadata dubboRestMethodMetadata = metadata + .getRestMethodMetadata(); + MethodMetadata methodMetadata = dubboTransportedMethodMetadata + .getMethodMetadata(); + FeignMethodMetadata feignMethodMetadata = new FeignMethodMetadata( + dubboGenericService, dubboRestMethodMetadata, + feignRestMethodMetadata); + feignMethodMetadataMap.put(method, feignMethodMetadata); + } + } + + return feignMethodMetadataMap; + } + + private static T cast(Object object) { + return (T) object; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java new file mode 100644 index 00000000..ec66a9a0 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java @@ -0,0 +1,292 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.registry; + +import static java.util.Collections.emptyList; +import static org.apache.dubbo.common.Constants.APPLICATION_KEY; +import static org.apache.dubbo.common.Constants.GROUP_KEY; +import static org.apache.dubbo.common.Constants.PROTOCOL_KEY; +import static org.apache.dubbo.common.Constants.PROVIDER_SIDE; +import static org.apache.dubbo.common.Constants.SIDE_KEY; +import static org.apache.dubbo.common.Constants.VERSION_KEY; +import static org.springframework.util.StringUtils.hasText; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import org.apache.dubbo.common.Constants; +import org.apache.dubbo.common.URL; +import org.apache.dubbo.registry.NotifyListener; +import org.apache.dubbo.registry.RegistryFactory; +import org.apache.dubbo.registry.support.FailbackRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.service.DubboMetadataService; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy; +import com.alibaba.cloud.dubbo.util.JSONUtils; + +/** + * Abstract Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration + * abstraction, whose protocol is "spring-cloud" + * + * @author Mercy + */ +public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { + + /** + * The parameter name of {@link #servicesLookupInterval} + */ + public static final String SERVICES_LOOKUP_INTERVAL_PARAM_NAME = "dubbo.services.lookup.interval"; + + protected static final String DUBBO_METADATA_SERVICE_CLASS_NAME = DubboMetadataService.class + .getName(); + + private static final Set schedulerTasks = new HashSet<>(); + + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + /** + * The interval in second of lookup service names(only for Dubbo-OPS) + */ + private final long servicesLookupInterval; + + private final DiscoveryClient discoveryClient; + + private final DubboServiceMetadataRepository repository; + + private final DubboMetadataServiceProxy dubboMetadataConfigServiceProxy; + + private final JSONUtils jsonUtils; + + protected final ScheduledExecutorService servicesLookupScheduler; + + public AbstractSpringCloudRegistry(URL url, DiscoveryClient discoveryClient, + DubboServiceMetadataRepository dubboServiceMetadataRepository, + DubboMetadataServiceProxy dubboMetadataConfigServiceProxy, + JSONUtils jsonUtils, ScheduledExecutorService servicesLookupScheduler) { + super(url); + this.servicesLookupInterval = url + .getParameter(SERVICES_LOOKUP_INTERVAL_PARAM_NAME, 60L); + this.discoveryClient = discoveryClient; + this.repository = dubboServiceMetadataRepository; + this.dubboMetadataConfigServiceProxy = dubboMetadataConfigServiceProxy; + this.jsonUtils = jsonUtils; + this.servicesLookupScheduler = servicesLookupScheduler; + } + + protected boolean shouldRegister(URL url) { + String side = url.getParameter(SIDE_KEY); + + boolean should = PROVIDER_SIDE.equals(side); // Only register the Provider. + + if (!should) { + if (logger.isDebugEnabled()) { + logger.debug("The URL[{}] should not be registered.", url.toString()); + } + } + + return should; + } + + @Override + public final void doRegister(URL url) { + if (!shouldRegister(url)) { + return; + } + doRegister0(url); + } + + /** + * The sub-type should implement to register + * + * @param url {@link URL} + */ + protected abstract void doRegister0(URL url); + + @Override + public final void doUnregister(URL url) { + if (!shouldRegister(url)) { + return; + } + doUnregister0(url); + } + + /** + * The sub-type should implement to unregister + * + * @param url {@link URL} + */ + protected abstract void doUnregister0(URL url); + + @Override + public final void doSubscribe(URL url, NotifyListener listener) { + + if (isAdminURL(url)) { + // TODO in future + } + else if (isDubboMetadataServiceURL(url)) { // for DubboMetadataService + subscribeDubboMetadataServiceURLs(url, listener); + } + else { // for general Dubbo Services + subscribeDubboServiceURLs(url, listener); + } + } + + protected void subscribeDubboServiceURLs(URL url, NotifyListener listener) { + + doSubscribeDubboServiceURLs(url, listener); + + submitSchedulerTaskIfAbsent(url, listener); + } + + private void submitSchedulerTaskIfAbsent(URL url, NotifyListener listener) { + String taskId = url.toIdentityString(); + if (schedulerTasks.add(taskId)) { + schedule(() -> doSubscribeDubboServiceURLs(url, listener)); + } + } + + protected void doSubscribeDubboServiceURLs(URL url, NotifyListener listener) { + + Set subscribedServices = repository.getSubscribedServices(); + + subscribedServices.stream().map(dubboMetadataConfigServiceProxy::getProxy) + .filter(Objects::nonNull).forEach(dubboMetadataService -> { + List exportedURLs = getExportedURLs(dubboMetadataService, url); + List allSubscribedURLs = new LinkedList<>(); + for (URL exportedURL : exportedURLs) { + String serviceName = exportedURL.getParameter(APPLICATION_KEY); + List serviceInstances = getServiceInstances( + serviceName); + String protocol = exportedURL.getProtocol(); + List subscribedURLs = new LinkedList<>(); + serviceInstances.forEach(serviceInstance -> { + Integer port = repository + .getDubboProtocolPort(serviceInstance, protocol); + String host = serviceInstance.getHost(); + if (port == null) { + if (logger.isWarnEnabled()) { + logger.warn( + "The protocol[{}] port of Dubbo service instance[host : {}] " + + "can't be resolved", + protocol, host); + } + } + else { + URL subscribedURL = new URL(protocol, host, port, + exportedURL.getParameters()); + subscribedURLs.add(subscribedURL); + } + }); + + if (logger.isDebugEnabled()) { + logger.debug( + "The subscribed URL[{}] will notify all URLs : {}", + url, subscribedURLs); + } + + allSubscribedURLs.addAll(subscribedURLs); + } + + listener.notify(allSubscribedURLs); + }); + } + + private List getServiceInstances(String serviceName) { + return hasText(serviceName) ? doGetServiceInstances(serviceName) : emptyList(); + } + + private List doGetServiceInstances(String serviceName) { + List serviceInstances = emptyList(); + try { + serviceInstances = discoveryClient.getInstances(serviceName); + } + catch (Exception e) { + if (logger.isErrorEnabled()) { + logger.error(e.getMessage(), e); + } + } + return serviceInstances; + } + + private List getExportedURLs(DubboMetadataService dubboMetadataService, + URL url) { + String serviceInterface = url.getServiceInterface(); + String group = url.getParameter(GROUP_KEY); + String version = url.getParameter(VERSION_KEY); + // The subscribed protocol may be null + String subscribedProtocol = url.getParameter(PROTOCOL_KEY); + String exportedURLsJSON = dubboMetadataService.getExportedURLs(serviceInterface, + group, version); + return jsonUtils.toURLs(exportedURLsJSON).stream() + .filter(exportedURL -> subscribedProtocol == null + || subscribedProtocol.equalsIgnoreCase(exportedURL.getProtocol())) + .collect(Collectors.toList()); + } + + private void subscribeDubboMetadataServiceURLs(URL url, NotifyListener listener) { + String serviceInterface = url.getServiceInterface(); + String group = url.getParameter(GROUP_KEY); + String version = url.getParameter(VERSION_KEY); + String protocol = url.getParameter(PROTOCOL_KEY); + List urls = repository.findSubscribedDubboMetadataServiceURLs( + serviceInterface, group, version, protocol); + listener.notify(urls); + } + + @Override + public final void doUnsubscribe(URL url, NotifyListener listener) { + if (isAdminURL(url)) { + shutdownServiceNamesLookup(); + } + } + + @Override + public boolean isAvailable() { + return !discoveryClient.getServices().isEmpty(); + } + + protected void shutdownServiceNamesLookup() { + if (servicesLookupScheduler != null) { + servicesLookupScheduler.shutdown(); + } + } + + protected boolean isAdminURL(URL url) { + return Constants.ADMIN_PROTOCOL.equals(url.getProtocol()); + } + + protected boolean isDubboMetadataServiceURL(URL url) { + return DUBBO_METADATA_SERVICE_CLASS_NAME.equals(url.getServiceInterface()); + } + + protected ScheduledFuture schedule(Runnable runnable) { + return this.servicesLookupScheduler.scheduleAtFixedRate(runnable, + servicesLookupInterval, servicesLookupInterval, TimeUnit.SECONDS); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DelegatingRegistration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DelegatingRegistration.java similarity index 57% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DelegatingRegistration.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DelegatingRegistration.java index e91831dd..8789e80f 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DelegatingRegistration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DelegatingRegistration.java @@ -14,59 +14,60 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.registry; - -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.serviceregistry.Registration; +package com.alibaba.cloud.dubbo.registry; import java.net.URI; import java.util.Map; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.serviceregistry.Registration; + /** - * The {@link Registration} of Dubbo uses an external of {@link ServiceInstance} instance as the delegate. + * The {@link Registration} of Dubbo uses an external of {@link ServiceInstance} instance + * as the delegate. * * @author Mercy */ class DelegatingRegistration implements Registration { - private final ServiceInstance delegate; + private final ServiceInstance delegate; - public DelegatingRegistration(ServiceInstance delegate) { - this.delegate = delegate; - } + public DelegatingRegistration(ServiceInstance delegate) { + this.delegate = delegate; + } - @Override - public String getServiceId() { - return delegate.getServiceId(); - } + @Override + public String getServiceId() { + return delegate.getServiceId(); + } - @Override - public String getHost() { - return delegate.getHost(); - } + @Override + public String getHost() { + return delegate.getHost(); + } - @Override - public int getPort() { - return delegate.getPort(); - } + @Override + public int getPort() { + return delegate.getPort(); + } - @Override - public boolean isSecure() { - return delegate.isSecure(); - } + @Override + public boolean isSecure() { + return delegate.isSecure(); + } - @Override - public URI getUri() { - return delegate.getUri(); - } + @Override + public URI getUri() { + return delegate.getUri(); + } - @Override - public Map getMetadata() { - return delegate.getMetadata(); - } + @Override + public Map getMetadata() { + return delegate.getMetadata(); + } - @Override - public String getScheme() { - return delegate.getScheme(); - } + @Override + public String getScheme() { + return delegate.getScheme(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java similarity index 52% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java index 17826624..33ed52d5 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java @@ -14,18 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.registry; +package com.alibaba.cloud.dubbo.registry; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; -import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstancePreRegisteredEvent; -import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstanceRegisteredEvent; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; +import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreRegisteredEvent; +import com.alibaba.cloud.dubbo.registry.event.ServiceInstanceRegisteredEvent; + /** * Dubbo Service Registration Event-Publishing Aspect * @@ -34,28 +35,31 @@ import org.springframework.context.ApplicationEventPublisherAware; * @see ServiceInstanceRegisteredEvent */ @Aspect -public class DubboServiceRegistrationEventPublishingAspect implements ApplicationEventPublisherAware { +public class DubboServiceRegistrationEventPublishingAspect + implements ApplicationEventPublisherAware { - /** - * The pointcut expression for {@link ServiceRegistry#register(Registration)} - */ - public static final String REGISTER_POINTCUT_EXPRESSION = - "execution(* org.springframework.cloud.client.serviceregistry.ServiceRegistry.register(*)) && args(registration)"; + /** + * The pointcut expression for {@link ServiceRegistry#register(Registration)} + */ + public static final String REGISTER_POINTCUT_EXPRESSION = "execution(* org.springframework.cloud.client.serviceregistry.ServiceRegistry.register(*)) && args(registration)"; - private ApplicationEventPublisher applicationEventPublisher; + private ApplicationEventPublisher applicationEventPublisher; - @Before(REGISTER_POINTCUT_EXPRESSION) - public void beforeRegister(Registration registration) { - applicationEventPublisher.publishEvent(new ServiceInstancePreRegisteredEvent(registration)); - } + @Before(REGISTER_POINTCUT_EXPRESSION) + public void beforeRegister(Registration registration) { + applicationEventPublisher + .publishEvent(new ServiceInstancePreRegisteredEvent(registration)); + } - @After(REGISTER_POINTCUT_EXPRESSION) - public void afterRegister(Registration registration) { - applicationEventPublisher.publishEvent(new ServiceInstanceRegisteredEvent(registration)); - } + @After(REGISTER_POINTCUT_EXPRESSION) + public void afterRegister(Registration registration) { + applicationEventPublisher + .publishEvent(new ServiceInstanceRegisteredEvent(registration)); + } - @Override - public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { - this.applicationEventPublisher = applicationEventPublisher; - } + @Override + public void setApplicationEventPublisher( + ApplicationEventPublisher applicationEventPublisher) { + this.applicationEventPublisher = applicationEventPublisher; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/SpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/SpringCloudRegistry.java new file mode 100644 index 00000000..72b33545 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/SpringCloudRegistry.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.registry; + +import java.util.concurrent.ScheduledExecutorService; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.registry.RegistryFactory; +import org.springframework.cloud.client.discovery.DiscoveryClient; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy; +import com.alibaba.cloud.dubbo.util.JSONUtils; + +/** + * Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose + * protocol is "spring-cloud" + * + * @author Mercy + */ +public class SpringCloudRegistry extends AbstractSpringCloudRegistry { + + private final DubboServiceMetadataRepository dubboServiceMetadataRepository; + + public SpringCloudRegistry(URL url, DiscoveryClient discoveryClient, + DubboServiceMetadataRepository dubboServiceMetadataRepository, + DubboMetadataServiceProxy dubboMetadataConfigServiceProxy, + JSONUtils jsonUtils, ScheduledExecutorService servicesLookupScheduler) { + super(url, discoveryClient, dubboServiceMetadataRepository, + dubboMetadataConfigServiceProxy, jsonUtils, servicesLookupScheduler); + this.dubboServiceMetadataRepository = dubboServiceMetadataRepository; + } + + @Override + protected void doRegister0(URL url) { + dubboServiceMetadataRepository.exportURL(url); + } + + @Override + protected void doUnregister0(URL url) { + dubboServiceMetadataRepository.unexportURL(url); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/SpringCloudRegistryFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/SpringCloudRegistryFactory.java new file mode 100644 index 00000000..e0051afe --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/SpringCloudRegistryFactory.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.registry; + +import static java.lang.System.getProperty; +import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; + +import java.util.concurrent.ScheduledExecutorService; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.utils.NamedThreadFactory; +import org.apache.dubbo.registry.Registry; +import org.apache.dubbo.registry.RegistryFactory; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.context.ConfigurableApplicationContext; + +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy; +import com.alibaba.cloud.dubbo.util.JSONUtils; + +/** + * Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose + * protocol is "spring-cloud" + * + * @author Mercy + * @see RegistryFactory + * @see SpringCloudRegistry + */ +public class SpringCloudRegistryFactory implements RegistryFactory { + + private static String SERVICES_LOOKUP_SCHEDULER_THREAD_NAME_PREFIX = getProperty( + "dubbo.services.lookup.scheduler.thread.name.prefix ", + "dubbo-services-lookup-"); + + private static ConfigurableApplicationContext applicationContext; + + private final ScheduledExecutorService servicesLookupScheduler; + + private DiscoveryClient discoveryClient; + + private DubboServiceMetadataRepository dubboServiceMetadataRepository; + + private DubboMetadataServiceProxy dubboMetadataConfigServiceProxy; + + private JSONUtils jsonUtils; + + private volatile boolean initialized = false; + + public SpringCloudRegistryFactory() { + servicesLookupScheduler = newSingleThreadScheduledExecutor( + new NamedThreadFactory(SERVICES_LOOKUP_SCHEDULER_THREAD_NAME_PREFIX)); + } + + protected void init() { + if (initialized || applicationContext == null) { + return; + } + this.discoveryClient = applicationContext.getBean(DiscoveryClient.class); + this.dubboServiceMetadataRepository = applicationContext + .getBean(DubboServiceMetadataRepository.class); + this.dubboMetadataConfigServiceProxy = applicationContext + .getBean(DubboMetadataServiceProxy.class); + this.jsonUtils = applicationContext.getBean(JSONUtils.class); + } + + @Override + public Registry getRegistry(URL url) { + init(); + return new SpringCloudRegistry(url, discoveryClient, + dubboServiceMetadataRepository, dubboMetadataConfigServiceProxy, + jsonUtils, servicesLookupScheduler); + } + + public static void setApplicationContext( + ConfigurableApplicationContext applicationContext) { + SpringCloudRegistryFactory.applicationContext = applicationContext; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java similarity index 80% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java index 6233e9a5..1821ebda 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.registry.event; +package com.alibaba.cloud.dubbo.registry.event; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.serviceregistry.Registration; @@ -22,18 +22,19 @@ import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.context.ApplicationEvent; /** - * The before-{@link ServiceRegistry#register(Registration) register} event for {@link ServiceInstance} + * The before-{@link ServiceRegistry#register(Registration) register} event for + * {@link ServiceInstance} * * @author Mercy */ public class ServiceInstancePreRegisteredEvent extends ApplicationEvent { - public ServiceInstancePreRegisteredEvent(Registration source) { - super(source); - } + public ServiceInstancePreRegisteredEvent(Registration source) { + super(source); + } - @Override - public Registration getSource() { - return (Registration) super.getSource(); - } + @Override + public Registration getSource() { + return (Registration) super.getSource(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/event/ServiceInstanceRegisteredEvent.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstanceRegisteredEvent.java similarity index 79% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/event/ServiceInstanceRegisteredEvent.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstanceRegisteredEvent.java index 8aab6aa7..46833d95 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/event/ServiceInstanceRegisteredEvent.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstanceRegisteredEvent.java @@ -14,26 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.registry.event; +package com.alibaba.cloud.dubbo.registry.event; + +import java.util.EventObject; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; -import java.util.EventObject; - /** - * The after-{@link ServiceRegistry#register(Registration) register} event for {@link Registration} + * The after-{@link ServiceRegistry#register(Registration) register} event for + * {@link Registration} * * @author Mercy */ public class ServiceInstanceRegisteredEvent extends EventObject { - public ServiceInstanceRegisteredEvent(Registration source) { - super(source); - } + public ServiceInstanceRegisteredEvent(Registration source) { + super(source); + } - @Override - public Registration getSource() { - return (Registration) super.getSource(); - } + @Override + public Registration getSource() { + return (Registration) super.getSource(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceExecutionContext.java similarity index 61% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceExecutionContext.java index 640fc009..53c7fd6d 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceExecutionContext.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; +package com.alibaba.cloud.dubbo.service; import org.apache.dubbo.rpc.service.GenericService; @@ -25,27 +25,28 @@ import org.apache.dubbo.rpc.service.GenericService; */ public class DubboGenericServiceExecutionContext { - private final String methodName; + private final String methodName; - private final String[] parameterTypes; + private final String[] parameterTypes; - private final Object[] parameters; + private final Object[] parameters; - public DubboGenericServiceExecutionContext(String methodName, String[] parameterTypes, Object[] parameters) { - this.methodName = methodName; - this.parameterTypes = parameterTypes; - this.parameters = parameters; - } + public DubboGenericServiceExecutionContext(String methodName, String[] parameterTypes, + Object[] parameters) { + this.methodName = methodName; + this.parameterTypes = parameterTypes; + this.parameters = parameters; + } - public String getMethodName() { - return methodName; - } + public String getMethodName() { + return methodName; + } - public String[] getParameterTypes() { - return parameterTypes; - } + public String[] getParameterTypes() { + return parameterTypes; + } - public Object[] getParameters() { - return parameters; - } + public Object[] getParameters() { + return parameters; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceExecutionContextFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceExecutionContextFactory.java new file mode 100644 index 00000000..8d61b2fd --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceExecutionContextFactory.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; + +import com.alibaba.cloud.dubbo.http.HttpServerRequest; +import com.alibaba.cloud.dubbo.metadata.MethodMetadata; +import com.alibaba.cloud.dubbo.metadata.MethodParameterMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; +import com.alibaba.cloud.dubbo.service.parameter.DubboGenericServiceParameterResolver; + +/** + * {@link DubboGenericServiceExecutionContext} Factory + * + * @author Mercy + * @see DubboGenericServiceParameterResolver + */ +public class DubboGenericServiceExecutionContextFactory { + + @Autowired(required = false) + private final List resolvers = Collections + .emptyList(); + + @PostConstruct + public void init() { + AnnotationAwareOrderComparator.sort(resolvers); + } + + public DubboGenericServiceExecutionContext create( + RestMethodMetadata dubboRestMethodMetadata, + RestMethodMetadata clientMethodMetadata, Object[] arguments) { + + MethodMetadata dubboMethodMetadata = dubboRestMethodMetadata.getMethod(); + + String methodName = dubboMethodMetadata.getName(); + + String[] parameterTypes = resolveParameterTypes(dubboMethodMetadata); + + Object[] parameters = resolveParameters(dubboRestMethodMetadata, + clientMethodMetadata, arguments); + + return new DubboGenericServiceExecutionContext(methodName, parameterTypes, + parameters); + } + + public DubboGenericServiceExecutionContext create( + RestMethodMetadata dubboRestMethodMetadata, HttpServerRequest request) { + MethodMetadata methodMetadata = dubboRestMethodMetadata.getMethod(); + + String methodName = methodMetadata.getName(); + + String[] parameterTypes = resolveParameterTypes(methodMetadata); + + Object[] parameters = resolveParameters(dubboRestMethodMetadata, request); + + return new DubboGenericServiceExecutionContext(methodName, parameterTypes, + parameters); + } + + private Map buildParamNameToIndex( + List params) { + Map paramNameToIndex = new LinkedHashMap<>(); + for (MethodParameterMetadata param : params) { + paramNameToIndex.put(param.getName(), param.getIndex()); + } + return paramNameToIndex; + } + + protected String[] resolveParameterTypes(MethodMetadata methodMetadata) { + + List params = methodMetadata.getParams(); + + String[] parameterTypes = new String[params.size()]; + + for (MethodParameterMetadata parameterMetadata : params) { + int index = parameterMetadata.getIndex(); + String parameterType = parameterMetadata.getType(); + parameterTypes[index] = parameterType; + } + + return parameterTypes; + } + + protected Object[] resolveParameters(RestMethodMetadata dubboRestMethodMetadata, + HttpServerRequest request) { + + MethodMetadata dubboMethodMetadata = dubboRestMethodMetadata.getMethod(); + + List params = dubboMethodMetadata.getParams(); + + Object[] parameters = new Object[params.size()]; + + for (MethodParameterMetadata parameterMetadata : params) { + + int index = parameterMetadata.getIndex(); + + for (DubboGenericServiceParameterResolver resolver : resolvers) { + Object parameter = resolver.resolve(dubboRestMethodMetadata, + parameterMetadata, request); + if (parameter != null) { + parameters[index] = parameter; + break; + } + } + } + + return parameters; + } + + protected Object[] resolveParameters(RestMethodMetadata dubboRestMethodMetadata, + RestMethodMetadata clientRestMethodMetadata, Object[] arguments) { + + MethodMetadata dubboMethodMetadata = dubboRestMethodMetadata.getMethod(); + + List params = dubboMethodMetadata.getParams(); + + Object[] parameters = new Object[params.size()]; + + for (MethodParameterMetadata parameterMetadata : params) { + + int index = parameterMetadata.getIndex(); + + for (DubboGenericServiceParameterResolver resolver : resolvers) { + Object parameter = resolver.resolve(dubboRestMethodMetadata, + parameterMetadata, clientRestMethodMetadata, arguments); + if (parameter != null) { + parameters[index] = parameter; + break; + } + } + } + + return parameters; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceFactory.java new file mode 100644 index 00000000..25936709 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboGenericServiceFactory.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import static java.util.Collections.emptyMap; +import static org.apache.dubbo.common.Constants.GROUP_KEY; +import static org.apache.dubbo.common.Constants.VERSION_KEY; +import static org.springframework.util.StringUtils.commaDelimitedListToStringArray; + +import java.beans.PropertyEditorSupport; +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import javax.annotation.PreDestroy; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.utils.CollectionUtils; +import org.apache.dubbo.config.spring.ReferenceBean; +import org.apache.dubbo.rpc.service.GenericService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.MutablePropertyValues; +import org.springframework.beans.propertyeditors.StringTrimmerEditor; +import org.springframework.util.StringUtils; +import org.springframework.validation.DataBinder; + +import com.alibaba.cloud.dubbo.metadata.DubboRestServiceMetadata; +import com.alibaba.cloud.dubbo.metadata.ServiceRestMetadata; + +/** + * Dubbo {@link GenericService} Factory + * + * @author Mercy + */ +public class DubboGenericServiceFactory { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + private final ConcurrentMap> cache = new ConcurrentHashMap<>(); + + public GenericService create(DubboRestServiceMetadata dubboServiceMetadata, + Map dubboTranslatedAttributes) { + + ReferenceBean referenceBean = build( + dubboServiceMetadata.getServiceRestMetadata(), dubboTranslatedAttributes); + + return referenceBean == null ? null : referenceBean.get(); + } + + public GenericService create(String serviceName, Class serviceClass, + String version) { + String interfaceName = serviceClass.getName(); + ReferenceBean referenceBean = build(interfaceName, version, + serviceName, emptyMap()); + return referenceBean.get(); + } + + private ReferenceBean build(ServiceRestMetadata serviceRestMetadata, + Map dubboTranslatedAttributes) { + String urlValue = serviceRestMetadata.getUrl(); + URL url = URL.valueOf(urlValue); + String interfaceName = url.getServiceInterface(); + String version = url.getParameter(VERSION_KEY); + String group = url.getParameter(GROUP_KEY); + + return build(interfaceName, version, group, dubboTranslatedAttributes); + } + + private ReferenceBean build(String interfaceName, String version, + String group, Map dubboTranslatedAttributes) { + + Integer key = Objects.hash(interfaceName, version, group, + dubboTranslatedAttributes); + + ReferenceBean referenceBean = cache.get(key); + + if (referenceBean == null) { + referenceBean = new ReferenceBean<>(); + referenceBean.setGeneric(true); + referenceBean.setInterface(interfaceName); + referenceBean.setVersion(version); + referenceBean.setGroup(group); + bindReferenceBean(referenceBean, dubboTranslatedAttributes); + } + + return referenceBean; + } + + private void bindReferenceBean(ReferenceBean referenceBean, + Map dubboTranslatedAttributes) { + DataBinder dataBinder = new DataBinder(referenceBean); + // Register CustomEditors for special fields + dataBinder.registerCustomEditor(String.class, "filter", + new StringTrimmerEditor(true)); + dataBinder.registerCustomEditor(String.class, "listener", + new StringTrimmerEditor(true)); + dataBinder.registerCustomEditor(Map.class, "parameters", + new PropertyEditorSupport() { + + public void setAsText(String text) + throws java.lang.IllegalArgumentException { + // Trim all whitespace + String content = StringUtils.trimAllWhitespace(text); + if (!StringUtils.hasText(content)) { // No content , ignore + // directly + return; + } + // replace "=" to "," + content = StringUtils.replace(content, "=", ","); + // replace ":" to "," + content = StringUtils.replace(content, ":", ","); + // String[] to Map + Map parameters = CollectionUtils + .toStringMap(commaDelimitedListToStringArray(content)); + setValue(parameters); + } + }); + + dataBinder.bind(new MutablePropertyValues(dubboTranslatedAttributes)); + } + + @PreDestroy + public void destroy() { + destroyReferenceBeans(); + cache.values(); + } + + private void destroyReferenceBeans() { + Collection> referenceBeans = cache.values(); + if (logger.isInfoEnabled()) { + logger.info("The Dubbo GenericService ReferenceBeans are destroying..."); + } + for (ReferenceBean referenceBean : referenceBeans) { + referenceBean.destroy(); // destroy ReferenceBean + if (logger.isInfoEnabled()) { + logger.info("Destroyed the ReferenceBean : {} ", referenceBean); + } + } + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataService.java new file mode 100644 index 00000000..134bb028 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataService.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.config.annotation.Service; + +import com.alibaba.cloud.dubbo.metadata.ServiceRestMetadata; + +/** + * Dubbo Metadata Service is a core interface for service subscribers, it must keep the + * stable of structure in every evolution , makes sure all subscribers' compatibility. + *

+ * The interface contract's version must be {@link #VERSION} constant and group must be + * current Dubbo application name + * + * @author Mercy + */ +public interface DubboMetadataService { + + /** + * Current version of the interface contract + */ + String VERSION = "1.0.0"; + + /** + * Get the json content of {@link ServiceRestMetadata} {@link Set} + * + * @return null if present + */ + String getServiceRestMetadata(); + + /** + * Get all exported {@link URL#getServiceKey() service keys} + * + * @return non-null read-only {@link Set} + */ + Set getAllServiceKeys(); + + /** + * Get all exported Dubbo's {@link URL URLs} {@link Map} whose key is the return value + * of {@link URL#getServiceKey()} method and value is the json content of List of + * {@link URL URLs} + * + * @return non-null read-only {@link Map} + */ + Map getAllExportedURLs(); + + /** + * Get the json content of an exported List of {@link URL URLs} by the + * serviceInterface , group and version + * + * @param serviceInterface The class name of service interface + * @param group {@link Service#group() the service group} (optional) + * @param version {@link Service#version() the service version} (optional) + * @return non-null read-only {@link List} + * @see URL + */ + String getExportedURLs(String serviceInterface, String group, String version); +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceExporter.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceExporter.java new file mode 100644 index 00000000..b2be876b --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceExporter.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import java.util.List; +import java.util.function.Supplier; + +import javax.annotation.PreDestroy; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.config.ProtocolConfig; +import org.apache.dubbo.config.ServiceConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * {@link DubboMetadataService} exporter + * + * @author Mercy + */ +@Component +public class DubboMetadataServiceExporter { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @Autowired + private ApplicationConfig applicationConfig; + + @Autowired + private ObjectProvider dubboMetadataService; + + @Autowired + private Supplier protocolConfigSupplier; + + @Value("${spring.application.name:${dubbo.application.name:application}}") + private String currentApplicationName; + + /** + * The ServiceConfig of DubboMetadataConfigService to be exported, can be nullable. + */ + private ServiceConfig serviceConfig; + + /** + * export {@link DubboMetadataService} as Dubbo service + * + * @return the exported {@link URL URLs} + */ + public List export() { + + if (serviceConfig == null || !serviceConfig.isExported()) { + + serviceConfig = new ServiceConfig<>(); + + serviceConfig.setInterface(DubboMetadataService.class); + // Use DubboMetadataService.VERSION as the Dubbo Service version + serviceConfig.setVersion(DubboMetadataService.VERSION); + // Use current Spring application name as the Dubbo Service group + serviceConfig.setGroup(currentApplicationName); + serviceConfig.setRef(dubboMetadataService.getIfAvailable()); + serviceConfig.setApplication(applicationConfig); + serviceConfig.setProtocol(protocolConfigSupplier.get()); + + serviceConfig.export(); + + if (logger.isInfoEnabled()) { + logger.info("The Dubbo service[{}] has been exported.", + serviceConfig.toString()); + } + } + + return serviceConfig.getExportedUrls(); + } + + /** + * unexport {@link DubboMetadataService} + */ + @PreDestroy + public void unexport() { + + if (serviceConfig == null || serviceConfig.isUnexported()) { + return; + } + + serviceConfig.unexport(); + + if (logger.isInfoEnabled()) { + logger.info("The Dubbo service[{}] has been unexported.", + serviceConfig.toString()); + } + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceInvocationHandler.java similarity index 52% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceInvocationHandler.java index db95179f..c634a8c0 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceInvocationHandler.java @@ -14,17 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.rpc.service.GenericService; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +package com.alibaba.cloud.dubbo.service; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.stream.Stream; +import org.apache.dubbo.rpc.service.GenericService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * {@link DubboMetadataService} {@link InvocationHandler} * @@ -32,29 +31,34 @@ import java.util.stream.Stream; */ class DubboMetadataServiceInvocationHandler implements InvocationHandler { - private final Logger logger = LoggerFactory.getLogger(getClass()); + private final Logger logger = LoggerFactory.getLogger(getClass()); - private final GenericService genericService; + private final GenericService genericService; - public DubboMetadataServiceInvocationHandler(String serviceName, String version, DubboGenericServiceFactory dubboGenericServiceFactory) { - this.genericService = dubboGenericServiceFactory.create(serviceName, DubboMetadataService.class, version); - } + public DubboMetadataServiceInvocationHandler(String serviceName, String version, + DubboGenericServiceFactory dubboGenericServiceFactory) { + this.genericService = dubboGenericServiceFactory.create(serviceName, + DubboMetadataService.class, version); + } - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Object returnValue = null; - try { - returnValue = genericService.$invoke(method.getName(), getParameterTypes(method), args); - } catch (Throwable e) { - if (logger.isErrorEnabled()) { - logger.error(e.getMessage(), e); - } - } - return returnValue; - } + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + Object returnValue = null; + try { + returnValue = genericService.$invoke(method.getName(), + getParameterTypes(method), args); + } + catch (Throwable e) { + if (logger.isErrorEnabled()) { + logger.error(e.getMessage(), e); + } + } + return returnValue; + } - private String[] getParameterTypes(Method method) { - Class[] parameterTypes = method.getParameterTypes(); - return Stream.of(parameterTypes).map(Class::getName).toArray(length -> new String[length]); - } + private String[] getParameterTypes(Method method) { + Class[] parameterTypes = method.getParameterTypes(); + return Stream.of(parameterTypes).map(Class::getName) + .toArray(length -> new String[length]); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java new file mode 100644 index 00000000..bd19d0af --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import static java.lang.reflect.Proxy.newProxyInstance; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.beans.factory.DisposableBean; + +/** + * The proxy of {@link DubboMetadataService} + */ +public class DubboMetadataServiceProxy implements BeanClassLoaderAware, DisposableBean { + + private final DubboGenericServiceFactory dubboGenericServiceFactory; + + private ClassLoader classLoader; + + private final Map dubboMetadataServiceCache = new ConcurrentHashMap<>(); + + public DubboMetadataServiceProxy( + DubboGenericServiceFactory dubboGenericServiceFactory) { + this.dubboGenericServiceFactory = dubboGenericServiceFactory; + } + + /** + * Initializes {@link DubboMetadataService}'s Proxy + * + * @param serviceName the service name + * @param version the service version + * @return a {@link DubboMetadataService} proxy + */ + public DubboMetadataService initProxy(String serviceName, String version) { + return dubboMetadataServiceCache.computeIfAbsent(serviceName, + name -> newProxy(name, version)); + } + + /** + * Get a proxy instance of {@link DubboMetadataService} via the specified service name + * + * @param serviceName the service name + * @return a {@link DubboMetadataService} proxy + */ + public DubboMetadataService getProxy(String serviceName) { + return dubboMetadataServiceCache.get(serviceName); + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + + @Override + public void destroy() throws Exception { + dubboMetadataServiceCache.clear(); + } + + /** + * New a proxy instance of {@link DubboMetadataService} via the specified service name + * + * @param serviceName the service name + * @param version the service version + * @return a {@link DubboMetadataService} proxy + */ + protected DubboMetadataService newProxy(String serviceName, String version) { + return (DubboMetadataService) newProxyInstance(classLoader, + new Class[] { DubboMetadataService.class }, + new DubboMetadataServiceInvocationHandler(serviceName, version, + dubboGenericServiceFactory)); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/IntrospectiveDubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/IntrospectiveDubboMetadataService.java new file mode 100644 index 00000000..400f6a63 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/IntrospectiveDubboMetadataService.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import static java.util.Collections.unmodifiableMap; +import static org.springframework.util.CollectionUtils.isEmpty; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.dubbo.common.URL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; + +import com.alibaba.cloud.dubbo.metadata.ServiceRestMetadata; +import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; +import com.alibaba.cloud.dubbo.util.JSONUtils; + +/** + * Introspective {@link DubboMetadataService} implementation + * + * @author Mercy + */ +public class IntrospectiveDubboMetadataService implements DubboMetadataService { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @Autowired + private ObjectProvider dubboServiceMetadataRepository; + + @Autowired + private JSONUtils jsonUtils; + + @Override + public String getServiceRestMetadata() { + Set serviceRestMetadata = getRepository() + .getServiceRestMetadata(); + String serviceRestMetadataJsonConfig = null; + if (!isEmpty(serviceRestMetadata)) { + serviceRestMetadataJsonConfig = jsonUtils.toJSON(serviceRestMetadata); + } + return serviceRestMetadataJsonConfig; + } + + @Override + public Set getAllServiceKeys() { + return getRepository().getAllServiceKeys(); + } + + @Override + public Map getAllExportedURLs() { + Map> allExportedUrls = getRepository().getAllExportedUrls(); + if (isEmpty(allExportedUrls)) { + if (logger.isDebugEnabled()) { + logger.debug("There is no registered URL."); + } + return Collections.emptyMap(); + } + + Map result = new HashMap<>(); + + allExportedUrls.forEach((serviceKey, urls) -> { + result.put(serviceKey, jsonUtils.toJSON(urls)); + }); + + return unmodifiableMap(result); + } + + @Override + public String getExportedURLs(String serviceInterface, String group, String version) { + List urls = getRepository().getExportedURLs(serviceInterface, group, + version); + return jsonUtils.toJSON(urls); + } + + private DubboServiceMetadataRepository getRepository() { + return dubboServiceMetadataRepository.getIfAvailable(); + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/AbstractDubboGenericServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/AbstractDubboGenericServiceParameterResolver.java similarity index 50% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/AbstractDubboGenericServiceParameterResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/AbstractDubboGenericServiceParameterResolver.java index 8f4f1ad3..8b6b1d6b 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/AbstractDubboGenericServiceParameterResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/AbstractDubboGenericServiceParameterResolver.java @@ -14,70 +14,69 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; +package com.alibaba.cloud.dubbo.service.parameter; + +import static org.springframework.context.ConfigurableApplicationContext.CONVERSION_SERVICE_BEAN_NAME; +import static org.springframework.util.ClassUtils.resolveClassName; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.format.support.DefaultFormattingConversionService; -import org.springframework.format.support.FormattingConversionService; - -import static org.springframework.context.ConfigurableApplicationContext.CONVERSION_SERVICE_BEAN_NAME; -import static org.springframework.util.ClassUtils.resolveClassName; /** * Abstract {@link DubboGenericServiceParameterResolver} implementation * * @author Mercy */ -public abstract class AbstractDubboGenericServiceParameterResolver implements DubboGenericServiceParameterResolver, - BeanClassLoaderAware { +public abstract class AbstractDubboGenericServiceParameterResolver + implements DubboGenericServiceParameterResolver, BeanClassLoaderAware { - private int order; + private int order; - @Autowired(required = false) - @Qualifier(CONVERSION_SERVICE_BEAN_NAME) - private ConversionService conversionService = new DefaultFormattingConversionService(); + @Autowired(required = false) + @Qualifier(CONVERSION_SERVICE_BEAN_NAME) + private ConversionService conversionService = new DefaultFormattingConversionService(); - private ClassLoader classLoader; + private ClassLoader classLoader; - public ConversionService getConversionService() { - return conversionService; - } + public ConversionService getConversionService() { + return conversionService; + } - public void setConversionService(ConversionService conversionService) { - this.conversionService = conversionService; - } + public void setConversionService(ConversionService conversionService) { + this.conversionService = conversionService; + } - public ClassLoader getClassLoader() { - return classLoader; - } + public ClassLoader getClassLoader() { + return classLoader; + } - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } - public void setOrder(int order) { - this.order = order; - } + public void setOrder(int order) { + this.order = order; + } - @Override - public int getOrder() { - return order; - } + @Override + public int getOrder() { + return order; + } - protected Class resolveClass(String className) { - return resolveClassName(className, classLoader); - } + protected Class resolveClass(String className) { + return resolveClassName(className, classLoader); + } - protected Object resolveValue(Object parameterValue, String parameterType) { - Class targetType = resolveClass(parameterType); - return resolveValue(parameterValue, targetType); - } + protected Object resolveValue(Object parameterValue, String parameterType) { + Class targetType = resolveClass(parameterType); + return resolveValue(parameterValue, targetType); + } - protected Object resolveValue(Object parameterValue, Class parameterType) { - return conversionService.convert(parameterValue, parameterType); - } + protected Object resolveValue(Object parameterValue, Class parameterType) { + return conversionService.convert(parameterValue, parameterType); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/AbstractNamedValueServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/AbstractNamedValueServiceParameterResolver.java new file mode 100644 index 00000000..50fc7b76 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/AbstractNamedValueServiceParameterResolver.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service.parameter; + +import static org.springframework.util.ObjectUtils.isEmpty; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; + +import org.springframework.util.CollectionUtils; +import org.springframework.util.MultiValueMap; + +import com.alibaba.cloud.dubbo.http.HttpServerRequest; +import com.alibaba.cloud.dubbo.metadata.MethodParameterMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + +/** + * Abstract HTTP Names Value {@link DubboGenericServiceParameterResolver Dubbo + * GenericService Parameter Resolver} + * + * @author Mercy + */ +public abstract class AbstractNamedValueServiceParameterResolver + extends AbstractDubboGenericServiceParameterResolver { + + /** + * Get the {@link MultiValueMap} of names and values + * + * @param request + * @return + */ + protected abstract MultiValueMap getNameAndValuesMap( + HttpServerRequest request); + + @Override + public Object resolve(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata, HttpServerRequest request) { + + Collection names = getNames(restMethodMetadata, methodParameterMetadata); + + if (isEmpty(names)) { // index can't match + return null; + } + + MultiValueMap nameAndValues = getNameAndValuesMap(request); + + String targetName = null; + + for (String name : names) { + if (nameAndValues.containsKey(name)) { + targetName = name; + break; + } + } + + if (targetName == null) { // request parameter is abstract + return null; + } + + Class parameterType = resolveClass(methodParameterMetadata.getType()); + + Object paramValue = null; + + if (parameterType.isArray()) { // Array type + paramValue = nameAndValues.get(targetName); + } + else { + paramValue = nameAndValues.getFirst(targetName); + } + + return resolveValue(paramValue, parameterType); + } + + @Override + public Object resolve(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata, + RestMethodMetadata clientRestMethodMetadata, Object[] arguments) { + + Collection names = getNames(restMethodMetadata, methodParameterMetadata); + + if (isEmpty(names)) { // index can't match + return null; + } + + Integer index = null; + + Map> clientIndexToName = clientRestMethodMetadata + .getIndexToName(); + + for (Map.Entry> entry : clientIndexToName + .entrySet()) { + + Collection clientParamNames = entry.getValue(); + + if (CollectionUtils.containsAny(names, clientParamNames)) { + index = entry.getKey(); + break; + } + } + + return index > -1 ? arguments[index] : null; + } + + protected Collection getNames(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata) { + + Map> indexToName = restMethodMetadata + .getIndexToName(); + + int index = methodParameterMetadata.getIndex(); + + Collection paramNames = indexToName.get(index); + + return paramNames == null ? Collections.emptyList() : paramNames; + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/DubboGenericServiceParameterResolver.java similarity index 59% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/DubboGenericServiceParameterResolver.java index 93a28264..c04f687f 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/DubboGenericServiceParameterResolver.java @@ -14,14 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; +package com.alibaba.cloud.dubbo.service.parameter; import org.apache.dubbo.rpc.service.GenericService; -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodParameterMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; import org.springframework.core.Ordered; +import com.alibaba.cloud.dubbo.http.HttpServerRequest; +import com.alibaba.cloud.dubbo.metadata.MethodParameterMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + /** * Dubbo {@link GenericService} Parameter Resolver * @@ -29,14 +30,15 @@ import org.springframework.core.Ordered; */ public interface DubboGenericServiceParameterResolver extends Ordered { - /** - * Resolves a method parameter into an argument value from a given request. - * - * @return - */ - Object resolve(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata, - HttpServerRequest request); + /** + * Resolves a method parameter into an argument value from a given request. + * + * @return + */ + Object resolve(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata, HttpServerRequest request); - Object resolve(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata, - RestMethodMetadata clientRestMethodMetadata, Object[] arguments); + Object resolve(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata, + RestMethodMetadata clientRestMethodMetadata, Object[] arguments); } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/PathVariableServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/PathVariableServiceParameterResolver.java similarity index 62% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/PathVariableServiceParameterResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/PathVariableServiceParameterResolver.java index 81a40f3c..0bf093d3 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/PathVariableServiceParameterResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/PathVariableServiceParameterResolver.java @@ -14,27 +14,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; +package com.alibaba.cloud.dubbo.service.parameter; -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; import org.springframework.util.MultiValueMap; +import com.alibaba.cloud.dubbo.http.HttpServerRequest; + /** - * HTTP Request Path Variable {@link DubboGenericServiceParameterResolver Dubbo GenericService Parameter Resolver} + * HTTP Request Path Variable {@link DubboGenericServiceParameterResolver Dubbo + * GenericService Parameter Resolver} * * @author Mercy */ -public class PathVariableServiceParameterResolver extends AbstractNamedValueServiceParameterResolver { +public class PathVariableServiceParameterResolver + extends AbstractNamedValueServiceParameterResolver { - public static final int DEFAULT_ORDER = 3; + public static final int DEFAULT_ORDER = 3; - public PathVariableServiceParameterResolver() { - super(); - setOrder(DEFAULT_ORDER); - } + public PathVariableServiceParameterResolver() { + super(); + setOrder(DEFAULT_ORDER); + } - @Override - protected MultiValueMap getNameAndValuesMap(HttpServerRequest request) { - return request.getQueryParams(); - } + @Override + protected MultiValueMap getNameAndValuesMap( + HttpServerRequest request) { + return request.getQueryParams(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestBodyServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestBodyServiceParameterResolver.java new file mode 100644 index 00000000..7e3fa88e --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestBodyServiceParameterResolver.java @@ -0,0 +1,127 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service.parameter; + +import java.io.IOException; +import java.util.Collections; +import java.util.Objects; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.http.HttpMessageConverters; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.HttpMessageNotReadableException; + +import com.alibaba.cloud.dubbo.http.HttpServerRequest; +import com.alibaba.cloud.dubbo.http.converter.HttpMessageConverterHolder; +import com.alibaba.cloud.dubbo.http.util.HttpMessageConverterResolver; +import com.alibaba.cloud.dubbo.metadata.MethodParameterMetadata; +import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; + +/** + * HTTP Request Body {@link DubboGenericServiceParameterResolver} + * + * @author Mercy + */ +public class RequestBodyServiceParameterResolver + extends AbstractDubboGenericServiceParameterResolver { + + public static final int DEFAULT_ORDER = 7; + + @Autowired + private ObjectProvider httpMessageConverters; + + private HttpMessageConverterResolver httpMessageConverterResolver; + + public RequestBodyServiceParameterResolver() { + super(); + setOrder(DEFAULT_ORDER); + } + + @PostConstruct + public void init() { + HttpMessageConverters httpMessageConverters = this.httpMessageConverters + .getIfAvailable(); + + httpMessageConverterResolver = new HttpMessageConverterResolver( + httpMessageConverters == null ? Collections.emptyList() + : httpMessageConverters.getConverters(), + getClassLoader()); + } + + private boolean supportParameter(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata) { + + Integer index = methodParameterMetadata.getIndex(); + + Integer bodyIndex = restMethodMetadata.getBodyIndex(); + + if (!Objects.equals(index, bodyIndex)) { + return false; + } + + Class parameterType = resolveClass(methodParameterMetadata.getType()); + + Class bodyType = resolveClass(restMethodMetadata.getBodyType()); + + return Objects.equals(parameterType, bodyType); + } + + @Override + public Object resolve(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata, HttpServerRequest request) { + + if (!supportParameter(restMethodMetadata, methodParameterMetadata)) { + return null; + } + + Object result = null; + + Class parameterType = resolveClass(methodParameterMetadata.getType()); + + HttpMessageConverterHolder holder = httpMessageConverterResolver.resolve(request, + parameterType); + + if (holder != null) { + HttpMessageConverter converter = holder.getConverter(); + try { + result = converter.read(parameterType, request); + } + catch (IOException e) { + throw new HttpMessageNotReadableException( + "I/O error while reading input message", e); + } + } + + return result; + } + + @Override + public Object resolve(RestMethodMetadata restMethodMetadata, + MethodParameterMetadata methodParameterMetadata, + RestMethodMetadata clientRestMethodMetadata, Object[] arguments) { + + if (!supportParameter(restMethodMetadata, methodParameterMetadata)) { + return null; + } + + Integer clientBodyIndex = clientRestMethodMetadata.getBodyIndex(); + return arguments[clientBodyIndex]; + } +} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestHeaderServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestHeaderServiceParameterResolver.java similarity index 62% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestHeaderServiceParameterResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestHeaderServiceParameterResolver.java index fc0e1c01..4656ad01 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestHeaderServiceParameterResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestHeaderServiceParameterResolver.java @@ -14,27 +14,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; +package com.alibaba.cloud.dubbo.service.parameter; -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; import org.springframework.util.MultiValueMap; +import com.alibaba.cloud.dubbo.http.HttpServerRequest; + /** - * HTTP Request Header {@link DubboGenericServiceParameterResolver Dubbo GenericService Parameter Resolver} + * HTTP Request Header {@link DubboGenericServiceParameterResolver Dubbo GenericService + * Parameter Resolver} * * @author Mercy */ -public class RequestHeaderServiceParameterResolver extends AbstractNamedValueServiceParameterResolver { +public class RequestHeaderServiceParameterResolver + extends AbstractNamedValueServiceParameterResolver { - public static final int DEFAULT_ORDER = 9; + public static final int DEFAULT_ORDER = 9; - public RequestHeaderServiceParameterResolver() { - super(); - setOrder(DEFAULT_ORDER); - } + public RequestHeaderServiceParameterResolver() { + super(); + setOrder(DEFAULT_ORDER); + } - @Override - protected MultiValueMap getNameAndValuesMap(HttpServerRequest request) { - return request.getHeaders(); - } + @Override + protected MultiValueMap getNameAndValuesMap( + HttpServerRequest request) { + return request.getHeaders(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestParamServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestParamServiceParameterResolver.java similarity index 62% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestParamServiceParameterResolver.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestParamServiceParameterResolver.java index 4801d1ba..6ec3cdc1 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestParamServiceParameterResolver.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/parameter/RequestParamServiceParameterResolver.java @@ -14,27 +14,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; +package com.alibaba.cloud.dubbo.service.parameter; -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; import org.springframework.util.MultiValueMap; +import com.alibaba.cloud.dubbo.http.HttpServerRequest; + /** - * HTTP Request Parameter {@link DubboGenericServiceParameterResolver Dubbo GenericService Parameter Resolver} + * HTTP Request Parameter {@link DubboGenericServiceParameterResolver Dubbo GenericService + * Parameter Resolver} * * @author Mercy */ -public class RequestParamServiceParameterResolver extends AbstractNamedValueServiceParameterResolver { +public class RequestParamServiceParameterResolver + extends AbstractNamedValueServiceParameterResolver { - public static final int DEFAULT_ORDER = 1; + public static final int DEFAULT_ORDER = 1; - public RequestParamServiceParameterResolver() { - super(); - setOrder(DEFAULT_ORDER); - } + public RequestParamServiceParameterResolver() { + super(); + setOrder(DEFAULT_ORDER); + } - @Override - protected MultiValueMap getNameAndValuesMap(HttpServerRequest request) { - return request.getQueryParams(); - } + @Override + protected MultiValueMap getNameAndValuesMap( + HttpServerRequest request) { + return request.getQueryParams(); + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/JSONUtils.java similarity index 50% rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java rename to spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/JSONUtils.java index 2ed9a7b5..1aa8ce64 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/JSONUtils.java @@ -14,24 +14,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.util; +package com.alibaba.cloud.dubbo.util; -import org.apache.dubbo.common.URL; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; - -import javax.annotation.PostConstruct; import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.PostConstruct; + +import org.apache.dubbo.common.URL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + /** * JSON Utilities class * @@ -39,47 +40,49 @@ import java.util.stream.Collectors; */ public class JSONUtils { - private final Logger logger = LoggerFactory.getLogger(getClass()); + private final Logger logger = LoggerFactory.getLogger(getClass()); - private final ObjectMapper objectMapper = new ObjectMapper(); + private final ObjectMapper objectMapper = new ObjectMapper(); - @PostConstruct - public void init() { - this.objectMapper.enable(SerializationFeature.INDENT_OUTPUT); - } + @PostConstruct + public void init() { + this.objectMapper.enable(SerializationFeature.INDENT_OUTPUT); + } - public String toJSON(Collection urls) { - return toJSON(urls.stream().map(URL::toFullString).collect(Collectors.toSet())); - } + public String toJSON(Collection urls) { + return toJSON(urls.stream().map(URL::toFullString).collect(Collectors.toSet())); + } - public String toJSON(Object object) { - String jsonContent = null; - try { - jsonContent = objectMapper.writeValueAsString(object); - } catch (JsonProcessingException e) { - if (logger.isErrorEnabled()) { - logger.error(e.getMessage(), e); - } - } - return jsonContent; - } + public String toJSON(Object object) { + String jsonContent = null; + try { + jsonContent = objectMapper.writeValueAsString(object); + } + catch (JsonProcessingException e) { + if (logger.isErrorEnabled()) { + logger.error(e.getMessage(), e); + } + } + return jsonContent; + } - public List toURLs(String urlsJSON) { - List list = toList(urlsJSON); - return list.stream().map(URL::valueOf).collect(Collectors.toList()); - } + public List toURLs(String urlsJSON) { + List list = toList(urlsJSON); + return list.stream().map(URL::valueOf).collect(Collectors.toList()); + } - public List toList(String json) { - List list = Collections.emptyList(); - try { - if (StringUtils.hasText(json)) { - list = objectMapper.readValue(json, List.class); - } - } catch (IOException e) { - if (logger.isErrorEnabled()) { - logger.error(e.getMessage(), e); - } - } - return list; - } + public List toList(String json) { + List list = Collections.emptyList(); + try { + if (StringUtils.hasText(json)) { + list = objectMapper.readValue(json, List.class); + } + } + catch (IOException e) { + if (logger.isErrorEnabled()) { + logger.error(e.getMessage(), e); + } + } + return list; + } } diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/annotation/DubboTransported.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/annotation/DubboTransported.java deleted file mode 100644 index f5cfe644..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/annotation/DubboTransported.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.annotation; - -import org.apache.dubbo.common.Constants; -import org.apache.dubbo.config.annotation.Reference; -import org.apache.dubbo.rpc.ExporterListener; -import org.apache.dubbo.rpc.Filter; - -import org.springframework.cloud.client.loadbalancer.LoadBalanced; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.client.RestTemplate; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import static org.apache.dubbo.common.Constants.DEFAULT_RETRIES; - -/** - * {@link DubboTransported @DubboTransported} annotation indicates that the traditional Spring Cloud Service-to-Service call is transported - * by Dubbo under the hood, there are two main scenarios: - *

    - *
  1. {@link FeignClient @FeignClient} annotated classes: - *
      - * If {@link DubboTransported @DubboTransported} annotated classes, the invocation of all methods of - * {@link FeignClient @FeignClient} annotated classes. - *
    - *
      - * If {@link DubboTransported @DubboTransported} annotated methods of {@link FeignClient @FeignClient} annotated classes. - *
    - *
  2. - *
  3. {@link LoadBalanced @LoadBalanced} {@link RestTemplate} annotated field, method and parameters
  4. - *
- *

- * - * @see FeignClient - * @see LoadBalanced - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(value = {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) -@Documented -public @interface DubboTransported { - - /** - * The protocol of Dubbo transport whose value could be used the placeholder "dubbo.transport.protocol" - * - * @return the default protocol is "dubbo" - */ - String protocol() default "${dubbo.transport.protocol:dubbo}"; - - /** - * The cluster of Dubbo transport whose value could be used the placeholder "dubbo.transport.cluster" - * - * @return the default cluster is "failover" - */ - String cluster() default "${dubbo.transport.cluster:failover}"; - - /** - * Whether to reconnect if connection is lost, if not specify, reconnect is enabled by default, and the interval - * for retry connecting is 2000 ms - * - * @see Constants#DEFAULT_RECONNECT_PERIOD - * @see Reference#reconnect() - */ - String reconnect() default "${dubbo.transport.reconnect:2000}"; - - /** - * Maximum connections service provider can accept, default value is 0 - connection is shared - * - * @see Reference#connections() - */ - int connections() default 0; - - /** - * Service invocation retry times - * - * @see Constants#DEFAULT_RETRIES - * @see Reference#retries() - */ - int retries() default DEFAULT_RETRIES; - - /** - * Load balance strategy, legal values include: random, roundrobin, leastactive - * - * @see Constants#DEFAULT_LOADBALANCE - * @see Reference#loadbalance() - */ - String loadbalance() default "${dubbo.transport.loadbalance:}"; - - /** - * Maximum active requests allowed, default value is 0 - * - * @see Reference#actives() - */ - int actives() default 0; - - /** - * Timeout value for service invocation, default value is 0 - * - * @see Reference#timeout() - */ - int timeout() default 0; - - /** - * Specify cache implementation for service invocation, legal values include: lru, threadlocal, jcache - * - * @see Reference#cache() - */ - String cache() default "${dubbo.transport.cache:}"; - - /** - * Filters for service invocation - * - * @see Filter - * @see Reference#filter() - */ - String[] filter() default {}; - - /** - * Listeners for service exporting and unexporting - * - * @see ExporterListener - * @see Reference#listener() - */ - String[] listener() default {}; - - /** - * Customized parameter key-value pair, for example: {key1, value1, key2, value2} - * - * @see Reference#parameters() - */ - String[] parameters() default {}; -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java deleted file mode 100644 index 23de850a..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboLoadBalancedRestTemplateAutoConfiguration.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; - -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.SmartInitializingSingleton; -import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; -import org.springframework.cloud.alibaba.dubbo.client.loadbalancer.DubboMetadataInitializerInterceptor; -import org.springframework.cloud.alibaba.dubbo.client.loadbalancer.DubboTransporterInterceptor; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.metadata.resolver.DubboTransportedAttributesResolver; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.cloud.client.loadbalancer.LoadBalanced; -import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor; -import org.springframework.cloud.client.loadbalancer.RestTemplateCustomizer; -import org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.EventListener; -import org.springframework.core.env.Environment; -import org.springframework.core.type.MethodMetadata; -import org.springframework.http.client.ClientHttpRequestInterceptor; -import org.springframework.util.CollectionUtils; -import org.springframework.web.client.RestTemplate; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * Dubbo Auto-{@link Configuration} for {@link LoadBalanced @LoadBalanced} {@link RestTemplate} - * - * @author Mercy - */ -@Configuration -@ConditionalOnClass(name = {"org.springframework.web.client.RestTemplate"}) -@AutoConfigureAfter(name = {"org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration"}) -public class DubboLoadBalancedRestTemplateAutoConfiguration implements BeanClassLoaderAware, SmartInitializingSingleton { - - private static final Class DUBBO_TRANSPORTED_CLASS = DubboTransported.class; - - private static final String DUBBO_TRANSPORTED_CLASS_NAME = DUBBO_TRANSPORTED_CLASS.getName(); - - @Autowired - private DubboServiceMetadataRepository repository; - - @Autowired(required = false) - private LoadBalancerInterceptor loadBalancerInterceptor; - - @Autowired(required = false) - private RetryLoadBalancerInterceptor retryLoadBalancerInterceptor; - - @Autowired - private ConfigurableListableBeanFactory beanFactory; - - @Autowired - private DubboGenericServiceFactory serviceFactory; - - @Autowired - private DubboGenericServiceExecutionContextFactory contextFactory; - - @Autowired - private Environment environment; - - @LoadBalanced - @Autowired(required = false) - private Map restTemplates = Collections.emptyMap(); - - private ClassLoader classLoader; - - /** - * The {@link ClientHttpRequestInterceptor} bean that may be {@link LoadBalancerInterceptor} or {@link RetryLoadBalancerInterceptor} - */ - private ClientHttpRequestInterceptor loadBalancerInterceptorBean; - - @Override - public void afterSingletonsInstantiated() { - loadBalancerInterceptorBean = retryLoadBalancerInterceptor != null ? - retryLoadBalancerInterceptor : - loadBalancerInterceptor; - } - - /** - * Adapt the {@link RestTemplate} beans that are annotated {@link LoadBalanced @LoadBalanced} and - * {@link LoadBalanced @LoadBalanced} when Spring Boot application started - * (after the callback of {@link SmartInitializingSingleton} beans or - * {@link RestTemplateCustomizer#customize(RestTemplate) customization}) - */ - @EventListener(ApplicationStartedEvent.class) - public void adaptRestTemplates() { - - DubboTransportedAttributesResolver attributesResolver = new DubboTransportedAttributesResolver(environment); - - for (Map.Entry entry : restTemplates.entrySet()) { - String beanName = entry.getKey(); - Map dubboTranslatedAttributes = getDubboTranslatedAttributes(beanName, attributesResolver); - if (!CollectionUtils.isEmpty(dubboTranslatedAttributes)) { - adaptRestTemplate(entry.getValue(), dubboTranslatedAttributes); - } - } - } - - /** - * Gets the annotation attributes {@link RestTemplate} bean being annotated - * {@link DubboTransported @DubboTransported} - * - * @param beanName the bean name of {@link LoadBalanced @LoadBalanced} {@link RestTemplate} - * @param attributesResolver {@link DubboTransportedAttributesResolver} - * @return non-null {@link Map} - */ - private Map getDubboTranslatedAttributes(String beanName, - DubboTransportedAttributesResolver attributesResolver) { - Map attributes = Collections.emptyMap(); - BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName); - if (beanDefinition instanceof AnnotatedBeanDefinition) { - AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition) beanDefinition; - MethodMetadata factoryMethodMetadata = annotatedBeanDefinition.getFactoryMethodMetadata(); - attributes = factoryMethodMetadata != null ? - factoryMethodMetadata.getAnnotationAttributes(DUBBO_TRANSPORTED_CLASS_NAME) : Collections.emptyMap(); - } - return attributesResolver.resolve(attributes); - } - - - /** - * Adapt the instance of {@link DubboTransporterInterceptor} to the {@link LoadBalancerInterceptor} Bean. - * - * @param restTemplate {@link LoadBalanced @LoadBalanced} {@link RestTemplate} Bean - * @param dubboTranslatedAttributes the annotation dubboTranslatedAttributes {@link RestTemplate} bean being annotated - * {@link DubboTransported @DubboTransported} - */ - private void adaptRestTemplate(RestTemplate restTemplate, Map dubboTranslatedAttributes) { - - List interceptors = new ArrayList<>(restTemplate.getInterceptors()); - - int index = loadBalancerInterceptorBean == null ? -1 : interceptors.indexOf(loadBalancerInterceptorBean); - - index = index < 0 ? 0 : index; - - // Add ClientHttpRequestInterceptor instances before loadBalancerInterceptor - interceptors.add(index++, new DubboMetadataInitializerInterceptor(repository)); - - interceptors.add(index++, new DubboTransporterInterceptor(repository, restTemplate.getMessageConverters(), - classLoader, dubboTranslatedAttributes, serviceFactory, contextFactory)); - - restTemplate.setInterceptors(interceptors); - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboMetadataAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboMetadataAutoConfiguration.java deleted file mode 100644 index b41553d5..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboMetadataAutoConfiguration.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; - -import org.apache.dubbo.config.ProtocolConfig; -import org.apache.dubbo.config.spring.ServiceBean; -import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent; - -import feign.Contract; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.event.ApplicationFailedEvent; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboProtocolConfigSupplier; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.metadata.resolver.DubboServiceBeanMetadataResolver; -import org.springframework.cloud.alibaba.dubbo.metadata.resolver.MetadataResolver; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceExporter; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceProxy; -import org.springframework.cloud.alibaba.dubbo.service.IntrospectiveDubboMetadataService; -import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.event.ContextClosedEvent; -import org.springframework.context.event.EventListener; - -import java.util.Collection; -import java.util.function.Supplier; - -/** - * Spring Boot Auto-Configuration class for Dubbo Metadata - * - * @author Mercy - */ -@Configuration -@Import({DubboServiceMetadataRepository.class, - IntrospectiveDubboMetadataService.class, - DubboMetadataServiceExporter.class, - JSONUtils.class}) -public class DubboMetadataAutoConfiguration { - - @Autowired - private ObjectProvider dubboServiceMetadataRepository; - - @Autowired - private MetadataResolver metadataResolver; - - @Autowired - private DubboMetadataServiceExporter dubboMetadataConfigServiceExporter; - - @Bean - @ConditionalOnMissingBean - public MetadataResolver metadataJsonResolver(ObjectProvider contract) { - return new DubboServiceBeanMetadataResolver(contract); - } - - @Bean - public Supplier dubboProtocolConfigSupplier(ObjectProvider> protocols) { - return new DubboProtocolConfigSupplier(protocols); - } - - @Bean - @ConditionalOnMissingBean - public DubboMetadataServiceProxy dubboMetadataConfigServiceProxy(DubboGenericServiceFactory factory) { - return new DubboMetadataServiceProxy(factory); - } - - // Event-Handling - - @EventListener(ServiceBeanExportedEvent.class) - public void onServiceBeanExported(ServiceBeanExportedEvent event) { - ServiceBean serviceBean = event.getServiceBean(); - publishServiceRestMetadata(serviceBean); - } - - @EventListener(ApplicationFailedEvent.class) - public void onApplicationFailed() { - unExportDubboMetadataConfigService(); - } - - @EventListener(ContextClosedEvent.class) - public void onContextClosed() { - unExportDubboMetadataConfigService(); - } - - private void publishServiceRestMetadata(ServiceBean serviceBean) { - dubboServiceMetadataRepository.getIfAvailable().publishServiceRestMetadata(metadataResolver.resolveServiceRestMetadata(serviceBean)); - } - - private void unExportDubboMetadataConfigService() { - dubboMetadataConfigServiceExporter.unexport(); - } -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java deleted file mode 100644 index 2931e3b4..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; - -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.openfeign.TargeterBeanPostProcessor; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; - -import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration.TARGETER_CLASS_NAME; - - -/** - * Dubbo Feign Auto-{@link Configuration Configuration} - * - * @author Mercy - */ -@ConditionalOnClass(name = {"feign.Feign", TARGETER_CLASS_NAME}) -@AutoConfigureAfter(name = {"org.springframework.cloud.openfeign.FeignAutoConfiguration"}) -@Configuration -public class DubboOpenFeignAutoConfiguration { - - public static final String TARGETER_CLASS_NAME = "org.springframework.cloud.openfeign.Targeter"; - - @Bean - public TargeterBeanPostProcessor targeterBeanPostProcessor(Environment environment, - DubboServiceMetadataRepository dubboServiceMetadataRepository, - DubboGenericServiceFactory dubboGenericServiceFactory, - DubboGenericServiceExecutionContextFactory contextFactory) { - return new TargeterBeanPostProcessor(environment, dubboServiceMetadataRepository, - dubboGenericServiceFactory, contextFactory); - } - -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java deleted file mode 100644 index 52d964e5..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.dubbo.env.DubboCloudProperties; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.cloud.alibaba.dubbo.service.parameter.PathVariableServiceParameterResolver; -import org.springframework.cloud.alibaba.dubbo.service.parameter.RequestBodyServiceParameterResolver; -import org.springframework.cloud.alibaba.dubbo.service.parameter.RequestHeaderServiceParameterResolver; -import org.springframework.cloud.alibaba.dubbo.service.parameter.RequestParamServiceParameterResolver; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Primary; -import org.springframework.core.env.Environment; -import org.springframework.core.env.PropertyResolver; - -/** - * Spring Boot Auto-Configuration class for Dubbo Service - * - * @author Mercy - */ -@Configuration -@EnableConfigurationProperties(DubboCloudProperties.class) -public class DubboServiceAutoConfiguration { - - @Bean - @ConditionalOnMissingBean - public DubboGenericServiceFactory dubboGenericServiceFactory() { - return new DubboGenericServiceFactory(); - } - - @Configuration - @Import(value = { - DubboGenericServiceExecutionContextFactory.class, - RequestParamServiceParameterResolver.class, - RequestBodyServiceParameterResolver.class, - RequestHeaderServiceParameterResolver.class, - PathVariableServiceParameterResolver.class - }) - static class ParameterResolversConfiguration { - } - - /** - * Build a primary {@link PropertyResolver} bean to {@link Autowired @Autowired} - * - * @param environment {@link Environment} - * @return alias bean for {@link Environment} - */ - @Bean - @Primary - public PropertyResolver primaryPropertyResolver(Environment environment) { - return environment; - } -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java deleted file mode 100644 index 8c547b57..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; - -import org.apache.dubbo.config.spring.ServiceBean; - -import com.ecwid.consul.v1.agent.model.NewService; -import com.netflix.appinfo.InstanceInfo; -import org.aspectj.lang.annotation.Aspect; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.aop.support.AopUtils; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.SmartInitializingSingleton; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureOrder; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.registry.DubboServiceRegistrationEventPublishingAspect; -import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstancePreRegisteredEvent; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.serviceregistry.Registration; -import org.springframework.cloud.consul.serviceregistry.ConsulRegistration; -import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration; -import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; -import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry; -import org.springframework.context.SmartLifecycle; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.event.EventListener; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_CONFIGURATION_CLASS_NAME; -import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.EUREKA_AUTO_CONFIGURATION_CLASS_NAME; -import static org.springframework.util.ObjectUtils.isEmpty; - -/** - * Dubbo Service Registration Auto-{@link Configuration} - * - * @author Mercy - */ -@Configuration -@Import({DubboServiceRegistrationEventPublishingAspect.class}) -@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) -@AutoConfigureAfter(name = { - EUREKA_AUTO_CONFIGURATION_CLASS_NAME, - CONSUL_AUTO_CONFIGURATION_CLASS_NAME, - "org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration" -}, value = { - DubboMetadataAutoConfiguration.class -}) -public class DubboServiceRegistrationAutoConfiguration { - - public static final String EUREKA_AUTO_CONFIGURATION_CLASS_NAME = - "org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration"; - - public static final String CONSUL_AUTO_CONFIGURATION_CLASS_NAME = - "org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationAutoConfiguration"; - - public static final String CONSUL_AUTO_REGISTRATION_CLASS_NAME = - "org.springframework.cloud.consul.serviceregistry.ConsulAutoRegistration"; - - public static final String ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME = - "org.springframework.cloud.zookeeper.serviceregistry.ZookeeperAutoServiceRegistrationAutoConfiguration"; - - private static final Logger logger = LoggerFactory.getLogger(DubboServiceRegistrationAutoConfiguration.class); - - @Autowired - private DubboServiceMetadataRepository dubboServiceMetadataRepository; - - @EventListener(ServiceInstancePreRegisteredEvent.class) - public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) { - Registration registration = event.getSource(); - attachDubboMetadataServiceMetadata(registration); - } - - @Configuration - @ConditionalOnBean(name = EUREKA_AUTO_CONFIGURATION_CLASS_NAME) - @Aspect - class EurekaConfiguration implements SmartInitializingSingleton { - - @Autowired - private ObjectProvider> serviceBeans; - - @EventListener(ServiceInstancePreRegisteredEvent.class) - public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) { - Registration registration = event.getSource(); - EurekaRegistration eurekaRegistration = EurekaRegistration.class.cast(registration); - InstanceInfo instanceInfo = eurekaRegistration.getApplicationInfoManager().getInfo(); - attachDubboMetadataServiceMetadata(instanceInfo.getMetadata()); - } - - /** - * {@link EurekaServiceRegistry} will register current {@link ServiceInstance service instance} on - * {@link EurekaAutoServiceRegistration#start()} execution(in {@link SmartLifecycle#start() start phase}), - * thus this method must {@link ServiceBean#export() export} all {@link ServiceBean ServiceBeans} in advance. - */ - @Override - public void afterSingletonsInstantiated() { - Collection serviceBeans = this.serviceBeans.getIfAvailable(); - if (!isEmpty(serviceBeans)) { - serviceBeans.forEach(ServiceBean::export); - } - } - } - - @Configuration - @ConditionalOnBean(name = CONSUL_AUTO_CONFIGURATION_CLASS_NAME) - @AutoConfigureOrder - class ConsulConfiguration { - - /** - * Handle the pre-registered event of {@link ServiceInstance} for Consul - * - * @param event {@link ServiceInstancePreRegisteredEvent} - */ - @EventListener(ServiceInstancePreRegisteredEvent.class) - public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) { - Registration registration = event.getSource(); - Class registrationClass = AopUtils.getTargetClass(registration); - String registrationClassName = registrationClass.getName(); - if (CONSUL_AUTO_REGISTRATION_CLASS_NAME.equalsIgnoreCase(registrationClassName)) { - ConsulRegistration consulRegistration = (ConsulRegistration) registration; - attachURLsIntoMetadata(consulRegistration); - } - } - - private void attachURLsIntoMetadata(ConsulRegistration consulRegistration) { - NewService newService = consulRegistration.getService(); - Map serviceMetadata = dubboServiceMetadataRepository.getDubboMetadataServiceMetadata(); - if (!isEmpty(serviceMetadata)) { - List tags = newService.getTags(); - for (Map.Entry entry : serviceMetadata.entrySet()) { - tags.add(entry.getKey() + "=" + entry.getValue()); - } - } - } - } - - private void attachDubboMetadataServiceMetadata(Registration registration) { - if (registration == null) { - return; - } - synchronized (registration) { - Map metadata = registration.getMetadata(); - attachDubboMetadataServiceMetadata(metadata); - } - } - - private void attachDubboMetadataServiceMetadata(Map metadata) { - Map serviceMetadata = dubboServiceMetadataRepository.getDubboMetadataServiceMetadata(); - if (!isEmpty(serviceMetadata)) { - metadata.putAll(serviceMetadata); - } - } -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java deleted file mode 100644 index 0f1f46d7..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.config.spring.ServiceBean; - -import com.ecwid.consul.v1.agent.model.NewService; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.springframework.beans.factory.SmartInitializingSingleton; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstancePreRegisteredEvent; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.serviceregistry.Registration; -import org.springframework.cloud.client.serviceregistry.ServiceRegistry; -import org.springframework.cloud.consul.serviceregistry.ConsulAutoRegistration; -import org.springframework.cloud.consul.serviceregistry.ConsulRegistration; -import org.springframework.cloud.zookeeper.serviceregistry.ServiceInstanceRegistration; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.EventListener; - -import java.util.List; - -import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_CONFIGURATION_CLASS_NAME; -import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME; - -/** - * Dubbo Service Registration Auto-{@link Configuration} for Non-Web application - * - * @author Mercy - */ -@Configuration -@ConditionalOnNotWebApplication -@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) -@AutoConfigureAfter(DubboServiceRegistrationAutoConfiguration.class) -@Aspect -public class DubboServiceRegistrationNonWebApplicationAutoConfiguration { - - private static final String REST_PROTOCOL = "rest"; - - @Autowired - private ServiceRegistry serviceRegistry; - - @Autowired - private Registration registration; - - private volatile Integer serverPort = null; - - private volatile boolean registered = false; - - @Autowired - private DubboServiceMetadataRepository repository; - - @Around("execution(* org.springframework.cloud.client.serviceregistry.Registration.getPort())") - public Object getPort(ProceedingJoinPoint pjp) throws Throwable { - return serverPort != null ? serverPort : pjp.proceed(); - } - - @EventListener(ApplicationStartedEvent.class) - public void onApplicationStarted() { - setServerPort(); - register(); - } - - private void register() { - if (registered) { - return; - } - serviceRegistry.register(registration); - registered = true; - } - - /** - * Set web port from {@link ServiceBean#getExportedUrls() exported URLs} if "rest" protocol is present. - */ - private void setServerPort() { - if (serverPort == null) { - for (List urls : repository.getAllExportedUrls().values()) { - urls.stream() - .filter(url -> REST_PROTOCOL.equalsIgnoreCase(url.getProtocol())) - .findFirst() - .ifPresent(url -> { - serverPort = url.getPort(); - }); - - // If REST protocol is not present, use any applied port. - if (serverPort == null) { - urls.stream() - .findAny().ifPresent(url -> { - serverPort = url.getPort(); - }); - } - } - } - } - - @Configuration - @ConditionalOnBean(name = ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME) - class ZookeeperConfiguration implements SmartInitializingSingleton { - - @Autowired - private ServiceInstanceRegistration registration; - - @EventListener(ServiceInstancePreRegisteredEvent.class) - public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) { - registration.setPort(serverPort); - } - - @Override - public void afterSingletonsInstantiated() { - // invoke getServiceInstance() method to trigger the ServiceInstance building before register - registration.getServiceInstance(); - } - } - - @Configuration - @ConditionalOnBean(name = CONSUL_AUTO_CONFIGURATION_CLASS_NAME) - class ConsulConfiguration { - - /** - * Handle the pre-registered event of {@link ServiceInstance} for Consul - * - * @param event {@link ServiceInstancePreRegisteredEvent} - */ - @EventListener(ServiceInstancePreRegisteredEvent.class) - public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) { - Registration registration = event.getSource(); - ConsulAutoRegistration consulRegistration = (ConsulAutoRegistration) registration; - setPort(consulRegistration); - } - - /** - * Set port on Non-Web Application - * - * @param consulRegistration {@link ConsulRegistration} - */ - private void setPort(ConsulAutoRegistration consulRegistration) { - int port = consulRegistration.getPort(); - NewService newService = consulRegistration.getService(); - if (newService.getPort() == null) { - newService.setPort(port); - } - } - } - -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboClientHttpResponseFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboClientHttpResponseFactory.java deleted file mode 100644 index 3e92dd7e..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboClientHttpResponseFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.client.loadbalancer; - -import org.apache.dubbo.rpc.service.GenericException; -import org.springframework.cloud.alibaba.dubbo.http.converter.HttpMessageConverterHolder; -import org.springframework.cloud.alibaba.dubbo.http.util.HttpMessageConverterResolver; -import org.springframework.cloud.alibaba.dubbo.metadata.RequestMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.http.MediaType; -import org.springframework.http.client.ClientHttpResponse; -import org.springframework.http.converter.HttpMessageConverter; - -import java.io.IOException; -import java.util.List; - -/** - * Dubbo {@link ClientHttpResponse} Factory - * - * @author Mercy - */ -class DubboClientHttpResponseFactory { - - private final HttpMessageConverterResolver httpMessageConverterResolver; - - public DubboClientHttpResponseFactory(List> messageConverters, ClassLoader classLoader) { - this.httpMessageConverterResolver = new HttpMessageConverterResolver(messageConverters, classLoader); - } - - public ClientHttpResponse build(Object result, GenericException exception, - RequestMetadata requestMetadata, RestMethodMetadata restMethodMetadata) { - - DubboHttpOutputMessage httpOutputMessage = new DubboHttpOutputMessage(); - - HttpMessageConverterHolder httpMessageConverterHolder = httpMessageConverterResolver.resolve(requestMetadata, restMethodMetadata); - - if (httpMessageConverterHolder != null) { - MediaType mediaType = httpMessageConverterHolder.getMediaType(); - HttpMessageConverter converter = httpMessageConverterHolder.getConverter(); - try { - converter.write(result, mediaType, httpOutputMessage); - } catch (IOException e) { - e.printStackTrace(); - } - } - - return new DubboClientHttpResponse(httpOutputMessage, exception); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboTransporterInterceptor.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboTransporterInterceptor.java deleted file mode 100644 index 4860a3c3..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/client/loadbalancer/DubboTransporterInterceptor.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.client.loadbalancer; - -import org.apache.dubbo.rpc.service.GenericException; -import org.apache.dubbo.rpc.service.GenericService; - -import org.springframework.cloud.alibaba.dubbo.http.MutableHttpServerRequest; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboRestServiceMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RequestMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContext; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor; -import org.springframework.http.HttpRequest; -import org.springframework.http.client.ClientHttpRequestExecution; -import org.springframework.http.client.ClientHttpRequestInterceptor; -import org.springframework.http.client.ClientHttpResponse; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.util.AntPathMatcher; -import org.springframework.util.CollectionUtils; -import org.springframework.util.PathMatcher; -import org.springframework.web.util.UriComponents; - -import java.io.IOException; -import java.net.URI; -import java.util.List; -import java.util.Map; - -import static org.springframework.web.util.UriComponentsBuilder.fromUri; - -/** - * Dubbo Transporter {@link ClientHttpRequestInterceptor} implementation - * - * @author Mercy - * @see LoadBalancerInterceptor - */ -public class DubboTransporterInterceptor implements ClientHttpRequestInterceptor { - - private final DubboServiceMetadataRepository repository; - - private final DubboClientHttpResponseFactory clientHttpResponseFactory; - - private final Map dubboTranslatedAttributes; - - private final DubboGenericServiceFactory serviceFactory; - - private final DubboGenericServiceExecutionContextFactory contextFactory; - - private final PathMatcher pathMatcher = new AntPathMatcher(); - - public DubboTransporterInterceptor(DubboServiceMetadataRepository dubboServiceMetadataRepository, - List> messageConverters, - ClassLoader classLoader, - Map dubboTranslatedAttributes, - DubboGenericServiceFactory serviceFactory, - DubboGenericServiceExecutionContextFactory contextFactory) { - this.repository = dubboServiceMetadataRepository; - this.dubboTranslatedAttributes = dubboTranslatedAttributes; - this.clientHttpResponseFactory = new DubboClientHttpResponseFactory(messageConverters, classLoader); - this.serviceFactory = serviceFactory; - this.contextFactory = contextFactory; - } - - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { - - URI originalUri = request.getURI(); - - String serviceName = originalUri.getHost(); - - RequestMetadata clientMetadata = buildRequestMetadata(request); - - DubboRestServiceMetadata metadata = repository.get(serviceName, clientMetadata); - - if (metadata == null) { - // if DubboServiceMetadata is not found, executes next - return execution.execute(request, body); - } - - RestMethodMetadata dubboRestMethodMetadata = metadata.getRestMethodMetadata(); - - GenericService genericService = serviceFactory.create(metadata, dubboTranslatedAttributes); - - MutableHttpServerRequest httpServerRequest = new MutableHttpServerRequest(request, body); - - customizeRequest(httpServerRequest, dubboRestMethodMetadata, clientMetadata); - - DubboGenericServiceExecutionContext context = contextFactory.create(dubboRestMethodMetadata, httpServerRequest); - - Object result = null; - GenericException exception = null; - - try { - result = genericService.$invoke(context.getMethodName(), context.getParameterTypes(), context.getParameters()); - } catch (GenericException e) { - exception = e; - } - - return clientHttpResponseFactory.build(result, exception, clientMetadata, dubboRestMethodMetadata); - } - - protected void customizeRequest(MutableHttpServerRequest httpServerRequest, - RestMethodMetadata dubboRestMethodMetadata, RequestMetadata clientMetadata) { - - RequestMetadata dubboRequestMetadata = dubboRestMethodMetadata.getRequest(); - String pathPattern = dubboRequestMetadata.getPath(); - - Map pathVariables = pathMatcher.extractUriTemplateVariables(pathPattern, httpServerRequest.getPath()); - - if (!CollectionUtils.isEmpty(pathVariables)) { - // Put path variables Map into query parameters Map - httpServerRequest.params(pathVariables); - } - - } - - private RequestMetadata buildRequestMetadata(HttpRequest request) { - UriComponents uriComponents = fromUri(request.getURI()).build(true); - RequestMetadata requestMetadata = new RequestMetadata(); - requestMetadata.setPath(uriComponents.getPath()); - requestMetadata.setMethod(request.getMethod().name()); - requestMetadata.setParams(uriComponents.getQueryParams()); - requestMetadata.setHeaders(request.getHeaders()); - return requestMetadata; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java deleted file mode 100644 index 5d63860e..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.env; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.WebApplicationType; -import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.core.Ordered; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.core.env.PropertySource; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -import static org.apache.dubbo.common.Constants.DEFAULT_PROTOCOL; -import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties; - -/** - * Dubbo {@link WebApplicationType#NONE Non-Web Application} {@link EnvironmentPostProcessor} - * - * @author Mercy - */ -public class DubboNonWebApplicationEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered { - - private static final String DOT = "."; - - /** - * The name of default {@link PropertySource} defined in SpringApplication#configurePropertySources method. - */ - private static final String PROPERTY_SOURCE_NAME = "defaultProperties"; - - private static final String SERVER_PORT_PROPERTY_NAME = "server.port"; - - private static final String PORT_PROPERTY_NAME = "port"; - - private static final String PROTOCOL_PROPERTY_NAME_PREFIX = "dubbo.protocol"; - - private static final String PROTOCOL_NAME_PROPERTY_NAME_SUFFIX = DOT + "name"; - - private static final String PROTOCOL_PORT_PROPERTY_NAME_SUFFIX = DOT + PORT_PROPERTY_NAME; - - private static final String PROTOCOL_PORT_PROPERTY_NAME = PROTOCOL_PROPERTY_NAME_PREFIX + PROTOCOL_PORT_PROPERTY_NAME_SUFFIX; - - private static final String PROTOCOL_NAME_PROPERTY_NAME = PROTOCOL_PROPERTY_NAME_PREFIX + PROTOCOL_NAME_PROPERTY_NAME_SUFFIX; - - private static final String PROTOCOLS_PROPERTY_NAME_PREFIX = "dubbo.protocols"; - - private static final String REST_PROTOCOL = "rest"; - - private final Logger logger = LoggerFactory.getLogger(DubboNonWebApplicationEnvironmentPostProcessor.class); - - @Override - public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { - WebApplicationType webApplicationType = application.getWebApplicationType(); - - if (!WebApplicationType.NONE.equals(webApplicationType)) { // Just works in Non-Web Application - if (logger.isDebugEnabled()) { - logger.debug("Current application is a Web Application, the process will be ignored."); - } - return; - } - - MutablePropertySources propertySources = environment.getPropertySources(); - Map defaultProperties = createDefaultProperties(environment); - if (!CollectionUtils.isEmpty(defaultProperties)) { - addOrReplace(propertySources, defaultProperties); - } - } - - private Map createDefaultProperties(ConfigurableEnvironment environment) { - Map defaultProperties = new HashMap(); - resetServerPort(environment, defaultProperties); - return defaultProperties; - } - - /** - * Reset server port property if it's absent, whose value is configured by "dubbbo.protocol.port" - * or "dubbo.protcols.rest.port" - * - * @param environment - * @param defaultProperties - */ - private void resetServerPort(ConfigurableEnvironment environment, Map defaultProperties) { - - String serverPort = environment.getProperty(SERVER_PORT_PROPERTY_NAME, environment.getProperty(PORT_PROPERTY_NAME)); - - if (serverPort != null) { - return; - } - - serverPort = getRestPortFromProtocolProperty(environment); - - if (serverPort == null) { - serverPort = getRestPortFromProtocolsProperties(environment); - } - - setServerPort(environment, serverPort, defaultProperties); - } - - private String getRestPortFromProtocolProperty(ConfigurableEnvironment environment) { - - String protocol = environment.getProperty(PROTOCOL_NAME_PROPERTY_NAME, DEFAULT_PROTOCOL); - - return isRestProtocol(protocol) ? - environment.getProperty(PROTOCOL_PORT_PROPERTY_NAME) : - null; - } - - private String getRestPortFromProtocolsProperties(ConfigurableEnvironment environment) { - - String restPort = null; - - Map subProperties = getSubProperties(environment, PROTOCOLS_PROPERTY_NAME_PREFIX); - - Properties properties = new Properties(); - - properties.putAll(subProperties); - - for (String propertyName : properties.stringPropertyNames()) { - if (propertyName.endsWith(PROTOCOL_NAME_PROPERTY_NAME_SUFFIX)) { // protocol name property - String protocol = properties.getProperty(propertyName); - if (isRestProtocol(protocol)) { - String beanName = resolveBeanName(propertyName); - if (StringUtils.hasText(beanName)) { - restPort = properties.getProperty(beanName + PROTOCOL_PORT_PROPERTY_NAME_SUFFIX); - break; - } - } - } - } - - return restPort; - } - - private String resolveBeanName(String propertyName) { - int index = propertyName.indexOf(DOT); - return index > -1 ? propertyName.substring(0, index) : null; - } - - private void setServerPort(ConfigurableEnvironment environment, String serverPort, - Map defaultProperties) { - if (serverPort == null) { - return; - } - - defaultProperties.put(SERVER_PORT_PROPERTY_NAME, serverPort); - - } - - /** - * Copy from BusEnvironmentPostProcessor#addOrReplace(MutablePropertySources, Map) - * - * @param propertySources {@link MutablePropertySources} - * @param map Default Dubbo Properties - */ - private void addOrReplace(MutablePropertySources propertySources, - Map map) { - MapPropertySource target = null; - if (propertySources.contains(PROPERTY_SOURCE_NAME)) { - PropertySource source = propertySources.get(PROPERTY_SOURCE_NAME); - if (source instanceof MapPropertySource) { - target = (MapPropertySource) source; - for (String key : map.keySet()) { - if (!target.containsProperty(key)) { - target.getSource().put(key, map.get(key)); - } - } - } - } - if (target == null) { - target = new MapPropertySource(PROPERTY_SOURCE_NAME, map); - } - if (!propertySources.contains(PROPERTY_SOURCE_NAME)) { - propertySources.addLast(target); - } - } - - @Override - public int getOrder() { // Keep LOWEST_PRECEDENCE - return LOWEST_PRECEDENCE; - } - - private static boolean isRestProtocol(String protocol) { - return REST_PROTOCOL.equalsIgnoreCase(protocol); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/DefaultHttpRequest.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/DefaultHttpRequest.java deleted file mode 100644 index 3f1f376d..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/DefaultHttpRequest.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpRequest; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.util.UriComponentsBuilder; - -import java.net.URI; -import java.util.List; -import java.util.Map; - -import static org.springframework.web.util.UriComponentsBuilder.fromPath; - -/** - * Default {@link HttpRequest} implementation - * - * @author Mercy - */ -public class DefaultHttpRequest implements HttpRequest { - - private final String method; - - private final URI uri; - - private final HttpHeaders headers = new HttpHeaders(); - - public DefaultHttpRequest(String method, String path, Map> params, - Map> headers) { - this.method = method == null ? HttpMethod.GET.name() : method.toUpperCase(); - this.uri = buildURI(path, params); - this.headers.putAll(headers); - } - - private URI buildURI(String path, Map> params) { - UriComponentsBuilder builder = fromPath(path) - .queryParams(new LinkedMultiValueMap<>(params)); - return builder.build().toUri(); - } - - @Override - public HttpMethod getMethod() { - return HttpMethod.resolve(getMethodValue()); - } - - public String getMethodValue() { - return method; - } - - @Override - public URI getURI() { - return uri; - } - - @Override - public HttpHeaders getHeaders() { - return headers; - } - - public static Builder builder() { - return new Builder(); - } - - /** - * {@link HttpRequest} Builder - */ - public static class Builder { - - String method; - - String path; - - MultiValueMap params = new LinkedMultiValueMap<>(); - - MultiValueMap headers = new LinkedMultiValueMap<>(); - - public Builder method(String method) { - this.method = method; - return this; - } - - public Builder path(String path) { - this.path = path; - return this; - } - - public Builder param(String name, String value) { - this.params.add(name, value); - return this; - } - - public Builder header(String name, String value) { - this.headers.add(name, value); - return this; - } - - public Builder params(Map> params) { - this.params.putAll(params); - return this; - } - - public Builder headers(Map> headers) { - this.headers.putAll(headers); - return this; - } - - public HttpRequest build() { - return new DefaultHttpRequest(method, path, params, headers); - } - } - - -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/MutableHttpServerRequest.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/MutableHttpServerRequest.java deleted file mode 100644 index 62240f3b..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/MutableHttpServerRequest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpInputMessage; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpRequest; -import org.springframework.util.MultiValueMap; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.util.Map; - -import static org.springframework.cloud.alibaba.dubbo.http.util.HttpUtils.getParameters; - -/** - * Mutable {@link HttpServerRequest} implementation - * - * @author Mercy - */ -public class MutableHttpServerRequest implements HttpServerRequest { - - private final HttpMethod httpMethod; - - private final URI uri; - - private final String path; - - private final MultiValueMap queryParams; - - private final HttpHeaders httpHeaders; - - private final HttpInputMessage httpInputMessage; - - public MutableHttpServerRequest(HttpRequest httpRequest, byte[] body) { - this.httpMethod = httpRequest.getMethod(); - this.uri = httpRequest.getURI(); - this.path = uri.getPath(); - this.httpHeaders = httpRequest.getHeaders(); - this.queryParams = getParameters(httpRequest); - this.httpInputMessage = new ByteArrayHttpInputMessage(body); - } - - public MutableHttpServerRequest params(Map params) { - queryParams.setAll(params); - return this; - } - - @Override - public InputStream getBody() throws IOException { - return httpInputMessage.getBody(); - } - - @Override - public HttpMethod getMethod() { - return httpMethod; - } - - // Override method since Spring Framework 5.0 - public String getMethodValue() { - return httpMethod.name(); - } - - @Override - public URI getURI() { - return uri; - } - - @Override - public HttpHeaders getHeaders() { - return httpHeaders; - } - - @Override - public String getPath() { - return path; - } - - @Override - public MultiValueMap getQueryParams() { - return queryParams; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractHttpRequestMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractHttpRequestMatcher.java deleted file mode 100644 index 3e16664c..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractHttpRequestMatcher.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import java.util.Collection; -import java.util.Iterator; - -/** - * Abstract {@link HttpRequestMatcher} implementation - * - * @author Rossen Stoyanchev - * @author Mercy - */ -public abstract class AbstractHttpRequestMatcher implements HttpRequestMatcher { - - /** - * Return the discrete items a request condition is composed of. - *

For example URL patterns, HTTP request methods, param expressions, etc. - * - * @return a collection of objects, never {@code null} - */ - protected abstract Collection getContent(); - - /** - * The notation to use when printing discrete items of content. - *

For example {@code " || "} for URL patterns or {@code " && "} - * for param expressions. - */ - protected abstract String getToStringInfix(); - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - return getContent().equals(((AbstractHttpRequestMatcher) other).getContent()); - } - - @Override - public int hashCode() { - return getContent().hashCode(); - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder("["); - for (Iterator iterator = getContent().iterator(); iterator.hasNext(); ) { - Object expression = iterator.next(); - builder.append(expression.toString()); - if (iterator.hasNext()) { - builder.append(getToStringInfix()); - } - } - builder.append("]"); - return builder.toString(); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractMediaTypeExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractMediaTypeExpression.java deleted file mode 100644 index de5d9f84..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractMediaTypeExpression.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.MediaType; - -/** - * The some source code is scratched from org.springframework.web.servlet.mvc.condition.AbstractMediaTypeExpression - * - * @author Arjen Poutsma - * @author Rossen Stoyanchev - * @author Mercy - */ -public class AbstractMediaTypeExpression implements MediaTypeExpression, Comparable { - - private final MediaType mediaType; - - private final boolean negated; - - AbstractMediaTypeExpression(String expression) { - if (expression.startsWith("!")) { - this.negated = true; - expression = expression.substring(1); - } else { - this.negated = false; - } - this.mediaType = MediaType.parseMediaType(expression); - } - - AbstractMediaTypeExpression(MediaType mediaType, boolean negated) { - this.mediaType = mediaType; - this.negated = negated; - } - - @Override - public MediaType getMediaType() { - return this.mediaType; - } - - @Override - public boolean isNegated() { - return this.negated; - } - - - @Override - public int compareTo(AbstractMediaTypeExpression other) { - return MediaType.SPECIFICITY_COMPARATOR.compare(this.getMediaType(), other.getMediaType()); - } - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - AbstractMediaTypeExpression otherExpr = (AbstractMediaTypeExpression) other; - return (this.mediaType.equals(otherExpr.mediaType) && this.negated == otherExpr.negated); - } - - @Override - public int hashCode() { - return this.mediaType.hashCode(); - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (this.negated) { - builder.append('!'); - } - builder.append(this.mediaType.toString()); - return builder.toString(); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractNameValueExpression.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractNameValueExpression.java deleted file mode 100644 index 695e6792..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractNameValueExpression.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpRequest; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; - -import static org.springframework.util.StringUtils.trimWhitespace; - -/** - * The some source code is scratched from org.springframework.web.servlet.mvc.condition.AbstractNameValueExpression - * - * @author Rossen Stoyanchev - * @author Arjen Poutsma - * @author Mercy - */ -abstract class AbstractNameValueExpression implements NameValueExpression { - - protected final String name; - - protected final T value; - - protected final boolean negated; - - AbstractNameValueExpression(String expression) { - int separator = expression.indexOf('='); - if (separator == -1) { - this.negated = expression.startsWith("!"); - this.name = trimWhitespace((this.negated ? expression.substring(1) : expression)); - this.value = null; - } else { - this.negated = (separator > 0) && (expression.charAt(separator - 1) == '!'); - this.name = trimWhitespace((this.negated ? expression.substring(0, separator - 1) - : expression.substring(0, separator))); - String valueExpression = getValueExpression(expression, separator); - this.value = isExcludedValue(valueExpression) ? null : parseValue(valueExpression); - } - } - - private String getValueExpression(String expression, int separator) { - return trimWhitespace(expression.substring(separator + 1)); - } - - /** - * Exclude the pattern value Expression: "{value}", subclass could override this method. - * - * @param valueExpression - * @return - */ - protected boolean isExcludedValue(String valueExpression) { - return StringUtils.hasText(valueExpression) && - valueExpression.startsWith("{") - && valueExpression.endsWith("}"); - } - - @Override - public String getName() { - return this.name; - } - - @Override - public T getValue() { - return this.value; - } - - @Override - public boolean isNegated() { - return this.negated; - } - - public final boolean match(HttpRequest request) { - boolean isMatch; - if (this.value != null) { - isMatch = matchValue(request); - } else { - isMatch = matchName(request); - } - return (this.negated ? !isMatch : isMatch); - } - - - protected abstract boolean isCaseSensitiveName(); - - protected abstract T parseValue(String valueExpression); - - protected abstract boolean matchName(HttpRequest request); - - protected abstract boolean matchValue(HttpRequest request); - - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - AbstractNameValueExpression that = (AbstractNameValueExpression) other; - return ((isCaseSensitiveName() ? this.name.equals(that.name) : this.name.equalsIgnoreCase(that.name)) && - ObjectUtils.nullSafeEquals(this.value, that.value) && this.negated == that.negated); - } - - @Override - public int hashCode() { - int result = (isCaseSensitiveName() ? this.name.hashCode() : this.name.toLowerCase().hashCode()); - result = 31 * result + (this.value != null ? this.value.hashCode() : 0); - result = 31 * result + (this.negated ? 1 : 0); - return result; - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - if (this.value != null) { - builder.append(this.name); - if (this.negated) { - builder.append('!'); - } - builder.append('='); - builder.append(this.value); - } else { - if (this.negated) { - builder.append('!'); - } - builder.append(this.name); - } - return builder.toString(); - } - -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/CompositeHttpRequestMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/CompositeHttpRequestMatcher.java deleted file mode 100644 index 181edf2b..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/CompositeHttpRequestMatcher.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpRequest; - -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; - -/** - * Composite {@link HttpRequestMatcher} implementation - * - * @author Mercy - */ -public abstract class CompositeHttpRequestMatcher extends AbstractHttpRequestMatcher { - - private final List matchers = new LinkedList<>(); - - public CompositeHttpRequestMatcher(HttpRequestMatcher... matchers) { - this.matchers.addAll(Arrays.asList(matchers)); - } - - public CompositeHttpRequestMatcher and(HttpRequestMatcher matcher) { - this.matchers.add(matcher); - return this; - } - - @Override - public boolean match(HttpRequest request) { - for (HttpRequestMatcher matcher : matchers) { - if (!matcher.match(request)) { - return false; - } - } - return true; - } - - protected List getMatchers() { - return this.matchers; - } - - @Override - protected Collection getContent() { - List content = new LinkedList<>(); - for (HttpRequestMatcher matcher : getMatchers()) { - if (matcher instanceof AbstractHttpRequestMatcher) { - content.addAll(((AbstractHttpRequestMatcher) matcher).getContent()); - } - } - return content; - } - - @Override - protected String getToStringInfix() { - return " && "; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestConsumersMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestConsumersMatcher.java deleted file mode 100644 index e4d8296a..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestConsumersMatcher.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpRequest; -import org.springframework.http.MediaType; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * {@link HttpRequest} 'Content-Type' header {@link HttpRequestMatcher matcher} - * - * @author Arjen Poutsma - * @author Rossen Stoyanchev - * @author Mercy - */ -public class HttpRequestConsumersMatcher extends AbstractHttpRequestMatcher { - - private final List expressions; - - /** - * Creates a new instance from 0 or more "consumes" expressions. - * - * @param consumes consumes expressions if 0 expressions are provided, - * the condition will match to every request - */ - public HttpRequestConsumersMatcher(String... consumes) { - this(consumes, null); - } - - /** - * Creates a new instance with "consumes" and "header" expressions. - * "Header" expressions where the header name is not 'Content-Type' or have - * no header value defined are ignored. If 0 expressions are provided in - * total, the condition will match to every request - * - * @param consumes consumes expressions - * @param headers headers expressions - */ - public HttpRequestConsumersMatcher(String[] consumes, String[] headers) { - this(parseExpressions(consumes, headers)); - } - - /** - * Private constructor accepting parsed media type expressions. - */ - private HttpRequestConsumersMatcher(Collection expressions) { - this.expressions = new ArrayList<>(expressions); - Collections.sort(this.expressions); - } - - @Override - public boolean match(HttpRequest request) { - - if (expressions.isEmpty()) { - return true; - } - - HttpHeaders httpHeaders = request.getHeaders(); - - MediaType contentType = httpHeaders.getContentType(); - - if (contentType == null) { - contentType = MediaType.APPLICATION_OCTET_STREAM; - } - - for (ConsumeMediaTypeExpression expression : expressions) { - if (!expression.match(contentType)) { - return false; - } - } - - return true; - } - - private static Set parseExpressions(String[] consumes, String[] headers) { - Set result = new LinkedHashSet<>(); - if (headers != null) { - for (String header : headers) { - HeaderExpression expr = new HeaderExpression(header); - if ("Content-Type".equalsIgnoreCase(expr.name) && expr.value != null) { - for (MediaType mediaType : MediaType.parseMediaTypes(expr.value)) { - result.add(new ConsumeMediaTypeExpression(mediaType, expr.negated)); - } - } - } - } - for (String consume : consumes) { - result.add(new ConsumeMediaTypeExpression(consume)); - } - return result; - } - - @Override - protected Collection getContent() { - return this.expressions; - } - - @Override - protected String getToStringInfix() { - return " || "; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestHeadersMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestHeadersMatcher.java deleted file mode 100644 index beb05ccd..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestHeadersMatcher.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpRequest; -import org.springframework.util.CollectionUtils; - -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.Set; - -/** - * {@link HttpRequest} headers {@link HttpRequestMatcher matcher} - * - * @author Mercy - */ -public class HttpRequestHeadersMatcher extends AbstractHttpRequestMatcher { - - private final Set expressions; - - public HttpRequestHeadersMatcher(String... headers) { - this.expressions = parseExpressions(headers); - } - - private static Set parseExpressions(String... headers) { - Set expressions = new LinkedHashSet<>(); - for (String header : headers) { - HeaderExpression expr = new HeaderExpression(header); - if (HttpHeaders.ACCEPT.equalsIgnoreCase(expr.name) || - HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(expr.name)) { - continue; - } - expressions.add(expr); - } - return expressions; - } - - @Override - public boolean match(HttpRequest request) { - for (HeaderExpression expression : this.expressions) { - if (!expression.match(request)) { - return false; - } - } - return true; - } - - @Override - protected Collection getContent() { - return this.expressions; - } - - @Override - protected String getToStringInfix() { - return " && "; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestParamsMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestParamsMatcher.java deleted file mode 100644 index 22a1ce4a..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestParamsMatcher.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpRequest; -import org.springframework.util.CollectionUtils; - -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.Set; - -/** - * {@link HttpRequest} parameters {@link HttpRequestMatcher matcher} - * - * @author Mercy - */ -public class HttpRequestParamsMatcher extends AbstractHttpRequestMatcher { - - private final Set expressions; - - /** - * @param params The pattern of params : - *
    - *
  • name=value
  • - *
  • name
  • - *
- */ - public HttpRequestParamsMatcher(String... params) { - this.expressions = parseExpressions(params); - } - - @Override - public boolean match(HttpRequest request) { - if (CollectionUtils.isEmpty(expressions)) { - return true; - } - for (ParamExpression paramExpression : expressions) { - if (paramExpression.match(request)) { - return true; - } - } - return false; - } - - private static Set parseExpressions(String... params) { - Set expressions = new LinkedHashSet<>(); - for (String param : params) { - expressions.add(new ParamExpression(param)); - } - return expressions; - } - - @Override - protected Collection getContent() { - return this.expressions; - } - - @Override - protected String getToStringInfix() { - return " && "; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestPathMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestPathMatcher.java deleted file mode 100644 index a9df2159..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestPathMatcher.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpRequest; -import org.springframework.util.AntPathMatcher; -import org.springframework.util.PathMatcher; -import org.springframework.util.StringUtils; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * {@link HttpRequest} {@link URI} {@link HttpRequestMatcher matcher} - * - * @author Mercy - */ -public class HttpRequestPathMatcher extends AbstractHttpRequestMatcher { - - private final Set patterns; - - private final PathMatcher pathMatcher; - - public HttpRequestPathMatcher(String... patterns) { - this.patterns = Collections.unmodifiableSet(prependLeadingSlash(patterns)); - this.pathMatcher = new AntPathMatcher(); - } - - @Override - public boolean match(HttpRequest request) { - List matches = getMatchingPatterns(request); - return !matches.isEmpty(); - } - - public List getMatchingPatterns(HttpRequest request) { - String path = getPath(request); - List matches = getMatchingPatterns(path); - return matches; - } - - public List getMatchingPatterns(String lookupPath) { - List matches = new ArrayList<>(); - for (String pattern : this.patterns) { - String match = getMatchingPattern(pattern, lookupPath); - if (match != null) { - matches.add(match); - } - } - if (matches.size() > 1) { - matches.sort(this.pathMatcher.getPatternComparator(lookupPath)); - } - return matches; - } - - private String getMatchingPattern(String pattern, String lookupPath) { - if (pattern.equals(lookupPath)) { - return pattern; - } - boolean hasSuffix = pattern.indexOf('.') != -1; - if (!hasSuffix && this.pathMatcher.match(pattern + ".*", lookupPath)) { - return pattern + ".*"; - } - if (this.pathMatcher.match(pattern, lookupPath)) { - return pattern; - } - - if (!pattern.endsWith("/") && this.pathMatcher.match(pattern + "/", lookupPath)) { - return pattern + "/"; - } - return null; - } - - private String getPath(HttpRequest request) { - URI uri = request.getURI(); - return uri.getPath(); - } - - private static Set prependLeadingSlash(String[] patterns) { - Set result = new LinkedHashSet<>(patterns.length); - for (String pattern : patterns) { - if (StringUtils.hasLength(pattern) && !pattern.startsWith("/")) { - pattern = "/" + pattern; - } - result.add(pattern); - } - return result; - } - - @Override - protected Collection getContent() { - return this.patterns; - } - - @Override - protected String getToStringInfix() { - return " || "; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestProducesMatcher.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestProducesMatcher.java deleted file mode 100644 index b607f122..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestProducesMatcher.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpRequest; -import org.springframework.http.MediaType; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * {@link HttpRequest} 'Accept' header {@link HttpRequestMatcher matcher} - * - * @author Arjen Poutsma - * @author Rossen Stoyanchev - * @author Mercy - */ -public class HttpRequestProducesMatcher extends AbstractHttpRequestMatcher { - - private final List expressions; - - /** - * Creates a new instance from "produces" expressions. If 0 expressions - * are provided in total, this condition will match to any request. - * - * @param produces produces expressions - */ - public HttpRequestProducesMatcher(String... produces) { - this(produces, null); - } - - /** - * Creates a new instance with "produces" and "header" expressions. "Header" - * expressions where the header name is not 'Accept' or have no header value - * defined are ignored. If 0 expressions are provided in total, this condition - * will match to any request. - * - * @param produces produces expressions - * @param headers headers expressions - */ - public HttpRequestProducesMatcher(String[] produces, String[] headers) { - this(parseExpressions(produces, headers)); - } - - /** - * Private constructor accepting parsed media type expressions. - */ - private HttpRequestProducesMatcher(Collection expressions) { - this.expressions = new ArrayList<>(expressions); - Collections.sort(this.expressions); - } - - @Override - public boolean match(HttpRequest request) { - - if (expressions.isEmpty()) { - return true; - } - - HttpHeaders httpHeaders = request.getHeaders(); - - List acceptedMediaTypes = httpHeaders.getAccept(); - - for (ProduceMediaTypeExpression expression : expressions) { - if (!expression.match(acceptedMediaTypes)) { - return false; - } - } - - return true; - } - - private static Set parseExpressions(String[] produces, String[] headers) { - Set result = new LinkedHashSet<>(); - if (headers != null) { - for (String header : headers) { - HeaderExpression expr = new HeaderExpression(header); - if (HttpHeaders.ACCEPT.equalsIgnoreCase(expr.name) && expr.value != null) { - for (MediaType mediaType : MediaType.parseMediaTypes(expr.value)) { - result.add(new ProduceMediaTypeExpression(mediaType, expr.negated)); - } - } - } - } - for (String produce : produces) { - result.add(new ProduceMediaTypeExpression(produce)); - } - return result; - } - - @Override - protected Collection getContent() { - return expressions; - } - - @Override - protected String getToStringInfix() { - return " || "; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpMessageConverterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpMessageConverterResolver.java deleted file mode 100644 index bf2fa95f..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpMessageConverterResolver.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.util; - -import org.springframework.cloud.alibaba.dubbo.http.converter.HttpMessageConverterHolder; -import org.springframework.cloud.alibaba.dubbo.metadata.RequestMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.core.MethodParameter; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpRequest; -import org.springframework.http.MediaType; -import org.springframework.http.converter.GenericHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.server.ServletServerHttpRequest; -import org.springframework.http.server.ServletServerHttpResponse; -import org.springframework.util.ClassUtils; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -import static java.util.Collections.unmodifiableList; - -/** - * {@link HttpMessageConverter} Resolver - * - * @author Mercy - */ -public class HttpMessageConverterResolver { - - private static final MediaType MEDIA_TYPE_APPLICATION = new MediaType("application"); - - private final List> messageConverters; - - private final List allSupportedMediaTypes; - - private final ClassLoader classLoader; - - public HttpMessageConverterResolver(List> messageConverters, ClassLoader classLoader) { - this.messageConverters = messageConverters; - this.allSupportedMediaTypes = getAllSupportedMediaTypes(messageConverters); - this.classLoader = classLoader; - } - - public HttpMessageConverterHolder resolve(HttpRequest request, Class parameterType) { - - HttpMessageConverterHolder httpMessageConverterHolder = null; - - HttpHeaders httpHeaders = request.getHeaders(); - - MediaType contentType = httpHeaders.getContentType(); - - if (contentType == null) { - contentType = MediaType.APPLICATION_OCTET_STREAM; - } - - for (HttpMessageConverter converter : this.messageConverters) { - if (converter instanceof GenericHttpMessageConverter) { - GenericHttpMessageConverter genericConverter = (GenericHttpMessageConverter) converter; - if (genericConverter.canRead(parameterType, parameterType, contentType)) { - httpMessageConverterHolder = new HttpMessageConverterHolder(contentType, converter); - break; - } - } else { - if (converter.canRead(parameterType, contentType)) { - httpMessageConverterHolder = new HttpMessageConverterHolder(contentType, converter); - break; - } - } - - } - - return httpMessageConverterHolder; - } - - /** - * Resolve the most match {@link HttpMessageConverter} from {@link RequestMetadata} - * - * @param requestMetadata {@link RequestMetadata} - * @param restMethodMetadata {@link RestMethodMetadata} - * @return - */ - public HttpMessageConverterHolder resolve(RequestMetadata requestMetadata, RestMethodMetadata - restMethodMetadata) { - - HttpMessageConverterHolder httpMessageConverterHolder = null; - - Class returnValueClass = resolveReturnValueClass(restMethodMetadata); - - /** - * @see AbstractMessageConverterMethodProcessor#writeWithMessageConverters(Object, MethodParameter, ServletServerHttpRequest, ServletServerHttpResponse) - */ - List requestedMediaTypes = getAcceptableMediaTypes(requestMetadata); - List producibleMediaTypes = getProducibleMediaTypes(restMethodMetadata, returnValueClass); - - Set compatibleMediaTypes = new LinkedHashSet(); - for (MediaType requestedType : requestedMediaTypes) { - for (MediaType producibleType : producibleMediaTypes) { - if (requestedType.isCompatibleWith(producibleType)) { - compatibleMediaTypes.add(getMostSpecificMediaType(requestedType, producibleType)); - } - } - } - - if (compatibleMediaTypes.isEmpty()) { - return httpMessageConverterHolder; - } - - List mediaTypes = new ArrayList<>(compatibleMediaTypes); - - MediaType.sortBySpecificityAndQuality(mediaTypes); - - MediaType selectedMediaType = null; - for (MediaType mediaType : mediaTypes) { - if (mediaType.isConcrete()) { - selectedMediaType = mediaType; - break; - } else if (mediaType.equals(MediaType.ALL) || mediaType.equals(MEDIA_TYPE_APPLICATION)) { - selectedMediaType = MediaType.APPLICATION_OCTET_STREAM; - break; - } - } - - if (selectedMediaType != null) { - selectedMediaType = selectedMediaType.removeQualityValue(); - for (HttpMessageConverter messageConverter : this.messageConverters) { - if (messageConverter.canWrite(returnValueClass, selectedMediaType)) { - httpMessageConverterHolder = new HttpMessageConverterHolder(selectedMediaType, messageConverter); - break; - } - } - } - - return httpMessageConverterHolder; - } - - public List getAllSupportedMediaTypes() { - return unmodifiableList(allSupportedMediaTypes); - } - - private Class resolveReturnValueClass(RestMethodMetadata restMethodMetadata) { - String returnClassName = restMethodMetadata.getMethod().getReturnType(); - return ClassUtils.resolveClassName(returnClassName, classLoader); - } - - /** - * Resolve the {@link MediaType media-types} - * - * @param requestMetadata {@link RequestMetadata} from client side - * @return non-null {@link List} - */ - private List getAcceptableMediaTypes(RequestMetadata requestMetadata) { - return requestMetadata.getProduceMediaTypes(); - } - - /** - * Returns - * the media types that can be produced:
  • The producible media types specified in the request mappings, or - *
  • Media types of configured converters that can write the specific return value, or
  • {@link MediaType#ALL} - *
- * - * @param restMethodMetadata {@link RestMethodMetadata} from server side - * @param returnValueClass the class of return value - * @return non-null {@link List} - */ - private List getProducibleMediaTypes(RestMethodMetadata restMethodMetadata, Class - returnValueClass) { - RequestMetadata serverRequestMetadata = restMethodMetadata.getRequest(); - List mediaTypes = serverRequestMetadata.getProduceMediaTypes(); - if (!CollectionUtils.isEmpty(mediaTypes)) { // Empty - return mediaTypes; - } else if (!this.allSupportedMediaTypes.isEmpty()) { - List result = new ArrayList<>(); - for (HttpMessageConverter converter : this.messageConverters) { - if (converter.canWrite(returnValueClass, null)) { - result.addAll(converter.getSupportedMediaTypes()); - } - } - return result; - } else { - return Collections.singletonList(MediaType.ALL); - } - } - - /** - * Return the media types - * supported by all provided message converters sorted by specificity via {@link - * MediaType#sortBySpecificity(List)}. - * - * @param messageConverters - * @return - */ - private List getAllSupportedMediaTypes(List> messageConverters) { - Set allSupportedMediaTypes = new LinkedHashSet(); - for (HttpMessageConverter messageConverter : messageConverters) { - allSupportedMediaTypes.addAll(messageConverter.getSupportedMediaTypes()); - } - List result = new ArrayList(allSupportedMediaTypes); - MediaType.sortBySpecificity(result); - return unmodifiableList(result); - } - - /** - * Return the more specific of the acceptable and the producible media types - * with the q-value of the former. - */ - private MediaType getMostSpecificMediaType(MediaType acceptType, MediaType produceType) { - MediaType produceTypeToUse = produceType.copyQualityValue(acceptType); - return (MediaType.SPECIFICITY_COMPARATOR.compare(acceptType, produceTypeToUse) <= 0 ? acceptType : produceTypeToUse); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpUtils.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpUtils.java deleted file mode 100644 index 9340e86f..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpUtils.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.util; - -import org.springframework.http.HttpRequest; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.util.StringUtils; - -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.Arrays; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.springframework.util.StringUtils.delimitedListToStringArray; -import static org.springframework.util.StringUtils.hasText; -import static org.springframework.util.StringUtils.trimAllWhitespace; - -/** - * Http Utilities class - * - * @author Mercy - */ -public abstract class HttpUtils { - - private static final String UTF_8 = "UTF-8"; - - private static final String EQUAL = "="; - - private static final String AND = "&"; - - private static final String SEMICOLON = ";"; - - private static final String QUESTION_MASK = "?"; - - /** - * The empty value - */ - private static final String EMPTY_VALUE = ""; - - /** - * Normalize path: - *
    - *
  1. To remove query string if presents
  2. - *
  3. To remove duplicated slash("/") if exists
  4. - *
- * - * @param path path to be normalized - * @return a normalized path if required - */ - public static String normalizePath(String path) { - if (!hasText(path)) { - return path; - } - String normalizedPath = path; - int index = normalizedPath.indexOf(QUESTION_MASK); - if (index > -1) { - normalizedPath = normalizedPath.substring(0, index); - } - return StringUtils.replace(normalizedPath, "//", "/"); - } - - - /** - * Get Parameters from the specified {@link HttpRequest request} - * - * @param request the specified {@link HttpRequest request} - * @return - */ - public static MultiValueMap getParameters(HttpRequest request) { - URI uri = request.getURI(); - return getParameters(uri.getQuery()); - } - - /** - * Get Parameters from the specified query string. - *

- * - * @param queryString The query string - * @return The query parameters - */ - public static MultiValueMap getParameters(String queryString) { - return getParameters(delimitedListToStringArray(queryString, AND)); - } - - /** - * Get Parameters from the specified pairs of name-value. - *

- * - * @param pairs The pairs of name-value - * @return The query parameters - */ - public static MultiValueMap getParameters(Iterable pairs) { - MultiValueMap parameters = new LinkedMultiValueMap<>(); - if (pairs != null) { - for (String pair : pairs) { - String[] nameAndValue = delimitedListToStringArray(pair, EQUAL); - String name = decode(nameAndValue[0]); - String value = nameAndValue.length < 2 ? null : nameAndValue[1]; - value = decode(value); - addParam(parameters, name, value); - } - } - return parameters; - } - - /** - * Get Parameters from the specified pairs of name-value. - *

- * - * @param pairs The pairs of name-value - * @return The query parameters - */ - public static MultiValueMap getParameters(String... pairs) { - return getParameters(Arrays.asList(pairs)); - } - -// /** -// * Parse a read-only {@link MultiValueMap} of {@link HttpCookie} from {@link HttpHeaders} -// * -// * @param httpHeaders {@link HttpHeaders} -// * @return non-null, the key is a cookie name , the value is {@link HttpCookie} -// */ -// public static MultiValueMap parseCookies(HttpHeaders httpHeaders) { -// -// String cookie = httpHeaders.getFirst(COOKIE); -// -// String[] cookieNameAndValues = StringUtils.delimitedListToStringArray(cookie, SEMICOLON); -// -// MultiValueMap cookies = new LinkedMultiValueMap<>(cookieNameAndValues.length); -// -// for (String cookeNameAndValue : cookieNameAndValues) { -// String[] nameAndValue = delimitedListToStringArray(trimWhitespace(cookeNameAndValue), EQUAL); -// String name = nameAndValue[0]; -// String value = nameAndValue.length < 2 ? null : nameAndValue[1]; -// HttpCookie httpCookie = new HttpCookie(name, value); -// cookies.add(name, httpCookie); -// } -// -// return cookies; -// } - - /** - * To the name and value line sets - * - * @param nameAndValuesMap {@link MultiValueMap} the map of name and values - * @return non-null - */ - public static Set toNameAndValuesSet(Map> nameAndValuesMap) { - Set nameAndValues = new LinkedHashSet<>(); - for (Map.Entry> entry : nameAndValuesMap.entrySet()) { - String name = entry.getKey(); - List values = entry.getValue(); - for (String value : values) { - String nameAndValue = name + EQUAL + value; - nameAndValues.add(nameAndValue); - } - } - return nameAndValues; - } - - public static String[] toNameAndValues(Map> nameAndValuesMap) { - return toNameAndValuesSet(nameAndValuesMap).toArray(new String[0]); - } - - /** - * Generate a string of query string from the specified request parameters {@link Map} - * - * @param params the specified request parameters {@link Map} - * @return non-null - */ - public static String toQueryString(Map> params) { - StringBuilder builder = new StringBuilder(); - for (String line : toNameAndValuesSet(params)) { - builder.append(line).append(AND); - } - return builder.toString(); - } - - /** - * Decode value - * - * @param value the value requires to decode - * @return the decoded value - */ - public static String decode(String value) { - if (value == null) { - return value; - } - String decodedValue = value; - try { - decodedValue = URLDecoder.decode(value, UTF_8); - } catch (UnsupportedEncodingException ex) { - } - return decodedValue; - } - - /** - * encode value - * - * @param value the value requires to encode - * @return the encoded value - */ - public static String encode(String value) { - String encodedValue = value; - try { - encodedValue = URLEncoder.encode(value, UTF_8); - } catch (UnsupportedEncodingException ex) { - } - return encodedValue; - } - - private static void addParam(MultiValueMap paramsMap, String name, String value) { - String paramValue = trimAllWhitespace(value); - if (!StringUtils.hasText(paramValue)) { - paramValue = EMPTY_VALUE; - } - paramsMap.add(trimAllWhitespace(name), paramValue); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboRestServiceMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboRestServiceMetadata.java deleted file mode 100644 index 5c5ef3ad..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboRestServiceMetadata.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import java.util.Objects; - -/** - * Dubbo Rest Service Metadata - * - * @author Mercy - */ -public class DubboRestServiceMetadata { - - private final ServiceRestMetadata serviceRestMetadata; - - private final RestMethodMetadata restMethodMetadata; - - public DubboRestServiceMetadata(ServiceRestMetadata serviceRestMetadata, RestMethodMetadata restMethodMetadata) { - this.serviceRestMetadata = serviceRestMetadata; - this.restMethodMetadata = restMethodMetadata; - } - - public ServiceRestMetadata getServiceRestMetadata() { - return serviceRestMetadata; - } - - public RestMethodMetadata getRestMethodMetadata() { - return restMethodMetadata; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof DubboRestServiceMetadata)) return false; - DubboRestServiceMetadata that = (DubboRestServiceMetadata) o; - return Objects.equals(serviceRestMetadata, that.serviceRestMetadata) && - Objects.equals(restMethodMetadata, that.restMethodMetadata); - } - - @Override - public int hashCode() { - return Objects.hash(serviceRestMetadata, restMethodMetadata); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboTransportedMethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboTransportedMethodMetadata.java deleted file mode 100644 index 6e7ab9ac..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/DubboTransportedMethodMetadata.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; - -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * {@link MethodMetadata} annotated {@link DubboTransported @DubboTransported} - * - * @author Mercy - */ -public class DubboTransportedMethodMetadata { - - private final MethodMetadata methodMetadata; - - private final Map attributes; - - public DubboTransportedMethodMetadata(Method method, Map attributes) { - this.methodMetadata = new MethodMetadata(method); - this.attributes = attributes; - } - - public String getName() { - return methodMetadata.getName(); - } - - public void setName(String name) { - methodMetadata.setName(name); - } - - public String getReturnType() { - return methodMetadata.getReturnType(); - } - - public void setReturnType(String returnType) { - methodMetadata.setReturnType(returnType); - } - - public List getParams() { - return methodMetadata.getParams(); - } - - public void setParams(List params) { - methodMetadata.setParams(params); - } - - public Method getMethod() { - return methodMetadata.getMethod(); - } - - public MethodMetadata getMethodMetadata() { - return methodMetadata; - } - - public Map getAttributes() { - return attributes; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof DubboTransportedMethodMetadata)) return false; - DubboTransportedMethodMetadata that = (DubboTransportedMethodMetadata) o; - return Objects.equals(methodMetadata, that.methodMetadata) && - Objects.equals(attributes, that.attributes); - } - - @Override - public int hashCode() { - return Objects.hash(methodMetadata, attributes); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/MethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/MethodMetadata.java deleted file mode 100644 index 9dfe6ea4..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/MethodMetadata.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.lang.reflect.Method; -import java.lang.reflect.Parameter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; - -/** - * {@link Method} Metadata - * - * @author Mercy - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -public class MethodMetadata { - - private String name; - - @JsonProperty("return-type") - private String returnType; - - private List params; - - @JsonIgnore - private Method method; - - public MethodMetadata() { - this.params = new LinkedList<>(); - } - - public MethodMetadata(Method method) { - this.name = method.getName(); - this.returnType = method.getReturnType().getName(); - this.params = initParameters(method); - this.method = method; - } - - private List initParameters(Method method) { - int parameterCount = method.getParameterCount(); - if (parameterCount < 1) { - return Collections.emptyList(); - } - List params = new ArrayList<>(parameterCount); - Parameter[] parameters = method.getParameters(); - for (int i = 0; i < parameterCount; i++) { - Parameter parameter = parameters[i]; - MethodParameterMetadata param = toMethodParameterMetadata(i, parameter); - params.add(param); - } - return params; - } - - private MethodParameterMetadata toMethodParameterMetadata(int index, Parameter parameter) { - MethodParameterMetadata metadata = new MethodParameterMetadata(); - metadata.setIndex(index); - metadata.setName(parameter.getName()); - metadata.setType(parameter.getType().getTypeName()); - return metadata; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getReturnType() { - return returnType; - } - - public void setReturnType(String returnType) { - this.returnType = returnType; - } - - public List getParams() { - return params; - } - - public void setParams(List params) { - this.params = params; - } - - public Method getMethod() { - return method; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - MethodMetadata that = (MethodMetadata) o; - return Objects.equals(name, that.name) && - Objects.equals(returnType, that.returnType) && - Objects.equals(params, that.params); - } - - @Override - public int hashCode() { - return Objects.hash(name, returnType, params); - } - - @Override - public String toString() { - return "MethodMetadata{" + - "name='" + name + '\'' + - ", returnType='" + returnType + '\'' + - ", params=" + params + - ", method=" + method + - '}'; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/MethodParameterMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/MethodParameterMetadata.java deleted file mode 100644 index 0abf2b0e..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/MethodParameterMetadata.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import com.fasterxml.jackson.annotation.JsonInclude; - -import java.lang.reflect.Method; -import java.util.Objects; - -/** - * {@link Method} Parameter Metadata - * - * @author Mercy - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -public class MethodParameterMetadata { - - private int index; - - private String name; - - private String type; - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - MethodParameterMetadata that = (MethodParameterMetadata) o; - return index == that.index && - Objects.equals(name, that.name) && - Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hash(index, name, type); - } - - @Override - public String toString() { - return "MethodParameterMetadata{" + - "index=" + index + - ", name='" + name + '\'' + - ", type='" + type + '\'' + - '}'; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/RequestMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/RequestMetadata.java deleted file mode 100644 index 29361b93..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/RequestMetadata.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import feign.RequestTemplate; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.util.CollectionUtils; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.NavigableMap; -import java.util.Objects; -import java.util.Set; -import java.util.SortedMap; - -import static org.springframework.cloud.alibaba.dubbo.http.util.HttpUtils.normalizePath; -import static org.springframework.http.MediaType.parseMediaTypes; - -/** - * Request Metadata - * - * @author Mercy - */ -public class RequestMetadata { - - private String method; - - private String path; - - @JsonProperty("params") - private MultiValueMap params = new LinkedMultiValueMap<>(); - - @JsonProperty("headers") - private HttpHeaders headers = new HttpHeaders(); - - private Set consumes = new LinkedHashSet<>(); - - private Set produces = new LinkedHashSet<>(); - - public RequestMetadata() { - } - - public RequestMetadata(RequestTemplate requestTemplate) { - setMethod(requestTemplate.method()); - setPath(requestTemplate.url()); - params(requestTemplate.queries()); - headers(requestTemplate.headers()); - } - - public String getMethod() { - return method; - } - - public void setMethod(String method) { - this.method = method.toUpperCase(); - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = normalizePath(path); - } - - public MultiValueMap getParams() { - return params; - } - - public void setParams(Map> params) { - params(params); - } - - public Map> getHeaders() { - return headers; - } - - public void setHeaders(Map> headers) { - headers(headers); - } - - public Set getConsumes() { - return consumes; - } - - public void setConsumes(Set consumes) { - this.consumes = consumes; - } - - public Set getProduces() { - return produces; - } - - public void setProduces(Set produces) { - this.produces = produces; - } - - // @JsonIgnore properties - @JsonIgnore - public Set getParamNames() { - return params.keySet(); - } - - @JsonIgnore - public Set getHeaderNames() { - return headers.keySet(); - } - - @JsonIgnore - public List getConsumeMediaTypes() { - return toMediaTypes(consumes); - } - - @JsonIgnore - public List getProduceMediaTypes() { - return toMediaTypes(produces); - } - - public String getParameter(String name) { - return this.params.getFirst(name); - } - - public String getHeader(String name) { - return this.headers.getFirst(name); - } - - public RequestMetadata addParam(String name, String value) { - add(name, value, this.params); - return this; - } - - public RequestMetadata addHeader(String name, String value) { - add(name, value, this.headers); - return this; - } - - private > RequestMetadata params(Map params) { - addAll(params, this.params); - return this; - } - - private > RequestMetadata headers(Map headers) { - if (!CollectionUtils.isEmpty(headers)) { - HttpHeaders httpHeaders = new HttpHeaders(); - // Add all headers - addAll(headers, httpHeaders); - // Handles "Content-Type" and "Accept" headers if present - mediaTypes(httpHeaders, HttpHeaders.CONTENT_TYPE, this.consumes); - mediaTypes(httpHeaders, HttpHeaders.ACCEPT, this.produces); - this.headers.putAll(httpHeaders); - } - return this; - } - - /** - * Get the best matched {@link RequestMetadata} via specified {@link RequestMetadata} - * - * @param requestMetadataMap the source of {@link NavigableMap} - * @param requestMetadata the match object - * @return if not matched, return null - */ - public static RequestMetadata getBestMatch(NavigableMap requestMetadataMap, - RequestMetadata requestMetadata) { - - RequestMetadata key = requestMetadata; - - RequestMetadata result = requestMetadataMap.get(key); - - if (result == null) { - SortedMap headMap = requestMetadataMap.headMap(key, true); - result = headMap.isEmpty() ? null : requestMetadataMap.get(headMap.lastKey()); - } - - return result; - } - - private static void add(String key, String value, MultiValueMap destination) { - destination.add(key, value); - } - - private static > void addAll(Map source, - MultiValueMap destination) { - for (Map.Entry entry : source.entrySet()) { - String key = entry.getKey(); - for (String value : entry.getValue()) { - add(key, value, destination); - } - } - } - - private static void mediaTypes(HttpHeaders httpHeaders, String headerName, Collection destination) { - List value = httpHeaders.get(headerName); - List mediaTypes = parseMediaTypes(value); - destination.addAll(toMediaTypeValues(mediaTypes)); - } - - private static List toMediaTypeValues(List mediaTypes) { - List list = new ArrayList<>(mediaTypes.size()); - for (MediaType mediaType : mediaTypes) { - list.add(mediaType.toString()); - } - return list; - } - - private static List toMediaTypes(Collection mediaTypeValues) { - if (mediaTypeValues.isEmpty()) { - return Collections.singletonList(MediaType.ALL); - } - return parseMediaTypes(new LinkedList<>(mediaTypeValues)); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof RequestMetadata)) return false; - RequestMetadata that = (RequestMetadata) o; - return Objects.equals(method, that.method) && - Objects.equals(path, that.path) && - Objects.equals(consumes, that.consumes) && - Objects.equals(produces, that.produces) && - // Metadata should not compare the values - Objects.equals(getParamNames(), that.getParamNames()) && - Objects.equals(getHeaderNames(), that.getHeaderNames()); - - } - - @Override - public int hashCode() { - // The values of metadata should not use for the hashCode() method - return Objects.hash(method, path, consumes, produces, getParamNames(), getHeaderNames()); - } - - @Override - public String toString() { - return "RequestMetadata{" + - "method='" + method + '\'' + - ", path='" + path + '\'' + - ", params=" + params + - ", headers=" + headers + - ", consumes=" + consumes + - ", produces=" + produces + - '}'; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/RestMethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/RestMethodMetadata.java deleted file mode 100644 index edbcf46a..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/RestMethodMetadata.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.springframework.core.ResolvableType; - -import java.lang.reflect.Type; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * Method Request Metadata - * - * @author Mercy - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -public class RestMethodMetadata { - - private MethodMetadata method; - - private RequestMetadata request; - - @JsonProperty("url-index") - private Integer urlIndex; - - @JsonProperty("setBody-index") - private Integer bodyIndex; - - @JsonProperty("header-map-index") - private Integer headerMapIndex; - - @JsonProperty("query-map-index") - private Integer queryMapIndex; - - @JsonProperty("query-map-encoded") - private boolean queryMapEncoded; - - @JsonProperty("return-type") - private String returnType; - - @JsonProperty("setBody-type") - private String bodyType; - - @JsonProperty("index-to-name") - private Map> indexToName; - - @JsonProperty("form-params") - private List formParams; - - @JsonProperty("index-to-encoded") - private Map indexToEncoded; - - public RestMethodMetadata() { - } - - public RestMethodMetadata(feign.MethodMetadata methodMetadata) { - this.request = new RequestMetadata(methodMetadata.template()); - this.urlIndex = methodMetadata.urlIndex(); - this.bodyIndex = methodMetadata.bodyIndex(); - this.headerMapIndex = methodMetadata.headerMapIndex(); - this.queryMapEncoded = methodMetadata.queryMapEncoded(); - this.queryMapEncoded = methodMetadata.queryMapEncoded(); - this.returnType = getClassName(methodMetadata.returnType()); - this.bodyType = getClassName(methodMetadata.bodyType()); - this.indexToName = methodMetadata.indexToName(); - this.formParams = methodMetadata.formParams(); - this.indexToEncoded = methodMetadata.indexToEncoded(); - } - - public MethodMetadata getMethod() { - return method; - } - - public void setMethod(MethodMetadata method) { - this.method = method; - } - - public RequestMetadata getRequest() { - return request; - } - - public void setRequest(RequestMetadata request) { - this.request = request; - } - - public Map> getIndexToName() { - return indexToName; - } - - public void setIndexToName(Map> indexToName) { - this.indexToName = indexToName; - } - - public Integer getUrlIndex() { - return urlIndex; - } - - public void setUrlIndex(Integer urlIndex) { - this.urlIndex = urlIndex; - } - - public Integer getBodyIndex() { - return bodyIndex; - } - - public void setBodyIndex(Integer bodyIndex) { - this.bodyIndex = bodyIndex; - } - - public Integer getHeaderMapIndex() { - return headerMapIndex; - } - - public void setHeaderMapIndex(Integer headerMapIndex) { - this.headerMapIndex = headerMapIndex; - } - - public Integer getQueryMapIndex() { - return queryMapIndex; - } - - public void setQueryMapIndex(Integer queryMapIndex) { - this.queryMapIndex = queryMapIndex; - } - - public boolean isQueryMapEncoded() { - return queryMapEncoded; - } - - public void setQueryMapEncoded(boolean queryMapEncoded) { - this.queryMapEncoded = queryMapEncoded; - } - - public String getReturnType() { - return returnType; - } - - public void setReturnType(String returnType) { - this.returnType = returnType; - } - - public String getBodyType() { - return bodyType; - } - - public void setBodyType(String bodyType) { - this.bodyType = bodyType; - } - - public List getFormParams() { - return formParams; - } - - public void setFormParams(List formParams) { - this.formParams = formParams; - } - - public Map getIndexToEncoded() { - return indexToEncoded; - } - - public void setIndexToEncoded(Map indexToEncoded) { - this.indexToEncoded = indexToEncoded; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof RestMethodMetadata)) return false; - RestMethodMetadata that = (RestMethodMetadata) o; - return queryMapEncoded == that.queryMapEncoded && - Objects.equals(method, that.method) && - Objects.equals(request, that.request) && - Objects.equals(urlIndex, that.urlIndex) && - Objects.equals(bodyIndex, that.bodyIndex) && - Objects.equals(headerMapIndex, that.headerMapIndex) && - Objects.equals(queryMapIndex, that.queryMapIndex) && - Objects.equals(returnType, that.returnType) && - Objects.equals(bodyType, that.bodyType) && - Objects.equals(indexToName, that.indexToName) && - Objects.equals(formParams, that.formParams) && - Objects.equals(indexToEncoded, that.indexToEncoded); - } - - @Override - public int hashCode() { - return Objects.hash(method, request, urlIndex, bodyIndex, headerMapIndex, queryMapIndex, queryMapEncoded, - returnType, bodyType, indexToName, formParams, indexToEncoded); - } - - private String getClassName(Type type) { - if (type == null) { - return null; - } - ResolvableType resolvableType = ResolvableType.forType(type); - return resolvableType.resolve().getName(); - } - - @Override - public String toString() { - return "RestMethodMetadata{" + - "method=" + method + - ", request=" + request + - ", urlIndex=" + urlIndex + - ", bodyIndex=" + bodyIndex + - ", headerMapIndex=" + headerMapIndex + - ", queryMapIndex=" + queryMapIndex + - ", queryMapEncoded=" + queryMapEncoded + - ", returnType='" + returnType + '\'' + - ", bodyType='" + bodyType + '\'' + - ", indexToName=" + indexToName + - ", formParams=" + formParams + - ", indexToEncoded=" + indexToEncoded + - '}'; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java deleted file mode 100644 index cf32659e..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java +++ /dev/null @@ -1,524 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata.repository; - -import org.apache.dubbo.common.URL; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.TypeFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.alibaba.dubbo.env.DubboCloudProperties; -import org.springframework.cloud.alibaba.dubbo.http.matcher.RequestMetadataMatcher; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboRestServiceMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RequestMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataService; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceExporter; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceProxy; -import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.http.HttpRequest; -import org.springframework.stereotype.Repository; -import org.springframework.util.CollectionUtils; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import javax.annotation.PostConstruct; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static java.lang.String.format; -import static java.lang.String.valueOf; -import static java.util.Collections.emptyList; -import static java.util.Collections.emptySet; -import static java.util.Collections.unmodifiableList; -import static java.util.Collections.unmodifiableMap; -import static java.util.Collections.unmodifiableSet; -import static org.apache.dubbo.common.Constants.APPLICATION_KEY; -import static org.apache.dubbo.common.Constants.VERSION_KEY; -import static org.springframework.cloud.alibaba.dubbo.env.DubboCloudProperties.ALL_DUBBO_SERVICES; -import static org.springframework.cloud.alibaba.dubbo.http.DefaultHttpRequest.builder; -import static org.springframework.util.CollectionUtils.isEmpty; -import static org.springframework.util.StringUtils.hasText; - -/** - * Dubbo Service Metadata {@link Repository} - * - * @author Mercy - */ -@Repository -public class DubboServiceMetadataRepository { - - /** - * The prefix of {@link DubboMetadataService} : "dubbo.metadata-service." - */ - public static final String DUBBO_METADATA_SERVICE_PREFIX = "dubbo.metadata-service."; - - /** - * The {@link URL URLs} property name of {@link DubboMetadataService} : "dubbo.metadata-service.urls" - */ - public static final String DUBBO_METADATA_SERVICE_URLS_PROPERTY_NAME = DUBBO_METADATA_SERVICE_PREFIX + "urls"; - - /** - * The {@link String#format(String, Object...) pattern} of dubbo protocols port - */ - public static final String DUBBO_PROTOCOLS_PORT_PROPERTY_NAME_PATTERN = "dubbo.protocols.%s.port"; - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private final ObjectMapper objectMapper = new ObjectMapper(); - - // =================================== Registration =================================== // - - /** - * All exported {@link URL urls} {@link Map} whose key is the return value of {@link URL#getServiceKey()} method - * and value is the {@link List} of {@link URL URLs} - */ - private final MultiValueMap allExportedURLs = new LinkedMultiValueMap<>(); - - // ==================================================================================== // - - - // =================================== Subscription =================================== // - - private Set subscribedServices; - - /** - * The subscribed {@link URL urls} {@link Map} of {@link DubboMetadataService}, - * whose key is the return value of {@link URL#getServiceKey()} method and value is the {@link List} of - * {@link URL URLs} - */ - private final MultiValueMap subscribedDubboMetadataServiceURLs = new LinkedMultiValueMap<>(); - - // ==================================================================================== // - - - // =================================== REST Metadata ================================== // - - /** - * A Map to store REST metadata temporary, its' key is the special service name for a Dubbo service, - * the value is a JSON content of JAX-RS or Spring MVC REST metadata from the annotated methods. - */ - private final Set serviceRestMetadata = new LinkedHashSet<>(); - - /** - * Key is application name - * Value is Map - */ - private Map> dubboRestServiceMetadataRepository = newHashMap(); - - // ==================================================================================== // - - - // =================================== Dependencies =================================== // - - @Autowired - private DubboCloudProperties dubboCloudProperties; - - @Autowired - private DubboMetadataServiceProxy dubboMetadataConfigServiceProxy; - - @Autowired - private DiscoveryClient discoveryClient; - - @Autowired - private JSONUtils jsonUtils; - - @Value("${spring.application.name}") - private String currentApplicationName; - - @Autowired - private DubboMetadataServiceExporter dubboMetadataServiceExporter; - - // ==================================================================================== // - - - @PostConstruct - public void init() { - // Keep the order in following invocations - initSubscribedServices(); - initSubscribedDubboMetadataServices(); - initDubboRestServiceMetadataRepository(); - } - - /** - * Get the metadata {@link Map} of {@link DubboMetadataService} - * - * @return non-null read-only {@link Map} - */ - public Map getDubboMetadataServiceMetadata() { - - List dubboMetadataServiceURLs = dubboMetadataServiceExporter.export(); - - // remove the exported URLs of DubboMetadataService - removeDubboMetadataServiceURLs(dubboMetadataServiceURLs); - - Map metadata = newHashMap(); - - addDubboMetadataServiceURLsMetadata(metadata, dubboMetadataServiceURLs); - addDubboProtocolsPortMetadata(metadata); - - return Collections.unmodifiableMap(metadata); - } - - private void removeDubboMetadataServiceURLs(List dubboMetadataServiceURLs) { - dubboMetadataServiceURLs.forEach(this::unexportURL); - } - - private void addDubboMetadataServiceURLsMetadata(Map metadata, List dubboMetadataServiceURLs) { - String dubboMetadataServiceURLsJSON = jsonUtils.toJSON(dubboMetadataServiceURLs); - metadata.put(DUBBO_METADATA_SERVICE_URLS_PROPERTY_NAME, dubboMetadataServiceURLsJSON); - } - - private void addDubboProtocolsPortMetadata(Map metadata) { - - allExportedURLs.values() - .stream() - .flatMap(v -> v.stream()) - .forEach(url -> { - String protocol = url.getProtocol(); - String propertyName = getDubboProtocolPropertyName(protocol); - String propertyValue = valueOf(url.getPort()); - metadata.put(propertyName, propertyValue); - }); - } - - /** - * Get the property name of Dubbo Protocol - * - * @param protocol Dubbo Protocol - * @return non-null - */ - public String getDubboProtocolPropertyName(String protocol) { - return format(DUBBO_PROTOCOLS_PORT_PROPERTY_NAME_PATTERN, protocol); - } - - /** - * Publish the {@link Set} of {@link ServiceRestMetadata} - * - * @param serviceRestMetadataSet the {@link Set} of {@link ServiceRestMetadata} - */ - public void publishServiceRestMetadata(Set serviceRestMetadataSet) { - for (ServiceRestMetadata serviceRestMetadata : serviceRestMetadataSet) { - if (!isEmpty(serviceRestMetadata.getMeta())) { - this.serviceRestMetadata.add(serviceRestMetadata); - } - } - } - - /** - * Get the {@link Set} of {@link ServiceRestMetadata} - * - * @return non-null read-only {@link Set} - */ - public Set getServiceRestMetadata() { - return unmodifiableSet(serviceRestMetadata); - } - -// /** -// * Get The subscribed {@link DubboMetadataService}'s {@link URL URLs} -// * -// * @return non-null read-only {@link List} -// */ -// public List getSubscribedDubboMetadataServiceURLs() { -// return Collections.unmodifiableList(subscribedDubboMetadataServiceURLs); -// } - - public List findSubscribedDubboMetadataServiceURLs(String serviceName, String group, String version, - String protocol) { - String serviceKey = URL.buildKey(serviceName, group, version); - List urls = subscribedDubboMetadataServiceURLs.get(serviceKey); - - if (isEmpty(urls)) { - return emptyList(); - } - - return hasText(protocol) ? - urls.stream().filter(url -> url.getProtocol().equalsIgnoreCase(protocol)).collect(Collectors.toList()) : - unmodifiableList(urls) - ; - } - - /** - * The specified service is subscribe or not - * - * @param serviceName the service name - * @return - */ - public boolean isSubscribedService(String serviceName) { - return subscribedServices.contains(serviceName); - } - - public void exportURL(URL url) { - this.allExportedURLs.add(url.getServiceKey(), url); - } - - public void unexportURL(URL url) { - String key = url.getServiceKey(); - List urls = allExportedURLs.get(key); - urls.remove(url); - this.allExportedURLs.addAll(key, urls); - } - - /** - * Get all exported {@link URL urls}. - * - * @return non-null read-only - */ - public Map> getAllExportedUrls() { - return unmodifiableMap(allExportedURLs); - } - - /** - * Get all exported {@link URL#getServiceKey() service keys} - * - * @return non-null read-only - */ - public Set getAllServiceKeys() { - return allExportedURLs.keySet(); - } - - /** - * Get the {@link URL urls} that {@link DubboMetadataService} exported by the specified {@link ServiceInstance} - * - * @param serviceInstance {@link ServiceInstance} - * @return the mutable {@link URL urls} - */ - public List getDubboMetadataServiceURLs(ServiceInstance serviceInstance) { - Map metadata = serviceInstance.getMetadata(); - String dubboURLsJSON = metadata.get(DUBBO_METADATA_SERVICE_URLS_PROPERTY_NAME); - return jsonUtils.toURLs(dubboURLsJSON); - } - - public Integer getDubboProtocolPort(ServiceInstance serviceInstance, String protocol) { - String protocolProperty = getDubboProtocolPropertyName(protocol); - Map metadata = serviceInstance.getMetadata(); - String protocolPort = metadata.get(protocolProperty); - return hasText(protocolPort) ? Integer.valueOf(protocolPort) : null; - } - - public List getExportedURLs(String serviceInterface, String group, String version) { - String serviceKey = URL.buildKey(serviceInterface, group, version); - return allExportedURLs.getOrDefault(serviceKey, Collections.emptyList()); - } - - /** - * Initialize the specified service's {@link ServiceRestMetadata} - * - * @param serviceName the service name - */ - public void initialize(String serviceName) { - - if (dubboRestServiceMetadataRepository.containsKey(serviceName)) { - return; - } - - Set serviceRestMetadataSet = getServiceRestMetadataSet(serviceName); - - if (isEmpty(serviceRestMetadataSet)) { - if (logger.isWarnEnabled()) { - logger.warn("The Spring application[name : {}] does not expose The REST metadata in the Dubbo services." - , serviceName); - } - return; - } - - Map metadataMap = getMetadataMap(serviceName); - - for (ServiceRestMetadata serviceRestMetadata : serviceRestMetadataSet) { - - serviceRestMetadata.getMeta().forEach(restMethodMetadata -> { - RequestMetadata requestMetadata = restMethodMetadata.getRequest(); - RequestMetadataMatcher matcher = new RequestMetadataMatcher(requestMetadata); - DubboRestServiceMetadata metadata = new DubboRestServiceMetadata(serviceRestMetadata, restMethodMetadata); - metadataMap.put(matcher, metadata); - }); - } - - if (logger.isInfoEnabled()) { - logger.info("The REST metadata in the dubbo services has been loaded in the Spring application[name : {}]", serviceName); - } - } - - /** - * Get a {@link DubboRestServiceMetadata} by the specified service name if {@link RequestMetadata} matched - * - * @param serviceName service name - * @param requestMetadata {@link RequestMetadata} to be matched - * @return {@link DubboRestServiceMetadata} if matched, or null - */ - public DubboRestServiceMetadata get(String serviceName, RequestMetadata requestMetadata) { - return match(dubboRestServiceMetadataRepository, serviceName, requestMetadata); - } - - public Set getSubscribedServices() { - return Collections.unmodifiableSet(subscribedServices); - } - - private T match(Map> repository, String serviceName, - RequestMetadata requestMetadata) { - - Map map = repository.get(serviceName); - - T object = null; - - if (!isEmpty(map)) { - RequestMetadataMatcher matcher = new RequestMetadataMatcher(requestMetadata); - object = map.get(matcher); - if (object == null) { // Can't match exactly - // Require to match one by one - HttpRequest request = builder() - .method(requestMetadata.getMethod()) - .path(requestMetadata.getPath()) - .params(requestMetadata.getParams()) - .headers(requestMetadata.getHeaders()) - .build(); - - for (Map.Entry entry : map.entrySet()) { - RequestMetadataMatcher possibleMatcher = entry.getKey(); - if (possibleMatcher.match(request)) { - object = entry.getValue(); - break; - } - } - } - } - - if (object == null) { - if (logger.isWarnEnabled()) { - logger.warn("DubboServiceMetadata can't be found in the Spring application [%s] and %s", - serviceName, requestMetadata); - } - } - - return object; - } - - private Map getMetadataMap(String serviceName) { - return getMap(dubboRestServiceMetadataRepository, serviceName); - } - - private Set getServiceRestMetadataSet(String serviceName) { - - Set metadata = emptySet(); - - DubboMetadataService dubboMetadataService = dubboMetadataConfigServiceProxy.getProxy(serviceName); - - if (dubboMetadataService != null) { - try { - String serviceRestMetadataJsonConfig = dubboMetadataService.getServiceRestMetadata(); - if (hasText(serviceRestMetadataJsonConfig)) { - metadata = objectMapper.readValue(serviceRestMetadataJsonConfig, - TypeFactory.defaultInstance().constructCollectionType(LinkedHashSet.class, ServiceRestMetadata.class)); - } - } catch (Exception e) { - if (logger.isErrorEnabled()) { - logger.error(e.getMessage(), e); - } - } - } - return metadata; - } - - private static Map getMap(Map> repository, String key) { - return getOrDefault(repository, key, newHashMap()); - } - - private static V getOrDefault(Map source, K key, V defaultValue) { - V value = source.get(key); - if (value == null) { - value = defaultValue; - source.put(key, value); - } - return value; - } - - private static Map newHashMap() { - return new LinkedHashMap<>(); - } - - private void initSubscribedServices() { - // If subscribes all services - if (ALL_DUBBO_SERVICES.equals(dubboCloudProperties.getSubscribedServices())) { - List services = discoveryClient.getServices(); - subscribedServices = new HashSet<>(services); - if (logger.isWarnEnabled()) { - logger.warn("Current application will subscribe all services(size:{}) in registry, " + - "a lot of memory and CPU cycles may be used, " + - "thus it's strongly recommend you using the externalized property '{}' " + - "to specify the services", - subscribedServices.size(), "dubbo.cloud.subscribed-services"); - } - } else { - subscribedServices = new HashSet<>(dubboCloudProperties.subscribedServices()); - } - - excludeSelf(subscribedServices); - } - - private void excludeSelf(Set subscribedServices) { - subscribedServices.remove(currentApplicationName); - } - - private void initSubscribedDubboMetadataServices() { - // clear subscribedDubboMetadataServiceURLs - subscribedDubboMetadataServiceURLs.clear(); - - subscribedServices.stream() - .map(discoveryClient::getInstances) - .filter(this::isNotEmpty) - .forEach(serviceInstances -> { - ServiceInstance serviceInstance = serviceInstances.get(0); - getDubboMetadataServiceURLs(serviceInstance).forEach(dubboMetadataServiceURL -> { - initSubscribedDubboMetadataServiceURLs(dubboMetadataServiceURL); - initDubboMetadataServiceProxy(dubboMetadataServiceURL); - }); - }); - } - - private void initSubscribedDubboMetadataServiceURLs(URL dubboMetadataServiceURL) { - // add subscriptions - String serviceKey = dubboMetadataServiceURL.getServiceKey(); - subscribedDubboMetadataServiceURLs.add(serviceKey, dubboMetadataServiceURL); - } - - private void initDubboMetadataServiceProxy(URL dubboMetadataServiceURL) { - String serviceName = dubboMetadataServiceURL.getParameter(APPLICATION_KEY); - String version = dubboMetadataServiceURL.getParameter(VERSION_KEY); - // Initialize DubboMetadataService with right version - dubboMetadataConfigServiceProxy.initProxy(serviceName, version); - } - - private void initDubboRestServiceMetadataRepository() { - subscribedServices.forEach(this::initialize); - } - - private boolean isNotEmpty(Collection collection) { - return !CollectionUtils.isEmpty(collection); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboServiceBeanMetadataResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboServiceBeanMetadataResolver.java deleted file mode 100644 index 22b0b3d2..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboServiceBeanMetadataResolver.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata.resolver; - -import feign.Contract; -import feign.Feign; -import feign.MethodMetadata; -import feign.Util; -import org.apache.dubbo.common.URL; -import org.apache.dubbo.config.spring.ServiceBean; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.SmartInitializingSingleton; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata; -import org.springframework.util.ClassUtils; - -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * The metadata resolver for {@link Feign} for {@link ServiceBean Dubbo Service Bean} in the provider side. - * - * @author Mercy - */ -public class DubboServiceBeanMetadataResolver implements BeanClassLoaderAware, SmartInitializingSingleton, - MetadataResolver { - - private static final String[] CONTRACT_CLASS_NAMES = { - "feign.jaxrs2.JAXRS2Contract", - "org.springframework.cloud.openfeign.support.SpringMvcContract", - }; - - private final ObjectProvider contractObjectProvider; - - private ClassLoader classLoader; - - /** - * Feign Contracts - */ - private Collection contracts; - - public DubboServiceBeanMetadataResolver(ObjectProvider contractObjectProvider) { - this.contractObjectProvider = contractObjectProvider; - } - - @Override - public void afterSingletonsInstantiated() { - - LinkedList contracts = new LinkedList<>(); - - // Add injected Contract if available, for example SpringMvcContract Bean under Spring Cloud Open Feign - Contract contract = contractObjectProvider.getIfAvailable(); - - if (contract != null) { - contracts.add(contract); - } - - Stream.of(CONTRACT_CLASS_NAMES) - .filter(this::isClassPresent) // filter the existed classes - .map(this::loadContractClass) // load Contract Class - .map(this::createContract) // createServiceInstance instance by the specified class - .forEach(contracts::add); // add the Contract instance into contracts - - this.contracts = Collections.unmodifiableCollection(contracts); - } - - private Contract createContract(Class contractClassName) { - return (Contract) BeanUtils.instantiateClass(contractClassName); - } - - private Class loadContractClass(String contractClassName) { - return ClassUtils.resolveClassName(contractClassName, classLoader); - } - - private boolean isClassPresent(String className) { - return ClassUtils.isPresent(className, classLoader); - } - - @Override - public Set resolveServiceRestMetadata(ServiceBean serviceBean) { - - Object bean = serviceBean.getRef(); - - Class beanType = bean.getClass(); - - Set serviceRestMetadata = new LinkedHashSet<>(); - - Set methodRestMetadata = resolveMethodRestMetadata(beanType); - - List urls = serviceBean.getExportedUrls(); - - urls.stream() - .map(URL::toString) - .forEach(url -> { - ServiceRestMetadata metadata = new ServiceRestMetadata(); - metadata.setUrl(url); - metadata.setMeta(methodRestMetadata); - serviceRestMetadata.add(metadata); - }); - - return serviceRestMetadata; - } - - @Override - public Set resolveMethodRestMetadata(Class targetType) { - List feignContractMethods = selectFeignContractMethods(targetType); - return contracts.stream() - .map(contract -> parseAndValidateMetadata(contract, targetType)) - .flatMap(v -> v.stream()) - .map(methodMetadata -> resolveMethodRestMetadata(methodMetadata, targetType, feignContractMethods)) - .collect(Collectors.toSet()); - } - - private List parseAndValidateMetadata(Contract contract, Class targetType) { - List methodMetadataList = Collections.emptyList(); - try { - methodMetadataList = contract.parseAndValidatateMetadata(targetType); - } catch (Throwable ignored) { - // ignore - } - return methodMetadataList; - } - - /** - * Select feign contract methods - *

- * extract some code from {@link Contract.BaseContract#parseAndValidatateMetadata(java.lang.Class)} - * - * @param targetType - * @return non-null - */ - private List selectFeignContractMethods(Class targetType) { - List methods = new LinkedList<>(); - for (Method method : targetType.getMethods()) { - if (method.getDeclaringClass() == Object.class || - (method.getModifiers() & Modifier.STATIC) != 0 || - Util.isDefault(method)) { - continue; - } - methods.add(method); - } - return methods; - } - - protected RestMethodMetadata resolveMethodRestMetadata(MethodMetadata methodMetadata, Class targetType, - List feignContractMethods) { - String configKey = methodMetadata.configKey(); - Method feignContractMethod = getMatchedFeignContractMethod(targetType, feignContractMethods, configKey); - RestMethodMetadata metadata = new RestMethodMetadata(methodMetadata); - metadata.setMethod(new org.springframework.cloud.alibaba.dubbo.metadata.MethodMetadata(feignContractMethod)); - return metadata; - } - - private Method getMatchedFeignContractMethod(Class targetType, List methods, String expectedConfigKey) { - Method matchedMethod = null; - for (Method method : methods) { - String configKey = Feign.configKey(targetType, method); - if (expectedConfigKey.equals(configKey)) { - matchedMethod = method; - break; - } - } - return matchedMethod; - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolver.java deleted file mode 100644 index 3e232440..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolver.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata.resolver; - -import feign.Contract; -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboTransportedMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.core.env.PropertyResolver; - -import java.lang.reflect.Method; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static feign.Feign.configKey; - -/** - * {@link MethodMetadata} Resolver for the {@link DubboTransported} annotated classes or methods in client side. - * - * @author Mercy - * @see DubboTransportedMethodMetadata - */ -public class DubboTransportedMethodMetadataResolver { - - private static final Class DUBBO_TRANSPORTED_CLASS = DubboTransported.class; - - private final DubboTransportedAttributesResolver attributesResolver; - - private final Contract contract; - - public DubboTransportedMethodMetadataResolver(PropertyResolver propertyResolver, Contract contract) { - this.attributesResolver = new DubboTransportedAttributesResolver(propertyResolver); - this.contract = contract; - } - - public Map resolve(Class targetType) { - Set dubboTransportedMethodMetadataSet = - resolveDubboTransportedMethodMetadataSet(targetType); - Map restMethodMetadataMap = resolveRestRequestMetadataMap(targetType); - return dubboTransportedMethodMetadataSet - .stream() - .collect(Collectors.toMap(methodMetadata -> methodMetadata, methodMetadata -> { - RestMethodMetadata restMethodMetadata = restMethodMetadataMap.get(configKey(targetType, methodMetadata.getMethod())); - restMethodMetadata.setMethod(methodMetadata.getMethodMetadata()); - return restMethodMetadata; - } - )); - } - - protected Set resolveDubboTransportedMethodMetadataSet(Class targetType) { - // The public methods of target interface - Method[] methods = targetType.getMethods(); - - Set methodMetadataSet = new LinkedHashSet<>(); - - for (Method method : methods) { - DubboTransported dubboTransported = resolveDubboTransported(method); - if (dubboTransported != null) { - DubboTransportedMethodMetadata methodMetadata = createDubboTransportedMethodMetadata(method, dubboTransported); - methodMetadataSet.add(methodMetadata); - } - } - return methodMetadataSet; - } - - - private Map resolveRestRequestMetadataMap(Class targetType) { - return contract.parseAndValidatateMetadata(targetType) - .stream().collect(Collectors.toMap(feign.MethodMetadata::configKey, this::restMethodMetadata)); - } - - private RestMethodMetadata restMethodMetadata(feign.MethodMetadata methodMetadata) { - return new RestMethodMetadata(methodMetadata); - } - - private DubboTransportedMethodMetadata createDubboTransportedMethodMetadata(Method method, - DubboTransported dubboTransported) { - Map attributes = attributesResolver.resolve(dubboTransported); - return new DubboTransportedMethodMetadata(method, attributes); - } - - private DubboTransported resolveDubboTransported(Method method) { - DubboTransported dubboTransported = AnnotationUtils.findAnnotation(method, DUBBO_TRANSPORTED_CLASS); - if (dubboTransported == null) { // Attempt to find @DubboTransported in the declaring class - Class declaringClass = method.getDeclaringClass(); - dubboTransported = AnnotationUtils.findAnnotation(declaringClass, DUBBO_TRANSPORTED_CLASS); - } - return dubboTransported; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java deleted file mode 100644 index 01d038fb..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.openfeign; - -import org.apache.dubbo.rpc.service.GenericService; - -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContext; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.util.ClassUtils; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.util.Map; - -import static org.apache.dubbo.common.utils.PojoUtils.realize; - -/** - * Dubbo {@link GenericService} for {@link InvocationHandler} - * - * @author Mercy - */ -public class DubboInvocationHandler implements InvocationHandler { - - private final Map feignMethodMetadataMap; - - private final InvocationHandler defaultInvocationHandler; - - private final DubboGenericServiceExecutionContextFactory contextFactory; - - private final ClassLoader classLoader; - - public DubboInvocationHandler(Map feignMethodMetadataMap, - InvocationHandler defaultInvocationHandler, - ClassLoader classLoader, - DubboGenericServiceExecutionContextFactory contextFactory) { - this.feignMethodMetadataMap = feignMethodMetadataMap; - this.defaultInvocationHandler = defaultInvocationHandler; - this.classLoader = classLoader; - this.contextFactory = contextFactory; - } - - @Override - public Object invoke(Object proxy, Method feignMethod, Object[] args) throws Throwable { - - FeignMethodMetadata feignMethodMetadata = feignMethodMetadataMap.get(feignMethod); - - if (feignMethodMetadata == null) { - return defaultInvocationHandler.invoke(proxy, feignMethod, args); - } - - GenericService dubboGenericService = feignMethodMetadata.getDubboGenericService(); - RestMethodMetadata dubboRestMethodMetadata = feignMethodMetadata.getDubboRestMethodMetadata(); - RestMethodMetadata feignRestMethodMetadata = feignMethodMetadata.getFeignMethodMetadata(); - - DubboGenericServiceExecutionContext context = contextFactory.create(dubboRestMethodMetadata, feignRestMethodMetadata, args); - - String methodName = context.getMethodName(); - String[] parameterTypes = context.getParameterTypes(); - Object[] parameters = context.getParameters(); - - Object result = dubboGenericService.$invoke(methodName, parameterTypes, parameters); - - Class returnType = getReturnType(dubboRestMethodMetadata); - - return realize(result, returnType); - } - - private Class getReturnType(RestMethodMetadata dubboRestMethodMetadata) { - String returnType = dubboRestMethodMetadata.getReturnType(); - return ClassUtils.resolveClassName(returnType, classLoader); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java deleted file mode 100644 index 0419a157..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.openfeign; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.core.env.Environment; - -import static java.lang.reflect.Proxy.newProxyInstance; -import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration.TARGETER_CLASS_NAME; -import static org.springframework.util.ClassUtils.getUserClass; -import static org.springframework.util.ClassUtils.isPresent; -import static org.springframework.util.ClassUtils.resolveClassName; - -/** - * org.springframework.cloud.openfeign.Targeter {@link BeanPostProcessor} - * - * @author Mercy - */ -public class TargeterBeanPostProcessor implements BeanPostProcessor, BeanClassLoaderAware { - - private final Environment environment; - - private final DubboServiceMetadataRepository dubboServiceMetadataRepository; - - private final DubboGenericServiceFactory dubboGenericServiceFactory; - - private final DubboGenericServiceExecutionContextFactory contextFactory; - - private ClassLoader classLoader; - - public TargeterBeanPostProcessor(Environment environment, - DubboServiceMetadataRepository dubboServiceMetadataRepository, - DubboGenericServiceFactory dubboGenericServiceFactory, - DubboGenericServiceExecutionContextFactory contextFactory) { - this.environment = environment; - this.dubboServiceMetadataRepository = dubboServiceMetadataRepository; - this.dubboGenericServiceFactory = dubboGenericServiceFactory; - this.contextFactory = contextFactory; - } - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - - @Override - public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException { - if (isPresent(TARGETER_CLASS_NAME, classLoader)) { - Class beanClass = getUserClass(bean.getClass()); - Class targetClass = resolveClassName(TARGETER_CLASS_NAME, classLoader); - if (targetClass.isAssignableFrom(beanClass)) { - return newProxyInstance(classLoader, new Class[]{targetClass}, - new TargeterInvocationHandler(bean, environment, classLoader, dubboServiceMetadataRepository, - dubboGenericServiceFactory, contextFactory)); - } - } - return bean; - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java deleted file mode 100644 index 6e9ca7f4..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.openfeign; - - -import org.apache.dubbo.rpc.service.GenericService; - -import feign.Contract; -import feign.Target; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboRestServiceMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboTransportedMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RequestMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.metadata.resolver.DubboTransportedMethodMetadataResolver; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; -import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; -import org.springframework.cloud.openfeign.FeignContext; -import org.springframework.core.env.Environment; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.util.HashMap; -import java.util.Map; - -import static java.lang.reflect.Proxy.newProxyInstance; - -/** - * org.springframework.cloud.openfeign.Targeter {@link InvocationHandler} - * - * @author Mercy - */ -class TargeterInvocationHandler implements InvocationHandler { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private final Object bean; - - private final Environment environment; - - private final ClassLoader classLoader; - - private final DubboServiceMetadataRepository repository; - - private final DubboGenericServiceFactory dubboGenericServiceFactory; - - private final DubboGenericServiceExecutionContextFactory contextFactory; - - TargeterInvocationHandler(Object bean, Environment environment, - ClassLoader classLoader, - DubboServiceMetadataRepository repository, - DubboGenericServiceFactory dubboGenericServiceFactory, - DubboGenericServiceExecutionContextFactory contextFactory) { - this.bean = bean; - this.environment = environment; - this.classLoader = classLoader; - this.repository = repository; - this.dubboGenericServiceFactory = dubboGenericServiceFactory; - this.contextFactory = contextFactory; - } - - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - /** - * args[0]: FeignClientFactoryBean factory - * args[1]: Feign.Builder feign - * args[2]: FeignContext context - * args[3]: Target.HardCodedTarget target - */ - FeignContext feignContext = cast(args[2]); - Target.HardCodedTarget target = cast(args[3]); - - // Execute Targeter#target method first - method.setAccessible(true); - // Get the default proxy object - Object defaultProxy = method.invoke(bean, args); - // Create Dubbo Proxy if required - return createDubboProxyIfRequired(feignContext, target, defaultProxy); - } - - private Object createDubboProxyIfRequired(FeignContext feignContext, Target target, Object defaultProxy) { - - DubboInvocationHandler dubboInvocationHandler = createDubboInvocationHandler(feignContext, target, defaultProxy); - - if (dubboInvocationHandler == null) { - return defaultProxy; - } - - return newProxyInstance(target.type().getClassLoader(), new Class[]{target.type()}, dubboInvocationHandler); - } - - private DubboInvocationHandler createDubboInvocationHandler(FeignContext feignContext, Target target, - Object defaultFeignClientProxy) { - - // Service name equals @FeignClient.name() - String serviceName = target.name(); - Class targetType = target.type(); - - // Get Contract Bean from FeignContext - Contract contract = feignContext.getInstance(serviceName, Contract.class); - - DubboTransportedMethodMetadataResolver resolver = - new DubboTransportedMethodMetadataResolver(environment, contract); - - Map feignRestMethodMetadataMap = resolver.resolve(targetType); - - if (feignRestMethodMetadataMap.isEmpty()) { // @DubboTransported method was not found from the Client interface - if (logger.isDebugEnabled()) { - logger.debug("@{} method was not found in the Feign target type[{}]", - DubboTransported.class.getSimpleName(), targetType.getName()); - } - return null; - } - - // Update Metadata - repository.initialize(serviceName); - - Map feignMethodMetadataMap = getFeignMethodMetadataMap(serviceName, feignRestMethodMetadataMap); - - InvocationHandler defaultFeignClientInvocationHandler = Proxy.getInvocationHandler(defaultFeignClientProxy); - - DubboInvocationHandler dubboInvocationHandler = new DubboInvocationHandler(feignMethodMetadataMap, - defaultFeignClientInvocationHandler, classLoader, contextFactory); - - return dubboInvocationHandler; - } - - private Map getFeignMethodMetadataMap(String serviceName, - Map - feignRestMethodMetadataMap) { - Map feignMethodMetadataMap = new HashMap<>(); - - for (Map.Entry entry : feignRestMethodMetadataMap.entrySet()) { - RestMethodMetadata feignRestMethodMetadata = entry.getValue(); - RequestMetadata feignRequestMetadata = feignRestMethodMetadata.getRequest(); - DubboRestServiceMetadata metadata = repository.get(serviceName, feignRequestMetadata); - if (metadata != null) { - DubboTransportedMethodMetadata dubboTransportedMethodMetadata = entry.getKey(); - Map dubboTranslatedAttributes = dubboTransportedMethodMetadata.getAttributes(); - Method method = dubboTransportedMethodMetadata.getMethod(); - GenericService dubboGenericService = dubboGenericServiceFactory.create(metadata, dubboTranslatedAttributes); - RestMethodMetadata dubboRestMethodMetadata = metadata.getRestMethodMetadata(); - MethodMetadata methodMetadata = dubboTransportedMethodMetadata.getMethodMetadata(); - FeignMethodMetadata feignMethodMetadata = new FeignMethodMetadata(dubboGenericService, - dubboRestMethodMetadata, feignRestMethodMetadata); - feignMethodMetadataMap.put(method, feignMethodMetadata); - } - } - - return feignMethodMetadataMap; - } - - private static T cast(Object object) { - return (T) object; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java deleted file mode 100644 index b60c8247..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.registry; - -import org.apache.dubbo.common.Constants; -import org.apache.dubbo.common.URL; -import org.apache.dubbo.registry.NotifyListener; -import org.apache.dubbo.registry.RegistryFactory; -import org.apache.dubbo.registry.support.FailbackRegistry; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataService; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceProxy; -import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.discovery.DiscoveryClient; - -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static java.util.Collections.emptyList; -import static org.apache.dubbo.common.Constants.APPLICATION_KEY; -import static org.apache.dubbo.common.Constants.GROUP_KEY; -import static org.apache.dubbo.common.Constants.PROTOCOL_KEY; -import static org.apache.dubbo.common.Constants.PROVIDER_SIDE; -import static org.apache.dubbo.common.Constants.SIDE_KEY; -import static org.apache.dubbo.common.Constants.VERSION_KEY; -import static org.springframework.util.StringUtils.hasText; - -/** - * Abstract Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud" - * - * @author Mercy - */ -public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { - - /** - * The parameter name of {@link #servicesLookupInterval} - */ - public static final String SERVICES_LOOKUP_INTERVAL_PARAM_NAME = "dubbo.services.lookup.interval"; - - protected static final String DUBBO_METADATA_SERVICE_CLASS_NAME = DubboMetadataService.class.getName(); - - private static final Set schedulerTasks = new HashSet<>(); - - protected final Logger logger = LoggerFactory.getLogger(getClass()); - - /** - * The interval in second of lookup service names(only for Dubbo-OPS) - */ - private final long servicesLookupInterval; - - private final DiscoveryClient discoveryClient; - - private final DubboServiceMetadataRepository repository; - - private final DubboMetadataServiceProxy dubboMetadataConfigServiceProxy; - - private final JSONUtils jsonUtils; - - - protected final ScheduledExecutorService servicesLookupScheduler; - - public AbstractSpringCloudRegistry(URL url, - DiscoveryClient discoveryClient, - DubboServiceMetadataRepository dubboServiceMetadataRepository, - DubboMetadataServiceProxy dubboMetadataConfigServiceProxy, - JSONUtils jsonUtils, - ScheduledExecutorService servicesLookupScheduler) { - super(url); - this.servicesLookupInterval = url.getParameter(SERVICES_LOOKUP_INTERVAL_PARAM_NAME, 60L); - this.discoveryClient = discoveryClient; - this.repository = dubboServiceMetadataRepository; - this.dubboMetadataConfigServiceProxy = dubboMetadataConfigServiceProxy; - this.jsonUtils = jsonUtils; - this.servicesLookupScheduler = servicesLookupScheduler; - } - - protected boolean shouldRegister(URL url) { - String side = url.getParameter(SIDE_KEY); - - boolean should = PROVIDER_SIDE.equals(side); // Only register the Provider. - - if (!should) { - if (logger.isDebugEnabled()) { - logger.debug("The URL[{}] should not be registered.", url.toString()); - } - } - - return should; - } - - @Override - public final void doRegister(URL url) { - if (!shouldRegister(url)) { - return; - } - doRegister0(url); - } - - /** - * The sub-type should implement to register - * - * @param url {@link URL} - */ - protected abstract void doRegister0(URL url); - - @Override - public final void doUnregister(URL url) { - if (!shouldRegister(url)) { - return; - } - doUnregister0(url); - } - - /** - * The sub-type should implement to unregister - * - * @param url {@link URL} - */ - protected abstract void doUnregister0(URL url); - - @Override - public final void doSubscribe(URL url, NotifyListener listener) { - - if (isAdminURL(url)) { - // TODO in future - } else if (isDubboMetadataServiceURL(url)) { // for DubboMetadataService - subscribeDubboMetadataServiceURLs(url, listener); - } else { // for general Dubbo Services - subscribeDubboServiceURLs(url, listener); - } - } - - protected void subscribeDubboServiceURLs(URL url, NotifyListener listener) { - - doSubscribeDubboServiceURLs(url, listener); - - submitSchedulerTaskIfAbsent(url, listener); - } - - private void submitSchedulerTaskIfAbsent(URL url, NotifyListener listener) { - String taskId = url.toIdentityString(); - if (schedulerTasks.add(taskId)) { - schedule(() -> doSubscribeDubboServiceURLs(url, listener)); - } - } - - protected void doSubscribeDubboServiceURLs(URL url, NotifyListener listener) { - - Set subscribedServices = repository.getSubscribedServices(); - - subscribedServices.stream() - .map(dubboMetadataConfigServiceProxy::getProxy) - .filter(Objects::nonNull) - .forEach(dubboMetadataService -> { - List exportedURLs = getExportedURLs(dubboMetadataService, url); - List allSubscribedURLs = new LinkedList<>(); - for (URL exportedURL : exportedURLs) { - String serviceName = exportedURL.getParameter(APPLICATION_KEY); - List serviceInstances = getServiceInstances(serviceName); - String protocol = exportedURL.getProtocol(); - List subscribedURLs = new LinkedList<>(); - serviceInstances.forEach(serviceInstance -> { - Integer port = repository.getDubboProtocolPort(serviceInstance, protocol); - String host = serviceInstance.getHost(); - if (port == null) { - if (logger.isWarnEnabled()) { - logger.warn("The protocol[{}] port of Dubbo service instance[host : {}] " + - "can't be resolved", protocol, host); - } - } else { - URL subscribedURL = new URL(protocol, host, port, exportedURL.getParameters()); - subscribedURLs.add(subscribedURL); - } - }); - - if (logger.isDebugEnabled()) { - logger.debug("The subscribed URL[{}] will notify all URLs : {}", url, subscribedURLs); - } - - allSubscribedURLs.addAll(subscribedURLs); - } - - listener.notify(allSubscribedURLs); - }); - } - - private List getServiceInstances(String serviceName) { - return hasText(serviceName) ? doGetServiceInstances(serviceName) : emptyList(); - } - - private List doGetServiceInstances(String serviceName) { - List serviceInstances = emptyList(); - try { - serviceInstances = discoveryClient.getInstances(serviceName); - } catch (Exception e) { - if (logger.isErrorEnabled()) { - logger.error(e.getMessage(), e); - } - } - return serviceInstances; - } - - private List getExportedURLs(DubboMetadataService dubboMetadataService, URL url) { - String serviceInterface = url.getServiceInterface(); - String group = url.getParameter(GROUP_KEY); - String version = url.getParameter(VERSION_KEY); - // The subscribed protocol may be null - String subscribedProtocol = url.getParameter(PROTOCOL_KEY); - String exportedURLsJSON = dubboMetadataService.getExportedURLs(serviceInterface, group, version); - return jsonUtils - .toURLs(exportedURLsJSON) - .stream() - .filter(exportedURL -> - subscribedProtocol == null || subscribedProtocol.equalsIgnoreCase(exportedURL.getProtocol()) - ).collect(Collectors.toList()); - } - - private void subscribeDubboMetadataServiceURLs(URL url, NotifyListener listener) { - String serviceInterface = url.getServiceInterface(); - String group = url.getParameter(GROUP_KEY); - String version = url.getParameter(VERSION_KEY); - String protocol = url.getParameter(PROTOCOL_KEY); - List urls = repository.findSubscribedDubboMetadataServiceURLs(serviceInterface, group, version, protocol); - listener.notify(urls); - } - - @Override - public final void doUnsubscribe(URL url, NotifyListener listener) { - if (isAdminURL(url)) { - shutdownServiceNamesLookup(); - } - } - - @Override - public boolean isAvailable() { - return !discoveryClient.getServices().isEmpty(); - } - - protected void shutdownServiceNamesLookup() { - if (servicesLookupScheduler != null) { - servicesLookupScheduler.shutdown(); - } - } - - protected boolean isAdminURL(URL url) { - return Constants.ADMIN_PROTOCOL.equals(url.getProtocol()); - } - - protected boolean isDubboMetadataServiceURL(URL url) { - return DUBBO_METADATA_SERVICE_CLASS_NAME.equals(url.getServiceInterface()); - } - - protected ScheduledFuture schedule(Runnable runnable) { - return this.servicesLookupScheduler.scheduleAtFixedRate(runnable, servicesLookupInterval, - servicesLookupInterval, TimeUnit.SECONDS); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java deleted file mode 100644 index 4928d40e..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.registry; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.registry.RegistryFactory; - -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceProxy; -import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; -import org.springframework.cloud.client.discovery.DiscoveryClient; - -import java.util.concurrent.ScheduledExecutorService; - -/** - * Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud" - * - * @author Mercy - */ -public class SpringCloudRegistry extends AbstractSpringCloudRegistry { - - private final DubboServiceMetadataRepository dubboServiceMetadataRepository; - - public SpringCloudRegistry(URL url, DiscoveryClient discoveryClient, - DubboServiceMetadataRepository dubboServiceMetadataRepository, - DubboMetadataServiceProxy dubboMetadataConfigServiceProxy, - JSONUtils jsonUtils, - ScheduledExecutorService servicesLookupScheduler) { - super(url, discoveryClient, dubboServiceMetadataRepository, dubboMetadataConfigServiceProxy, jsonUtils, servicesLookupScheduler); - this.dubboServiceMetadataRepository = dubboServiceMetadataRepository; - } - - @Override - protected void doRegister0(URL url) { - dubboServiceMetadataRepository.exportURL(url); - } - - @Override - protected void doUnregister0(URL url) { - dubboServiceMetadataRepository.unexportURL(url); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java deleted file mode 100644 index 36897cf6..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.registry; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.NamedThreadFactory; -import org.apache.dubbo.registry.Registry; -import org.apache.dubbo.registry.RegistryFactory; - -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceProxy; -import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.context.ConfigurableApplicationContext; - -import java.util.concurrent.ScheduledExecutorService; - -import static java.lang.System.getProperty; -import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; - -/** - * Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud" - * - * @author Mercy - * @see RegistryFactory - * @see SpringCloudRegistry - */ -public class SpringCloudRegistryFactory implements RegistryFactory { - - private static String SERVICES_LOOKUP_SCHEDULER_THREAD_NAME_PREFIX = - getProperty("dubbo.services.lookup.scheduler.thread.name.prefix ", "dubbo-services-lookup-"); - - private static ConfigurableApplicationContext applicationContext; - - private final ScheduledExecutorService servicesLookupScheduler; - - private DiscoveryClient discoveryClient; - - private DubboServiceMetadataRepository dubboServiceMetadataRepository; - - private DubboMetadataServiceProxy dubboMetadataConfigServiceProxy; - - private JSONUtils jsonUtils; - - private volatile boolean initialized = false; - - public SpringCloudRegistryFactory() { - servicesLookupScheduler = newSingleThreadScheduledExecutor( - new NamedThreadFactory(SERVICES_LOOKUP_SCHEDULER_THREAD_NAME_PREFIX)); - } - - protected void init() { - if (initialized || applicationContext == null) { - return; - } - this.discoveryClient = applicationContext.getBean(DiscoveryClient.class); - this.dubboServiceMetadataRepository = applicationContext.getBean(DubboServiceMetadataRepository.class); - this.dubboMetadataConfigServiceProxy = applicationContext.getBean(DubboMetadataServiceProxy.class); - this.jsonUtils = applicationContext.getBean(JSONUtils.class); - } - - @Override - public Registry getRegistry(URL url) { - init(); - return new SpringCloudRegistry(url, discoveryClient, dubboServiceMetadataRepository, - dubboMetadataConfigServiceProxy, jsonUtils, servicesLookupScheduler); - } - - public static void setApplicationContext(ConfigurableApplicationContext applicationContext) { - SpringCloudRegistryFactory.applicationContext = applicationContext; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContextFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContextFactory.java deleted file mode 100644 index 625173d3..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContextFactory.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodParameterMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.cloud.alibaba.dubbo.service.parameter.DubboGenericServiceParameterResolver; -import org.springframework.core.annotation.AnnotationAwareOrderComparator; - -import javax.annotation.PostConstruct; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * {@link DubboGenericServiceExecutionContext} Factory - * - * @author Mercy - * @see DubboGenericServiceParameterResolver - */ -public class DubboGenericServiceExecutionContextFactory { - - @Autowired(required = false) - private final List resolvers = Collections.emptyList(); - - @PostConstruct - public void init() { - AnnotationAwareOrderComparator.sort(resolvers); - } - - public DubboGenericServiceExecutionContext create(RestMethodMetadata dubboRestMethodMetadata, - RestMethodMetadata clientMethodMetadata, Object[] arguments) { - - MethodMetadata dubboMethodMetadata = dubboRestMethodMetadata.getMethod(); - - String methodName = dubboMethodMetadata.getName(); - - String[] parameterTypes = resolveParameterTypes(dubboMethodMetadata); - - Object[] parameters = resolveParameters(dubboRestMethodMetadata, clientMethodMetadata, arguments); - - return new DubboGenericServiceExecutionContext(methodName, parameterTypes, parameters); - } - - public DubboGenericServiceExecutionContext create(RestMethodMetadata dubboRestMethodMetadata, - HttpServerRequest request) { - MethodMetadata methodMetadata = dubboRestMethodMetadata.getMethod(); - - String methodName = methodMetadata.getName(); - - String[] parameterTypes = resolveParameterTypes(methodMetadata); - - Object[] parameters = resolveParameters(dubboRestMethodMetadata, request); - - return new DubboGenericServiceExecutionContext(methodName, parameterTypes, parameters); - } - - private Map buildParamNameToIndex(List params) { - Map paramNameToIndex = new LinkedHashMap<>(); - for (MethodParameterMetadata param : params) { - paramNameToIndex.put(param.getName(), param.getIndex()); - } - return paramNameToIndex; - } - - protected String[] resolveParameterTypes(MethodMetadata methodMetadata) { - - List params = methodMetadata.getParams(); - - String[] parameterTypes = new String[params.size()]; - - for (MethodParameterMetadata parameterMetadata : params) { - int index = parameterMetadata.getIndex(); - String parameterType = parameterMetadata.getType(); - parameterTypes[index] = parameterType; - } - - return parameterTypes; - } - - protected Object[] resolveParameters(RestMethodMetadata dubboRestMethodMetadata, HttpServerRequest request) { - - MethodMetadata dubboMethodMetadata = dubboRestMethodMetadata.getMethod(); - - List params = dubboMethodMetadata.getParams(); - - Object[] parameters = new Object[params.size()]; - - for (MethodParameterMetadata parameterMetadata : params) { - - int index = parameterMetadata.getIndex(); - - for (DubboGenericServiceParameterResolver resolver : resolvers) { - Object parameter = resolver.resolve(dubboRestMethodMetadata, parameterMetadata, request); - if (parameter != null) { - parameters[index] = parameter; - break; - } - } - } - - return parameters; - } - - protected Object[] resolveParameters(RestMethodMetadata dubboRestMethodMetadata, - RestMethodMetadata clientRestMethodMetadata, Object[] arguments) { - - MethodMetadata dubboMethodMetadata = dubboRestMethodMetadata.getMethod(); - - List params = dubboMethodMetadata.getParams(); - - Object[] parameters = new Object[params.size()]; - - for (MethodParameterMetadata parameterMetadata : params) { - - int index = parameterMetadata.getIndex(); - - for (DubboGenericServiceParameterResolver resolver : resolvers) { - Object parameter = resolver.resolve(dubboRestMethodMetadata, parameterMetadata, clientRestMethodMetadata, arguments); - if (parameter != null) { - parameters[index] = parameter; - break; - } - } - } - - return parameters; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java deleted file mode 100644 index 1198bd74..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.CollectionUtils; -import org.apache.dubbo.config.spring.ReferenceBean; -import org.apache.dubbo.rpc.service.GenericService; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.MutablePropertyValues; -import org.springframework.beans.propertyeditors.StringTrimmerEditor; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboRestServiceMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata; -import org.springframework.util.StringUtils; -import org.springframework.validation.DataBinder; - -import javax.annotation.PreDestroy; -import java.beans.PropertyEditorSupport; -import java.util.Collection; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import static java.util.Collections.emptyMap; -import static org.apache.dubbo.common.Constants.GROUP_KEY; -import static org.apache.dubbo.common.Constants.VERSION_KEY; -import static org.springframework.util.StringUtils.commaDelimitedListToStringArray; - -/** - * Dubbo {@link GenericService} Factory - * - * @author Mercy - */ -public class DubboGenericServiceFactory { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private final ConcurrentMap> cache = new ConcurrentHashMap<>(); - - public GenericService create(DubboRestServiceMetadata dubboServiceMetadata, - Map dubboTranslatedAttributes) { - - ReferenceBean referenceBean = build(dubboServiceMetadata.getServiceRestMetadata(), dubboTranslatedAttributes); - - return referenceBean == null ? null : referenceBean.get(); - } - - public GenericService create(String serviceName, Class serviceClass, String version) { - String interfaceName = serviceClass.getName(); - ReferenceBean referenceBean = build(interfaceName, version, serviceName, emptyMap()); - return referenceBean.get(); - } - - - private ReferenceBean build(ServiceRestMetadata serviceRestMetadata, - Map dubboTranslatedAttributes) { - String urlValue = serviceRestMetadata.getUrl(); - URL url = URL.valueOf(urlValue); - String interfaceName = url.getServiceInterface(); - String version = url.getParameter(VERSION_KEY); - String group = url.getParameter(GROUP_KEY); - - return build(interfaceName, version, group, dubboTranslatedAttributes); - } - - private ReferenceBean build(String interfaceName, String version, String group, - Map dubboTranslatedAttributes) { - - Integer key = Objects.hash(interfaceName, version, group, dubboTranslatedAttributes); - - ReferenceBean referenceBean = cache.get(key); - - if (referenceBean == null) { - referenceBean = new ReferenceBean<>(); - referenceBean.setGeneric(true); - referenceBean.setInterface(interfaceName); - referenceBean.setVersion(version); - referenceBean.setGroup(group); - bindReferenceBean(referenceBean, dubboTranslatedAttributes); - } - - return referenceBean; - } - - private void bindReferenceBean(ReferenceBean referenceBean, Map dubboTranslatedAttributes) { - DataBinder dataBinder = new DataBinder(referenceBean); - // Register CustomEditors for special fields - dataBinder.registerCustomEditor(String.class, "filter", new StringTrimmerEditor(true)); - dataBinder.registerCustomEditor(String.class, "listener", new StringTrimmerEditor(true)); - dataBinder.registerCustomEditor(Map.class, "parameters", new PropertyEditorSupport() { - - public void setAsText(String text) throws java.lang.IllegalArgumentException { - // Trim all whitespace - String content = StringUtils.trimAllWhitespace(text); - if (!StringUtils.hasText(content)) { // No content , ignore directly - return; - } - // replace "=" to "," - content = StringUtils.replace(content, "=", ","); - // replace ":" to "," - content = StringUtils.replace(content, ":", ","); - // String[] to Map - Map parameters = CollectionUtils.toStringMap(commaDelimitedListToStringArray(content)); - setValue(parameters); - } - }); - - dataBinder.bind(new MutablePropertyValues(dubboTranslatedAttributes)); - } - - @PreDestroy - public void destroy() { - destroyReferenceBeans(); - cache.values(); - } - - private void destroyReferenceBeans() { - Collection> referenceBeans = cache.values(); - if (logger.isInfoEnabled()) { - logger.info("The Dubbo GenericService ReferenceBeans are destroying..."); - } - for (ReferenceBean referenceBean : referenceBeans) { - referenceBean.destroy(); // destroy ReferenceBean - if (logger.isInfoEnabled()) { - logger.info("Destroyed the ReferenceBean : {} ", referenceBean); - } - } - } - -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java deleted file mode 100644 index 131a0c1a..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.config.annotation.Service; - -import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Dubbo Metadata Service is a core interface for service subscribers, - * it must keep the stable of structure in every evolution , makes sure all subscribers' compatibility. - *

- * The interface contract's version must be {@link #VERSION} constant and group must be current Dubbo application name - * - * @author Mercy - */ -public interface DubboMetadataService { - - /** - * Current version of the interface contract - */ - String VERSION = "1.0.0"; - - /** - * Get the json content of {@link ServiceRestMetadata} {@link Set} - * - * @return null if present - */ - String getServiceRestMetadata(); - - - /** - * Get all exported {@link URL#getServiceKey() service keys} - * - * @return non-null read-only {@link Set} - */ - Set getAllServiceKeys(); - - /** - * Get all exported Dubbo's {@link URL URLs} {@link Map} whose key is the return value of - * {@link URL#getServiceKey()} method and value is the json content of List of {@link URL URLs} - * - * @return non-null read-only {@link Map} - */ - Map getAllExportedURLs(); - - /** - * Get the json content of an exported List of {@link URL URLs} by the serviceInterface , group and version - * - * @param serviceInterface The class name of service interface - * @param group {@link Service#group() the service group} (optional) - * @param version {@link Service#version() the service version} (optional) - * @return non-null read-only {@link List} - * @see URL - */ - String getExportedURLs(String serviceInterface, String group, String version); -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java deleted file mode 100644 index 598b1ac3..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.common.URL; -import org.apache.dubbo.config.ApplicationConfig; -import org.apache.dubbo.config.ProtocolConfig; -import org.apache.dubbo.config.ServiceConfig; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import javax.annotation.PreDestroy; -import java.util.List; -import java.util.function.Supplier; - -/** - * {@link DubboMetadataService} exporter - * - * @author Mercy - */ -@Component -public class DubboMetadataServiceExporter { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - @Autowired - private ApplicationConfig applicationConfig; - - @Autowired - private ObjectProvider dubboMetadataService; - - @Autowired - private Supplier protocolConfigSupplier; - - @Value("${spring.application.name:${dubbo.application.name:application}}") - private String currentApplicationName; - - /** - * The ServiceConfig of DubboMetadataConfigService to be exported, can be nullable. - */ - private ServiceConfig serviceConfig; - - /** - * export {@link DubboMetadataService} as Dubbo service - * - * @return the exported {@link URL URLs} - */ - public List export() { - - if (serviceConfig == null || !serviceConfig.isExported()) { - - serviceConfig = new ServiceConfig<>(); - - serviceConfig.setInterface(DubboMetadataService.class); - // Use DubboMetadataService.VERSION as the Dubbo Service version - serviceConfig.setVersion(DubboMetadataService.VERSION); - // Use current Spring application name as the Dubbo Service group - serviceConfig.setGroup(currentApplicationName); - serviceConfig.setRef(dubboMetadataService.getIfAvailable()); - serviceConfig.setApplication(applicationConfig); - serviceConfig.setProtocol(protocolConfigSupplier.get()); - - serviceConfig.export(); - - if (logger.isInfoEnabled()) { - logger.info("The Dubbo service[{}] has been exported.", serviceConfig.toString()); - } - } - - return serviceConfig.getExportedUrls(); - } - - - /** - * unexport {@link DubboMetadataService} - */ - @PreDestroy - public void unexport() { - - if (serviceConfig == null || serviceConfig.isUnexported()) { - return; - } - - serviceConfig.unexport(); - - if (logger.isInfoEnabled()) { - logger.info("The Dubbo service[{}] has been unexported.", serviceConfig.toString()); - } - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java deleted file mode 100644 index 614207c2..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.DisposableBean; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import static java.lang.reflect.Proxy.newProxyInstance; - -/** - * The proxy of {@link DubboMetadataService} - */ -public class DubboMetadataServiceProxy implements BeanClassLoaderAware, DisposableBean { - - private final DubboGenericServiceFactory dubboGenericServiceFactory; - - private ClassLoader classLoader; - - private final Map dubboMetadataServiceCache = new ConcurrentHashMap<>(); - - public DubboMetadataServiceProxy(DubboGenericServiceFactory dubboGenericServiceFactory) { - this.dubboGenericServiceFactory = dubboGenericServiceFactory; - } - - /** - * Initializes {@link DubboMetadataService}'s Proxy - * - * @param serviceName the service name - * @param version the service version - * @return a {@link DubboMetadataService} proxy - */ - public DubboMetadataService initProxy(String serviceName, String version) { - return dubboMetadataServiceCache.computeIfAbsent(serviceName, name -> newProxy(name, version)); - } - - /** - * Get a proxy instance of {@link DubboMetadataService} via the specified service name - * - * @param serviceName the service name - * @return a {@link DubboMetadataService} proxy - */ - public DubboMetadataService getProxy(String serviceName) { - return dubboMetadataServiceCache.get(serviceName); - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - @Override - public void destroy() throws Exception { - dubboMetadataServiceCache.clear(); - } - - /** - * New a proxy instance of {@link DubboMetadataService} via the specified service name - * - * @param serviceName the service name - * @param version the service version - * @return a {@link DubboMetadataService} proxy - */ - protected DubboMetadataService newProxy(String serviceName, String version) { - return (DubboMetadataService) newProxyInstance(classLoader, new Class[]{DubboMetadataService.class}, - new DubboMetadataServiceInvocationHandler(serviceName, version, dubboGenericServiceFactory)); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/IntrospectiveDubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/IntrospectiveDubboMetadataService.java deleted file mode 100644 index d3a6a259..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/IntrospectiveDubboMetadataService.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.common.URL; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository; -import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static java.util.Collections.unmodifiableMap; -import static org.springframework.util.CollectionUtils.isEmpty; - -/** - * Introspective {@link DubboMetadataService} implementation - * - * @author Mercy - */ -public class IntrospectiveDubboMetadataService implements DubboMetadataService { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - @Autowired - private ObjectProvider dubboServiceMetadataRepository; - - @Autowired - private JSONUtils jsonUtils; - - @Override - public String getServiceRestMetadata() { - Set serviceRestMetadata = getRepository().getServiceRestMetadata(); - String serviceRestMetadataJsonConfig = null; - if (!isEmpty(serviceRestMetadata)) { - serviceRestMetadataJsonConfig = jsonUtils.toJSON(serviceRestMetadata); - } - return serviceRestMetadataJsonConfig; - } - - @Override - public Set getAllServiceKeys() { - return getRepository().getAllServiceKeys(); - } - - @Override - public Map getAllExportedURLs() { - Map> allExportedUrls = getRepository().getAllExportedUrls(); - if (isEmpty(allExportedUrls)) { - if (logger.isDebugEnabled()) { - logger.debug("There is no registered URL."); - } - return Collections.emptyMap(); - } - - Map result = new HashMap<>(); - - allExportedUrls.forEach((serviceKey, urls) -> { - result.put(serviceKey, jsonUtils.toJSON(urls)); - }); - - return unmodifiableMap(result); - } - - @Override - public String getExportedURLs(String serviceInterface, String group, String version) { - List urls = getRepository().getExportedURLs(serviceInterface, group, version); - return jsonUtils.toJSON(urls); - } - - private DubboServiceMetadataRepository getRepository() { - return dubboServiceMetadataRepository.getIfAvailable(); - } -} \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/AbstractNamedValueServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/AbstractNamedValueServiceParameterResolver.java deleted file mode 100644 index 3654b1bd..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/AbstractNamedValueServiceParameterResolver.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; - -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodParameterMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.util.CollectionUtils; -import org.springframework.util.MultiValueMap; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; - -import static org.springframework.util.ObjectUtils.isEmpty; - -/** - * Abstract HTTP Names Value {@link DubboGenericServiceParameterResolver Dubbo GenericService Parameter Resolver} - * - * @author Mercy - */ -public abstract class AbstractNamedValueServiceParameterResolver extends AbstractDubboGenericServiceParameterResolver { - - /** - * Get the {@link MultiValueMap} of names and values - * - * @param request - * @return - */ - protected abstract MultiValueMap getNameAndValuesMap(HttpServerRequest request); - - @Override - public Object resolve(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata, - HttpServerRequest request) { - - Collection names = getNames(restMethodMetadata, methodParameterMetadata); - - if (isEmpty(names)) { // index can't match - return null; - } - - MultiValueMap nameAndValues = getNameAndValuesMap(request); - - String targetName = null; - - for (String name : names) { - if (nameAndValues.containsKey(name)) { - targetName = name; - break; - } - } - - if (targetName == null) { // request parameter is abstract - return null; - } - - Class parameterType = resolveClass(methodParameterMetadata.getType()); - - Object paramValue = null; - - if (parameterType.isArray()) { // Array type - paramValue = nameAndValues.get(targetName); - } else { - paramValue = nameAndValues.getFirst(targetName); - } - - return resolveValue(paramValue, parameterType); - } - - @Override - public Object resolve(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata, - RestMethodMetadata clientRestMethodMetadata, Object[] arguments) { - - Collection names = getNames(restMethodMetadata, methodParameterMetadata); - - if (isEmpty(names)) { // index can't match - return null; - } - - Integer index = null; - - Map> clientIndexToName = clientRestMethodMetadata.getIndexToName(); - - for (Map.Entry> entry : clientIndexToName.entrySet()) { - - Collection clientParamNames = entry.getValue(); - - if (CollectionUtils.containsAny(names, clientParamNames)) { - index = entry.getKey(); - break; - } - } - - return index > -1 ? arguments[index] : null; - } - - protected Collection getNames(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata) { - - Map> indexToName = restMethodMetadata.getIndexToName(); - - int index = methodParameterMetadata.getIndex(); - - Collection paramNames = indexToName.get(index); - - return paramNames == null ? Collections.emptyList() : paramNames; - } - -} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestBodyServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestBodyServiceParameterResolver.java deleted file mode 100644 index e4f35cae..00000000 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/RequestBodyServiceParameterResolver.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service.parameter; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.http.HttpMessageConverters; -import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest; -import org.springframework.cloud.alibaba.dubbo.http.converter.HttpMessageConverterHolder; -import org.springframework.cloud.alibaba.dubbo.http.util.HttpMessageConverterResolver; -import org.springframework.cloud.alibaba.dubbo.metadata.MethodParameterMetadata; -import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.HttpMessageNotReadableException; - -import javax.annotation.PostConstruct; -import java.io.IOException; -import java.util.Collections; -import java.util.Objects; - -/** - * HTTP Request Body {@link DubboGenericServiceParameterResolver} - * - * @author Mercy - */ -public class RequestBodyServiceParameterResolver extends AbstractDubboGenericServiceParameterResolver { - - public static final int DEFAULT_ORDER = 7; - - @Autowired - private ObjectProvider httpMessageConverters; - - private HttpMessageConverterResolver httpMessageConverterResolver; - - public RequestBodyServiceParameterResolver() { - super(); - setOrder(DEFAULT_ORDER); - } - - @PostConstruct - public void init() { - HttpMessageConverters httpMessageConverters = this.httpMessageConverters.getIfAvailable(); - - httpMessageConverterResolver = new HttpMessageConverterResolver(httpMessageConverters == null ? - Collections.emptyList() : httpMessageConverters.getConverters(), - getClassLoader()); - } - - private boolean supportParameter(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata) { - - Integer index = methodParameterMetadata.getIndex(); - - Integer bodyIndex = restMethodMetadata.getBodyIndex(); - - if (!Objects.equals(index, bodyIndex)) { - return false; - } - - Class parameterType = resolveClass(methodParameterMetadata.getType()); - - Class bodyType = resolveClass(restMethodMetadata.getBodyType()); - - return Objects.equals(parameterType, bodyType); - } - - @Override - public Object resolve(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata, - HttpServerRequest request) { - - if (!supportParameter(restMethodMetadata, methodParameterMetadata)) { - return null; - } - - Object result = null; - - Class parameterType = resolveClass(methodParameterMetadata.getType()); - - HttpMessageConverterHolder holder = httpMessageConverterResolver.resolve(request, parameterType); - - if (holder != null) { - HttpMessageConverter converter = holder.getConverter(); - try { - result = converter.read(parameterType, request); - } catch (IOException e) { - throw new HttpMessageNotReadableException("I/O error while reading input message", e); - } - } - - return result; - } - - @Override - public Object resolve(RestMethodMetadata restMethodMetadata, MethodParameterMetadata methodParameterMetadata, - RestMethodMetadata clientRestMethodMetadata, Object[] arguments) { - - if (!supportParameter(restMethodMetadata, methodParameterMetadata)) { - return null; - } - - Integer clientBodyIndex = clientRestMethodMetadata.getBodyIndex(); - return arguments[clientBodyIndex]; - } -} diff --git a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory index 77ac945a..d8b83d57 100644 --- a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory +++ b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory @@ -1 +1 @@ -spring-cloud=org.springframework.cloud.alibaba.dubbo.registry.SpringCloudRegistryFactory \ No newline at end of file +spring-cloud=com.alibaba.cloud.dubbo.registry.SpringCloudRegistryFactory \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories index 3e60d4d2..dbaa6c57 100644 --- a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories @@ -1,16 +1,16 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboMetadataAutoConfiguration,\ -org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration,\ -org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration,\ -org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationNonWebApplicationAutoConfiguration,\ -org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboLoadBalancedRestTemplateAutoConfiguration,\ -org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceAutoConfiguration +com.alibaba.cloud.dubbo.autoconfigure.DubboMetadataAutoConfiguration,\ +com.alibaba.cloud.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration,\ +com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration,\ +com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationNonWebApplicationAutoConfiguration,\ +com.alibaba.cloud.dubbo.autoconfigure.DubboLoadBalancedRestTemplateAutoConfiguration,\ +com.alibaba.cloud.dubbo.autoconfigure.DubboServiceAutoConfiguration org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=\ -org.springframework.cloud.alibaba.dubbo.actuate.DubboMetadataEndpointAutoConfiguration +com.alibaba.cloud.dubbo.actuate.DubboMetadataEndpointAutoConfiguration org.springframework.context.ApplicationContextInitializer=\ -org.springframework.cloud.alibaba.dubbo.context.DubboServiceRegistrationApplicationContextInitializer +com.alibaba.cloud.dubbo.context.DubboServiceRegistrationApplicationContextInitializer org.springframework.boot.env.EnvironmentPostProcessor=\ -org.springframework.cloud.alibaba.dubbo.env.DubboNonWebApplicationEnvironmentPostProcessor \ No newline at end of file +com.alibaba.cloud.dubbo.env.DubboNonWebApplicationEnvironmentPostProcessor \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationAutoConfigurationTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfigurationTest.java similarity index 94% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationAutoConfigurationTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfigurationTest.java index ce32e641..22dc2e02 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationAutoConfigurationTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfigurationTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.autoconfigure; +package com.alibaba.cloud.dubbo.autoconfigure; import org.springframework.boot.test.context.SpringBootTest; diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractHttpRequestMatcherTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcherTest.java similarity index 81% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractHttpRequestMatcherTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcherTest.java index 6e792a53..5bdb881b 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractHttpRequestMatcherTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcherTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; import org.junit.Test; @@ -25,13 +25,13 @@ import org.junit.Test; */ public abstract class AbstractHttpRequestMatcherTest { - @Test - public abstract void testEqualsAndHashCode(); + @Test + public abstract void testEqualsAndHashCode(); - @Test - public abstract void testGetContent(); + @Test + public abstract void testGetContent(); - @Test - public abstract void testGetToStringInfix(); + @Test + public abstract void testGetToStringInfix(); } diff --git a/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractMediaTypeExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractMediaTypeExpressionTest.java new file mode 100644 index 00000000..996ce682 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractMediaTypeExpressionTest.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.lang.reflect.Constructor; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.beans.BeanUtils; +import org.springframework.core.ResolvableType; +import org.springframework.http.MediaType; + +/** + * {@link AbstractMediaTypeExpression} Test + * + * @author Mercy + */ +public abstract class AbstractMediaTypeExpressionTest { + + protected T createExpression(String expression) { + ResolvableType resolvableType = ResolvableType + .forType(getClass().getGenericSuperclass()); + Class firstGenericType = (Class) resolvableType.resolveGeneric(0); + Constructor constructor = null; + try { + constructor = firstGenericType.getDeclaredConstructor(String.class); + } + catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + return BeanUtils.instantiateClass(constructor, expression); + } + + @Test + public void testGetMediaTypeAndNegated() { + // Normal + AbstractMediaTypeExpression expression = createExpression( + MediaType.APPLICATION_JSON_VALUE); + Assert.assertEquals(MediaType.APPLICATION_JSON, expression.getMediaType()); + Assert.assertFalse(expression.isNegated()); + + // Negated + expression = createExpression("!" + MediaType.APPLICATION_JSON_VALUE); + Assert.assertEquals(MediaType.APPLICATION_JSON, expression.getMediaType()); + Assert.assertTrue(expression.isNegated()); + } + + @Test + public void testEqualsAndHashCode() { + Assert.assertEquals(createExpression(MediaType.APPLICATION_JSON_VALUE), + createExpression(MediaType.APPLICATION_JSON_VALUE)); + Assert.assertEquals(createExpression(MediaType.APPLICATION_JSON_VALUE).hashCode(), + createExpression(MediaType.APPLICATION_JSON_VALUE).hashCode()); + } + + @Test + public void testCompareTo() { + Assert.assertEquals(0, createExpression(MediaType.APPLICATION_JSON_VALUE) + .compareTo(createExpression(MediaType.APPLICATION_JSON_VALUE))); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractNameValueExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractNameValueExpressionTest.java new file mode 100644 index 00000000..e59b4b47 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/AbstractNameValueExpressionTest.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.lang.reflect.Constructor; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.beans.BeanUtils; +import org.springframework.core.ResolvableType; + +/** + * {@link AbstractNameValueExpression} Test + * + * @author Mercy + */ +public abstract class AbstractNameValueExpressionTest { + + protected T createExpression(String expression) { + ResolvableType resolvableType = ResolvableType + .forType(getClass().getGenericSuperclass()); + Class firstGenericType = (Class) resolvableType.resolveGeneric(0); + Constructor constructor = null; + try { + constructor = firstGenericType.getDeclaredConstructor(String.class); + } + catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + return BeanUtils.instantiateClass(constructor, expression); + } + + @Test + public void testGetNameAndValue() { + // Normal Name and value + AbstractNameValueExpression expression = createExpression("a=1"); + Assert.assertEquals("a", expression.getName()); + Assert.assertFalse(expression.isNegated()); + + expression = createExpression("a=1"); + Assert.assertEquals("a", expression.getName()); + Assert.assertEquals("1", expression.getValue()); + Assert.assertFalse(expression.isNegated()); + + // Negated Name + expression = createExpression("!a"); + Assert.assertEquals("a", expression.getName()); + Assert.assertTrue(expression.isNegated()); + + expression = createExpression("a!=1"); + Assert.assertEquals("a", expression.getName()); + Assert.assertEquals("1", expression.getValue()); + Assert.assertTrue(expression.isNegated()); + } + + @Test + public void testEqualsAndHashCode() { + Assert.assertEquals(createExpression("a"), createExpression("a")); + Assert.assertEquals(createExpression("a").hashCode(), + createExpression("a").hashCode()); + Assert.assertEquals(createExpression("a=1"), createExpression("a = 1 ")); + Assert.assertEquals(createExpression("a=1").hashCode(), + createExpression("a = 1 ").hashCode()); + Assert.assertNotEquals(createExpression("a"), createExpression("b")); + Assert.assertNotEquals(createExpression("a").hashCode(), + createExpression("b").hashCode()); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ConsumeMediaTypeExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ConsumeMediaTypeExpressionTest.java similarity index 54% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ConsumeMediaTypeExpressionTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ConsumeMediaTypeExpressionTest.java index 492a9f28..93d4eefd 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ConsumeMediaTypeExpressionTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ConsumeMediaTypeExpressionTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; import org.junit.Assert; import org.junit.Test; @@ -25,21 +25,22 @@ import org.springframework.http.MediaType; * * @author Mercy */ -public class ConsumeMediaTypeExpressionTest extends AbstractMediaTypeExpressionTest { +public class ConsumeMediaTypeExpressionTest + extends AbstractMediaTypeExpressionTest { - @Test - public void testMatch() { - ConsumeMediaTypeExpression expression = createExpression(MediaType.ALL_VALUE); + @Test + public void testMatch() { + ConsumeMediaTypeExpression expression = createExpression(MediaType.ALL_VALUE); - Assert.assertTrue(expression.match(MediaType.APPLICATION_JSON_UTF8)); + Assert.assertTrue(expression.match(MediaType.APPLICATION_JSON_UTF8)); - expression = createExpression(MediaType.APPLICATION_JSON_VALUE); - Assert.assertTrue(expression.match(MediaType.APPLICATION_JSON_UTF8)); + expression = createExpression(MediaType.APPLICATION_JSON_VALUE); + Assert.assertTrue(expression.match(MediaType.APPLICATION_JSON_UTF8)); - expression = createExpression(MediaType.APPLICATION_JSON_VALUE + ";q=0.7"); - Assert.assertTrue(expression.match(MediaType.APPLICATION_JSON_UTF8)); + expression = createExpression(MediaType.APPLICATION_JSON_VALUE + ";q=0.7"); + Assert.assertTrue(expression.match(MediaType.APPLICATION_JSON_UTF8)); - expression = createExpression(MediaType.TEXT_HTML_VALUE); - Assert.assertFalse(expression.match(MediaType.APPLICATION_JSON_UTF8)); - } + expression = createExpression(MediaType.TEXT_HTML_VALUE); + Assert.assertFalse(expression.match(MediaType.APPLICATION_JSON_UTF8)); + } } diff --git a/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HeaderExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HeaderExpressionTest.java new file mode 100644 index 00000000..27f8ddad --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HeaderExpressionTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.http.HttpRequest; + +import com.alibaba.cloud.dubbo.http.DefaultHttpRequest; + +/** + * {@link HeaderExpression} Test + * + * @author Mercy + */ +public class HeaderExpressionTest + extends AbstractNameValueExpressionTest { + + @Test + public void testIsCaseSensitiveName() { + Assert.assertFalse(createExpression("a=1").isCaseSensitiveName()); + Assert.assertFalse(createExpression("a=!1").isCaseSensitiveName()); + Assert.assertFalse(createExpression("b=1").isCaseSensitiveName()); + } + + @Test + public void testMatch() { + + HeaderExpression expression = createExpression("a=1"); + HttpRequest request = DefaultHttpRequest.builder().build(); + + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().header("a", "").build(); + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().header("a", "2").build(); + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().header("", "1").build(); + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().header("a", "1").build(); + Assert.assertTrue(expression.match(request)); + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMethodsMatcherTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMethodsMatcherTest.java similarity index 60% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMethodsMatcherTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMethodsMatcherTest.java index 4d28fc57..95e2cad4 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestMethodsMatcherTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestMethodsMatcherTest.java @@ -14,36 +14,39 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.junit.Assert; -import org.springframework.http.HttpMethod; +package com.alibaba.cloud.dubbo.http.matcher; import java.util.Arrays; import java.util.HashSet; +import org.junit.Assert; +import org.springframework.http.HttpMethod; + /** * {@link HttpRequestMethodsMatcher} Test * * @author Mercy */ -public class HttpRequestMethodsMatcherTest extends AbstractHttpRequestMatcherTest { +public class HttpRequestMethodsMatcherTest + extends AbstractHttpRequestMatcherTest { - HttpRequestMethodsMatcher matcher = new HttpRequestMethodsMatcher("GET"); + HttpRequestMethodsMatcher matcher = new HttpRequestMethodsMatcher("GET"); - @Override - public void testEqualsAndHashCode() { - Assert.assertEquals(new HashSet<>(Arrays.asList(HttpMethod.GET)), matcher.getMethods()); - } + @Override + public void testEqualsAndHashCode() { + Assert.assertEquals(new HashSet<>(Arrays.asList(HttpMethod.GET)), + matcher.getMethods()); + } - @Override - public void testGetContent() { - Assert.assertEquals(new HashSet<>(Arrays.asList(HttpMethod.GET)), matcher.getContent()); - } + @Override + public void testGetContent() { + Assert.assertEquals(new HashSet<>(Arrays.asList(HttpMethod.GET)), + matcher.getContent()); + } - @Override - public void testGetToStringInfix() { - Assert.assertEquals(" || ", matcher.getToStringInfix()); - } + @Override + public void testGetToStringInfix() { + Assert.assertEquals(" || ", matcher.getToStringInfix()); + } } diff --git a/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestParamsMatcherTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestParamsMatcherTest.java new file mode 100644 index 00000000..d0d53561 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/HttpRequestParamsMatcherTest.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import java.net.URI; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.mock.http.client.MockClientHttpRequest; + +/** + * {@link HttpRequestParamsMatcher} Test + * + * @author Mercy + */ +public class HttpRequestParamsMatcherTest { + + // @Test + // public void testGetParams() { + // + // HttpRequestParamsMatcher matcher = new HttpRequestParamsMatcher( + // "a ", + // "a =1", + // "b = 2", + // "b = 3 ", + // " c = 4 ", + // " d" + // ); + // + // Map> params = matcher.getParams(); + // Assert.assertEquals(4, params.size()); + // Assert.assertTrue(params.containsKey("a")); + // Assert.assertTrue(params.containsKey("b")); + // Assert.assertTrue(params.containsKey("c")); + // Assert.assertTrue(params.containsKey("d")); + // Assert.assertFalse(params.containsKey("e")); + // + // List values = params.get("a"); + // Assert.assertEquals(2, values.size()); + // Assert.assertEquals("", values.get(0)); + // Assert.assertEquals("1", values.get(1)); + // + // values = params.get("b"); + // Assert.assertEquals(2, values.size()); + // Assert.assertEquals("2", values.get(0)); + // Assert.assertEquals("3", values.get(1)); + // + // values = params.get("c"); + // Assert.assertEquals(1, values.size()); + // Assert.assertEquals("4", values.get(0)); + // + // values = params.get("d"); + // Assert.assertEquals(1, values.size()); + // Assert.assertEquals("", values.get(0)); + // } + + @Test + public void testEquals() { + + HttpRequestParamsMatcher matcher = new HttpRequestParamsMatcher("a ", "a = 1"); + + MockClientHttpRequest request = new MockClientHttpRequest(); + + request.setURI(URI.create("http://dummy/?a")); + Assert.assertTrue(matcher.match(request)); + request.setURI(URI.create("http://dummy/?a&a=1")); + Assert.assertTrue(matcher.match(request)); + + matcher = new HttpRequestParamsMatcher("a ", "a =1", "b", "b=2"); + request.setURI(URI.create("http://dummy/?a&a=1&b")); + Assert.assertTrue(matcher.match(request)); + request.setURI(URI.create("http://dummy/?a&a=1&b&b=2")); + Assert.assertTrue(matcher.match(request)); + + matcher = new HttpRequestParamsMatcher("a ", "a =1", "b", "b=2", "b = 3 "); + request.setURI(URI.create("http://dummy/?a&a=1&b&b=2&b=3")); + Assert.assertTrue(matcher.match(request)); + + request.setURI(URI.create("http://dummy/?d=1")); + Assert.assertFalse(matcher.match(request)); + } +} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ParamExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ParamExpressionTest.java new file mode 100644 index 00000000..00545b94 --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ParamExpressionTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.http.matcher; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.http.HttpRequest; + +import com.alibaba.cloud.dubbo.http.DefaultHttpRequest; + +/** + * {@link ParamExpression} Test + * + * @author Mercy + */ +public class ParamExpressionTest + extends AbstractNameValueExpressionTest { + + @Test + public void testIsCaseSensitiveName() { + Assert.assertTrue(createExpression("a=1").isCaseSensitiveName()); + Assert.assertTrue(createExpression("a=!1").isCaseSensitiveName()); + Assert.assertTrue(createExpression("b=1").isCaseSensitiveName()); + } + + @Test + public void testMatch() { + + ParamExpression expression = createExpression("a=1"); + HttpRequest request = DefaultHttpRequest.builder().build(); + + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().param("a", "").build(); + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().param("a", "2").build(); + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().param("", "1").build(); + Assert.assertFalse(expression.match(request)); + + request = DefaultHttpRequest.builder().param("a", "1").build(); + Assert.assertTrue(expression.match(request)); + } + +} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ProduceMediaTypeExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ProduceMediaTypeExpressionTest.java similarity index 63% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ProduceMediaTypeExpressionTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ProduceMediaTypeExpressionTest.java index a749e274..e1fb4522 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ProduceMediaTypeExpressionTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/matcher/ProduceMediaTypeExpressionTest.java @@ -14,27 +14,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; +package com.alibaba.cloud.dubbo.http.matcher; + +import java.util.Arrays; import org.junit.Assert; import org.junit.Test; import org.springframework.http.MediaType; -import java.util.Arrays; - /** * {@link ProduceMediaTypeExpression} Test * * @author Mercy */ -public class ProduceMediaTypeExpressionTest extends AbstractMediaTypeExpressionTest { +public class ProduceMediaTypeExpressionTest + extends AbstractMediaTypeExpressionTest { - @Test - public void testMatch() { - ProduceMediaTypeExpression expression = createExpression(MediaType.APPLICATION_JSON_VALUE); - Assert.assertTrue(expression.match(Arrays.asList(MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON))); + @Test + public void testMatch() { + ProduceMediaTypeExpression expression = createExpression( + MediaType.APPLICATION_JSON_VALUE); + Assert.assertTrue(expression.match( + Arrays.asList(MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON))); - expression = createExpression(MediaType.APPLICATION_JSON_VALUE); - Assert.assertFalse(expression.match(Arrays.asList(MediaType.APPLICATION_XML))); - } + expression = createExpression(MediaType.APPLICATION_JSON_VALUE); + Assert.assertFalse(expression.match(Arrays.asList(MediaType.APPLICATION_XML))); + } } diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpUtilsTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/util/HttpUtilsTest.java similarity index 75% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpUtilsTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/util/HttpUtilsTest.java index 789c18b8..e92e48e7 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/util/HttpUtilsTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/http/util/HttpUtilsTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.http.util; +package com.alibaba.cloud.dubbo.http.util; import org.junit.Assert; import org.junit.Test; @@ -26,16 +26,16 @@ import org.junit.Test; */ public class HttpUtilsTest { - @Test - public void testEncodeAndDecode() { + @Test + public void testEncodeAndDecode() { - String whitespace = " "; + String whitespace = " "; - String encodedValue = HttpUtils.encode(" "); + String encodedValue = HttpUtils.encode(" "); - String decodedValue = HttpUtils.decode(encodedValue); + String decodedValue = HttpUtils.decode(encodedValue); - Assert.assertEquals(whitespace, decodedValue); - } + Assert.assertEquals(whitespace, decodedValue); + } } diff --git a/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/metadata/RequestMetadataTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/metadata/RequestMetadataTest.java new file mode 100644 index 00000000..0c568e9c --- /dev/null +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/metadata/RequestMetadataTest.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.metadata; + +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.junit.Assert; +import org.junit.Test; + +/** + * {@link RequestMetadata} Test + * + * @author Mercy + */ +public class RequestMetadataTest { + + private String method = "GET"; + + private String url = "/param"; + + private Set paramNames = new LinkedHashSet<>(Arrays.asList("a", "b", "c")); + + private Set headerNames = new LinkedHashSet<>(Arrays.asList("d", "e", "f")); + + @Test + public void testEqualsAndHashCodeAndCompareTo() { + + RequestMetadata metadata = new RequestMetadata(); + RequestMetadata metadata2 = new RequestMetadata(); + + Assert.assertEquals(metadata, metadata2); + Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); + + metadata.setMethod(method); + metadata2.setMethod(method); + + Assert.assertEquals(metadata, metadata2); + Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); + + metadata.setPath(url); + metadata2.setPath(url); + + Assert.assertEquals(metadata, metadata2); + Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); + + metadata.addParam("a", "1").addParam("b", "2").addParam("c", "3"); + metadata2.addParam("a", "1a").addParam("b", "2b").addParam("c", "3c"); + + Assert.assertEquals(metadata, metadata2); + Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); + + metadata.addHeader("d", "1").addHeader("e", "2").addHeader("f", "3"); + metadata2.addHeader("d", "1").addHeader("e", "2"); + + Assert.assertNotEquals(metadata, metadata2); + Assert.assertNotEquals(metadata.hashCode(), metadata2.hashCode()); + } + + // @Test + // public void testBestMatch() { + // + // NavigableMap requestMetadataMap = new + // TreeMap<>(); + // + // RequestMetadata metadata = new RequestMetadata(); + // metadata.setMethod(method); + // + // RequestMetadata metadata1 = new RequestMetadata(); + // metadata1.setMethod(method); + // metadata1.setPath(url); + // + // RequestMetadata metadata2 = new RequestMetadata(); + // metadata2.setMethod(method); + // metadata2.setPath(url); + // metadata2.setParams(paramNames); + // + // RequestMetadata metadata3 = new RequestMetadata(); + // metadata3.setMethod(method); + // metadata3.setPath(url); + // metadata3.setParams(paramNames); + // metadata3.setHeaders(headerNames); + // + // requestMetadataMap.put(metadata, metadata); + // requestMetadataMap.put(metadata1, metadata1); + // requestMetadataMap.put(metadata2, metadata2); + // requestMetadataMap.put(metadata3, metadata3); + // + // RequestMetadata result = getBestMatch(requestMetadataMap, metadata); + // Assert.assertEquals(result, metadata); + // + // result = getBestMatch(requestMetadataMap, metadata1); + // Assert.assertEquals(result, metadata1); + // + // result = getBestMatch(requestMetadataMap, metadata2); + // Assert.assertEquals(result, metadata2); + // + // result = getBestMatch(requestMetadataMap, metadata3); + // Assert.assertEquals(result, metadata3); + // + // // REDO + // requestMetadataMap.clear(); + // + // requestMetadataMap.put(metadata1, metadata1); + // + // result = getBestMatch(requestMetadataMap, metadata2); + // Assert.assertEquals(metadata1, result); + // + // requestMetadataMap.put(metadata2, metadata2); + // + // result = getBestMatch(requestMetadataMap, metadata3); + // Assert.assertEquals(metadata2, result); + // + // result = getBestMatch(requestMetadataMap, new RequestMetadata()); + // Assert.assertNull(result); + // + // result = getBestMatch(requestMetadataMap, metadata); + // Assert.assertNull(result); + // + // } + +} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolverTest.java b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolverTest.java similarity index 58% rename from spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolverTest.java rename to spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolverTest.java index 6e263a06..467cc7db 100644 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolverTest.java +++ b/spring-cloud-alibaba-dubbo/src/test/java/com/alibaba/cloud/dubbo/metadata/resolver/DubboTransportedMethodMetadataResolverTest.java @@ -14,17 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.metadata.resolver; +package com.alibaba.cloud.dubbo.metadata.resolver; + +import java.util.Set; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; -import org.springframework.cloud.alibaba.dubbo.metadata.DubboTransportedMethodMetadata; import org.springframework.cloud.openfeign.support.SpringMvcContract; import org.springframework.mock.env.MockEnvironment; -import java.util.Set; +import com.alibaba.cloud.dubbo.annotation.DubboTransported; +import com.alibaba.cloud.dubbo.metadata.DubboTransportedMethodMetadata; /** * {@link DubboTransportedMethodMetadataResolver} Test @@ -33,27 +34,28 @@ import java.util.Set; */ public class DubboTransportedMethodMetadataResolverTest { - private DubboTransportedMethodMetadataResolver resolver; + private DubboTransportedMethodMetadataResolver resolver; - private MockEnvironment environment; + private MockEnvironment environment; - @Before - public void init() { - environment = new MockEnvironment(); - resolver = new DubboTransportedMethodMetadataResolver(environment, new SpringMvcContract()); - } + @Before + public void init() { + environment = new MockEnvironment(); + resolver = new DubboTransportedMethodMetadataResolver(environment, + new SpringMvcContract()); + } - @Test - public void testResolve() { - Set metadataSet = resolver.resolveDubboTransportedMethodMetadataSet(TestDefaultService.class); - Assert.assertEquals(1, metadataSet.size()); - } + @Test + public void testResolve() { + Set metadataSet = resolver + .resolveDubboTransportedMethodMetadataSet(TestDefaultService.class); + Assert.assertEquals(1, metadataSet.size()); + } + @DubboTransported + interface TestDefaultService { - @DubboTransported - interface TestDefaultService { + String test(String message); - String test(String message); - - } + } } diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractMediaTypeExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractMediaTypeExpressionTest.java deleted file mode 100644 index 48588c73..00000000 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractMediaTypeExpressionTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.junit.Assert; -import org.junit.Test; -import org.springframework.beans.BeanUtils; -import org.springframework.core.ResolvableType; -import org.springframework.http.MediaType; - -import java.lang.reflect.Constructor; - -/** - * {@link AbstractMediaTypeExpression} Test - * - * @author Mercy - */ -public abstract class AbstractMediaTypeExpressionTest { - - protected T createExpression(String expression) { - ResolvableType resolvableType = ResolvableType.forType(getClass().getGenericSuperclass()); - Class firstGenericType = (Class) resolvableType.resolveGeneric(0); - Constructor constructor = null; - try { - constructor = firstGenericType.getDeclaredConstructor(String.class); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - return BeanUtils.instantiateClass(constructor, expression); - } - - @Test - public void testGetMediaTypeAndNegated() { - // Normal - AbstractMediaTypeExpression expression = createExpression(MediaType.APPLICATION_JSON_VALUE); - Assert.assertEquals(MediaType.APPLICATION_JSON, expression.getMediaType()); - Assert.assertFalse(expression.isNegated()); - - // Negated - expression = createExpression("!" + MediaType.APPLICATION_JSON_VALUE); - Assert.assertEquals(MediaType.APPLICATION_JSON, expression.getMediaType()); - Assert.assertTrue(expression.isNegated()); - } - - @Test - public void testEqualsAndHashCode() { - Assert.assertEquals(createExpression(MediaType.APPLICATION_JSON_VALUE), createExpression(MediaType.APPLICATION_JSON_VALUE)); - Assert.assertEquals(createExpression(MediaType.APPLICATION_JSON_VALUE).hashCode(), - createExpression(MediaType.APPLICATION_JSON_VALUE).hashCode()); - } - - @Test - public void testCompareTo() { - Assert.assertEquals(0, - createExpression(MediaType.APPLICATION_JSON_VALUE).compareTo(createExpression(MediaType.APPLICATION_JSON_VALUE))); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractNameValueExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractNameValueExpressionTest.java deleted file mode 100644 index 407b7127..00000000 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/AbstractNameValueExpressionTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.junit.Assert; -import org.junit.Test; -import org.springframework.beans.BeanUtils; -import org.springframework.core.ResolvableType; - -import java.lang.reflect.Constructor; - -/** - * {@link AbstractNameValueExpression} Test - * - * @author Mercy - */ -public abstract class AbstractNameValueExpressionTest { - - protected T createExpression(String expression) { - ResolvableType resolvableType = ResolvableType.forType(getClass().getGenericSuperclass()); - Class firstGenericType = (Class) resolvableType.resolveGeneric(0); - Constructor constructor = null; - try { - constructor = firstGenericType.getDeclaredConstructor(String.class); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - return BeanUtils.instantiateClass(constructor, expression); - } - - @Test - public void testGetNameAndValue() { - // Normal Name and value - AbstractNameValueExpression expression = createExpression("a=1"); - Assert.assertEquals("a", expression.getName()); - Assert.assertFalse(expression.isNegated()); - - expression = createExpression("a=1"); - Assert.assertEquals("a", expression.getName()); - Assert.assertEquals("1", expression.getValue()); - Assert.assertFalse(expression.isNegated()); - - // Negated Name - expression = createExpression("!a"); - Assert.assertEquals("a", expression.getName()); - Assert.assertTrue(expression.isNegated()); - - expression = createExpression("a!=1"); - Assert.assertEquals("a", expression.getName()); - Assert.assertEquals("1", expression.getValue()); - Assert.assertTrue(expression.isNegated()); - } - - @Test - public void testEqualsAndHashCode() { - Assert.assertEquals(createExpression("a"), createExpression("a")); - Assert.assertEquals(createExpression("a").hashCode(), createExpression("a").hashCode()); - Assert.assertEquals(createExpression("a=1"), createExpression("a = 1 ")); - Assert.assertEquals(createExpression("a=1").hashCode(), createExpression("a = 1 ").hashCode()); - Assert.assertNotEquals(createExpression("a"), createExpression("b")); - Assert.assertNotEquals(createExpression("a").hashCode(), createExpression("b").hashCode()); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HeaderExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HeaderExpressionTest.java deleted file mode 100644 index 1d2c7a76..00000000 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HeaderExpressionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.junit.Assert; -import org.junit.Test; -import org.springframework.http.HttpRequest; - -import static org.springframework.cloud.alibaba.dubbo.http.DefaultHttpRequest.builder; - -/** - * {@link HeaderExpression} Test - * - * @author Mercy - */ -public class HeaderExpressionTest extends AbstractNameValueExpressionTest { - - @Test - public void testIsCaseSensitiveName() { - Assert.assertFalse(createExpression("a=1").isCaseSensitiveName()); - Assert.assertFalse(createExpression("a=!1").isCaseSensitiveName()); - Assert.assertFalse(createExpression("b=1").isCaseSensitiveName()); - } - - @Test - public void testMatch() { - - HeaderExpression expression = createExpression("a=1"); - HttpRequest request = builder().build(); - - Assert.assertFalse(expression.match(request)); - - request = builder().header("a", "").build(); - Assert.assertFalse(expression.match(request)); - - request = builder().header("a", "2").build(); - Assert.assertFalse(expression.match(request)); - - request = builder().header("", "1").build(); - Assert.assertFalse(expression.match(request)); - - request = builder().header("a", "1").build(); - Assert.assertTrue(expression.match(request)); - } - -} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestParamsMatcherTest.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestParamsMatcherTest.java deleted file mode 100644 index 36476fae..00000000 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/HttpRequestParamsMatcherTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.junit.Assert; -import org.junit.Test; -import org.springframework.mock.http.client.MockClientHttpRequest; - -import java.net.URI; -import java.util.List; -import java.util.Map; - -/** - * {@link HttpRequestParamsMatcher} Test - * - * @author Mercy - */ -public class HttpRequestParamsMatcherTest { - -// @Test -// public void testGetParams() { -// -// HttpRequestParamsMatcher matcher = new HttpRequestParamsMatcher( -// "a ", -// "a =1", -// "b = 2", -// "b = 3 ", -// " c = 4 ", -// " d" -// ); -// -// Map> params = matcher.getParams(); -// Assert.assertEquals(4, params.size()); -// Assert.assertTrue(params.containsKey("a")); -// Assert.assertTrue(params.containsKey("b")); -// Assert.assertTrue(params.containsKey("c")); -// Assert.assertTrue(params.containsKey("d")); -// Assert.assertFalse(params.containsKey("e")); -// -// List values = params.get("a"); -// Assert.assertEquals(2, values.size()); -// Assert.assertEquals("", values.get(0)); -// Assert.assertEquals("1", values.get(1)); -// -// values = params.get("b"); -// Assert.assertEquals(2, values.size()); -// Assert.assertEquals("2", values.get(0)); -// Assert.assertEquals("3", values.get(1)); -// -// values = params.get("c"); -// Assert.assertEquals(1, values.size()); -// Assert.assertEquals("4", values.get(0)); -// -// values = params.get("d"); -// Assert.assertEquals(1, values.size()); -// Assert.assertEquals("", values.get(0)); -// } - - @Test - public void testEquals() { - - HttpRequestParamsMatcher matcher = new HttpRequestParamsMatcher("a ", "a = 1"); - - MockClientHttpRequest request = new MockClientHttpRequest(); - - request.setURI(URI.create("http://dummy/?a")); - Assert.assertTrue(matcher.match(request)); - request.setURI(URI.create("http://dummy/?a&a=1")); - Assert.assertTrue(matcher.match(request)); - - matcher = new HttpRequestParamsMatcher("a ", "a =1", "b", "b=2"); - request.setURI(URI.create("http://dummy/?a&a=1&b")); - Assert.assertTrue(matcher.match(request)); - request.setURI(URI.create("http://dummy/?a&a=1&b&b=2")); - Assert.assertTrue(matcher.match(request)); - - matcher = new HttpRequestParamsMatcher("a ", "a =1", "b", "b=2", "b = 3 "); - request.setURI(URI.create("http://dummy/?a&a=1&b&b=2&b=3")); - Assert.assertTrue(matcher.match(request)); - - request.setURI(URI.create("http://dummy/?d=1")); - Assert.assertFalse(matcher.match(request)); - } -} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ParamExpressionTest.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ParamExpressionTest.java deleted file mode 100644 index 5cab37ab..00000000 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/http/matcher/ParamExpressionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.http.matcher; - -import org.junit.Assert; -import org.junit.Test; -import org.springframework.http.HttpRequest; - -import static org.springframework.cloud.alibaba.dubbo.http.DefaultHttpRequest.builder; - -/** - * {@link ParamExpression} Test - * - * @author Mercy - */ -public class ParamExpressionTest extends AbstractNameValueExpressionTest { - - @Test - public void testIsCaseSensitiveName() { - Assert.assertTrue(createExpression("a=1").isCaseSensitiveName()); - Assert.assertTrue(createExpression("a=!1").isCaseSensitiveName()); - Assert.assertTrue(createExpression("b=1").isCaseSensitiveName()); - } - - @Test - public void testMatch() { - - ParamExpression expression = createExpression("a=1"); - HttpRequest request = builder().build(); - - Assert.assertFalse(expression.match(request)); - - request = builder().param("a", "").build(); - Assert.assertFalse(expression.match(request)); - - request = builder().param("a", "2").build(); - Assert.assertFalse(expression.match(request)); - - request = builder().param("", "1").build(); - Assert.assertFalse(expression.match(request)); - - request = builder().param("a", "1").build(); - Assert.assertTrue(expression.match(request)); - } - -} diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/metadata/RequestMetadataTest.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/metadata/RequestMetadataTest.java deleted file mode 100644 index bbd2d25e..00000000 --- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/metadata/RequestMetadataTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.metadata; - -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.LinkedHashSet; -import java.util.Set; - -/** - * {@link RequestMetadata} Test - * - * @author Mercy - */ -public class RequestMetadataTest { - - private String method = "GET"; - - private String url = "/param"; - - private Set paramNames = new LinkedHashSet<>(Arrays.asList("a", "b", "c")); - - private Set headerNames = new LinkedHashSet<>(Arrays.asList("d", "e", "f")); - - @Test - public void testEqualsAndHashCodeAndCompareTo() { - - RequestMetadata metadata = new RequestMetadata(); - RequestMetadata metadata2 = new RequestMetadata(); - - Assert.assertEquals(metadata, metadata2); - Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); - - metadata.setMethod(method); - metadata2.setMethod(method); - - Assert.assertEquals(metadata, metadata2); - Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); - - metadata.setPath(url); - metadata2.setPath(url); - - Assert.assertEquals(metadata, metadata2); - Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); - - metadata.addParam("a", "1").addParam("b", "2").addParam("c", "3"); - metadata2.addParam("a", "1a").addParam("b", "2b").addParam("c", "3c"); - - Assert.assertEquals(metadata, metadata2); - Assert.assertEquals(metadata.hashCode(), metadata2.hashCode()); - - metadata.addHeader("d", "1").addHeader("e", "2").addHeader("f", "3"); - metadata2.addHeader("d", "1").addHeader("e", "2"); - - Assert.assertNotEquals(metadata, metadata2); - Assert.assertNotEquals(metadata.hashCode(), metadata2.hashCode()); - } - -// @Test -// public void testBestMatch() { -// -// NavigableMap requestMetadataMap = new TreeMap<>(); -// -// RequestMetadata metadata = new RequestMetadata(); -// metadata.setMethod(method); -// -// RequestMetadata metadata1 = new RequestMetadata(); -// metadata1.setMethod(method); -// metadata1.setPath(url); -// -// RequestMetadata metadata2 = new RequestMetadata(); -// metadata2.setMethod(method); -// metadata2.setPath(url); -// metadata2.setParams(paramNames); -// -// RequestMetadata metadata3 = new RequestMetadata(); -// metadata3.setMethod(method); -// metadata3.setPath(url); -// metadata3.setParams(paramNames); -// metadata3.setHeaders(headerNames); -// -// requestMetadataMap.put(metadata, metadata); -// requestMetadataMap.put(metadata1, metadata1); -// requestMetadataMap.put(metadata2, metadata2); -// requestMetadataMap.put(metadata3, metadata3); -// -// RequestMetadata result = getBestMatch(requestMetadataMap, metadata); -// Assert.assertEquals(result, metadata); -// -// result = getBestMatch(requestMetadataMap, metadata1); -// Assert.assertEquals(result, metadata1); -// -// result = getBestMatch(requestMetadataMap, metadata2); -// Assert.assertEquals(result, metadata2); -// -// result = getBestMatch(requestMetadataMap, metadata3); -// Assert.assertEquals(result, metadata3); -// -// // REDO -// requestMetadataMap.clear(); -// -// requestMetadataMap.put(metadata1, metadata1); -// -// result = getBestMatch(requestMetadataMap, metadata2); -// Assert.assertEquals(metadata1, result); -// -// requestMetadataMap.put(metadata2, metadata2); -// -// result = getBestMatch(requestMetadataMap, metadata3); -// Assert.assertEquals(metadata2, result); -// -// result = getBestMatch(requestMetadataMap, new RequestMetadata()); -// Assert.assertNull(result); -// -// result = getBestMatch(requestMetadataMap, metadata); -// Assert.assertNull(result); -// -// } - -} diff --git a/spring-cloud-alibaba-dubbo/src/test/resources/application.yaml b/spring-cloud-alibaba-dubbo/src/test/resources/application.yaml index 2b3eb54e..455d0b31 100644 --- a/spring-cloud-alibaba-dubbo/src/test/resources/application.yaml +++ b/spring-cloud-alibaba-dubbo/src/test/resources/application.yaml @@ -1,6 +1,6 @@ dubbo: scan: - base-packages: org.springframework.cloud.alibaba.dubbo.service + base-packages: com.alibaba.cloud.dubbo.service protocols: dubbo: name: dubbo diff --git a/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml b/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml index 4d307996..37e4bcd5 100644 --- a/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml +++ b/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-acm diff --git a/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AcmApplication.java b/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/com/alibaba/cloud/examples/AcmApplication.java similarity index 84% rename from spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AcmApplication.java rename to spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/com/alibaba/cloud/examples/AcmApplication.java index 5d48c381..16f3ef09 100644 --- a/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AcmApplication.java +++ b/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/com/alibaba/cloud/examples/AcmApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -27,8 +27,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient public class AcmApplication { - public static void main(String[] args) { - SpringApplication.run(AcmApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(AcmApplication.class, args); + } } diff --git a/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoController.java b/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/com/alibaba/cloud/examples/EchoController.java similarity index 72% rename from spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoController.java rename to spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/com/alibaba/cloud/examples/EchoController.java index b7c87461..5508b881 100644 --- a/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoController.java +++ b/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/java/com/alibaba/cloud/examples/EchoController.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -26,16 +27,17 @@ import org.springframework.web.bind.annotation.RestController; * @author xiaolongzuo */ @RestController +@RefreshScope public class EchoController { - private static final Logger LOGGER = LoggerFactory.getLogger(EchoController.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EchoController.class); - @Value("${user.id}") - private String userId; + @Value("${user.id}") + private String userId; - @RequestMapping(value = "/") - public String echo() { - LOGGER.info("User id is " + userId); - return userId; - } + @RequestMapping(value = "/") + public String echo() { + LOGGER.info("User id is " + userId); + return userId; + } } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml index 4e29e3d7..83aaf568 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-ans diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java similarity index 77% rename from spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java rename to spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java index e95b2e9c..4a22d36c 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -24,11 +24,11 @@ import org.springframework.cloud.openfeign.EnableFeignClients; * @author xiaolongzuo */ @SpringBootApplication -@EnableFeignClients(basePackages = {"org.springframework.cloud.alibaba.cloud.examples"}) +@EnableFeignClients(basePackages = { "com.alibaba.cloud.examples" }) public class ConsumerApplication { - public static void main(String[] args) { - SpringApplication.run(ConsumerApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoService.java b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/EchoService.java similarity index 85% rename from spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoService.java rename to spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/EchoService.java index 78b3c486..fb462f09 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoService.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/EchoService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.RequestParam; @FeignClient(value = "ans-provider") public interface EchoService { - @RequestMapping(path = "echo/{str}") - String echo(@RequestParam("str") String param); + @RequestMapping(path = "echo/{str}") + String echo(@RequestParam("str") String param); } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/HomeController.java similarity index 60% rename from spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java rename to spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/HomeController.java index 8f2a3e8c..45018514 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/java/com/alibaba/cloud/examples/HomeController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,18 +29,18 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class HomeController { - private static final Logger LOGGER = LoggerFactory.getLogger(HomeController.class); + private static final Logger LOGGER = LoggerFactory.getLogger(HomeController.class); - @Autowired - private EchoService echoService; + @Autowired + private EchoService echoService; - @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") - public String home() { - LOGGER.info("-----------------consumer调用开始-----------------"); - String param = "Nice to meet you."; - LOGGER.info("消费者传递参数:" + param); - String result = echoService.echo(param); - LOGGER.info("收到提供者响应:" + result); - return param + "
" + result; - } + @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") + public String home() { + LOGGER.info("-----------------consumer调用开始-----------------"); + String param = "Nice to meet you."; + LOGGER.info("消费者传递参数:" + param); + String result = echoService.echo(param); + LOGGER.info("收到提供者响应:" + result); + return param + "
" + result; + } } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/resources/application.properties index 74babdc1..a815be0b 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/src/main/resources/application.properties @@ -1,3 +1,4 @@ +spring.application.name=ribbon-consumer server.port=18083 # The following configuration can be omitted. spring.cloud.alicloud.ans.server-list=127.0.0.1 diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml index 135cf9ca..21754fa3 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-ans diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java similarity index 79% rename from spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java rename to spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java index 223a2d89..1d674cbe 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -30,14 +30,14 @@ import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient public class ConsumerApplication { - @Bean - @LoadBalanced - public RestTemplate restTemplate() { - return new RestTemplate(); - } + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + return new RestTemplate(); + } - public static void main(String[] args) { - SpringApplication.run(ConsumerApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/com/alibaba/cloud/examples/HomeController.java similarity index 60% rename from spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java rename to spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/com/alibaba/cloud/examples/HomeController.java index e3853fdd..d7ccafb2 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/java/com/alibaba/cloud/examples/HomeController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,18 +30,19 @@ import org.springframework.web.client.RestTemplate; @RestController public class HomeController { - private static final Logger LOGGER = LoggerFactory.getLogger(HomeController.class); + private static final Logger LOGGER = LoggerFactory.getLogger(HomeController.class); - @Autowired - private RestTemplate restTemplate; + @Autowired + private RestTemplate restTemplate; - @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") - public String home() { - LOGGER.info("-----------------consumer调用开始-----------------"); - String param = "Nice to meet you."; - LOGGER.info("消费者传递参数:" + param); - String result = restTemplate.getForObject("http://ans-provider/echo/" + param, String.class); - LOGGER.info("收到提供者响应:" + result); - return param + "
" + result; - } + @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") + public String home() { + LOGGER.info("-----------------consumer调用开始-----------------"); + String param = "Nice to meet you."; + LOGGER.info("消费者传递参数:" + param); + String result = restTemplate.getForObject("http://ans-provider/echo/" + param, + String.class); + LOGGER.info("收到提供者响应:" + result); + return param + "
" + result; + } } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties index d9b7ed46..33a7e5aa 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties @@ -1,3 +1,4 @@ +spring.application.name=ribbon-consumer server.port=18082 # The following configuration can be omitted. spring.cloud.alicloud.ans.server-list=127.0.0.1 diff --git a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml index 53a41753..0d73f864 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-ans diff --git a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoController.java b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/com/alibaba/cloud/examples/EchoController.java similarity index 64% rename from spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoController.java rename to spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/com/alibaba/cloud/examples/EchoController.java index a9c031ea..30bc0998 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/EchoController.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/com/alibaba/cloud/examples/EchoController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,14 +29,14 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { - private static final Logger LOGGER = LoggerFactory.getLogger(EchoController.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EchoController.class); - @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET, produces = "application/json") - public String echo(@PathVariable String str) { - LOGGER.info("-----------收到消费者请求-----------"); - LOGGER.info("收到消费者传递的参数:" + str); - String result = "Nice to meet you, too."; - LOGGER.info("提供者返回结果:" + result); - return result; - } + @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET, produces = "application/json") + public String echo(@PathVariable String str) { + LOGGER.info("-----------收到消费者请求-----------"); + LOGGER.info("收到消费者传递的参数:" + str); + String result = "Nice to meet you, too."; + LOGGER.info("提供者返回结果:" + result); + return result; + } } diff --git a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java similarity index 84% rename from spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java rename to spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java index 03436dcb..97c5592e 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java +++ b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -27,8 +27,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient public class ProviderApplication { - public static void main(String[] args) { - SpringApplication.run(ProviderApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(ProviderApplication.class, args); + } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml index f4a0108a..420021cf 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -22,7 +22,7 @@ spring-boot-starter-web - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md index 390b567e..b0fe443c 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md @@ -15,7 +15,7 @@ 1. 首先,修改 pom.xml 文件,引入 Nacos Config Starter。 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme.md b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme.md index 702a5107..ede9a328 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme.md +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme.md @@ -15,7 +15,7 @@ Before we start the demo, let's learn how to connect Nacos Config to a Spring Cl 1. Add dependency spring-cloud-starter-alibaba-nacos-config in the pom.xml file in your Spring Cloud project. - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java similarity index 95% rename from spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java rename to spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java index 1818a2e0..176c2709 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Application.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml index 1f3f18e5..04f9476d 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud nacos-discovery-example 0.2.3.BUILD-SNAPSHOT @@ -21,7 +21,7 @@ spring-boot-starter-web
- org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery @@ -41,7 +41,7 @@
- org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java similarity index 90% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java index 97712312..9be8af45 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java @@ -1,9 +1,7 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.alibaba.cloud.examples.ConsumerApplication.EchoService; -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; @@ -15,6 +13,9 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.examples.ConsumerApplication.EchoService; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java similarity index 59% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java index d261cee4..6a6d81d4 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java @@ -1,7 +1,6 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alibaba.cloud.examples.ConsumerApplication.EchoService; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -10,6 +9,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.examples.ConsumerApplication.EchoService; + /** * @author xiaojing */ @@ -19,8 +20,8 @@ public class TestController { @Autowired private RestTemplate restTemplate; - @Autowired - private RestTemplate restTemplate1; + @Autowired + private RestTemplate restTemplate1; @Autowired private EchoService echoService; @@ -28,20 +29,20 @@ public class TestController { @Autowired private DiscoveryClient discoveryClient; - // @PostConstruct - // public void init() { - // restTemplate1.setErrorHandler(new ResponseErrorHandler() { - // @Override - // public boolean hasError(ClientHttpResponse response) throws IOException { - // return false; - // } - // - // @Override - // public void handleError(ClientHttpResponse response) throws IOException { - // System.err.println("handle error"); - // } - // }); - // } + // @PostConstruct + // public void init() { + // restTemplate1.setErrorHandler(new ResponseErrorHandler() { + // @Override + // public boolean hasError(ClientHttpResponse response) throws IOException { + // return false; + // } + // + // @Override + // public void handleError(ClientHttpResponse response) throws IOException { + // System.err.println("handle error"); + // } + // }); + // } @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str) { @@ -49,20 +50,20 @@ public class TestController { String.class); } - @RequestMapping(value = "/index", method = RequestMethod.GET) - public String index() { - return restTemplate1.getForObject("http://service-provider", String.class); - } + @RequestMapping(value = "/index", method = RequestMethod.GET) + public String index() { + return restTemplate1.getForObject("http://service-provider", String.class); + } - @RequestMapping(value = "/test", method = RequestMethod.GET) - public String test() { - return restTemplate1.getForObject("http://service-provider/test", String.class); - } + @RequestMapping(value = "/test", method = RequestMethod.GET) + public String test() { + return restTemplate1.getForObject("http://service-provider/test", String.class); + } - @RequestMapping(value = "/sleep", method = RequestMethod.GET) - public String sleep() { - return restTemplate1.getForObject("http://service-provider/sleep", String.class); - } + @RequestMapping(value = "/sleep", method = RequestMethod.GET) + public String sleep() { + return restTemplate1.getForObject("http://service-provider/sleep", String.class); + } @RequestMapping(value = "/notFound-feign", method = RequestMethod.GET) public String notFound() { diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml index d1939f4c..43dca87a 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud nacos-discovery-example 0.2.3.BUILD-SNAPSHOT @@ -21,7 +21,7 @@ spring-boot-starter-web
- org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java similarity index 61% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java index 5f71f51d..c0bc7b01 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -25,25 +25,26 @@ public class ProviderApplication { @RestController class EchoController { - @RequestMapping(value = "/", method = RequestMethod.GET) - public ResponseEntity index() { - return new ResponseEntity("index error", HttpStatus.INTERNAL_SERVER_ERROR); - } + @RequestMapping(value = "/", method = RequestMethod.GET) + public ResponseEntity index() { + return new ResponseEntity("index error", HttpStatus.INTERNAL_SERVER_ERROR); + } - @RequestMapping(value = "/test", method = RequestMethod.GET) - public ResponseEntity test() { - return new ResponseEntity("error", HttpStatus.INTERNAL_SERVER_ERROR); - } + @RequestMapping(value = "/test", method = RequestMethod.GET) + public ResponseEntity test() { + return new ResponseEntity("error", HttpStatus.INTERNAL_SERVER_ERROR); + } - @RequestMapping(value = "/sleep", method = RequestMethod.GET) - public String sleep() { - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "ok"; - } + @RequestMapping(value = "/sleep", method = RequestMethod.GET) + public String sleep() { + try { + Thread.sleep(1000L); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + return "ok"; + } @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/pom.xml similarity index 91% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/pom.xml index ac57d0ac..22bada58 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/pom.xml @@ -3,14 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud nacos-discovery-example 0.2.3.BUILD-SNAPSHOT 4.0.0 - nacos-discovery-with-spring-cloud-config-example + nacos-discovery-spring-cloud-config-client jar Example demonstrating how to use nacos discovery @@ -21,7 +21,7 @@ spring-boot-starter-web - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/java/com/alibaba/cloud/examples/GetConfigController.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/java/com/alibaba/cloud/examples/GetConfigController.java new file mode 100644 index 00000000..f164e84a --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/java/com/alibaba/cloud/examples/GetConfigController.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.examples; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GetConfigController { + + @Value("${config}") + private String config; + + @RequestMapping(value = "/config", method = RequestMethod.GET) + public String getConfig() { + return config; + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/java/com/alibaba/cloud/examples/SpringCloudConfigClientApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/java/com/alibaba/cloud/examples/SpringCloudConfigClientApplication.java new file mode 100644 index 00000000..4968266c --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/java/com/alibaba/cloud/examples/SpringCloudConfigClientApplication.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.examples; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * @author JevonYang + */ +@SpringBootApplication +@EnableDiscoveryClient +public class SpringCloudConfigClientApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringCloudConfigClientApplication.class, args); + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/application.yml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/resources/application.yml similarity index 100% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/application.yml rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/resources/application.yml diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/resources/bootstrap.yml similarity index 74% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/resources/bootstrap.yml index 9f991956..f9bbcea9 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/resources/bootstrap.yml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client/src/main/resources/bootstrap.yml @@ -7,4 +7,6 @@ spring: server-addr: localhost:8848 config: discovery: - enabled: true \ No newline at end of file + enabled: true + profiles: + active: dev \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/pom.xml new file mode 100644 index 00000000..f7d11d01 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/pom.xml @@ -0,0 +1,59 @@ + + + + + com.alibaba.cloud + nacos-discovery-example + 0.2.3.BUILD-SNAPSHOT + + 4.0.0 + + + nacos-discovery-with-spring-cloud-config-example + jar + Example demonstrating how to use nacos discovery + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.cloud + spring-cloud-config-server + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-deploy-plugin + ${maven-deploy-plugin.version} + + true + + + + + + diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/src/main/java/com/alibaba/cloud/examples/SpringCloudConfigServerApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/src/main/java/com/alibaba/cloud/examples/SpringCloudConfigServerApplication.java new file mode 100644 index 00000000..680ab2ec --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/src/main/java/com/alibaba/cloud/examples/SpringCloudConfigServerApplication.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.examples; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.config.server.EnableConfigServer; + +/** + * @author Jim + */ +@SpringBootApplication +@EnableDiscoveryClient +@EnableConfigServer +public class SpringCloudConfigServerApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringCloudConfigServerApplication.class, args); + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/src/main/resources/application.yml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/src/main/resources/application.yml new file mode 100644 index 00000000..5c276153 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server/src/main/resources/application.yml @@ -0,0 +1,15 @@ +server: + port: 7070 + +spring: + application: + name: configserver + cloud: + nacos: + discovery: + server-addr: localhost:8848 + config: + server: + git: + uri: https://github.com/fangjian0423/blogimages + search-paths: / \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java deleted file mode 100644 index 725b24dd..00000000 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GetConfigController.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.springframework.cloud.alibaba.cloud.examples; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class GetConfigController { - - @Value("${config}") - private String config; - - @RequestMapping(value = "/config", method = RequestMethod.GET) - public String getConfig() { - return config; - } - -} diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java deleted file mode 100644 index f81a4158..00000000 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-with-spring-cloud-config-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/NacosDiscoverySpringConfigApplication.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.springframework.cloud.alibaba.cloud.examples; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.client.discovery.EnableDiscoveryClient; - -/** - * @author JevonYang - */ -@SpringBootApplication -@EnableDiscoveryClient -public class NacosDiscoverySpringConfigApplication { - - public static void main(String[] args) { - SpringApplication.run(NacosDiscoverySpringConfigApplication.class, args); - } - -} diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml index f282e800..52b625f3 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -19,6 +19,7 @@ nacos-discovery-consumer-example nacos-discovery-provider-example - nacos-discovery-with-spring-cloud-config-example + nacos-discovery-spring-cloud-config-client + nacos-discovery-spring-cloud-config-server diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md index 279c516b..e241b3d7 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md @@ -15,7 +15,7 @@ 1. 首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md index da81f49b..cff28427 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md @@ -14,7 +14,7 @@ Before we start the demo, let's learn how to connect Nacos Config to a Spring Cl 1. Add dependency spring-cloud-starter-alibaba-nacos-discovery in the pom.xml file in your Spring Cloud project. - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml index 1a7620d6..73dec15c 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud nacos-gateway-example 0.2.3.BUILD-SNAPSHOT @@ -22,7 +22,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GatewayApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/src/main/java/com/alibaba/cloud/examples/GatewayApplication.java similarity index 87% rename from spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GatewayApplication.java rename to spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/src/main/java/com/alibaba/cloud/examples/GatewayApplication.java index c581d1ff..a59a4168 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/GatewayApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/src/main/java/com/alibaba/cloud/examples/GatewayApplication.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml index 4c4079ac..c6092adc 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud nacos-gateway-example 0.2.3.BUILD-SNAPSHOT @@ -21,7 +21,7 @@ spring-boot-starter-web - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java similarity index 95% rename from spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java rename to spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java index 843f5cbe..718d06f7 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml index c0a51354..48a43a81 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme-zh.md b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme-zh.md index 6fc875fe..c1099c81 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme-zh.md @@ -17,7 +17,7 @@ ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme.md b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme.md index 07e717b4..8616a703 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme.md +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/readme.md @@ -17,7 +17,7 @@ Before we start the demo, let's learn how to connect Nacos Config to a Spring Cl ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/oss-example/pom.xml b/spring-cloud-alibaba-examples/oss-example/pom.xml index 97953cc1..275cb3df 100644 --- a/spring-cloud-alibaba-examples/oss-example/pom.xml +++ b/spring-cloud-alibaba-examples/oss-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT @@ -21,7 +21,7 @@ spring-boot-starter-web - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-oss diff --git a/spring-cloud-alibaba-examples/oss-example/readme-zh.md b/spring-cloud-alibaba-examples/oss-example/readme-zh.md index 54cc88d2..2f06449e 100644 --- a/spring-cloud-alibaba-examples/oss-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/oss-example/readme-zh.md @@ -16,7 +16,7 @@ 1. 修改 pom.xml 文件,引入 alicloud-oss starter。 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-oss diff --git a/spring-cloud-alibaba-examples/oss-example/readme.md b/spring-cloud-alibaba-examples/oss-example/readme.md index 11ea77c8..3d002d72 100644 --- a/spring-cloud-alibaba-examples/oss-example/readme.md +++ b/spring-cloud-alibaba-examples/oss-example/readme.md @@ -16,7 +16,7 @@ Before we start the demo, let's learn how to connect OSS to a Spring Cloud appli 1. Add dependency spring-cloud-starter-alicloud-oss in the pom.xml file in your Spring Cloud project. - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-oss diff --git a/spring-cloud-alibaba-examples/oss-example/src/main/java/com/alibaba/cloud/examples/OssApplication.java b/spring-cloud-alibaba-examples/oss-example/src/main/java/com/alibaba/cloud/examples/OssApplication.java new file mode 100644 index 00000000..9dd6907f --- /dev/null +++ b/spring-cloud-alibaba-examples/oss-example/src/main/java/com/alibaba/cloud/examples/OssApplication.java @@ -0,0 +1,51 @@ +package com.alibaba.cloud.examples; + +import java.net.URISyntaxException; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +import com.aliyun.oss.OSS; + +/** + * OSS Application + * + * @author Jim + */ +@SpringBootApplication +public class OssApplication { + + public static final String BUCKET_NAME = "spring-cloud-alibaba-test"; + + public static void main(String[] args) throws URISyntaxException { + SpringApplication.run(OssApplication.class, args); + } + + @Bean + public AppRunner appRunner() { + return new AppRunner(); + } + + class AppRunner implements ApplicationRunner { + @Autowired + private OSS ossClient; + + @Override + public void run(ApplicationArguments args) throws Exception { + try { + if (!ossClient.doesBucketExist(BUCKET_NAME)) { + ossClient.createBucket(BUCKET_NAME); + } + } + catch (Exception e) { + System.err.println("oss handle bucket error: " + e.getMessage()); + System.exit(-1); + } + } + } + +} diff --git a/spring-cloud-alibaba-examples/oss-example/src/main/java/com/alibaba/cloud/examples/OssController.java b/spring-cloud-alibaba-examples/oss-example/src/main/java/com/alibaba/cloud/examples/OssController.java new file mode 100644 index 00000000..c1c9d261 --- /dev/null +++ b/spring-cloud-alibaba-examples/oss-example/src/main/java/com/alibaba/cloud/examples/OssController.java @@ -0,0 +1,70 @@ +package com.alibaba.cloud.examples; + +import java.nio.charset.Charset; + +import org.apache.commons.codec.CharEncoding; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.util.StreamUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.common.utils.IOUtils; +import com.aliyun.oss.model.OSSObject; + +/** + * OSS Controller + * + * @author Jim + */ +@RestController +public class OssController { + + @Autowired + private OSS ossClient; + + @Value("oss://" + OssApplication.BUCKET_NAME + "/oss-test.json") + private Resource file; + + @GetMapping("/upload") + public String upload() { + try { + ossClient.putObject(OssApplication.BUCKET_NAME, "oss-test.json", this + .getClass().getClassLoader().getResourceAsStream("oss-test.json")); + } + catch (Exception e) { + e.printStackTrace(); + return "upload fail: " + e.getMessage(); + } + return "upload success"; + } + + @GetMapping("/file-resource") + public String fileResource() { + try { + return "get file resource success. content: " + StreamUtils.copyToString( + file.getInputStream(), Charset.forName(CharEncoding.UTF_8)); + } + catch (Exception e) { + e.printStackTrace(); + return "get resource fail: " + e.getMessage(); + } + } + + @GetMapping("/download") + public String download() { + try { + OSSObject ossObject = ossClient.getObject(OssApplication.BUCKET_NAME, + "oss-test.json"); + return "download success, content: " + IOUtils + .readStreamAsString(ossObject.getObjectContent(), CharEncoding.UTF_8); + } + catch (Exception e) { + e.printStackTrace(); + return "download fail: " + e.getMessage(); + } + } + +} diff --git a/spring-cloud-alibaba-examples/oss-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OssApplication.java b/spring-cloud-alibaba-examples/oss-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OssApplication.java deleted file mode 100644 index f9265800..00000000 --- a/spring-cloud-alibaba-examples/oss-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OssApplication.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.springframework.cloud.alibaba.cloud.examples; - -import com.aliyun.oss.OSS; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; - -import java.net.URISyntaxException; - -/** - * OSS Application - * - * @author Jim - */ -@SpringBootApplication -public class OssApplication { - - public static final String BUCKET_NAME = "spring-cloud-alibaba-test"; - - public static void main(String[] args) throws URISyntaxException { - SpringApplication.run(OssApplication.class, args); - } - - @Bean - public AppRunner appRunner() { - return new AppRunner(); - } - - class AppRunner implements ApplicationRunner { - @Autowired - private OSS ossClient; - - @Override - public void run(ApplicationArguments args) throws Exception { - try { - if (!ossClient.doesBucketExist(BUCKET_NAME)) { - ossClient.createBucket(BUCKET_NAME); - } - } catch (Exception e) { - System.err.println("oss handle bucket error: " + e.getMessage()); - System.exit(-1); - } - } - } - -} diff --git a/spring-cloud-alibaba-examples/oss-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OssController.java b/spring-cloud-alibaba-examples/oss-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OssController.java deleted file mode 100644 index 7c6e427a..00000000 --- a/spring-cloud-alibaba-examples/oss-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OssController.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.springframework.cloud.alibaba.cloud.examples; - -import com.aliyun.oss.OSS; -import com.aliyun.oss.common.utils.IOUtils; -import com.aliyun.oss.model.OSSObject; -import org.apache.commons.codec.CharEncoding; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; -import org.springframework.util.StreamUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.nio.charset.Charset; - -/** - * OSS Controller - * - * @author Jim - */ -@RestController -public class OssController { - - @Autowired - private OSS ossClient; - - @Value("oss://" + OssApplication.BUCKET_NAME + "/oss-test.json") - private Resource file; - - @GetMapping("/upload") - public String upload() { - try { - ossClient.putObject(OssApplication.BUCKET_NAME, "oss-test.json", this - .getClass().getClassLoader().getResourceAsStream("oss-test.json")); - } catch (Exception e) { - e.printStackTrace(); - return "upload fail: " + e.getMessage(); - } - return "upload success"; - } - - @GetMapping("/file-resource") - public String fileResource() { - try { - return "get file resource success. content: " + StreamUtils.copyToString( - file.getInputStream(), Charset.forName(CharEncoding.UTF_8)); - } catch (Exception e) { - e.printStackTrace(); - return "get resource fail: " + e.getMessage(); - } - } - - @GetMapping("/download") - public String download() { - try { - OSSObject ossObject = ossClient.getObject(OssApplication.BUCKET_NAME, "oss-test.json"); - return "download success, content: " + IOUtils - .readStreamAsString(ossObject.getObjectContent(), CharEncoding.UTF_8); - } catch (Exception e) { - e.printStackTrace(); - return "download fail: " + e.getMessage(); - } - } - -} diff --git a/spring-cloud-alibaba-examples/pom.xml b/spring-cloud-alibaba-examples/pom.xml index fee785d6..873402a2 100644 --- a/spring-cloud-alibaba-examples/pom.xml +++ b/spring-cloud-alibaba-examples/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml diff --git a/spring-cloud-alibaba-examples/rocketmq-example/readme-zh.md b/spring-cloud-alibaba-examples/rocketmq-example/readme-zh.md index 5d2dd9ae..34a15959 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/rocketmq-example/readme-zh.md @@ -40,7 +40,7 @@ Binding 在消息中间件与应用程序提供的 Provider 和 Consumer 之间 ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq ``` diff --git a/spring-cloud-alibaba-examples/rocketmq-example/readme.md b/spring-cloud-alibaba-examples/rocketmq-example/readme.md index 7bdc2fbd..27387905 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/readme.md +++ b/spring-cloud-alibaba-examples/rocketmq-example/readme.md @@ -36,7 +36,7 @@ Before we start the demo, let's learn how to Integration with RocketMQ Binder to ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq ``` diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml index 61ef82c9..12d0b624 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -18,7 +18,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Foo.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/Foo.java similarity index 67% rename from spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Foo.java rename to spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/Foo.java index e98b6a10..78dbf120 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Foo.java +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/Foo.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; /** * @author Jim @@ -24,15 +24,15 @@ public class Foo { this.id = id; } - public String getBar() { - return bar; - } + public String getBar() { + return bar; + } - public void setBar(String bar) { - this.bar = bar; - } + public void setBar(String bar) { + this.bar = bar; + } - @Override + @Override public String toString() { return "Foo{" + "id=" + id + ", bar='" + bar + '\'' + '}'; } diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ReceiveService.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/ReceiveService.java similarity index 93% rename from spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ReceiveService.java rename to spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/ReceiveService.java index 35fc25a6..0544f6ae 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ReceiveService.java +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/ReceiveService.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.messaging.handler.annotation.Payload; diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/RocketMQConsumerApplication.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/RocketMQConsumerApplication.java new file mode 100644 index 00000000..ddfcdbd5 --- /dev/null +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/com/alibaba/cloud/examples/RocketMQConsumerApplication.java @@ -0,0 +1,68 @@ +package com.alibaba.cloud.examples; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.Input; +import org.springframework.cloud.stream.binder.PollableMessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.messaging.SubscribableChannel; + +import com.alibaba.cloud.examples.RocketMQConsumerApplication.MySink; + +/** + * @author Jim + */ +@SpringBootApplication +@EnableBinding({ MySink.class }) +public class RocketMQConsumerApplication { + + public interface MySink { + + @Input("input1") + SubscribableChannel input1(); + + @Input("input2") + SubscribableChannel input2(); + + @Input("input3") + SubscribableChannel input3(); + + @Input("input4") + SubscribableChannel input4(); + + @Input("input5") + PollableMessageSource input5(); + } + + public static void main(String[] args) { + SpringApplication.run(RocketMQConsumerApplication.class, args); + } + + @Bean + public ConsumerCustomRunner customRunner() { + return new ConsumerCustomRunner(); + } + + public static class ConsumerCustomRunner implements CommandLineRunner { + + @Autowired + private MySink mySink; + + @Override + public void run(String... args) throws InterruptedException { + while (true) { + mySink.input5().poll(m -> { + String payload = (String) m.getPayload(); + System.out.println("pull msg: " + payload); + }, new ParameterizedTypeReference() { + }); + Thread.sleep(2_000); + } + } + } + +} diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java deleted file mode 100644 index 25204919..00000000 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.springframework.cloud.alibaba.cloud.examples; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.alibaba.cloud.examples.RocketMQConsumerApplication.MySink; -import org.springframework.cloud.stream.annotation.EnableBinding; -import org.springframework.cloud.stream.annotation.Input; -import org.springframework.messaging.SubscribableChannel; - -/** - * @author Jim - */ -@SpringBootApplication -@EnableBinding({ MySink.class }) -public class RocketMQConsumerApplication { - - public interface MySink { - - @Input("input1") - SubscribableChannel input1(); - - @Input("input2") - SubscribableChannel input2(); - - @Input("input3") - SubscribableChannel input3(); - - @Input("input4") - SubscribableChannel input4(); - } - - public static void main(String[] args) { - SpringApplication.run(RocketMQConsumerApplication.class, args); - } - -} diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties index ec27539c..dd8bb6ef 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties @@ -24,6 +24,10 @@ spring.cloud.stream.bindings.input4.content-type=text/plain spring.cloud.stream.bindings.input4.group=transaction-group spring.cloud.stream.bindings.input4.consumer.concurrency=5 +spring.cloud.stream.bindings.input5.destination=pull-topic +spring.cloud.stream.bindings.input5.content-type=text/plain +spring.cloud.stream.bindings.input5.group=pull-topic-group + spring.application.name=rocketmq-consume-example server.port=28082 diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml index 2af12061..a6db243d 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -18,7 +18,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-stream-rocketmq diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Foo.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/Foo.java similarity index 67% rename from spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Foo.java rename to spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/Foo.java index e98b6a10..78dbf120 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Foo.java +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/Foo.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; /** * @author Jim @@ -24,15 +24,15 @@ public class Foo { this.id = id; } - public String getBar() { - return bar; - } + public String getBar() { + return bar; + } - public void setBar(String bar) { - this.bar = bar; - } + public void setBar(String bar) { + this.bar = bar; + } - @Override + @Override public String toString() { return "Foo{" + "id=" + id + ", bar='" + bar + '\'' + '}'; } diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/RocketMQProduceApplication.java similarity index 61% rename from spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java rename to spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/RocketMQProduceApplication.java index bd157be0..6ac8389e 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/RocketMQProduceApplication.java @@ -1,15 +1,17 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.alibaba.cloud.examples.RocketMQProduceApplication.MySource; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.Output; import org.springframework.context.annotation.Bean; +import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.MessageChannel; +import com.alibaba.cloud.examples.RocketMQProduceApplication.MySource; + /** * @author Jim */ @@ -23,6 +25,9 @@ public class RocketMQProduceApplication { @Output("output2") MessageChannel output2(); + + @Output("output3") + MessageChannel output3(); } public static void main(String[] args) { @@ -31,7 +36,12 @@ public class RocketMQProduceApplication { @Bean public CustomRunner customRunner() { - return new CustomRunner(); + return new CustomRunner("output1"); + } + + @Bean + public CustomRunner customRunner2() { + return new CustomRunner("output3"); } @Bean @@ -40,24 +50,45 @@ public class RocketMQProduceApplication { } public static class CustomRunner implements CommandLineRunner { + + private final String bindingName; + + public CustomRunner(String bindingName) { + this.bindingName = bindingName; + } + @Autowired private SenderService senderService; + @Autowired + private MySource mySource; + @Override public void run(String... args) throws Exception { - int count = 5; - for (int index = 1; index <= count; index++) { - String msgContent = "msg-" + index; - if (index % 3 == 0) { - senderService.send(msgContent); - } - else if (index % 3 == 1) { - senderService.sendWithTags(msgContent, "tagStr"); - } - else { - senderService.sendObject(new Foo(index, "foo"), "tagObj"); + if (this.bindingName.equals("output1")) { + int count = 5; + for (int index = 1; index <= count; index++) { + String msgContent = "msg-" + index; + if (index % 3 == 0) { + senderService.send(msgContent); + } + else if (index % 3 == 1) { + senderService.sendWithTags(msgContent, "tagStr"); + } + else { + senderService.sendObject(new Foo(index, "foo"), "tagObj"); + } } } + else if (this.bindingName.equals("output3")) { + int count = 20; + for (int index = 1; index <= count; index++) { + String msgContent = "pullMsg-" + index; + mySource.output3() + .send(MessageBuilder.withPayload(msgContent).build()); + } + } + } } diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SenderService.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/SenderService.java similarity index 92% rename from spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SenderService.java rename to spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/SenderService.java index b6d49cf8..79fec70e 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SenderService.java +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/SenderService.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -6,13 +6,14 @@ import java.util.stream.Stream; import org.apache.rocketmq.common.message.MessageConst; import org.apache.rocketmq.spring.support.RocketMQHeaders; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alibaba.cloud.examples.RocketMQProduceApplication.MySource; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Service; import org.springframework.util.MimeTypeUtils; +import com.alibaba.cloud.examples.RocketMQProduceApplication.MySource; + /** * @author Jim */ diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TransactionListenerImpl.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/TransactionListenerImpl.java similarity index 97% rename from spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TransactionListenerImpl.java rename to spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/TransactionListenerImpl.java index 0bd48410..f2b3b6b6 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TransactionListenerImpl.java +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/com/alibaba/cloud/examples/TransactionListenerImpl.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.apache.rocketmq.spring.annotation.RocketMQTransactionListener; import org.apache.rocketmq.spring.core.RocketMQLocalTransactionListener; diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties index beca964a..56269492 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties @@ -1,4 +1,4 @@ -logging.level.org.springframework.cloud.stream.binder.rocketmq=DEBUG +logging.level.com.alibaba.cloud.stream.binder.rocketmq=DEBUG spring.cloud.stream.rocketmq.binder.name-server=127.0.0.1:9876 @@ -12,6 +12,10 @@ spring.cloud.stream.bindings.output2.content-type=application/json spring.cloud.stream.rocketmq.bindings.output2.producer.transactional=true spring.cloud.stream.rocketmq.bindings.output2.producer.group=myTxProducerGroup +spring.cloud.stream.bindings.output3.destination=pull-topic +spring.cloud.stream.bindings.output3.content-type=text/plain +spring.cloud.stream.rocketmq.bindings.output3.producer.group=pull-binder-group + spring.application.name=rocketmq-produce-example server.port=28081 diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml index e5c709be..5db6c0b4 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-schedulerx diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/readme-zh.md b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/readme-zh.md index 9e9b6f02..91b07a2e 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/readme-zh.md @@ -25,7 +25,7 @@ SchedulerX 是阿里中间件团队开发的一款分布式任务调度产品。 6. 进入[SchedulerX任务列表](https://edas.console.aliyun.com/#/edasSchedulerXJob?regionNo=cn-test)页面,选择上方"测试"区域,点击右上角"新建Job",创建一个Job,即如下所示。 Job分组:测试——111-1-1-1111 - Job处理接口:org.springframework.cloud.alibaba.cloud.examples.SimpleTask + Job处理接口:SimpleTask 类型:简单Job单机版 定时表达式:默认选项——0 * * * * ? Job描述:无 diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HelloController.java b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/HelloController.java similarity index 94% rename from spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HelloController.java rename to spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/HelloController.java index c11cbf98..56410502 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HelloController.java +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/HelloController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ScxApplication.java b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/ScxApplication.java similarity index 94% rename from spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ScxApplication.java rename to spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/ScxApplication.java index baccfd4f..fe3d4357 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ScxApplication.java +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/ScxApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SimpleTask.java b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/SimpleTask.java similarity index 95% rename from spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SimpleTask.java rename to spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/SimpleTask.java index 17ced464..31d0ffa2 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SimpleTask.java +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/SimpleTask.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/TestController.java similarity index 95% rename from spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java rename to spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/TestController.java index b237b279..3230e9b0 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/TestController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.concurrent.atomic.AtomicInteger; diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestService.java b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/TestService.java similarity index 93% rename from spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestService.java rename to spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/TestService.java index 3352c05a..7681b3ad 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestService.java +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/src/main/java/com/alibaba/cloud/examples/TestService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.stereotype.Service; diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml index fec39712..b740e0ce 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-seata diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/AccountApplication.java similarity index 94% rename from spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/AccountApplication.java index 893d3464..7d52d74c 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/AccountApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/AccountController.java similarity index 97% rename from spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/AccountController.java index 7023438a..46c2e33a 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java +++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/AccountController.java @@ -13,12 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.Random; -import io.seata.core.context.RootContext; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; @@ -26,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import io.seata.core.context.RootContext; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java similarity index 95% rename from spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java index f1a6a50c..f22071bb 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java +++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java @@ -13,19 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.sql.SQLException; -import com.alibaba.druid.pool.DruidDataSource; - -import io.seata.rm.datasource.DataSourceProxy; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; +import com.alibaba.druid.pool.DruidDataSource; + +import io.seata.rm.datasource.DataSourceProxy; + /** * @author xiaojing */ @@ -51,7 +52,8 @@ public class DatabaseConfiguration { String password = environment.getProperty("mysql.user.password"); DruidDataSource druidDataSource = new DruidDataSource(); - druidDataSource.setUrl("jdbc:mysql://" + ip + ":" + port + "/" + dbName + "?serverTimezone=UTC"); + druidDataSource.setUrl( + "jdbc:mysql://" + ip + ":" + port + "/" + dbName + "?serverTimezone=UTC"); druidDataSource.setUsername(userName); druidDataSource.setPassword(password); druidDataSource.setDriverClassName("com.mysql.jdbc.Driver"); diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml index 68ee5995..671924eb 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-seata @@ -33,7 +33,7 @@ spring-boot-starter-actuator - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java similarity index 97% rename from spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java index c0ed45fc..0b963bc8 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/HomeController.java similarity index 89% rename from spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/HomeController.java index 0226f964..8b4ab39d 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/HomeController.java @@ -14,14 +14,10 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; - -import io.seata.spring.annotation.GlobalTransactional; +package com.alibaba.cloud.examples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.cloud.examples.BusinessApplication.OrderService; -import org.springframework.cloud.alibaba.cloud.examples.BusinessApplication.StorageService; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -33,6 +29,11 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.examples.BusinessApplication.OrderService; +import com.alibaba.cloud.examples.BusinessApplication.StorageService; + +import io.seata.spring.annotation.GlobalTransactional; + /** * @author xiaojing */ @@ -59,7 +60,7 @@ public class HomeController { } @GlobalTransactional(timeoutMills = 300000, name = "spring-cloud-demo-tx") - @RequestMapping(value = "/fescar/rest", method = RequestMethod.GET, produces = "application/json") + @RequestMapping(value = "/seata/rest", method = RequestMethod.GET, produces = "application/json") public String rest() { String result = restTemplate.getForObject( @@ -95,7 +96,7 @@ public class HomeController { } @GlobalTransactional(timeoutMills = 300000, name = "spring-cloud-demo-tx") - @RequestMapping(value = "/fescar/feign", method = RequestMethod.GET, produces = "application/json") + @RequestMapping(value = "/seata/feign", method = RequestMethod.GET, produces = "application/json") public String feign() { String result = storageService.storage(COMMODITY_CODE, ORDER_COUNT); diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/Order.java similarity index 94% rename from spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/Order.java index 6594793a..54ff8a0c 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/Order.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.io.Serializable; diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties index 1832ce6f..75ed9290 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties @@ -5,4 +5,4 @@ spring.application.name=business-service #feign.hystrix.enabled=true #feign.sentinel.enabled=true -logging.level.com.alibaba.fescar=debug \ No newline at end of file +logging.level.io.seata=debug \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml index 34c7b301..44f3e0eb 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-seata diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java similarity index 98% rename from spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java index 5ec93801..e3a260e2 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.sql.SQLException; @@ -24,6 +24,7 @@ import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; import com.alibaba.druid.pool.DruidDataSource; + import io.seata.rm.datasource.DataSourceProxy; /** diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OderApplication.java similarity index 95% rename from spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OderApplication.java index 1ab0dab1..9bd64f51 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OderApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/Order.java similarity index 94% rename from spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/Order.java index 6594793a..54ff8a0c 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/Order.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.io.Serializable; diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OrderController.java similarity index 98% rename from spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OrderController.java index db294ed1..3060a7b7 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OrderController.java @@ -14,9 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; -import io.seata.core.context.RootContext; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Random; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,10 +38,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.Random; +import io.seata.core.context.RootContext; /** * @author xiaojing diff --git a/spring-cloud-alibaba-examples/seata-example/readme-zh.md b/spring-cloud-alibaba-examples/seata-example/readme-zh.md index 9c12eb50..b54c4da7 100644 --- a/spring-cloud-alibaba-examples/seata-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/seata-example/readme-zh.md @@ -120,16 +120,16 @@ sh seata-server.sh 8091 file 启动示例后,通过 HTTP 的 GET 方法访问如下两个 URL,可以分别验证在 `business-service` 中 通过 RestTemplate 和 FeignClient 调用其他服务的场景。 ```$xslt -http://127.0.0.1:18081/fescar/feign +http://127.0.0.1:18081/seata/feign -http://127.0.0.1:18081/fescar/rest +http://127.0.0.1:18081/seata/rest ``` ## 如何验证分布式事务成功? ### Xid 信息是否成功传递 -在 `account-server`、`order-service` 和 `storage-service` 三个 服务的 Controller 中,第一个执行的逻辑都是输出 RootContext 中的 Xid 信息,如果看到都输出了正确的 Xid 信息,即每次都发生变化,且同一次调用中所有服务的 Xid 都一致。则表明 Fescar 的 Xid 的传递和还原是正常的。 +在 `account-server`、`order-service` 和 `storage-service` 三个 服务的 Controller 中,第一个执行的逻辑都是输出 RootContext 中的 Xid 信息,如果看到都输出了正确的 Xid 信息,即每次都发生变化,且同一次调用中所有服务的 Xid 都一致。则表明 Seata 的 Xid 的传递和还原是正常的。 ### 数据库中数据是否一致 diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml index 4fc3babd..e7df8ec3 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-seata diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java similarity index 95% rename from spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java index 99b89f63..b862b26a 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/DatabaseConfiguration.java @@ -14,19 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.sql.SQLException; -import com.alibaba.druid.pool.DruidDataSource; -import io.seata.rm.datasource.DataSourceProxy; - import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; +import com.alibaba.druid.pool.DruidDataSource; + +import io.seata.rm.datasource.DataSourceProxy; + /** * @author xiaojing */ @@ -52,7 +53,8 @@ public class DatabaseConfiguration { String password = environment.getProperty("mysql.user.password"); DruidDataSource druidDataSource = new DruidDataSource(); - druidDataSource.setUrl("jdbc:mysql://" + ip + ":" + port + "/" + dbName + "?serverTimezone=UTC"); + druidDataSource.setUrl( + "jdbc:mysql://" + ip + ":" + port + "/" + dbName + "?serverTimezone=UTC"); druidDataSource.setUsername(userName); druidDataSource.setPassword(password); druidDataSource.setDriverClassName("com.mysql.jdbc.Driver"); diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/StorageApplication.java similarity index 94% rename from spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/StorageApplication.java index 94bbac7f..4e6185b2 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/StorageApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/StorageController.java similarity index 97% rename from spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/StorageController.java index 31552104..44092bdf 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/com/alibaba/cloud/examples/StorageController.java @@ -14,9 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; - -import io.seata.core.context.RootContext; +package com.alibaba.cloud.examples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import io.seata.core.context.RootContext; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml index b0c6ae97..2e63dadd 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -18,7 +18,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md index bfdc599b..90bd2f52 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md @@ -19,7 +19,7 @@ ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel ``` diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme.md b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme.md index eb9ca2e0..b95a97d2 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme.md +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme.md @@ -15,7 +15,7 @@ Before we start the demo, let's learn how to connect Sentinel to a Spring Cloud 1. Add dependency spring-cloud-starter-alibaba-sentinel in the pom.xml file in your Spring Cloud project. - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ExceptionUtil.java similarity index 78% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ExceptionUtil.java index 94ef5dde..1551bedb 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ExceptionUtil.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ExceptionUtil.java @@ -1,9 +1,9 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; -import org.springframework.cloud.alibaba.sentinel.rest.SentinelClientHttpResponse; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; +import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse; import com.alibaba.csp.sentinel.slots.block.BlockException; /** diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/JsonFlowRuleListConverter.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/JsonFlowRuleListConverter.java similarity index 89% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/JsonFlowRuleListConverter.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/JsonFlowRuleListConverter.java index c5cea94d..aee0fe99 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/JsonFlowRuleListConverter.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/JsonFlowRuleListConverter.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.List; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ServiceApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ServiceApplication.java similarity index 85% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ServiceApplication.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ServiceApplication.java index c05c01af..7dea70ee 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ServiceApplication.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ServiceApplication.java @@ -1,11 +1,11 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; import com.alibaba.csp.sentinel.datasource.Converter; /** diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java similarity index 94% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java index 3db79b08..9d8f41ad 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme-zh.md b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme-zh.md index 2a936115..ed647521 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme-zh.md @@ -19,7 +19,7 @@ 1. 首先,修改 pom.xml 文件,引入 Sentinel starter 和 Dubbo starter。 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel @@ -50,7 +50,7 @@ Provider端在application.properties文件中定义dubbo相关的配置,比如 foo.service.version = 1.0.0 - dubbo.scan.basePackages = org.springframework.cloud.alibaba.cloud.examples + dubbo.scan.basePackages = com.alibaba.cloud.examples dubbo.application.id = dubbo-provider-demo dubbo.application.name = dubbo-provider-demo @@ -66,7 +66,7 @@ Provider端在application.properties文件中定义dubbo相关的配置,比如 `sentinel-dubbo-api`模块中定义了FooService服务,内容如下: - package org.springframework.cloud.alibaba.cloud.examples.FooService; + package FooService; public interface FooService { String hello(String name); } @@ -93,17 +93,17 @@ Consumer端在服务调用之前,先定义限流规则。 `sentinel-dubbo-api`模块中定义了FooService服务,内容如下: - package org.springframework.cloud.alibaba.cloud.examples.FooService; + package FooService; public interface FooService { String hello(String name); } -该服务在Sentinel下对应的资源名是 `org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService:hello(java.lang.String)` 。 +该服务在Sentinel下对应的资源名是 `com.alibaba.cloud.examples.FooService:hello(java.lang.String)` 。 定义该资源名对应的限流规则: FlowRule flowRule = new FlowRule(); - flowRule.setResource("org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService:hello(java.lang.String)"); + flowRule.setResource("com.alibaba.cloud.examples.FooService:hello(java.lang.String)"); flowRule.setCount(10); flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); flowRule.setLimitApp("default"); diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme.md b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme.md index a69ea0b1..4686e1b1 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme.md +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/readme.md @@ -18,7 +18,7 @@ Before we start the demo, let's learn how to connect Sentinel with Dubbo to a Sp 1. Add dependency spring-cloud-starter-alibaba-sentinel and dubbo-spring-boot-starter in the pom.xml file in your Spring Cloud project. - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel @@ -48,7 +48,7 @@ Define some configs of dubbo in `application.properties` in provider side, like foo.service.version = 1.0.0 - dubbo.scan.basePackages = org.springframework.cloud.alibaba.cloud.examples + dubbo.scan.basePackages = com.alibaba.cloud.examples dubbo.application.id = dubbo-provider-demo dubbo.application.name = dubbo-provider-demo @@ -64,7 +64,7 @@ Define some configs of dubbo in `application.properties` in provider side, like `sentinel-dubbo-api` define a service named FooService: - package org.springframework.cloud.alibaba.cloud.examples.FooService; + package FooService; public interface FooService { String hello(String name); } @@ -91,17 +91,17 @@ We will configure flow control rules before service invocation in consumer side. `sentinel-dubbo-api` define a service named FooService: - package org.springframework.cloud.alibaba.cloud.examples.FooService; + package FooService; public interface FooService { String hello(String name); } -The resource name of this service's `hello` method is `org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService:hello(java.lang.String)` . +The resource name of this service's `hello` method is `com.alibaba.cloud.examples.FooService:hello(java.lang.String)` . Configure rules: FlowRule flowRule = new FlowRule(); - flowRule.setResource("org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService:hello(java.lang.String)"); + flowRule.setResource("com.alibaba.cloud.examples.FooService:hello(java.lang.String)"); flowRule.setCount(10); flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); flowRule.setLimitApp("default"); diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml index 4e9dac1c..f1b8a08f 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../../pom.xml diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/src/main/java/com/alibaba/cloud/examples/FooService.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/src/main/java/com/alibaba/cloud/examples/FooService.java new file mode 100644 index 00000000..65f71bb8 --- /dev/null +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/src/main/java/com/alibaba/cloud/examples/FooService.java @@ -0,0 +1,10 @@ +package com.alibaba.cloud.examples; + +/** + * @author fangjian + */ +public interface FooService { + + String hello(String name); + +} diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooService.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooService.java deleted file mode 100644 index e07540b6..00000000 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooService.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.springframework.cloud.alibaba.cloud.examples; - -/** - * @author fangjian - */ -public interface FooService { - - String hello(String name); - -} diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml index 707db0c3..b62b1f80 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../../pom.xml @@ -18,12 +18,12 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel - org.springframework.cloud + com.alibaba.cloud sentinel-dubbo-api diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/com/alibaba/cloud/examples/FooServiceConsumer.java similarity index 86% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/com/alibaba/cloud/examples/FooServiceConsumer.java index 705ddbc5..e4a6022c 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/com/alibaba/cloud/examples/FooServiceConsumer.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.apache.dubbo.config.annotation.Reference; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelDubboConsumerApp.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/com/alibaba/cloud/examples/SentinelDubboConsumerApp.java similarity index 87% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelDubboConsumerApp.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/com/alibaba/cloud/examples/SentinelDubboConsumerApp.java index d0aba685..d8a6d404 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelDubboConsumerApp.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/com/alibaba/cloud/examples/SentinelDubboConsumerApp.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.Collections; @@ -16,7 +16,7 @@ import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; /** * @author fangjian */ -@SpringBootApplication(scanBasePackages = "org.springframework.cloud.alibaba.cloud.examples") +@SpringBootApplication(scanBasePackages = "com.alibaba.cloud.examples") public class SentinelDubboConsumerApp { @Bean @@ -28,7 +28,7 @@ public class SentinelDubboConsumerApp { FlowRule flowRule = new FlowRule(); flowRule.setResource( - "org.springframework.cloud.alibaba.cloud.examples.FooService:hello(java.lang.String)"); + "com.alibaba.cloud.examples.FooService:hello(java.lang.String)"); flowRule.setCount(10); flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); flowRule.setLimitApp("default"); diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml index d6fdd0fc..fa9251a9 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../../pom.xml @@ -18,12 +18,12 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel - org.springframework.cloud + com.alibaba.cloud sentinel-dubbo-api diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/com/alibaba/cloud/examples/FooServiceImpl.java similarity index 86% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/com/alibaba/cloud/examples/FooServiceImpl.java index 857b31bc..041627d4 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/com/alibaba/cloud/examples/FooServiceImpl.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.apache.dubbo.config.annotation.Service; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelDubboProviderApp.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/com/alibaba/cloud/examples/SentinelDubboProviderApp.java similarity index 89% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelDubboProviderApp.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/com/alibaba/cloud/examples/SentinelDubboProviderApp.java index 346fb48f..ac4f7838 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelDubboProviderApp.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/com/alibaba/cloud/examples/SentinelDubboProviderApp.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/resources/application.properties index f7e84bcb..f1479b33 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/resources/application.properties @@ -2,7 +2,7 @@ spring.application.name = dubbo-provider-demo foo.service.version = 1.0.0 -dubbo.scan.basePackages = org.springframework.cloud.alibaba.cloud.examples +dubbo.scan.basePackages = com.alibaba.cloud.examples dubbo.application.id = dubbo-provider-demo dubbo.application.name = dubbo-provider-demo diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml index faa6889e..1d59f3d0 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -19,7 +19,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel @@ -39,7 +39,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MySCGConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/MySCGConfiguration.java similarity index 71% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MySCGConfiguration.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/MySCGConfiguration.java index 0c39e3f7..6ccf9130 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MySCGConfiguration.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/MySCGConfiguration.java @@ -14,18 +14,19 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; -import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler; +import static org.springframework.web.reactive.function.BodyInserters.fromObject; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.server.ServerWebExchange; -import reactor.core.publisher.Mono; -import static org.springframework.web.reactive.function.BodyInserters.fromObject; +import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler; + +import reactor.core.publisher.Mono; /** * @author Jim @@ -33,16 +34,17 @@ import static org.springframework.web.reactive.function.BodyInserters.fromObject @Configuration public class MySCGConfiguration { - @Bean - public BlockRequestHandler blockRequestHandler() { - return new BlockRequestHandler() { - @Override - public Mono handleRequest(ServerWebExchange exchange, Throwable t) { - return ServerResponse.status(444) - .contentType(MediaType.APPLICATION_JSON_UTF8) - .body(fromObject("SCS Sentinel block")); - } - }; - } + @Bean + public BlockRequestHandler blockRequestHandler() { + return new BlockRequestHandler() { + @Override + public Mono handleRequest(ServerWebExchange exchange, + Throwable t) { + return ServerResponse.status(444) + .contentType(MediaType.APPLICATION_JSON_UTF8) + .body(fromObject("SCS Sentinel block")); + } + }; + } } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesWebFluxController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/RulesWebFluxController.java similarity index 74% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesWebFluxController.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/RulesWebFluxController.java index 7767a871..8e2f4efc 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesWebFluxController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/RulesWebFluxController.java @@ -14,11 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.List; import java.util.Set; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager; import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule; @@ -26,8 +29,6 @@ import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; /** @@ -36,19 +37,19 @@ import reactor.core.publisher.Mono; @RestController public class RulesWebFluxController { - @GetMapping("/api") - public Mono> apiRules() { - return Mono.just(GatewayApiDefinitionManager.getApiDefinitions()); - } + @GetMapping("/api") + public Mono> apiRules() { + return Mono.just(GatewayApiDefinitionManager.getApiDefinitions()); + } - @GetMapping("/gateway") - public Mono> apiGateway() { - return Mono.just(GatewayRuleManager.getRules()); - } + @GetMapping("/gateway") + public Mono> apiGateway() { + return Mono.just(GatewayRuleManager.getRules()); + } - @GetMapping("/flow") - public Mono> apiFlow() { - return Mono.just(FlowRuleManager.getRules()); - } + @GetMapping("/flow") + public Mono> apiFlow() { + return Mono.just(FlowRuleManager.getRules()); + } } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java similarity index 77% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java index 786d8dcd..137c6e91 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/com/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -25,9 +25,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SentinelSpringCloudGatewayApplication { - public static void main(String[] args) { - //GatewayCallbackManager.setRequestOriginParser(s -> "123"); - SpringApplication.run(SentinelSpringCloudGatewayApplication.class, args); - } + public static void main(String[] args) { + // GatewayCallbackManager.setRequestOriginParser(s -> "123"); + SpringApplication.run(SentinelSpringCloudGatewayApplication.class, args); + } } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml index 51620b72..ea0bdf57 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -19,7 +19,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MyConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java similarity index 96% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MyConfiguration.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java index 9d95923a..4c0225ce 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MyConfiguration.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import static org.springframework.web.reactive.function.BodyInserters.fromObject; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxApplication.java similarity index 94% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxApplication.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxApplication.java index 87a42503..353b8ba0 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxApplication.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java similarity index 75% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxController.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java index 86eae3f6..7ad45c14 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -45,12 +45,19 @@ public class SentinelWebFluxController { .transform(new SentinelReactorTransformer<>("flux")); } - @GetMapping("/aaa") - @SentinelResource("abc") - public Flux aaa() { - return Flux.fromArray(new String[] { "a", "b", "c" }) - // transform the publisher here. - .transform(new SentinelReactorTransformer<>("aaa")); - } + @GetMapping("/aaa") + @SentinelResource("abc") + public Flux aaa() { + return Flux.fromArray(new String[] { "a", "b", "c" }) + // transform the publisher here. + .transform(new SentinelReactorTransformer<>("aaa")); + } + + @GetMapping("/test") + public Flux test() { + return Flux.fromArray(new String[] { "a", "b", "c" }) + // transform the publisher here. + .transform(new SentinelReactorTransformer<>("test")); + } } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties index e9750c02..3bbd4f37 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties @@ -1,4 +1,4 @@ -spring.application.name=sentinel-example +spring.application.name=sentinel-webflux-example server.port=18084 management.endpoints.web.exposure.include=* spring.cloud.sentinel.transport.dashboard=localhost:8080 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml index 01c18217..46e098d6 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-examples 0.2.3.BUILD-SNAPSHOT ../../pom.xml @@ -19,7 +19,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel @@ -39,7 +39,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/RulesController.java similarity index 96% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesController.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/RulesController.java index 01411ab7..73d9ef5a 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/RulesController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import java.util.List; import java.util.Set; diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelZuulApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/SentinelZuulApplication.java similarity index 84% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelZuulApplication.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/SentinelZuulApplication.java index 7e99e220..4c2243c6 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelZuulApplication.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/SentinelZuulApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -27,8 +27,8 @@ import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @EnableZuulProxy public class SentinelZuulApplication { - public static void main(String[] args) { - SpringApplication.run(SentinelZuulApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SentinelZuulApplication.class, args); + } } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ZuulConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java similarity index 52% rename from spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ZuulConfiguration.java rename to spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java index 796241a2..7393707e 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ZuulConfiguration.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java @@ -14,53 +14,55 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples; +package com.alibaba.cloud.examples; import javax.servlet.http.HttpServletRequest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + import com.alibaba.csp.sentinel.adapter.gateway.zuul.callback.RequestOriginParser; import com.alibaba.csp.sentinel.adapter.gateway.zuul.fallback.BlockResponse; import com.alibaba.csp.sentinel.adapter.gateway.zuul.fallback.ZuulBlockFallbackProvider; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - /** * @author Jim */ @Configuration public class ZuulConfiguration { - @Bean - public ZuulBlockFallbackProvider zuulBlockFallbackProvider1() { - return new ZuulBlockFallbackProvider() { - @Override - public String getRoute() { - return "*"; - } + @Bean + public ZuulBlockFallbackProvider zuulBlockFallbackProvider1() { + return new ZuulBlockFallbackProvider() { + @Override + public String getRoute() { + return "*"; + } - @Override - public BlockResponse fallbackResponse(String route, Throwable cause) { - if (route.equals("my-service3")) { - return new BlockResponse(433, "Sentinel Block3", route); - } else if (route.equals("my-service4")) { - return new BlockResponse(444, "my-service4", route); - } else { - return new BlockResponse(499, "Sentinel Block 499", route); - } - } - }; - } + @Override + public BlockResponse fallbackResponse(String route, Throwable cause) { + if (route.equals("my-service3")) { + return new BlockResponse(433, "Sentinel Block3", route); + } + else if (route.equals("my-service4")) { + return new BlockResponse(444, "my-service4", route); + } + else { + return new BlockResponse(499, "Sentinel Block 499", route); + } + } + }; + } - @Bean - public RequestOriginParser requestOriginParser() { - return new RequestOriginParser() { + @Bean + public RequestOriginParser requestOriginParser() { + return new RequestOriginParser() { - @Override - public String parseOrigin(HttpServletRequest request) { - return "123"; - } - }; - } + @Override + public String parseOrigin(HttpServletRequest request) { + return "123"; + } + }; + } } diff --git a/spring-cloud-alibaba-examples/sms-example/pom.xml b/spring-cloud-alibaba-examples/sms-example/pom.xml index 40f416c5..99902a8c 100644 --- a/spring-cloud-alibaba-examples/sms-example/pom.xml +++ b/spring-cloud-alibaba-examples/sms-example/pom.xml @@ -8,8 +8,8 @@ Example demonstrating how to use alicloud sms + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -31,7 +31,7 @@ spring-boot-starter-web - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-sms diff --git a/spring-cloud-alibaba-examples/sms-example/readme-zh.md b/spring-cloud-alibaba-examples/sms-example/readme-zh.md index b21875c9..8a4afbad 100644 --- a/spring-cloud-alibaba-examples/sms-example/readme-zh.md +++ b/spring-cloud-alibaba-examples/sms-example/readme-zh.md @@ -18,7 +18,7 @@ ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud-sms ``` @@ -234,7 +234,7 @@ public QuerySendDetailsResponse querySendDetailsResponse( */ @Component public class SmsReportMessageListener - implements org.springframework.cloud.alicloud.sms.SmsReportMessageListener { + implements SmsReportMessageListener { @Override public boolean dealMessage(Message message) { @@ -251,7 +251,7 @@ public QuerySendDetailsResponse querySendDetailsResponse( 发送状态的回执消息如下所示: ```plain -org.springframework.cloud.alibaba.cloud.example.SmsReportMessageListener; MessageID:9F3CFCE6BB3B2C8F-2-1682D84D9AD-20000000A,MessageMD5:C6AFEE0EE560BBC3380252337AC36985,RequestID:5C349CCEB8C115CCF344A3EB,MessageBody:"{"send_time":"2019-01-08 20:51:40","report_time":"2019-01-08 20:51:47","success":true,"err_msg":"用户接收成功","err_code":"DELIVERED","phone_number":"152********","sms_size":"1","biz_id":"667618746951900475^0","out_id":"edasTraceId"}",ReceiptHandle:"1-ODU4OTkzNDYwMi0xNTQ2OTUxOTM3LTItOA==",DequeueCount:"1",EnqueueTime:"Tue Jan 08 20:51:47 CST 2019",FirstDequeueTime:"Tue Jan 08 20:51:47 CST 2019",NextVisibleTime:"Tue Jan 08 20:52:17 CST 2019",Priority:"8" +SmsReportMessageListener; MessageID:9F3CFCE6BB3B2C8F-2-1682D84D9AD-20000000A,MessageMD5:C6AFEE0EE560BBC3380252337AC36985,RequestID:5C349CCEB8C115CCF344A3EB,MessageBody:"{"send_time":"2019-01-08 20:51:40","report_time":"2019-01-08 20:51:47","success":true,"err_msg":"用户接收成功","err_code":"DELIVERED","phone_number":"152********","sms_size":"1","biz_id":"667618746951900475^0","out_id":"edasTraceId"}",ReceiptHandle:"1-ODU4OTkzNDYwMi0xNTQ2OTUxOTM3LTItOA==",DequeueCount:"1",EnqueueTime:"Tue Jan 08 20:51:47 CST 2019",FirstDequeueTime:"Tue Jan 08 20:51:47 CST 2019",NextVisibleTime:"Tue Jan 08 20:52:17 CST 2019",Priority:"8" ``` ### 上行短信消息 @@ -273,7 +273,7 @@ org.springframework.cloud.alibaba.cloud.example.SmsReportMessageListener; Messag */ @Component public class SmsUpMessageListener - implements org.springframework.cloud.alicloud.sms.SmsUpMessageListener { + implements SmsUpMessageListener { @Override public boolean dealMessage(Message message) { @@ -290,7 +290,7 @@ org.springframework.cloud.alibaba.cloud.example.SmsReportMessageListener; Messag 短信成功恢复后,上行短信消息 SmsUpMessageListener 回调后的信息如下所示: ```plain -org.springframework.cloud.alibaba.cloud.example.SmsUpMessageListener; MessageID:BF030215BA85BB41-1-1682D85425F-400000003,MessageMD5:D1AF5C2D7410EF190532CBF8E17FE2B7,RequestID:5C349CEE36AF628D2A847D50,MessageBody:"{"dest_code":"2493559","send_time":"2019-01-08 20:52:14","sign_name":"【企业级分布式应用服务】","sequence_id":568585703,"phone_number":"152********","content":"5279"}",ReceiptHandle:"1-MTcxNzk4NjkxODctMTU0Njk1MTk2NC0xLTg=",DequeueCount:"1",EnqueueTime:"Tue Jan 08 20:52:14 CST 2019",FirstDequeueTime:"Tue Jan 08 20:52:14 CST 2019",NextVisibleTime:"Tue Jan 08 20:52:44 CST 2019",Priority:"8" +SmsUpMessageListener; MessageID:BF030215BA85BB41-1-1682D85425F-400000003,MessageMD5:D1AF5C2D7410EF190532CBF8E17FE2B7,RequestID:5C349CEE36AF628D2A847D50,MessageBody:"{"dest_code":"2493559","send_time":"2019-01-08 20:52:14","sign_name":"【企业级分布式应用服务】","sequence_id":568585703,"phone_number":"152********","content":"5279"}",ReceiptHandle:"1-MTcxNzk4NjkxODctMTU0Njk1MTk2NC0xLTg=",DequeueCount:"1",EnqueueTime:"Tue Jan 08 20:52:14 CST 2019",FirstDequeueTime:"Tue Jan 08 20:52:14 CST 2019",NextVisibleTime:"Tue Jan 08 20:52:44 CST 2019",Priority:"8" ``` ## 查看 Endpoint 信息 diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsApplication.java similarity index 88% rename from spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java rename to spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsApplication.java index abbd8efb..e96ffe55 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsApplication.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.example; +package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -24,7 +24,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SmsApplication { - public static void main(String[] args) throws Exception{ + public static void main(String[] args) throws Exception { SpringApplication.run(SmsApplication.class, args); } } \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsController.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsController.java similarity index 90% rename from spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsController.java rename to spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsController.java index 97308e66..aa732d66 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsController.java +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsController.java @@ -1,17 +1,23 @@ -package org.springframework.cloud.alibaba.cloud.example; +package com.alibaba.cloud.examples; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alicloud.sms.ISmsService; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.alibaba.alicloud.sms.ISmsService; + import com.aliyun.mns.model.Message; -import com.aliyuncs.dysmsapi.model.v20170525.*; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.http.MethodType; @@ -28,7 +34,7 @@ public class SmsController { private SmsReportMessageListener smsReportMessageListener; @GetMapping("/report-queue.do") - public String getSmsReportQueuename(){ + public String getSmsReportQueuename() { return environment.getProperty("spring.cloud.alicloud.sms.up-queue-name"); } diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsReportMessageListener.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsReportMessageListener.java similarity index 83% rename from spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsReportMessageListener.java rename to spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsReportMessageListener.java index aa092789..22d1f65f 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsReportMessageListener.java +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsReportMessageListener.java @@ -1,17 +1,18 @@ -package org.springframework.cloud.alibaba.cloud.example; - -import com.aliyun.mns.model.Message; -import org.springframework.stereotype.Component; +package com.alibaba.cloud.examples; import java.util.LinkedList; import java.util.List; +import org.springframework.stereotype.Component; + +import com.aliyun.mns.model.Message; + /** * @author 如果需要监听短信是否被对方成功接收,只需实现这个接口并初始化一个 Spring Bean 即可。 */ @Component public class SmsReportMessageListener - implements org.springframework.cloud.alicloud.sms.SmsReportMessageListener { + implements com.alibaba.alicloud.sms.SmsReportMessageListener { private List smsReportMessageSet = new LinkedList<>(); @Override diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsUpMessageListener.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsUpMessageListener.java similarity index 76% rename from spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsUpMessageListener.java rename to spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsUpMessageListener.java index 22f4efec..7f743564 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsUpMessageListener.java +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/com/alibaba/cloud/examples/SmsUpMessageListener.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.cloud.example; +package com.alibaba.cloud.examples; import org.springframework.stereotype.Component; @@ -9,7 +9,7 @@ import com.aliyun.mns.model.Message; */ @Component public class SmsUpMessageListener - implements org.springframework.cloud.alicloud.sms.SmsUpMessageListener { + implements com.alibaba.alicloud.sms.SmsUpMessageListener { @Override public boolean dealMessage(Message message) { diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml index af3e33cc..d153cd4c 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml @@ -3,14 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../pom.xml 4.0.0 - org.springframework.cloud spring-cloud-alibaba-dubbo-examples Spring Cloud Alibaba Dubbo Examples pom @@ -90,14 +89,14 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-dubbo ${project.version} - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml index a6017969..152d0609 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -35,7 +35,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-dubbo-sample-api ${project.version} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java new file mode 100644 index 00000000..809ebc7d --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java @@ -0,0 +1,245 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.bootstrap; + +import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.client.RestTemplate; + +import com.alibaba.cloud.dubbo.annotation.DubboTransported; +import com.alibaba.cloud.dubbo.service.RestService; +import com.alibaba.cloud.dubbo.service.User; +import com.alibaba.cloud.dubbo.service.UserService; + +/** + * Dubbo Spring Cloud Consumer Bootstrap + */ +@EnableDiscoveryClient +@EnableAutoConfiguration +@EnableFeignClients +public class DubboSpringCloudConsumerBootstrap { + + @Reference + private UserService userService; + + @Reference(version = "1.0.0", protocol = "dubbo") + private RestService restService; + + @Autowired + @Lazy + private FeignRestService feignRestService; + + @Autowired + @Lazy + private DubboFeignRestService dubboFeignRestService; + + @Value("${provider.application.name}") + private String providerApplicationName; + + @Autowired + @LoadBalanced + private RestTemplate restTemplate; + + @FeignClient("${provider.application.name}") + public interface FeignRestService { + + @GetMapping(value = "/param") + String param(@RequestParam("param") String param); + + @PostMapping("/params") + public String params(@RequestParam("b") String b, @RequestParam("a") int a); + + @PostMapping(value = "/request/body/map", produces = APPLICATION_JSON_UTF8_VALUE) + User requestBody(@RequestParam("param") String param, + @RequestBody Map data); + + @GetMapping("/headers") + public String headers(@RequestHeader("h2") String header2, + @RequestHeader("h") String header, @RequestParam("v") Integer value); + + @GetMapping("/path-variables/{p1}/{p2}") + public String pathVariables(@PathVariable("p2") String path2, + @PathVariable("p1") String path1, @RequestParam("v") String param); + } + + @FeignClient("${provider.application.name}") + @DubboTransported(protocol = "dubbo") + public interface DubboFeignRestService { + + @GetMapping(value = "/param") + String param(@RequestParam("param") String param); + + @PostMapping("/params") + String params(@RequestParam("b") String paramB, @RequestParam("a") int paramA); + + @PostMapping(value = "/request/body/map", produces = APPLICATION_JSON_UTF8_VALUE) + User requestBody(@RequestParam("param") String param, + @RequestBody Map data); + + @GetMapping("/headers") + public String headers(@RequestHeader("h2") String header2, + @RequestParam("v") Integer value, @RequestHeader("h") String header); + + @GetMapping("/path-variables/{p1}/{p2}") + public String pathVariables(@RequestParam("v") String param, + @PathVariable("p2") String path2, @PathVariable("p1") String path1); + } + + @Bean + public ApplicationRunner userServiceRunner() { + return arguments -> { + + User user = new User(); + user.setId(1L); + user.setName("小马哥"); + user.setAge(33); + + // save User + System.out.printf("UserService.save(%s) : %s\n", user, + userService.save(user)); + + // find all Users + System.out.printf("UserService.findAll() : %s\n", user, + userService.findAll()); + + // remove User + System.out.printf("UserService.remove(%d) : %s\n", user.getId(), + userService.remove(user.getId())); + + }; + } + + @Bean + public ApplicationRunner callRunner() { + return arguments -> { + + // To call /path-variables + callPathVariables(); + + // To call /headers + callHeaders(); + + // To call /param + callParam(); + + // To call /params + callParams(); + + // To call /request/body/map + callRequestBodyMap(); + + }; + } + + private void callPathVariables() { + // Dubbo Service call + System.out.println(restService.pathVariables("a", "b", "c")); + // Spring Cloud Open Feign REST Call (Dubbo Transported) + System.out.println(dubboFeignRestService.pathVariables("c", "b", "a")); + // Spring Cloud Open Feign REST Call + System.out.println(feignRestService.pathVariables("b", "a", "c")); + + // RestTemplate call + System.out.println(restTemplate.getForEntity( + "http://" + providerApplicationName + "//path-variables/{p1}/{p2}?v=c", + String.class, "a", "b")); + } + + private void callHeaders() { + // Dubbo Service call + System.out.println(restService.headers("a", "b", 10)); + // Spring Cloud Open Feign REST Call (Dubbo Transported) + System.out.println(dubboFeignRestService.headers("b", 10, "a")); + // Spring Cloud Open Feign REST Call + System.out.println(feignRestService.headers("b", "a", 10)); + } + + private void callParam() { + // Dubbo Service call + System.out.println(restService.param("mercyblitz")); + // Spring Cloud Open Feign REST Call (Dubbo Transported) + System.out.println(dubboFeignRestService.param("mercyblitz")); + // Spring Cloud Open Feign REST Call + System.out.println(feignRestService.param("mercyblitz")); + } + + private void callParams() { + // Dubbo Service call + System.out.println(restService.params(1, "1")); + // Spring Cloud Open Feign REST Call (Dubbo Transported) + System.out.println(dubboFeignRestService.params("1", 1)); + // Spring Cloud Open Feign REST Call + System.out.println(feignRestService.params("1", 1)); + + // RestTemplate call + System.out.println(restTemplate.getForEntity( + "http://" + providerApplicationName + "/param?param=小马哥", String.class)); + } + + private void callRequestBodyMap() { + + Map data = new HashMap<>(); + data.put("id", 1); + data.put("name", "小马哥"); + data.put("age", 33); + + // Dubbo Service call + System.out.println(restService.requestBodyMap(data, "Hello,World")); + // Spring Cloud Open Feign REST Call (Dubbo Transported) + System.out.println(dubboFeignRestService.requestBody("Hello,World", data)); + // Spring Cloud Open Feign REST Call + System.out.println(feignRestService.requestBody("Hello,World", data)); + + // RestTemplate call + System.out.println(restTemplate.postForObject( + "http://" + providerApplicationName + "/request/body/map?param=小马哥", data, + User.class)); + } + + @Bean + @LoadBalanced + @DubboTransported + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + public static void main(String[] args) { + new SpringApplicationBuilder(DubboSpringCloudConsumerBootstrap.class) + .properties("spring.profiles.active=nacos").run(args); + } +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java deleted file mode 100644 index 0fb73298..00000000 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.bootstrap; - -import org.apache.dubbo.config.annotation.Reference; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.ApplicationRunner; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; -import org.springframework.cloud.alibaba.dubbo.service.RestService; -import org.springframework.cloud.alibaba.dubbo.service.User; -import org.springframework.cloud.alibaba.dubbo.service.UserService; -import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.client.loadbalancer.LoadBalanced; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Lazy; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.client.RestTemplate; - -import java.util.HashMap; -import java.util.Map; - -import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; - -/** - * Dubbo Spring Cloud Consumer Bootstrap - */ -@EnableDiscoveryClient -@EnableAutoConfiguration -@EnableFeignClients -public class DubboSpringCloudConsumerBootstrap { - - @Reference - private UserService userService; - - @Reference(version = "1.0.0", protocol = "dubbo") - private RestService restService; - - @Autowired - @Lazy - private FeignRestService feignRestService; - - @Autowired - @Lazy - private DubboFeignRestService dubboFeignRestService; - - @Value("${provider.application.name}") - private String providerApplicationName; - - @Autowired - @LoadBalanced - private RestTemplate restTemplate; - - @FeignClient("${provider.application.name}") - public interface FeignRestService { - - @GetMapping(value = "/param") - String param(@RequestParam("param") String param); - - @PostMapping("/params") - public String params(@RequestParam("b") String b, @RequestParam("a") int a); - - @PostMapping(value = "/request/body/map", produces = APPLICATION_JSON_UTF8_VALUE) - User requestBody(@RequestParam("param") String param, @RequestBody Map data); - - @GetMapping("/headers") - public String headers(@RequestHeader("h2") String header2, - @RequestHeader("h") String header, - @RequestParam("v") Integer value); - - @GetMapping("/path-variables/{p1}/{p2}") - public String pathVariables(@PathVariable("p2") String path2, - @PathVariable("p1") String path1, - @RequestParam("v") String param); - } - - @FeignClient("${provider.application.name}") - @DubboTransported(protocol = "dubbo") - public interface DubboFeignRestService { - - @GetMapping(value = "/param") - String param(@RequestParam("param") String param); - - @PostMapping("/params") - String params(@RequestParam("b") String paramB, @RequestParam("a") int paramA); - - @PostMapping(value = "/request/body/map", produces = APPLICATION_JSON_UTF8_VALUE) - User requestBody(@RequestParam("param") String param, @RequestBody Map data); - - @GetMapping("/headers") - public String headers(@RequestHeader("h2") String header2, - @RequestParam("v") Integer value, - @RequestHeader("h") String header); - - @GetMapping("/path-variables/{p1}/{p2}") - public String pathVariables(@RequestParam("v") String param, - @PathVariable("p2") String path2, - @PathVariable("p1") String path1); - } - - @Bean - public ApplicationRunner userServiceRunner() { - return arguments -> { - - User user = new User(); - user.setId(1L); - user.setName("小马哥"); - user.setAge(33); - - // save User - System.out.printf("UserService.save(%s) : %s\n", user, userService.save(user)); - - // find all Users - System.out.printf("UserService.findAll() : %s\n", user, userService.findAll()); - - // remove User - System.out.printf("UserService.remove(%d) : %s\n", user.getId(), userService.remove(user.getId())); - - }; - } - - @Bean - public ApplicationRunner callRunner() { - return arguments -> { - - // To call /path-variables - callPathVariables(); - - // To call /headers - callHeaders(); - - // To call /param - callParam(); - - // To call /params - callParams(); - - // To call /request/body/map - callRequestBodyMap(); - - }; - } - - private void callPathVariables() { - // Dubbo Service call - System.out.println(restService.pathVariables("a", "b", "c")); - // Spring Cloud Open Feign REST Call (Dubbo Transported) - System.out.println(dubboFeignRestService.pathVariables("c", "b", "a")); - // Spring Cloud Open Feign REST Call - System.out.println(feignRestService.pathVariables("b", "a", "c")); - - // RestTemplate call - System.out.println(restTemplate.getForEntity("http://" + providerApplicationName + "//path-variables/{p1}/{p2}?v=c", String.class, "a", "b")); - } - - private void callHeaders() { - // Dubbo Service call - System.out.println(restService.headers("a", "b", 10)); - // Spring Cloud Open Feign REST Call (Dubbo Transported) - System.out.println(dubboFeignRestService.headers("b", 10, "a")); - // Spring Cloud Open Feign REST Call - System.out.println(feignRestService.headers("b", "a", 10)); - } - - private void callParam() { - // Dubbo Service call - System.out.println(restService.param("mercyblitz")); - // Spring Cloud Open Feign REST Call (Dubbo Transported) - System.out.println(dubboFeignRestService.param("mercyblitz")); - // Spring Cloud Open Feign REST Call - System.out.println(feignRestService.param("mercyblitz")); - } - - private void callParams() { - // Dubbo Service call - System.out.println(restService.params(1, "1")); - // Spring Cloud Open Feign REST Call (Dubbo Transported) - System.out.println(dubboFeignRestService.params("1", 1)); - // Spring Cloud Open Feign REST Call - System.out.println(feignRestService.params("1", 1)); - - // RestTemplate call - System.out.println(restTemplate.getForEntity("http://" + providerApplicationName + "/param?param=小马哥", String.class)); - } - - private void callRequestBodyMap() { - - Map data = new HashMap<>(); - data.put("id", 1); - data.put("name", "小马哥"); - data.put("age", 33); - - // Dubbo Service call - System.out.println(restService.requestBodyMap(data, "Hello,World")); - // Spring Cloud Open Feign REST Call (Dubbo Transported) - System.out.println(dubboFeignRestService.requestBody("Hello,World", data)); -// Spring Cloud Open Feign REST Call - System.out.println(feignRestService.requestBody("Hello,World", data)); - - // RestTemplate call - System.out.println(restTemplate.postForObject("http://" + providerApplicationName + "/request/body/map?param=小马哥", data, User.class)); - } - - @Bean - @LoadBalanced - @DubboTransported - public RestTemplate restTemplate() { - return new RestTemplate(); - } - - public static void main(String[] args) { - new SpringApplicationBuilder(DubboSpringCloudConsumerBootstrap.class) - .properties("spring.profiles.active=nacos") - .run(args); - } -} - - - diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml index e2c82730..995ef0c5 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -32,7 +32,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-dubbo-sample-api ${project.version} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java similarity index 78% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java index 8e6ed4e9..94b4b750 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.bootstrap; +package com.alibaba.cloud.dubbo.bootstrap; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -28,13 +28,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableAutoConfiguration public class DubboSpringCloudProviderBootstrap { - public static void main(String[] args) { - new SpringApplicationBuilder(DubboSpringCloudProviderBootstrap.class) - .properties("spring.profiles.active=nacos") - .web(WebApplicationType.NONE) - .run(args); - } + public static void main(String[] args) { + new SpringApplicationBuilder(DubboSpringCloudProviderBootstrap.class) + .properties("spring.profiles.active=nacos").web(WebApplicationType.NONE) + .run(args); + } } - - - diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java similarity index 70% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java index cd1aa8b3..d254196d 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java @@ -14,34 +14,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.config.annotation.Service; +package com.alibaba.cloud.dubbo.service; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import org.apache.dubbo.config.annotation.Service; + /** * In-Memory {@link UserService} implementation */ @Service(protocol = "dubbo") public class InMemoryUserService implements UserService { - private Map usersRepository = new HashMap<>(); + private Map usersRepository = new HashMap<>(); - @Override - public boolean save(User user) { - return usersRepository.put(user.getId(), user) == null; - } + @Override + public boolean save(User user) { + return usersRepository.put(user.getId(), user) == null; + } - @Override - public boolean remove(Long userId) { - return usersRepository.remove(userId) != null; - } + @Override + public boolean remove(Long userId) { + return usersRepository.remove(userId) != null; + } - @Override - public Collection findAll() { - return usersRepository.values(); - } + @Override + public Collection findAll() { + return usersRepository.values(); + } } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java new file mode 100644 index 00000000..e30a4cb3 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import static com.alibaba.cloud.dubbo.util.LoggerUtils.log; +import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; + +import java.util.HashMap; +import java.util.Map; + +import javax.ws.rs.Consumes; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.apache.dubbo.config.annotation.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Default {@link RestService} + * + * @author Mercy + */ +@Service(version = "1.0.0", protocol = { "dubbo", "rest" }) +@Path("/") +public class StandardRestService implements RestService { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + @Path("param") + @GET + public String param(@QueryParam("param") String param) { + log("/param", param); + return param; + } + + @Override + @Path("params") + @POST + public String params(@QueryParam("a") int a, @QueryParam("b") String b) { + log("/params", a + b); + return a + b; + } + + @Override + @Path("headers") + @GET + public String headers(@HeaderParam("h") String header, + @HeaderParam("h2") String header2, @QueryParam("v") Integer param) { + String result = header + " , " + header2 + " , " + param; + log("/headers", result); + return result; + } + + @Override + @Path("path-variables/{p1}/{p2}") + @GET + public String pathVariables(@PathParam("p1") String path1, + @PathParam("p2") String path2, @QueryParam("v") String param) { + String result = path1 + " , " + path2 + " , " + param; + log("/path-variables", result); + return result; + } + + // @CookieParam does not support : https://github.com/OpenFeign/feign/issues/913 + // @CookieValue also does not support + + @Override + @Path("form") + @POST + public String form(@FormParam("f") String form) { + return String.valueOf(form); + } + + @Override + @Path("request/body/map") + @POST + @Produces(APPLICATION_JSON_VALUE) + public User requestBodyMap(Map data, + @QueryParam("param") String param) { + User user = new User(); + user.setId(((Integer) data.get("id")).longValue()); + user.setName((String) data.get("name")); + user.setAge((Integer) data.get("age")); + log("/request/body/map", param); + return user; + } + + @Path("request/body/user") + @POST + @Override + @Consumes(MediaType.APPLICATION_JSON) + public Map requestBodyUser(User user) { + Map map = new HashMap<>(); + map.put("id", user.getId()); + map.put("name", user.getName()); + map.put("age", user.getAge()); + return map; + } +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java deleted file mode 100644 index aeea2b16..00000000 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.config.annotation.Service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.ws.rs.Consumes; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import java.util.HashMap; -import java.util.Map; - -import static org.springframework.cloud.alibaba.dubbo.util.LoggerUtils.log; -import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; - -/** - * Default {@link RestService} - * - * @author Mercy - */ -@Service(version = "1.0.0", protocol = {"dubbo", "rest"}) -@Path("/") -public class StandardRestService implements RestService { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Override - @Path("param") - @GET - public String param(@QueryParam("param") String param) { - log("/param", param); - return param; - } - - @Override - @Path("params") - @POST - public String params(@QueryParam("a") int a, @QueryParam("b") String b) { - log("/params", a + b); - return a + b; - } - - @Override - @Path("headers") - @GET - public String headers(@HeaderParam("h") String header, - @HeaderParam("h2") String header2, - @QueryParam("v") - Integer param) { - String result = header + " , " + header2 + " , " + param; - log("/headers", result); - return result; - } - - @Override - @Path("path-variables/{p1}/{p2}") - @GET - public String pathVariables(@PathParam("p1") String path1, - @PathParam("p2") String path2, - @QueryParam("v") String param) { - String result = path1 + " , " + path2 + " , " + param; - log("/path-variables", result); - return result; - } - - // @CookieParam does not support : https://github.com/OpenFeign/feign/issues/913 - // @CookieValue also does not support - - @Override - @Path("form") - @POST - public String form(@FormParam("f") String form) { - return String.valueOf(form); - } - - @Override - @Path("request/body/map") - @POST - @Produces(APPLICATION_JSON_VALUE) - public User requestBodyMap(Map data, @QueryParam("param") String param) { - User user = new User(); - user.setId(((Integer) data.get("id")).longValue()); - user.setName((String) data.get("name")); - user.setAge((Integer) data.get("age")); - log("/request/body/map", param); - return user; - } - - @Path("request/body/user") - @POST - @Override - @Consumes(MediaType.APPLICATION_JSON) - public Map requestBodyUser(User user) { - Map map = new HashMap<>(); - map.put("id", user.getId()); - map.put("name", user.getName()); - map.put("age", user.getAge()); - return map; - } -} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml index 056b4856..1a7ec7c5 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml @@ -1,6 +1,6 @@ dubbo: scan: - base-packages: org.springframework.cloud.alibaba.dubbo.service + base-packages: com.alibaba.cloud.dubbo.service protocols: dubbo: name: dubbo diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml index af6f2fcd..e36cbf69 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -29,7 +29,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-dubbo-sample-api ${project.version} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java similarity index 80% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java index 799a3a74..18f859af 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.bootstrap; +package com.alibaba.cloud.dubbo.bootstrap; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -27,9 +27,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableAutoConfiguration public class DubboSpringCloudWebProviderBootstrap { - public static void main(String[] args) { - new SpringApplicationBuilder(DubboSpringCloudWebProviderBootstrap.class) - .properties("spring.profiles.active=nacos") - .run(args); - } + public static void main(String[] args) { + new SpringApplicationBuilder(DubboSpringCloudWebProviderBootstrap.class) + .properties("spring.profiles.active=nacos").run(args); + } } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java similarity index 70% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java index cd1aa8b3..d254196d 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java @@ -14,34 +14,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.config.annotation.Service; +package com.alibaba.cloud.dubbo.service; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import org.apache.dubbo.config.annotation.Service; + /** * In-Memory {@link UserService} implementation */ @Service(protocol = "dubbo") public class InMemoryUserService implements UserService { - private Map usersRepository = new HashMap<>(); + private Map usersRepository = new HashMap<>(); - @Override - public boolean save(User user) { - return usersRepository.put(user.getId(), user) == null; - } + @Override + public boolean save(User user) { + return usersRepository.put(user.getId(), user) == null; + } - @Override - public boolean remove(Long userId) { - return usersRepository.remove(userId) != null; - } + @Override + public boolean remove(Long userId) { + return usersRepository.remove(userId) != null; + } - @Override - public Collection findAll() { - return usersRepository.values(); - } + @Override + public Collection findAll() { + return usersRepository.values(); + } } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java new file mode 100644 index 00000000..cdbefcd8 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.dubbo.service; + +import static com.alibaba.cloud.dubbo.util.LoggerUtils.log; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.dubbo.config.annotation.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * Spring MVC {@link RestService} + * + * @author Mercy + */ +@Service(version = "1.0.0") +@RestController +public class SpringRestService implements RestService { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + @GetMapping(value = "/param") + public String param(@RequestParam String param) { + log("/param", param); + return param; + } + + @Override + @PostMapping("/params") + public String params(@RequestParam int a, @RequestParam String b) { + log("/params", a + b); + return a + b; + } + + @Override + @GetMapping("/headers") + public String headers(@RequestHeader("h") String header, + @RequestHeader("h2") String header2, @RequestParam("v") Integer param) { + String result = header + " , " + header2 + " , " + param; + log("/headers", result); + return result; + } + + @Override + @GetMapping("/path-variables/{p1}/{p2}") + public String pathVariables(@PathVariable("p1") String path1, + @PathVariable("p2") String path2, @RequestParam("v") String param) { + String result = path1 + " , " + path2 + " , " + param; + log("/path-variables", result); + return result; + } + + @Override + @PostMapping("/form") + public String form(@RequestParam("f") String form) { + return String.valueOf(form); + } + + @Override + @PostMapping(value = "/request/body/map", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public User requestBodyMap(@RequestBody Map data, + @RequestParam("param") String param) { + User user = new User(); + user.setId(((Integer) data.get("id")).longValue()); + user.setName((String) data.get("name")); + user.setAge((Integer) data.get("age")); + log("/request/body/map", param); + return user; + } + + @PostMapping(value = "/request/body/user", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Override + public Map requestBodyUser(@RequestBody User user) { + Map map = new HashMap<>(); + map.put("id", user.getId()); + map.put("name", user.getName()); + map.put("age", user.getAge()); + return map; + } + +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/SpringRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/SpringRestService.java deleted file mode 100644 index f39fd70e..00000000 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/SpringRestService.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alibaba.dubbo.service; - -import org.apache.dubbo.config.annotation.Service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.HashMap; -import java.util.Map; - -import static org.springframework.cloud.alibaba.dubbo.util.LoggerUtils.log; - -/** - * Spring MVC {@link RestService} - * - * @author Mercy - */ -@Service(version = "1.0.0") -@RestController -public class SpringRestService implements RestService { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Override - @GetMapping(value = "/param") - public String param(@RequestParam String param) { - log("/param", param); - return param; - } - - @Override - @PostMapping("/params") - public String params(@RequestParam int a, @RequestParam String b) { - log("/params", a + b); - return a + b; - } - - @Override - @GetMapping("/headers") - public String headers(@RequestHeader("h") String header, - @RequestHeader("h2") String header2, - @RequestParam("v") Integer param) { - String result = header + " , " + header2 + " , " + param; - log("/headers", result); - return result; - } - - @Override - @GetMapping("/path-variables/{p1}/{p2}") - public String pathVariables(@PathVariable("p1") String path1, - @PathVariable("p2") String path2, - @RequestParam("v") String param) { - String result = path1 + " , " + path2 + " , " + param; - log("/path-variables", result); - return result; - } - - @Override - @PostMapping("/form") - public String form(@RequestParam("f") String form) { - return String.valueOf(form); - } - - @Override - @PostMapping(value = "/request/body/map", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) - public User requestBodyMap(@RequestBody Map data, @RequestParam("param") String param) { - User user = new User(); - user.setId(((Integer) data.get("id")).longValue()); - user.setName((String) data.get("name")); - user.setAge((Integer) data.get("age")); - log("/request/body/map", param); - return user; - } - - @PostMapping(value = "/request/body/user", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) - @Override - public Map requestBodyUser(@RequestBody User user) { - Map map = new HashMap<>(); - map.put("id", user.getId()); - map.put("name", user.getName()); - map.put("age", user.getAge()); - return map; - } - -} - diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml index e6cc2969..76692fe1 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml @@ -1,6 +1,6 @@ dubbo: scan: - base-packages: org.springframework.cloud.alibaba.dubbo.service + base-packages: com.alibaba.cloud.dubbo.service protocols: dubbo: name: dubbo diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml index 8a9e5422..e73f2a20 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml @@ -3,13 +3,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-dubbo-sample-api Spring Cloud Dubbo Sample API diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/RestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/RestService.java similarity index 70% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/RestService.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/RestService.java index 442a0a9a..1bfe4b91 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/RestService.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/RestService.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; +package com.alibaba.cloud.dubbo.service; import java.util.Map; @@ -25,17 +25,17 @@ import java.util.Map; */ public interface RestService { - String param(String param); + String param(String param); - String params(int a, String b); + String params(int a, String b); - String headers(String header, String header2, Integer param); + String headers(String header, String header2, Integer param); - String pathVariables(String path1, String path2, String param); + String pathVariables(String path1, String path2, String param); - String form(String form); + String form(String form); - User requestBodyMap(Map data, String param); + User requestBodyMap(Map data, String param); - Map requestBodyUser(User user); + Map requestBodyUser(User user); } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/User.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/User.java similarity index 58% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/User.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/User.java index f91caba3..14055cd3 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/User.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/User.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; +package com.alibaba.cloud.dubbo.service; import java.io.Serializable; @@ -25,42 +25,38 @@ import java.io.Serializable; */ public class User implements Serializable { - private Long id; + private Long id; - private String name; + private String name; - private Integer age; + private Integer age; - public Long getId() { - return id; - } + public Long getId() { + return id; + } - public void setId(Long id) { - this.id = id; - } + public void setId(Long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public Integer getAge() { - return age; - } + public Integer getAge() { + return age; + } - public void setAge(Integer age) { - this.age = age; - } + public void setAge(Integer age) { + this.age = age; + } - @Override - public String toString() { - return "User{" + - "id=" + id + - ", name='" + name + '\'' + - ", age=" + age + - '}'; - } + @Override + public String toString() { + return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; + } } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/UserService.java similarity index 86% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/UserService.java index 471f07bf..81df4787 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/service/UserService.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.service; +package com.alibaba.cloud.dubbo.service; import java.util.Collection; @@ -25,9 +25,9 @@ import java.util.Collection; */ public interface UserService { - boolean save(User user); + boolean save(User user); - boolean remove(Long userId); + boolean remove(Long userId); - Collection findAll(); + Collection findAll(); } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/util/LoggerUtils.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/util/LoggerUtils.java similarity index 61% rename from spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/util/LoggerUtils.java rename to spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/util/LoggerUtils.java index 1985c283..31c9af2c 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/util/LoggerUtils.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/com/alibaba/cloud/dubbo/util/LoggerUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.dubbo.util; +package com.alibaba.cloud.dubbo.util; import org.apache.dubbo.rpc.RpcContext; import org.slf4j.Logger; @@ -25,17 +25,17 @@ import org.slf4j.LoggerFactory; */ public abstract class LoggerUtils { - private static final Logger logger = LoggerFactory.getLogger(LoggerUtils.class); + private static final Logger logger = LoggerFactory.getLogger(LoggerUtils.class); - public static void log(String url, Object result) { - String message = String.format("The client[%s] uses '%s' protocol to call %s : %s", - RpcContext.getContext().getRemoteHostName(), - RpcContext.getContext().getUrl() == null ? "N/A" : RpcContext.getContext().getUrl().getProtocol(), - url, - result - ); - if (logger.isInfoEnabled()) { - logger.info(message); - } - } + public static void log(String url, Object result) { + String message = String + .format("The client[%s] uses '%s' protocol to call %s : %s", + RpcContext.getContext().getRemoteHostName(), + RpcContext.getContext().getUrl() == null ? "N/A" + : RpcContext.getContext().getUrl().getProtocol(), + url, result); + if (logger.isInfoEnabled()) { + logger.info(message); + } + } } diff --git a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml index dd76ee52..f77251ab 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba-examples - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -18,7 +18,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-bus-rocketmq diff --git a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/RocketMQBusApplication.java b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/RocketMQBusApplication.java similarity index 95% rename from spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/RocketMQBusApplication.java rename to spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/RocketMQBusApplication.java index 60299a22..6a8eee88 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/RocketMQBusApplication.java +++ b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/RocketMQBusApplication.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples.rocketmq; +package com.alibaba.cloud.examples.rocketmq; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -39,7 +39,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; */ @RestController @EnableAutoConfiguration -@RemoteApplicationEventScan(basePackages = "org.springframework.cloud.alibaba.cloud.examples.rocketmq") +@RemoteApplicationEventScan(basePackages = "com.alibaba.cloud.examples.rocketmq") public class RocketMQBusApplication { public static void main(String[] args) { diff --git a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/User.java b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/User.java similarity index 64% rename from spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/User.java rename to spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/User.java index ae22c92b..2c9dae87 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/User.java +++ b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/User.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples.rocketmq; +package com.alibaba.cloud.examples.rocketmq; /** * User Domain @@ -24,31 +24,28 @@ package org.springframework.cloud.alibaba.cloud.examples.rocketmq; */ public class User { - private Long id; + private Long id; - private String name; + private String name; - public Long getId() { - return id; - } + public Long getId() { + return id; + } - public void setId(Long id) { - this.id = id; - } + public void setId(Long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - @Override - public String toString() { - return "User{" + - "id=" + id + - ", name='" + name + '\'' + - '}'; - } + @Override + public String toString() { + return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; + } } diff --git a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/UserRemoteApplicationEvent.java b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/UserRemoteApplicationEvent.java similarity index 68% rename from spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/UserRemoteApplicationEvent.java rename to spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/UserRemoteApplicationEvent.java index fa404e89..9979e190 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/rocketmq/UserRemoteApplicationEvent.java +++ b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/src/main/java/com/alibaba/cloud/examples/rocketmq/UserRemoteApplicationEvent.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.cloud.examples.rocketmq; +package com.alibaba.cloud.examples.rocketmq; import org.springframework.cloud.bus.event.RemoteApplicationEvent; @@ -26,22 +26,22 @@ import org.springframework.cloud.bus.event.RemoteApplicationEvent; */ public class UserRemoteApplicationEvent extends RemoteApplicationEvent { - private User user; + private User user; - public UserRemoteApplicationEvent() { - } + public UserRemoteApplicationEvent() { + } - public UserRemoteApplicationEvent(Object source, User user, String originService, - String destinationService) { - super(source, originService, destinationService); - this.user = user; - } + public UserRemoteApplicationEvent(Object source, User user, String originService, + String destinationService) { + super(source, originService, destinationService); + this.user = user; + } - public void setUser(User user) { - this.user = user; - } + public void setUser(User user) { + this.user = user; + } - public User getUser() { - return user; - } + public User getUser() { + return user; + } } diff --git a/spring-cloud-alibaba-nacos-config-server/pom.xml b/spring-cloud-alibaba-nacos-config-server/pom.xml index c54e250e..00a51e45 100644 --- a/spring-cloud-alibaba-nacos-config-server/pom.xml +++ b/spring-cloud-alibaba-nacos-config-server/pom.xml @@ -3,14 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml 4.0.0 - org.springframework.cloud spring-cloud-alibaba-nacos-config-server Spring Cloud Alibaba Nacos Config Server diff --git a/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/NacosConfigServerAutoConfiguration.java b/spring-cloud-alibaba-nacos-config-server/src/main/java/com/alibaba/cloud/nacos/config/server/NacosConfigServerAutoConfiguration.java similarity index 75% rename from spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/NacosConfigServerAutoConfiguration.java rename to spring-cloud-alibaba-nacos-config-server/src/main/java/com/alibaba/cloud/nacos/config/server/NacosConfigServerAutoConfiguration.java index 74a4903d..0548ff60 100644 --- a/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/NacosConfigServerAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-config-server/src/main/java/com/alibaba/cloud/nacos/config/server/NacosConfigServerAutoConfiguration.java @@ -14,34 +14,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.config.server; +package com.alibaba.cloud.nacos.config.server; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.alibaba.nacos.config.server.environment.NacosEnvironmentRepository; import org.springframework.cloud.config.server.EnableConfigServer; import org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.config.server.environment.NacosEnvironmentRepository; + /** * Nacos Config Server Auto-Configuration * * @author Mercy * @since 0.2.0 */ -@ConditionalOnClass(EnableConfigServer.class) // If class of @EnableConfigServer is present in class-path -@ComponentScan(basePackages = { - "com.alibaba.nacos.config.server", -}) +@ConditionalOnClass(EnableConfigServer.class) // If class of @EnableConfigServer is + // present in class-path +@ComponentScan(basePackages = { "com.alibaba.nacos.config.server", }) @AutoConfigureBefore(ConfigServerAutoConfiguration.class) @Configuration public class NacosConfigServerAutoConfiguration { - @Bean - public NacosEnvironmentRepository nacosEnvironmentRepository() { - return new NacosEnvironmentRepository(); - } + @Bean + public NacosEnvironmentRepository nacosEnvironmentRepository() { + return new NacosEnvironmentRepository(); + } } diff --git a/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/environment/NacosEnvironmentRepository.java b/spring-cloud-alibaba-nacos-config-server/src/main/java/com/alibaba/cloud/nacos/config/server/environment/NacosEnvironmentRepository.java similarity index 51% rename from spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/environment/NacosEnvironmentRepository.java rename to spring-cloud-alibaba-nacos-config-server/src/main/java/com/alibaba/cloud/nacos/config/server/environment/NacosEnvironmentRepository.java index 50b054aa..694f1b1b 100644 --- a/spring-cloud-alibaba-nacos-config-server/src/main/java/org/springframework/cloud/alibaba/nacos/config/server/environment/NacosEnvironmentRepository.java +++ b/spring-cloud-alibaba-nacos-config-server/src/main/java/com/alibaba/cloud/nacos/config/server/environment/NacosEnvironmentRepository.java @@ -14,21 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.config.server.environment; +package com.alibaba.cloud.nacos.config.server.environment; + +import static com.alibaba.nacos.config.server.constant.Constants.DEFAULT_GROUP; + +import java.io.IOException; +import java.io.StringReader; +import java.util.Properties; -import com.alibaba.nacos.config.server.model.ConfigInfo; -import com.alibaba.nacos.config.server.service.PersistService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.config.environment.Environment; import org.springframework.cloud.config.environment.PropertySource; import org.springframework.cloud.config.server.environment.EnvironmentRepository; import org.springframework.util.StringUtils; -import java.io.IOException; -import java.io.StringReader; -import java.util.Properties; - -import static com.alibaba.nacos.config.server.constant.Constants.DEFAULT_GROUP; +import com.alibaba.nacos.config.server.model.ConfigInfo; +import com.alibaba.nacos.config.server.service.PersistService; /** * Nacos {@link EnvironmentRepository} @@ -38,48 +39,53 @@ import static com.alibaba.nacos.config.server.constant.Constants.DEFAULT_GROUP; */ public class NacosEnvironmentRepository implements EnvironmentRepository { - @Autowired - private PersistService persistService; + @Autowired + private PersistService persistService; - @Override - public Environment findOne(String application, String profile, String label) { + @Override + public Environment findOne(String application, String profile, String label) { - String dataId = application + "-" + profile + ".properties"; + String dataId = application + "-" + profile + ".properties"; - ConfigInfo configInfo = persistService.findConfigInfo(dataId, DEFAULT_GROUP, label); + ConfigInfo configInfo = persistService.findConfigInfo(dataId, DEFAULT_GROUP, + label); - return createEnvironment(configInfo, application, profile); - } + return createEnvironment(configInfo, application, profile); + } - private Environment createEnvironment(ConfigInfo configInfo, String application, String profile) { + private Environment createEnvironment(ConfigInfo configInfo, String application, + String profile) { - Environment environment = new Environment(application, profile); + Environment environment = new Environment(application, profile); - Properties properties = createProperties(configInfo); + Properties properties = createProperties(configInfo); - String propertySourceName = String.format("Nacos[application : %s , profile : %s]", application, profile); + String propertySourceName = String + .format("Nacos[application : %s , profile : %s]", application, profile); - PropertySource propertySource = new PropertySource(propertySourceName, properties); + PropertySource propertySource = new PropertySource(propertySourceName, + properties); - environment.add(propertySource); + environment.add(propertySource); - return environment; - } + return environment; + } - private Properties createProperties(ConfigInfo configInfo) { - Properties properties = new Properties(); - String content = configInfo == null ? null : configInfo.getContent(); - if (StringUtils.hasText(content)) { - try { - properties.load(new StringReader(content)); - } catch (IOException e) { - throw new IllegalStateException("The format of content is a properties"); - } - } - return properties; - } + private Properties createProperties(ConfigInfo configInfo) { + Properties properties = new Properties(); + String content = configInfo == null ? null : configInfo.getContent(); + if (StringUtils.hasText(content)) { + try { + properties.load(new StringReader(content)); + } + catch (IOException e) { + throw new IllegalStateException("The format of content is a properties"); + } + } + return properties; + } - private static String[] of(String... values) { - return values; - } + private static String[] of(String... values) { + return values; + } } diff --git a/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories index 861f60f0..aef71745 100644 --- a/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-nacos-config-server/src/main/resources/META-INF/spring.factories @@ -1,3 +1,3 @@ # Auto-Configuration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alibaba.nacos.config.server.NacosConfigServerAutoConfiguration \ No newline at end of file +com.alibaba.cloud.nacos.config.server.NacosConfigServerAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-alibaba-nacos-config-server/src/test/java/org/springframework/cloud/alibaba/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java b/spring-cloud-alibaba-nacos-config-server/src/test/java/com/alibaba/cloud/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java similarity index 76% rename from spring-cloud-alibaba-nacos-config-server/src/test/java/org/springframework/cloud/alibaba/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java rename to spring-cloud-alibaba-nacos-config-server/src/test/java/com/alibaba/cloud/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java index 3e379457..d37b81d0 100644 --- a/spring-cloud-alibaba-nacos-config-server/src/test/java/org/springframework/cloud/alibaba/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java +++ b/spring-cloud-alibaba-nacos-config-server/src/test/java/com/alibaba/cloud/nacos/config/server/bootstrap/NacosConfigServerBootstrap.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.config.server.bootstrap; +package com.alibaba.cloud.nacos.config.server.bootstrap; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; @@ -32,16 +32,16 @@ import org.springframework.context.annotation.Bean; @EnableConfigServer public class NacosConfigServerBootstrap { - public static void main(String[] args) { - System.setProperty("nacos.standalone", "true"); - SpringApplication.run(NacosConfigServerBootstrap.class); - } + public static void main(String[] args) { + System.setProperty("nacos.standalone", "true"); + SpringApplication.run(NacosConfigServerBootstrap.class); + } - @Bean - public ApplicationRunner applicationRunner() { + @Bean + public ApplicationRunner applicationRunner() { - return args -> { - System.out.println("Running..."); - }; - } + return args -> { + System.out.println("Running..."); + }; + } } diff --git a/spring-cloud-alibaba-nacos-config/pom.xml b/spring-cloud-alibaba-nacos-config/pom.xml index f3f99634..da24479a 100644 --- a/spring-cloud-alibaba-nacos-config/pom.xml +++ b/spring-cloud-alibaba-nacos-config/pom.xml @@ -3,13 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-nacos-config Spring Cloud Alibaba Nacos Config diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java similarity index 88% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java index caacccd8..cab15a4e 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java @@ -14,17 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.nacos.refresh.NacosContextRefresher; -import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory; -import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.refresh.NacosContextRefresher; +import com.alibaba.cloud.nacos.refresh.NacosRefreshHistory; +import com.alibaba.cloud.nacos.refresh.NacosRefreshProperties; + /** * @author juven.xuxb */ diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java similarity index 91% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java index 5a6ad2bb..081464cd 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.client.NacosPropertySourceLocator; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java similarity index 99% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java index 01b95d5d..82ab1fac 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java @@ -14,18 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; - -import com.alibaba.nacos.api.NacosFactory; -import com.alibaba.nacos.api.config.ConfigService; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.List; -import java.util.Objects; -import java.util.Properties; +package com.alibaba.cloud.nacos; import static com.alibaba.nacos.api.PropertyKeyConst.ACCESS_KEY; import static com.alibaba.nacos.api.PropertyKeyConst.CLUSTER_NAME; @@ -37,6 +26,17 @@ import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE; import static com.alibaba.nacos.api.PropertyKeyConst.SECRET_KEY; import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR; +import java.util.List; +import java.util.Objects; +import java.util.Properties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import com.alibaba.nacos.api.NacosFactory; +import com.alibaba.nacos.api.config.ConfigService; + /** * nacos properties * diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosPropertySourceRepository.java similarity index 92% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosPropertySourceRepository.java index 6fa8e490..ea011b00 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosPropertySourceRepository.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; - -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; +package com.alibaba.cloud.nacos; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import com.alibaba.cloud.nacos.client.NacosPropertySource; + /** * @author xiaojing * @author pbting diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySource.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java similarity index 96% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySource.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java index 0066d17e..d932f2b3 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySource.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.client; - -import org.springframework.core.env.MapPropertySource; +package com.alibaba.cloud.nacos.client; import java.util.Date; import java.util.Map; +import org.springframework.core.env.MapPropertySource; + /** * @author xiaojing * @author pbting diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java similarity index 96% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java index cf63f0db..e10c9a30 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java @@ -14,17 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.client; - -import com.alibaba.nacos.api.config.ConfigService; -import com.alibaba.nacos.api.exception.NacosException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; -import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; -import org.springframework.core.io.ByteArrayResource; -import org.springframework.util.StringUtils; +package com.alibaba.cloud.nacos.client; import java.io.StringReader; import java.util.Date; @@ -33,6 +23,16 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.util.StringUtils; + +import com.alibaba.cloud.nacos.NacosPropertySourceRepository; +import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.exception.NacosException; + /** * @author xiaojing * @author pbting diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java similarity index 96% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java index 306066eb..51541602 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.client; +package com.alibaba.cloud.nacos.client; -import com.alibaba.nacos.api.config.ConfigService; +import java.util.Arrays; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; -import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; -import org.springframework.cloud.alibaba.nacos.refresh.NacosContextRefresher; import org.springframework.cloud.bootstrap.config.PropertySourceLocator; import org.springframework.core.annotation.Order; import org.springframework.core.env.CompositePropertySource; @@ -30,8 +28,10 @@ import org.springframework.core.env.Environment; import org.springframework.core.env.PropertySource; import org.springframework.util.StringUtils; -import java.util.Arrays; -import java.util.List; +import com.alibaba.cloud.nacos.NacosConfigProperties; +import com.alibaba.cloud.nacos.NacosPropertySourceRepository; +import com.alibaba.cloud.nacos.refresh.NacosContextRefresher; +import com.alibaba.nacos.api.config.ConfigService; /** * @author xiaojing diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/diagnostics/analyzer/NacosConnectionFailureAnalyzer.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/diagnostics/analyzer/NacosConnectionFailureAnalyzer.java similarity index 94% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/diagnostics/analyzer/NacosConnectionFailureAnalyzer.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/diagnostics/analyzer/NacosConnectionFailureAnalyzer.java index 1bbbe940..10b1e20a 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/diagnostics/analyzer/NacosConnectionFailureAnalyzer.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/diagnostics/analyzer/NacosConnectionFailureAnalyzer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.diagnostics.analyzer; +package com.alibaba.cloud.nacos.diagnostics.analyzer; import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; import org.springframework.boot.diagnostics.FailureAnalysis; diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/diagnostics/analyzer/NacosConnectionFailureException.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/diagnostics/analyzer/NacosConnectionFailureException.java similarity index 89% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/diagnostics/analyzer/NacosConnectionFailureException.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/diagnostics/analyzer/NacosConnectionFailureException.java index 2ca75d05..f01458d4 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/diagnostics/analyzer/NacosConnectionFailureException.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/diagnostics/analyzer/NacosConnectionFailureException.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.diagnostics.analyzer; +package com.alibaba.cloud.nacos.diagnostics.analyzer; /** - * A {@code NacosConnectionFailureException} is thrown when the application fails to connect - * to Nacos Server. + * A {@code NacosConnectionFailureException} is thrown when the application fails to + * connect to Nacos Server. * * @author juven.xuxb */ @@ -35,7 +35,7 @@ public class NacosConnectionFailureException extends RuntimeException { } public NacosConnectionFailureException(String domain, String port, String message, - Throwable cause) { + Throwable cause) { super(message, cause); this.domain = domain; this.port = port; diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpoint.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java similarity index 86% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpoint.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java index 34ddd2a0..e42a5421 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpoint.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java @@ -14,14 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.endpoint; - -import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; -import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; -import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory; +package com.alibaba.cloud.nacos.endpoint; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -30,6 +23,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; + +import com.alibaba.cloud.nacos.NacosConfigProperties; +import com.alibaba.cloud.nacos.NacosPropertySourceRepository; +import com.alibaba.cloud.nacos.client.NacosPropertySource; +import com.alibaba.cloud.nacos.refresh.NacosRefreshHistory; + /** * Endpoint for Nacos, contains config data and refresh history * @author xiaojing diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java similarity index 90% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java index 21d77f7f..2ebeeb5e 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.endpoint; +package com.alibaba.cloud.nacos.endpoint; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; @@ -23,10 +23,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; -import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory; import org.springframework.context.annotation.Bean; +import com.alibaba.cloud.nacos.NacosConfigProperties; +import com.alibaba.cloud.nacos.refresh.NacosRefreshHistory; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigHealthIndicator.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java similarity index 88% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigHealthIndicator.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java index 491b07bf..4954378c 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigHealthIndicator.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java @@ -14,19 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.endpoint; - -import com.alibaba.nacos.api.config.ConfigService; -import org.springframework.boot.actuate.health.AbstractHealthIndicator; -import org.springframework.boot.actuate.health.Health; -import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; -import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; -import org.springframework.util.StringUtils; +package com.alibaba.cloud.nacos.endpoint; import java.util.ArrayList; import java.util.List; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.util.StringUtils; + +import com.alibaba.cloud.nacos.NacosConfigProperties; +import com.alibaba.cloud.nacos.NacosPropertySourceRepository; +import com.alibaba.cloud.nacos.client.NacosPropertySource; +import com.alibaba.nacos.api.config.ConfigService; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java similarity index 95% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java index 40341d41..7512b283 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java @@ -14,22 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.refresh; - -import com.alibaba.nacos.api.config.ConfigService; -import com.alibaba.nacos.api.config.listener.Listener; -import com.alibaba.nacos.api.exception.NacosException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; -import org.springframework.cloud.endpoint.event.RefreshEvent; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.context.ApplicationListener; -import org.springframework.util.StringUtils; +package com.alibaba.cloud.nacos.refresh; import java.io.UnsupportedEncodingException; import java.math.BigInteger; @@ -41,6 +26,21 @@ import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cloud.endpoint.event.RefreshEvent; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationListener; +import org.springframework.util.StringUtils; + +import com.alibaba.cloud.nacos.NacosPropertySourceRepository; +import com.alibaba.cloud.nacos.client.NacosPropertySource; +import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.config.listener.Listener; +import com.alibaba.nacos.api.exception.NacosException; + /** * On application start up, NacosContextRefresher add nacos listeners to all application * level dataIds, when there is a change in the data, listeners will refresh diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosRefreshHistory.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosRefreshHistory.java similarity index 96% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosRefreshHistory.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosRefreshHistory.java index 149453b6..0778fb34 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosRefreshHistory.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosRefreshHistory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.refresh; +package com.alibaba.cloud.nacos.refresh; import java.text.DateFormat; import java.text.SimpleDateFormat; diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosRefreshProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosRefreshProperties.java similarity index 94% rename from spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosRefreshProperties.java rename to spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosRefreshProperties.java index acf34ed1..6d07e794 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosRefreshProperties.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosRefreshProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.refresh; +package com.alibaba.cloud.nacos.refresh; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/spring-cloud-alibaba-nacos-config/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-config/src/main/resources/META-INF/spring.factories index ea1ce500..9977a854 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-nacos-config/src/main/resources/META-INF/spring.factories @@ -1,7 +1,7 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\ -org.springframework.cloud.alibaba.nacos.NacosConfigBootstrapConfiguration +com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alibaba.nacos.NacosConfigAutoConfiguration,\ -org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpointAutoConfiguration +com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\ +com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration org.springframework.boot.diagnostics.FailureAnalyzer=\ -org.springframework.cloud.alibaba.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer \ No newline at end of file +com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer \ No newline at end of file diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java similarity index 95% rename from spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java rename to spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java index e0f6d012..46760321 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import static org.junit.Assert.assertNotNull; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; @@ -22,8 +22,6 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import com.alibaba.nacos.client.config.NacosConfigService; - import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,12 +35,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator; -import org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpointAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.client.NacosPropertySourceLocator; +import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration; +import com.alibaba.nacos.client.config.NacosConfigService; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationTests.java similarity index 95% rename from spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java rename to spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationTests.java index 67e98f05..1f80136c 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -37,14 +37,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator; -import org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpoint; -import org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpointAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.client.NacosPropertySourceLocator; +import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpoint; +import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration; +import com.alibaba.cloud.nacos.refresh.NacosRefreshHistory; import com.alibaba.nacos.client.config.NacosConfigService; /** @@ -165,7 +165,6 @@ public class NacosConfigurationTests { properties.getServerAddr()); } - private void checkoutNacosConfigNamespace() { assertEquals("NacosConfigProperties namespace is wrong", "test-namespace", properties.getNamespace()); diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosFileExtensionTest.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java similarity index 95% rename from spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosFileExtensionTest.java rename to spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java index 979cac3f..e4806e66 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosFileExtensionTest.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import com.alibaba.nacos.client.config.NacosConfigService; - import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,11 +34,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpointAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration; +import com.alibaba.nacos.client.config.NacosConfigService; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpointTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java similarity index 92% rename from spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpointTests.java rename to spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java index ef823960..78b5c13a 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosConfigEndpointTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.endpoint; +package com.alibaba.cloud.nacos.endpoint; import static org.junit.Assert.assertEquals; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; @@ -25,8 +25,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import com.alibaba.nacos.client.config.NacosConfigService; - import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,13 +39,15 @@ import org.springframework.boot.actuate.health.Health.Builder; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.NacosConfigAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosConfigBootstrapConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; -import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.NacosConfigAutoConfiguration; +import com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration; +import com.alibaba.cloud.nacos.NacosConfigProperties; +import com.alibaba.cloud.nacos.refresh.NacosRefreshHistory; +import com.alibaba.nacos.client.config.NacosConfigService; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-nacos-discovery/pom.xml index 1ad31feb..e8b5c8b1 100644 --- a/spring-cloud-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-alibaba-nacos-discovery/pom.xml @@ -3,13 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-nacos-discovery Spring Cloud Alibaba Nacos Discovery diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ConditionalOnNacosDiscoveryEnabled.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java similarity index 95% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ConditionalOnNacosDiscoveryEnabled.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java index 71b9656c..d576b879 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ConditionalOnNacosDiscoveryEnabled.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +package com.alibaba.cloud.nacos; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.enabled", matchIfMissing = true) diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java similarity index 90% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java index 9e348a1a..180f1fa8 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java @@ -14,15 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.nacos.registry.NacosAutoServiceRegistration; -import org.springframework.cloud.alibaba.nacos.registry.NacosRegistration; -import org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; @@ -30,6 +27,10 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration; +import com.alibaba.cloud.nacos.registry.NacosRegistration; +import com.alibaba.cloud.nacos.registry.NacosServiceRegistry; + /** * @author xiaojing * @author Mercy diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java similarity index 99% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java index fd35cb47..30379591 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; import static com.alibaba.nacos.api.PropertyKeyConst.ACCESS_KEY; import static com.alibaba.nacos.api.PropertyKeyConst.CLUSTER_NAME; diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosServiceInstance.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceInstance.java similarity index 97% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosServiceInstance.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceInstance.java index 4059ba2e..407a1560 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosServiceInstance.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceInstance.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; - -import org.springframework.cloud.client.DefaultServiceInstance; -import org.springframework.cloud.client.ServiceInstance; +package com.alibaba.cloud.nacos; import java.net.URI; import java.util.Map; +import org.springframework.cloud.client.DefaultServiceInstance; +import org.springframework.cloud.client.ServiceInstance; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java similarity index 92% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java index bcfa66f3..941a2319 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java @@ -14,18 +14,23 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.discovery; +package com.alibaba.cloud.nacos.discovery; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; -import com.alibaba.nacos.api.naming.pojo.Instance; -import com.alibaba.nacos.api.naming.pojo.ListView; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; -import org.springframework.cloud.alibaba.nacos.NacosServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; -import java.util.*; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.NacosServiceInstance; +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.api.naming.pojo.ListView; /** * @author xiaojing diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java similarity index 87% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java index 2c1433ae..8de3bbae 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java @@ -14,20 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.discovery; +package com.alibaba.cloud.nacos.discovery; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.nacos.ConditionalOnNacosDiscoveryEnabled; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.CommonsClientAutoConfiguration; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java similarity index 92% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index 861dc400..d0c45a76 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -14,23 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.discovery; +package com.alibaba.cloud.nacos.discovery; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -import com.alibaba.nacos.api.naming.NamingService; -import com.alibaba.nacos.api.naming.listener.EventListener; -import com.alibaba.nacos.api.naming.pojo.ListView; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.discovery.event.HeartbeatEvent; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; @@ -38,6 +32,9 @@ import org.springframework.context.SmartLifecycle; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.nacos.api.naming.listener.EventListener; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java similarity index 92% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java index fd28f5e0..0cccdcfd 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosConfigServerAutoConfiguration.java @@ -14,18 +14,19 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.discovery.configclient; +package com.alibaba.cloud.nacos.discovery.configclient; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.config.server.config.ConfigServerProperties; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; + /** * Extra configuration for config server if it happens to be registered with Nacos. * diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java similarity index 86% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java index 13dee285..309439ae 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java @@ -14,16 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.discovery.configclient; +package com.alibaba.cloud.nacos.discovery.configclient; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.config.client.ConfigServicePropertySourceLocator; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; + /** * Helper for config client that wants to lookup the config server via discovery. * diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java similarity index 94% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java index 6ceec414..6ea62bbb 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpoint.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java @@ -14,21 +14,21 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.endpoint; +package com.alibaba.cloud.nacos.endpoint; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import com.alibaba.nacos.api.naming.NamingService; -import com.alibaba.nacos.api.naming.pojo.ServiceInfo; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; + +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.nacos.api.naming.NamingService; +import com.alibaba.nacos.api.naming.pojo.ServiceInfo; /** * Endpoint for nacos discovery, get nacos properties and subscribed services diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java similarity index 87% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java index 0bbee4c2..efb4b0f8 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java @@ -14,17 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.endpoint; +package com.alibaba.cloud.nacos.endpoint; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.alibaba.nacos.ConditionalOnNacosDiscoveryEnabled; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java similarity index 98% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java index 54c22a19..3dbf37c2 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java similarity index 96% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java index 68d8c995..2ad8783f 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java @@ -14,9 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; + +import java.net.URI; +import java.util.Map; + +import javax.annotation.PostConstruct; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.ManagementServerPortUtils; @@ -25,11 +29,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; -import java.net.URI; -import java.util.Map; - -import javax.annotation.PostConstruct; - +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.nacos.api.naming.NamingService; /** diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosServiceRegistry.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java similarity index 97% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosServiceRegistry.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java index 3e23fefc..6a88b1d1 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosServiceRegistry.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.util.StringUtils; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/ConditionalOnRibbonNacos.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/ConditionalOnRibbonNacos.java similarity index 95% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/ConditionalOnRibbonNacos.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/ConditionalOnRibbonNacos.java index 1e223ab0..1e25ec47 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/ConditionalOnRibbonNacos.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/ConditionalOnRibbonNacos.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +package com.alibaba.cloud.nacos.ribbon; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) @ConditionalOnProperty(value = "ribbon.nacos.enabled", matchIfMissing = true) diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/ExtendBalancer.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/ExtendBalancer.java similarity index 88% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/ExtendBalancer.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/ExtendBalancer.java index d581673c..06111263 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/ExtendBalancer.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/ExtendBalancer.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; import java.util.List; diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java similarity index 92% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java index 77231a89..86d56f24 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java @@ -14,14 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.ServerList; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; /** * integrated Ribbon by default diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRule.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java similarity index 94% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRule.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java index e86a0879..95bd7e6a 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRule.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; import java.util.List; import java.util.Objects; @@ -8,9 +8,9 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.util.CollectionUtils; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServer.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServer.java similarity index 96% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServer.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServer.java index 70f33f97..73d9579e 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServer.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServer.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; - -import com.alibaba.nacos.api.naming.pojo.Instance; -import com.netflix.loadbalancer.Server; +package com.alibaba.cloud.nacos.ribbon; import java.util.Map; +import com.alibaba.nacos.api.naming.pojo.Instance; + +import com.netflix.loadbalancer.Server; + /** * @author xiaojing * @author pbting diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerIntrospector.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerIntrospector.java similarity index 95% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerIntrospector.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerIntrospector.java index 4e9d22cc..481c2d4a 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerIntrospector.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerIntrospector.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; import java.util.Map; diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java similarity index 94% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java index 9bfcefaa..7da981a3 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java @@ -14,16 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; - -import com.alibaba.nacos.api.naming.pojo.Instance; -import com.netflix.client.config.IClientConfig; -import com.netflix.loadbalancer.AbstractServerList; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; +package com.alibaba.cloud.nacos.ribbon; import java.util.ArrayList; import java.util.List; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.nacos.api.naming.pojo.Instance; + +import com.netflix.client.config.IClientConfig; +import com.netflix.loadbalancer.AbstractServerList; + /** * @author xiaojing * @author renhaojun diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/RibbonNacosAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/RibbonNacosAutoConfiguration.java similarity index 91% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/RibbonNacosAutoConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/RibbonNacosAutoConfiguration.java index 7021fa7c..64a30167 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/RibbonNacosAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/RibbonNacosAutoConfiguration.java @@ -14,17 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.nacos.ConditionalOnNacosDiscoveryEnabled; import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; + /** * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration * Auto-configuration} that sets up Ribbon for Nacos. diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 54c3f79f..3c8226ad 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,4 +1,5 @@ -{"properties": [ +{ + "properties": [ { "name": "spring.cloud.nacos.discovery.service", "type": "java.lang.String", @@ -23,4 +24,5 @@ "defaultValue": "true", "description": "enable nacos discovery watch or not ." } -]} + ] +} diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories index b0b91897..409c2720 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories @@ -1,8 +1,8 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration,\ - org.springframework.cloud.alibaba.nacos.ribbon.RibbonNacosAutoConfiguration,\ - org.springframework.cloud.alibaba.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\ - org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration,\ - org.springframework.cloud.alibaba.nacos.discovery.configclient.NacosConfigServerAutoConfiguration + com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration,\ + com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\ + com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\ + com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration,\ + com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration org.springframework.cloud.bootstrap.BootstrapConfiguration=\ - org.springframework.cloud.alibaba.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration + com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java similarity index 94% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java index 12257f0a..260f46ff 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java @@ -14,27 +14,27 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; + +import static com.alibaba.cloud.nacos.test.NacosMockTest.serviceInstance; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import org.junit.Test; +import org.springframework.cloud.client.ServiceInstance; + +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ListView; -import org.junit.Test; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClient; -import org.springframework.cloud.client.ServiceInstance; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.springframework.cloud.alibaba.nacos.test.NacosMockTest.serviceInstance; - /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java similarity index 94% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java index 8ec4c7b1..0486b851 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java @@ -14,31 +14,32 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java similarity index 87% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java index 88c656e1..2f0944eb 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java @@ -14,7 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,16 +26,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; +import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; /** * @author xiaojing @@ -41,7 +42,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @SpringBootTest(classes = NacosAutoServiceRegistrationIpTests.TestConfig.class, properties = { "spring.application.name=myTestService1", "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848", - "spring.cloud.nacos.discovery.ip=123.123.123.123" }, webEnvironment = RANDOM_PORT) + "spring.cloud.nacos.discovery.ip=123.123.123.123" }, webEnvironment = RANDOM_PORT) public class NacosAutoServiceRegistrationIpTests { @Autowired diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java similarity index 85% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java index 5a2ce084..e0af0e1e 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; +import static com.alibaba.cloud.nacos.registry.NacosRegistration.MANAGEMENT_CONTEXT_PATH; +import static com.alibaba.cloud.nacos.registry.NacosRegistration.MANAGEMENT_PORT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; -import static org.springframework.cloud.alibaba.nacos.registry.NacosRegistration.MANAGEMENT_PORT; -import static org.springframework.cloud.alibaba.nacos.registry.NacosRegistration.MANAGEMENT_CONTEXT_PATH; import org.junit.Test; import org.junit.runner.RunWith; @@ -28,13 +28,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java similarity index 88% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java index ab76dc97..25483a82 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java @@ -14,11 +14,10 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import org.junit.Test; @@ -27,13 +26,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java similarity index 94% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java index acd2cbb3..214b569a 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java @@ -14,7 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.registry; +package com.alibaba.cloud.nacos.registry; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import java.util.Map; @@ -25,19 +30,15 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; -import org.springframework.cloud.alibaba.nacos.endpoint.NacosDiscoveryEndpoint; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; +import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; +import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint; /** * @author xiaojing diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java similarity index 92% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java index 5117ce53..2dd70b04 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java @@ -1,19 +1,21 @@ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; + +import static org.assertj.core.api.Assertions.assertThat; -import com.netflix.client.config.DefaultClientConfigImpl; -import com.netflix.client.config.IClientConfig; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; -import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; -import static org.assertj.core.api.Assertions.assertThat; +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; + +import com.netflix.client.config.DefaultClientConfigImpl; +import com.netflix.client.config.IClientConfig; /** * @author xiaojing diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerListTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java similarity index 87% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerListTests.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java index 2ce5f479..df5ed8bb 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerListTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java @@ -14,7 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.ribbon; +package com.alibaba.cloud.nacos.ribbon; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collections; @@ -22,19 +28,15 @@ import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; +import org.assertj.core.api.Assertions; +import org.junit.Test; + +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.test.NacosMockTest; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.netflix.client.config.IClientConfig; -import org.junit.Test; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.springframework.cloud.alibaba.nacos.test.NacosMockTest.serviceInstance; /** * @author xiaojing @@ -55,7 +57,7 @@ public class NacosServerListTests { NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); List servers = serverList.getInitialListOfServers(); - assertThat(servers).isEmpty(); + Assertions.assertThat(servers).isEmpty(); } @Test @@ -63,7 +65,8 @@ public class NacosServerListTests { public void testGetServers() throws Exception { ArrayList instances = new ArrayList<>(); - instances.add(serviceInstance("test-service", false, Collections.emptyMap())); + instances.add(NacosMockTest.serviceInstance("test-service", false, + Collections.emptyMap())); NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); @@ -79,10 +82,10 @@ public class NacosServerListTests { NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); servers = serverList.getUpdatedListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); } @Test @@ -94,8 +97,8 @@ public class NacosServerListTests { map1.put("instanceNum", "1"); HashMap map2 = new HashMap<>(); map2.put("instanceNum", "2"); - instances.add(serviceInstance("test-service", false, map1)); - instances.add(serviceInstance("test-service", true, map2)); + instances.add(NacosMockTest.serviceInstance("test-service", false, map1)); + instances.add(NacosMockTest.serviceInstance("test-service", true, map2)); NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); @@ -112,7 +115,7 @@ public class NacosServerListTests { NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); NacosServer nacosServer = servers.get(0); @@ -132,7 +135,7 @@ public class NacosServerListTests { HashMap map = new HashMap<>(); map.put("instanceNum", "1"); - instances.add(serviceInstance("test-service", true, map)); + instances.add(NacosMockTest.serviceInstance("test-service", true, map)); NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); @@ -150,7 +153,7 @@ public class NacosServerListTests { serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getUpdatedListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); assertThat(servers.get(0).getInstance().isHealthy()).isEqualTo(true); assertThat(servers.get(0).getInstance().getMetadata().get("instanceNum")) diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/test/CommonTestConfig.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/test/CommonTestConfig.java similarity index 95% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/test/CommonTestConfig.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/test/CommonTestConfig.java index 3f9d2860..7e7b51ab 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/test/CommonTestConfig.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/test/CommonTestConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.test; +package com.alibaba.cloud.nacos.test; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/test/NacosMockTest.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/test/NacosMockTest.java similarity index 96% rename from spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/test/NacosMockTest.java rename to spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/test/NacosMockTest.java index 33efb8eb..f97870de 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/test/NacosMockTest.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/test/NacosMockTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos.test; +package com.alibaba.cloud.nacos.test; import java.util.Map; import java.util.UUID; diff --git a/spring-cloud-alibaba-seata/pom.xml b/spring-cloud-alibaba-seata/pom.xml index 4d4570ba..7c2b895f 100644 --- a/spring-cloud-alibaba-seata/pom.xml +++ b/spring-cloud-alibaba-seata/pom.xml @@ -3,13 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-seata Spring Cloud Alibaba Seata @@ -27,7 +26,7 @@ true - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel provided true diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/GlobalTransactionAutoConfiguration.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/GlobalTransactionAutoConfiguration.java similarity index 97% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/GlobalTransactionAutoConfiguration.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/GlobalTransactionAutoConfiguration.java index c02f2d2d..a26aa578 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/GlobalTransactionAutoConfiguration.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/GlobalTransactionAutoConfiguration.java @@ -14,9 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata; - -import io.seata.spring.annotation.GlobalTransactionScanner; +package com.alibaba.cloud.seata; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; @@ -24,6 +22,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; +import io.seata.spring.annotation.GlobalTransactionScanner; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/SeataProperties.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/SeataProperties.java similarity index 95% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/SeataProperties.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/SeataProperties.java index 2aea2745..492d054d 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/SeataProperties.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/SeataProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata; +package com.alibaba.cloud.seata; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataBeanPostProcessor.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataBeanPostProcessor.java similarity index 96% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataBeanPostProcessor.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataBeanPostProcessor.java index 17bafb7f..4218c767 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataBeanPostProcessor.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataBeanPostProcessor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataContextBeanPostProcessor.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataContextBeanPostProcessor.java similarity index 97% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataContextBeanPostProcessor.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataContextBeanPostProcessor.java index b1eb00ef..e214bddd 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataContextBeanPostProcessor.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataContextBeanPostProcessor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignBuilder.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignBuilder.java similarity index 94% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignBuilder.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignBuilder.java index 4e312011..0855e358 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignBuilder.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignBuilder.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import org.springframework.beans.factory.BeanFactory; diff --git a/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java new file mode 100644 index 00000000..932fb448 --- /dev/null +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.seata.feign; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.util.StringUtils; + +import feign.Client; +import feign.Request; +import feign.Response; +import io.seata.core.context.RootContext; + +/** + * @author xiaojing + */ +public class SeataFeignClient implements Client { + + private final Client delegate; + private final BeanFactory beanFactory; + private static final int MAP_SIZE = 16; + + SeataFeignClient(BeanFactory beanFactory) { + this.beanFactory = beanFactory; + this.delegate = new Client.Default(null, null); + } + + SeataFeignClient(BeanFactory beanFactory, Client delegate) { + this.delegate = delegate; + this.beanFactory = beanFactory; + } + + @Override + public Response execute(Request request, Request.Options options) throws IOException { + + Request modifiedRequest = getModifyRequest(request); + + try { + return this.delegate.execute(modifiedRequest, options); + } + finally { + + } + } + + private Request getModifyRequest(Request request) { + + String xid = RootContext.getXID(); + + if (StringUtils.isEmpty(xid)) { + return request; + } + + Map> headers = new HashMap<>(MAP_SIZE); + headers.putAll(request.headers()); + + List fescarXid = new ArrayList<>(); + fescarXid.add(xid); + headers.put(RootContext.KEY_XID, fescarXid); + + return Request.create(request.method(), request.url(), headers, request.body(), + request.charset()); + } + +} \ No newline at end of file diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignClientAutoConfiguration.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClientAutoConfiguration.java similarity index 96% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignClientAutoConfiguration.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClientAutoConfiguration.java index 5440dc73..3602e23d 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignClientAutoConfiguration.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClientAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import org.springframework.beans.factory.BeanFactory; import org.springframework.boot.autoconfigure.AutoConfigureBefore; @@ -65,7 +65,7 @@ public class SeataFeignClientAutoConfiguration { protected static class FeignBeanPostProcessorConfiguration { @Bean - SeataBeanPostProcessor seataBeanPostProcessor( + SeataBeanPostProcessor seataBeanPostProcessor( SeataFeignObjectWrapper seataFeignObjectWrapper) { return new SeataBeanPostProcessor(seataFeignObjectWrapper); } diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignContext.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignContext.java similarity index 95% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignContext.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignContext.java index 4b8c16e7..86b017f6 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignContext.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignContext.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import java.util.HashMap; import java.util.Map; -import feign.Client; import org.springframework.cloud.openfeign.FeignContext; +import feign.Client; + /** * * @author xiaojing @@ -32,7 +33,7 @@ public class SeataFeignContext extends FeignContext { private final FeignContext delegate; SeataFeignContext(SeataFeignObjectWrapper seataFeignObjectWrapper, - FeignContext delegate) { + FeignContext delegate) { this.seataFeignObjectWrapper = seataFeignObjectWrapper; this.delegate = delegate; } diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignObjectWrapper.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java similarity index 97% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignObjectWrapper.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java index 4c416e24..374b8367 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignObjectWrapper.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import org.springframework.beans.factory.BeanFactory; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; - -import feign.Client; import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory; import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient; +import feign.Client; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataHystrixFeignBuilder.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataHystrixFeignBuilder.java similarity index 94% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataHystrixFeignBuilder.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataHystrixFeignBuilder.java index 61a27b84..f226244a 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataHystrixFeignBuilder.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataHystrixFeignBuilder.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; -import feign.Retryer; -import feign.hystrix.HystrixFeign; import org.springframework.beans.factory.BeanFactory; import feign.Feign; +import feign.Retryer; +import feign.hystrix.HystrixFeign; /** * @author xiaojing diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataLoadBalancerFeignClient.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataLoadBalancerFeignClient.java similarity index 89% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataLoadBalancerFeignClient.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataLoadBalancerFeignClient.java index 991ee166..2c67adf1 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataLoadBalancerFeignClient.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataLoadBalancerFeignClient.java @@ -14,18 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import java.io.IOException; import org.springframework.beans.factory.BeanFactory; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory; +import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient; import feign.Client; import feign.Request; import feign.Response; -import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory; -import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient; /** * @author xiaojing @@ -35,8 +35,8 @@ public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient { private final BeanFactory beanFactory; SeataLoadBalancerFeignClient(Client delegate, - CachingSpringLoadBalancerFactory lbClientFactory, - SpringClientFactory clientFactory, BeanFactory beanFactory) { + CachingSpringLoadBalancerFactory lbClientFactory, + SpringClientFactory clientFactory, BeanFactory beanFactory) { super(wrap(delegate, beanFactory), lbClientFactory, clientFactory); this.beanFactory = beanFactory; } diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataSentinelFeignBuilder.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataSentinelFeignBuilder.java similarity index 88% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataSentinelFeignBuilder.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataSentinelFeignBuilder.java index 166b2788..0f185c2a 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataSentinelFeignBuilder.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataSentinelFeignBuilder.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign; +package com.alibaba.cloud.seata.feign; import org.springframework.beans.factory.BeanFactory; +import com.alibaba.cloud.sentinel.feign.SentinelFeign; + import feign.Feign; import feign.Retryer; -import org.springframework.cloud.alibaba.sentinel.feign.SentinelFeign; /** * @author xiaojing diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/hystrix/SeataHystrixAutoConfiguration.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixAutoConfiguration.java similarity index 94% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/hystrix/SeataHystrixAutoConfiguration.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixAutoConfiguration.java index 686acb05..465ca3e6 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/hystrix/SeataHystrixAutoConfiguration.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixAutoConfiguration.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign.hystrix; +package com.alibaba.cloud.seata.feign.hystrix; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java similarity index 97% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java index 349447b8..0bff8173 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.feign.hystrix; +package com.alibaba.cloud.seata.feign.hystrix; import java.util.concurrent.Callable; -import io.seata.core.context.RootContext; - import com.netflix.hystrix.strategy.HystrixPlugins; import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategy; +import io.seata.core.context.RootContext; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/rest/SeataRestTemplateAutoConfiguration.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java similarity index 97% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/rest/SeataRestTemplateAutoConfiguration.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java index c08a55ad..7dc05fde 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/rest/SeataRestTemplateAutoConfiguration.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java @@ -29,7 +29,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.rest; +package com.alibaba.cloud.seata.rest; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -37,11 +43,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.web.client.RestTemplate; -import javax.annotation.PostConstruct; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/rest/SeataRestTemplateInterceptor.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateInterceptor.java similarity index 96% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/rest/SeataRestTemplateInterceptor.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateInterceptor.java index b353235c..d90f1255 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/rest/SeataRestTemplateInterceptor.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateInterceptor.java @@ -14,12 +14,10 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.rest; +package com.alibaba.cloud.seata.rest; import java.io.IOException; -import io.seata.core.context.RootContext; - import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -27,6 +25,8 @@ import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.support.HttpRequestWrapper; import org.springframework.util.StringUtils; +import io.seata.core.context.RootContext; + /** * @author xiaojing */ diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/web/SeataHandlerInterceptor.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java similarity index 98% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/web/SeataHandlerInterceptor.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java index ed1db9a1..9f50352a 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/web/SeataHandlerInterceptor.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java @@ -14,18 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.web; +package com.alibaba.cloud.seata.web; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import io.seata.core.context.RootContext; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; +import io.seata.core.context.RootContext; + /** * @author xiaojing * diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/web/SeataHandlerInterceptorConfiguration.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptorConfiguration.java similarity index 95% rename from spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/web/SeataHandlerInterceptorConfiguration.java rename to spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptorConfiguration.java index bc0ce563..51757bf4 100644 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/web/SeataHandlerInterceptorConfiguration.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptorConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.seata.web; +package com.alibaba.cloud.seata.web; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignClient.java b/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignClient.java deleted file mode 100644 index 9f4f2fb2..00000000 --- a/spring-cloud-alibaba-seata/src/main/java/org/springframework/cloud/alibaba/seata/feign/SeataFeignClient.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.alibaba.seata.feign; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import feign.Client; -import feign.Request; -import feign.Response; -import io.seata.core.context.RootContext; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.util.StringUtils; - -/** - * @author xiaojing - */ -public class SeataFeignClient implements Client { - - private final Client delegate; - private final BeanFactory beanFactory; - private static final int MAP_SIZE = 16; - - SeataFeignClient(BeanFactory beanFactory) { - this.beanFactory = beanFactory; - this.delegate = new Client.Default(null, null); - } - - SeataFeignClient(BeanFactory beanFactory, Client delegate) { - this.delegate = delegate; - this.beanFactory = beanFactory; - } - - @Override - public Response execute(Request request, Request.Options options) throws IOException { - - Request modifiedRequest = getModifyRequest(request); - - try { - return this.delegate.execute(modifiedRequest, options); - } finally { - - } - } - - private Request getModifyRequest(Request request) { - - String xid = RootContext.getXID(); - - if (StringUtils.isEmpty(xid)) { - return request; - } - - Map> headers = new HashMap<>(MAP_SIZE); - headers.putAll(request.headers()); - - List fescarXid = new ArrayList<>(); - fescarXid.add(xid); - headers.put(RootContext.KEY_XID, fescarXid); - - return Request.create(request.method(), request.url(), headers, request.body(), - request.charset()); - } - -} \ No newline at end of file diff --git a/spring-cloud-alibaba-seata/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-seata/src/main/resources/META-INF/spring.factories index 24c7c008..ae993684 100644 --- a/spring-cloud-alibaba-seata/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-seata/src/main/resources/META-INF/spring.factories @@ -1,7 +1,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alibaba.seata.rest.SeataRestTemplateAutoConfiguration,\ -org.springframework.cloud.alibaba.seata.web.SeataHandlerInterceptorConfiguration,\ -org.springframework.cloud.alibaba.seata.GlobalTransactionAutoConfiguration,\ -org.springframework.cloud.alibaba.seata.feign.SeataFeignClientAutoConfiguration,\ -org.springframework.cloud.alibaba.seata.feign.hystrix.SeataHystrixAutoConfiguration +com.alibaba.cloud.seata.rest.SeataRestTemplateAutoConfiguration,\ +com.alibaba.cloud.seata.web.SeataHandlerInterceptorConfiguration,\ +com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration,\ +com.alibaba.cloud.seata.feign.SeataFeignClientAutoConfiguration,\ +com.alibaba.cloud.seata.feign.hystrix.SeataHystrixAutoConfiguration diff --git a/spring-cloud-alibaba-sentinel-datasource/pom.xml b/spring-cloud-alibaba-sentinel-datasource/pom.xml index a7ea7472..118f30ec 100644 --- a/spring-cloud-alibaba-sentinel-datasource/pom.xml +++ b/spring-cloud-alibaba-sentinel-datasource/pom.xml @@ -3,13 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-sentinel-datasource Spring Cloud Alibaba Sentinel DataSource diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/RuleType.java similarity index 75% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/RuleType.java index b1afad56..4a376fd2 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/RuleType.java @@ -1,11 +1,27 @@ -package org.springframework.cloud.alibaba.sentinel.datasource; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource; import java.util.Arrays; import java.util.Optional; -import org.springframework.cloud.alibaba.sentinel.datasource.config.AbstractDataSourceProperties; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.config.AbstractDataSourceProperties; import com.alibaba.csp.sentinel.slots.block.AbstractRule; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/SentinelDataSourceConstants.java similarity index 92% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/SentinelDataSourceConstants.java index 345b443d..5240ba26 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/SentinelDataSourceConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; /** * @author Jim diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/AbstractDataSourceProperties.java similarity index 78% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/AbstractDataSourceProperties.java index 0b830217..df89dbd9 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/AbstractDataSourceProperties.java @@ -1,11 +1,27 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.config; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.config; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import org.springframework.cloud.alibaba.sentinel.datasource.RuleType; import org.springframework.core.env.Environment; +import com.alibaba.cloud.sentinel.datasource.RuleType; import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager; import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager; import com.alibaba.csp.sentinel.datasource.AbstractDataSource; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ApolloDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/ApolloDataSourceProperties.java similarity index 58% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ApolloDataSourceProperties.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/ApolloDataSourceProperties.java index 5ee8f420..d67baf04 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ApolloDataSourceProperties.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/ApolloDataSourceProperties.java @@ -1,8 +1,24 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.config; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.config; import javax.validation.constraints.NotEmpty; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ApolloDataSourceFactoryBean; +import com.alibaba.cloud.sentinel.datasource.factorybean.ApolloDataSourceFactoryBean; /** * Apollo Properties class Using by {@link DataSourcePropertiesConfiguration} and diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java similarity index 79% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java index a3220863..12dde119 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java @@ -1,4 +1,20 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.config; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.config; import java.util.Arrays; import java.util.List; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/FileDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/FileDataSourceProperties.java similarity index 68% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/FileDataSourceProperties.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/FileDataSourceProperties.java index 8f3c32d0..c8551c24 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/FileDataSourceProperties.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/FileDataSourceProperties.java @@ -1,13 +1,30 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.config; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.config; import java.io.IOException; import javax.validation.constraints.NotEmpty; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.FileRefreshableDataSourceFactoryBean; import org.springframework.util.ResourceUtils; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.factorybean.FileRefreshableDataSourceFactoryBean; + /** * File Properties class Using by {@link DataSourcePropertiesConfiguration} and * {@link FileRefreshableDataSourceFactoryBean} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/NacosDataSourceProperties.java similarity index 72% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/NacosDataSourceProperties.java index 12c6e7f7..f8673d0b 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/NacosDataSourceProperties.java @@ -1,10 +1,27 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.config; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.config; import javax.validation.constraints.NotEmpty; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.NacosDataSourceFactoryBean; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.factorybean.NacosDataSourceFactoryBean; + /** * Nacos Properties class Using by {@link DataSourcePropertiesConfiguration} and * {@link NacosDataSourceFactoryBean} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/ZookeeperDataSourceProperties.java similarity index 65% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/ZookeeperDataSourceProperties.java index 65fcaf09..d36c51cb 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/ZookeeperDataSourceProperties.java @@ -1,10 +1,27 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.config; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.config; import javax.validation.constraints.NotEmpty; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean; + /** * Zookeeper Properties class Using by {@link DataSourcePropertiesConfiguration} and * {@link ZookeeperDataSourceFactoryBean} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/JsonConverter.java similarity index 54% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/JsonConverter.java index ab4d2429..7ffd4ef7 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/JsonConverter.java @@ -1,4 +1,20 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.converter; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.converter; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/SentinelConverter.java similarity index 82% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/SentinelConverter.java index 3037b8c1..1d8269d7 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/SentinelConverter.java @@ -1,4 +1,20 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.converter; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.converter; import java.util.ArrayList; import java.util.Collection; @@ -9,9 +25,9 @@ import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alibaba.sentinel.datasource.RuleType; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.RuleType; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/XmlConverter.java similarity index 55% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/XmlConverter.java index 6c8485d4..770413c1 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/converter/XmlConverter.java @@ -1,4 +1,20 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.converter; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.converter; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/ApolloDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/ApolloDataSourceFactoryBean.java new file mode 100644 index 00000000..47843e5c --- /dev/null +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/ApolloDataSourceFactoryBean.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.factorybean; + +import org.springframework.beans.factory.FactoryBean; + +import com.alibaba.csp.sentinel.datasource.Converter; +import com.alibaba.csp.sentinel.datasource.apollo.ApolloDataSource; + +/** + * A {@link FactoryBean} for creating {@link ApolloDataSource} instance. + * + * @author Jim + * @see ApolloDataSource + */ +public class ApolloDataSourceFactoryBean implements FactoryBean { + + private String namespaceName; + private String flowRulesKey; + private String defaultFlowRuleValue; + private Converter converter; + + @Override + public ApolloDataSource getObject() throws Exception { + return new ApolloDataSource(namespaceName, flowRulesKey, defaultFlowRuleValue, + converter); + } + + @Override + public Class getObjectType() { + return ApolloDataSource.class; + } + + public String getNamespaceName() { + return namespaceName; + } + + public void setNamespaceName(String namespaceName) { + this.namespaceName = namespaceName; + } + + public String getFlowRulesKey() { + return flowRulesKey; + } + + public void setFlowRulesKey(String flowRulesKey) { + this.flowRulesKey = flowRulesKey; + } + + public String getDefaultFlowRuleValue() { + return defaultFlowRuleValue; + } + + public void setDefaultFlowRuleValue(String defaultFlowRuleValue) { + this.defaultFlowRuleValue = defaultFlowRuleValue; + } + + public Converter getConverter() { + return converter; + } + + public void setConverter(Converter converter) { + this.converter = converter; + } +} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/FileRefreshableDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/FileRefreshableDataSourceFactoryBean.java new file mode 100644 index 00000000..0042134b --- /dev/null +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/FileRefreshableDataSourceFactoryBean.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.factorybean; + +import java.io.File; +import java.nio.charset.Charset; + +import org.springframework.beans.factory.FactoryBean; + +import com.alibaba.csp.sentinel.datasource.Converter; +import com.alibaba.csp.sentinel.datasource.FileRefreshableDataSource; + +/** + * A {@link FactoryBean} for creating {@link FileRefreshableDataSource} instance. + * + * @author Jim + * @see FileRefreshableDataSource + */ +public class FileRefreshableDataSourceFactoryBean + implements FactoryBean { + + private String file; + private String charset; + private long recommendRefreshMs; + private int bufSize; + private Converter converter; + + @Override + public FileRefreshableDataSource getObject() throws Exception { + return new FileRefreshableDataSource(new File(file), converter, + recommendRefreshMs, bufSize, Charset.forName(charset)); + } + + @Override + public Class getObjectType() { + return FileRefreshableDataSource.class; + } + + public String getFile() { + return file; + } + + public void setFile(String file) { + this.file = file; + } + + public String getCharset() { + return charset; + } + + public void setCharset(String charset) { + this.charset = charset; + } + + public long getRecommendRefreshMs() { + return recommendRefreshMs; + } + + public void setRecommendRefreshMs(long recommendRefreshMs) { + this.recommendRefreshMs = recommendRefreshMs; + } + + public int getBufSize() { + return bufSize; + } + + public void setBufSize(int bufSize) { + this.bufSize = bufSize; + } + + public Converter getConverter() { + return converter; + } + + public void setConverter(Converter converter) { + this.converter = converter; + } +} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java similarity index 79% rename from spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java rename to spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java index d7894418..da640f8e 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java @@ -1,12 +1,29 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.factorybean; +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.factorybean; + +import java.util.Properties; + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.util.StringUtils; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource; import com.alibaba.nacos.api.PropertyKeyConst; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.util.StringUtils; - -import java.util.Properties; /** * A {@link FactoryBean} for creating {@link NacosDataSource} instance. diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/ZookeeperDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/ZookeeperDataSourceFactoryBean.java new file mode 100644 index 00000000..5731d8f1 --- /dev/null +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/ZookeeperDataSourceFactoryBean.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.sentinel.datasource.factorybean; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.FactoryBean; + +import com.alibaba.csp.sentinel.datasource.Converter; +import com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource; + +/** + * A {@link FactoryBean} for creating {@link ZookeeperDataSource} instance. + * + * @author Jim + * @see ZookeeperDataSource + */ +public class ZookeeperDataSourceFactoryBean implements FactoryBean { + + private String serverAddr; + + private String path; + + private String groupId; + private String dataId; + + private Converter converter; + + @Override + public ZookeeperDataSource getObject() throws Exception { + if (StringUtils.isNotEmpty(groupId) && StringUtils.isNotEmpty(dataId)) { + // the path will be /{groupId}/{dataId} + return new ZookeeperDataSource(serverAddr, groupId, dataId, converter); + } + else { + // using path directly + return new ZookeeperDataSource(serverAddr, path, converter); + } + } + + @Override + public Class getObjectType() { + return ZookeeperDataSource.class; + } + + public String getServerAddr() { + return serverAddr; + } + + public void setServerAddr(String serverAddr) { + this.serverAddr = serverAddr; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } + + public Converter getConverter() { + return converter; + } + + public void setConverter(Converter converter) { + this.converter = converter; + } +} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/ApolloDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/ApolloDataSourceFactoryBean.java deleted file mode 100644 index ddca34cb..00000000 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/ApolloDataSourceFactoryBean.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.factorybean; - -import com.alibaba.csp.sentinel.datasource.Converter; -import com.alibaba.csp.sentinel.datasource.apollo.ApolloDataSource; - -import org.springframework.beans.factory.FactoryBean; - -/** - * A {@link FactoryBean} for creating {@link ApolloDataSource} instance. - * - * @author Jim - * @see ApolloDataSource - */ -public class ApolloDataSourceFactoryBean implements FactoryBean { - - private String namespaceName; - private String flowRulesKey; - private String defaultFlowRuleValue; - private Converter converter; - - @Override - public ApolloDataSource getObject() throws Exception { - return new ApolloDataSource(namespaceName, flowRulesKey, defaultFlowRuleValue, - converter); - } - - @Override - public Class getObjectType() { - return ApolloDataSource.class; - } - - public String getNamespaceName() { - return namespaceName; - } - - public void setNamespaceName(String namespaceName) { - this.namespaceName = namespaceName; - } - - public String getFlowRulesKey() { - return flowRulesKey; - } - - public void setFlowRulesKey(String flowRulesKey) { - this.flowRulesKey = flowRulesKey; - } - - public String getDefaultFlowRuleValue() { - return defaultFlowRuleValue; - } - - public void setDefaultFlowRuleValue(String defaultFlowRuleValue) { - this.defaultFlowRuleValue = defaultFlowRuleValue; - } - - public Converter getConverter() { - return converter; - } - - public void setConverter(Converter converter) { - this.converter = converter; - } -} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/FileRefreshableDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/FileRefreshableDataSourceFactoryBean.java deleted file mode 100644 index 69ced480..00000000 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/FileRefreshableDataSourceFactoryBean.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.factorybean; - -import java.io.File; -import java.nio.charset.Charset; - -import com.alibaba.csp.sentinel.datasource.Converter; -import com.alibaba.csp.sentinel.datasource.FileRefreshableDataSource; - -import org.springframework.beans.factory.FactoryBean; - -/** - * A {@link FactoryBean} for creating {@link FileRefreshableDataSource} instance. - * - * @author Jim - * @see FileRefreshableDataSource - */ -public class FileRefreshableDataSourceFactoryBean - implements FactoryBean { - - private String file; - private String charset; - private long recommendRefreshMs; - private int bufSize; - private Converter converter; - - @Override - public FileRefreshableDataSource getObject() throws Exception { - return new FileRefreshableDataSource(new File(file), converter, - recommendRefreshMs, bufSize, Charset.forName(charset)); - } - - @Override - public Class getObjectType() { - return FileRefreshableDataSource.class; - } - - public String getFile() { - return file; - } - - public void setFile(String file) { - this.file = file; - } - - public String getCharset() { - return charset; - } - - public void setCharset(String charset) { - this.charset = charset; - } - - public long getRecommendRefreshMs() { - return recommendRefreshMs; - } - - public void setRecommendRefreshMs(long recommendRefreshMs) { - this.recommendRefreshMs = recommendRefreshMs; - } - - public int getBufSize() { - return bufSize; - } - - public void setBufSize(int bufSize) { - this.bufSize = bufSize; - } - - public Converter getConverter() { - return converter; - } - - public void setConverter(Converter converter) { - this.converter = converter; - } -} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/ZookeeperDataSourceFactoryBean.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/ZookeeperDataSourceFactoryBean.java deleted file mode 100644 index b266f01f..00000000 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/factorybean/ZookeeperDataSourceFactoryBean.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.springframework.cloud.alibaba.sentinel.datasource.factorybean; - -import com.alibaba.csp.sentinel.datasource.Converter; -import com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.FactoryBean; - -/** - * A {@link FactoryBean} for creating {@link ZookeeperDataSource} instance. - * - * @author Jim - * @see ZookeeperDataSource - */ -public class ZookeeperDataSourceFactoryBean implements FactoryBean { - - private String serverAddr; - - private String path; - - private String groupId; - private String dataId; - - private Converter converter; - - @Override - public ZookeeperDataSource getObject() throws Exception { - if (StringUtils.isNotEmpty(groupId) && StringUtils.isNotEmpty(dataId)) { - // the path will be /{groupId}/{dataId} - return new ZookeeperDataSource(serverAddr, groupId, dataId, converter); - } else { - // using path directly - return new ZookeeperDataSource(serverAddr, path, converter); - } - } - - @Override - public Class getObjectType() { - return ZookeeperDataSource.class; - } - - public String getServerAddr() { - return serverAddr; - } - - public void setServerAddr(String serverAddr) { - this.serverAddr = serverAddr; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getGroupId() { - return groupId; - } - - public void setGroupId(String groupId) { - this.groupId = groupId; - } - - public String getDataId() { - return dataId; - } - - public void setDataId(String dataId) { - this.dataId = dataId; - } - - public Converter getConverter() { - return converter; - } - - public void setConverter(Converter converter) { - this.converter = converter; - } -} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/resources/META-INF/sentinel-datasource.properties b/spring-cloud-alibaba-sentinel-datasource/src/main/resources/META-INF/sentinel-datasource.properties index 8326eff6..4ddd7956 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/resources/META-INF/sentinel-datasource.properties +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/resources/META-INF/sentinel-datasource.properties @@ -1,4 +1,4 @@ -nacos = com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource -file =com.alibaba.csp.sentinel.datasource.FileRefreshableDataSource -apollo = com.alibaba.csp.sentinel.datasource.apollo.ApolloDataSource -zk = com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource \ No newline at end of file +nacos=com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource +file=com.alibaba.csp.sentinel.datasource.FileRefreshableDataSource +apollo=com.alibaba.csp.sentinel.datasource.apollo.ApolloDataSource +zk=com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource \ No newline at end of file diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/ApolloDataSourceFactoryBeanTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/ApolloDataSourceFactoryBeanTests.java similarity index 90% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/ApolloDataSourceFactoryBeanTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/ApolloDataSourceFactoryBeanTests.java index bc210f2f..730d3855 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/ApolloDataSourceFactoryBeanTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/ApolloDataSourceFactoryBeanTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; @@ -23,9 +23,9 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.JsonConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ApolloDataSourceFactoryBean; +import com.alibaba.cloud.sentinel.datasource.converter.JsonConverter; +import com.alibaba.cloud.sentinel.datasource.factorybean.ApolloDataSourceFactoryBean; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.datasource.apollo.ApolloDataSource; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/DataSourcePropertiesConfigurationTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/DataSourcePropertiesConfigurationTests.java new file mode 100644 index 00000000..903bb377 --- /dev/null +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/DataSourcePropertiesConfigurationTests.java @@ -0,0 +1,250 @@ +/// * +// * Copyright (C) 2018 the original author or authors. +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ +// +// package com.alibaba.cloud.sentinel.datasource; +// +// import static org.junit.Assert.assertEquals; +// import static org.junit.Assert.assertNotNull; +// import static org.junit.Assert.assertNull; +// +// import org.junit.Test; +// import ApolloDataSourceProperties; +// import DataSourcePropertiesConfiguration; +// import FileDataSourceProperties; +// import NacosDataSourceProperties; +// import ZookeeperDataSourceProperties; +// +/// ** +// * @author Jim +// */ +// public class DataSourcePropertiesConfigurationTests { +// +// @Test +// public void testFileAttr() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration(); +// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, +// dataSourcePropertiesConfiguration.getValidField().size()); +// assertNull("DataSourcePropertiesConfiguration valid properties was not null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// +// FileDataSourceProperties fileDataSourceProperties = buildFileProperties(); +// +// dataSourcePropertiesConfiguration.setFile(fileDataSourceProperties); +// +// assertEquals( +// "DataSourcePropertiesConfiguration valid field size was wrong after set file +/// attribute", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration file properties was null after set file attribute", +// dataSourcePropertiesConfiguration.getFile()); +// assertNotNull( +// "DataSourcePropertiesConfiguration valid properties was null after set file attribute", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testNacosAttr() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration(); +// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, +// dataSourcePropertiesConfiguration.getValidField().size()); +// assertNull("DataSourcePropertiesConfiguration valid properties was not null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// +// NacosDataSourceProperties nacosDataSourceProperties = buildNacosProperties(); +// +// dataSourcePropertiesConfiguration.setNacos(nacosDataSourceProperties); +// +// assertEquals( +// "DataSourcePropertiesConfiguration valid field size was wrong after set nacos +/// attribute", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration nacos properties was null after set nacos +/// attribute", +// dataSourcePropertiesConfiguration.getNacos()); +// assertNotNull( +// "DataSourcePropertiesConfiguration valid properties was null after set nacos +/// attribute", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testZKAttr() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration(); +// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, +// dataSourcePropertiesConfiguration.getValidField().size()); +// assertNull("DataSourcePropertiesConfiguration valid properties was not null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// +// ZookeeperDataSourceProperties zookeeperDataSourceProperties = buildZKProperties(); +// +// dataSourcePropertiesConfiguration.setZk(zookeeperDataSourceProperties); +// +// assertEquals( +// "DataSourcePropertiesConfiguration valid field size was wrong after set zk attribute", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration zk properties was null after set zk attribute", +// dataSourcePropertiesConfiguration.getZk()); +// assertNotNull( +// "DataSourcePropertiesConfiguration valid properties was null after set zk attribute", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testApolloAttr() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration(); +// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, +// dataSourcePropertiesConfiguration.getValidField().size()); +// assertNull("DataSourcePropertiesConfiguration valid properties was not null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// +// ApolloDataSourceProperties apolloDataSourceProperties = buildApolloProperties(); +// +// dataSourcePropertiesConfiguration.setApollo(apolloDataSourceProperties); +// +// assertEquals( +// "DataSourcePropertiesConfiguration valid field size was wrong after set apollo +/// attribute", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration apollo properties was null after set apollo +/// attribute", +// dataSourcePropertiesConfiguration.getApollo()); +// assertNotNull( +// "DataSourcePropertiesConfiguration valid properties was null after set apollo +/// attribute", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testMultiAttr() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration(); +// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, +// dataSourcePropertiesConfiguration.getValidField().size()); +// assertNull("DataSourcePropertiesConfiguration valid properties was not null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// +// FileDataSourceProperties fileDataSourceProperties = buildFileProperties(); +// NacosDataSourceProperties nacosDataSourceProperties = buildNacosProperties(); +// +// dataSourcePropertiesConfiguration.setFile(fileDataSourceProperties); +// dataSourcePropertiesConfiguration.setNacos(nacosDataSourceProperties); +// +// assertEquals( +// "DataSourcePropertiesConfiguration valid field size was wrong after set file and nacos +/// attribute", +// 2, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNull( +// "DataSourcePropertiesConfiguration valid properties was not null after set file and +/// nacos attribute", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testFileConstructor() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration( +// buildFileProperties()); +// assertEquals( +// "DataSourcePropertiesConfiguration file constructor valid field size was wrong", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration file constructor valid properties was null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testNacosConstructor() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration( +// buildNacosProperties()); +// assertEquals( +// "DataSourcePropertiesConfiguration nacos constructor valid field size was wrong", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration nacos constructor valid properties was null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testApolloConstructor() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration( +// buildApolloProperties()); +// assertEquals( +// "DataSourcePropertiesConfiguration apollo constructor valid field size was wrong", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration apollo constructor valid properties was null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// @Test +// public void testZKConstructor() { +// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new +/// DataSourcePropertiesConfiguration( +// buildZKProperties()); +// assertEquals( +// "DataSourcePropertiesConfiguration zk constructor valid field size was wrong", +// 1, dataSourcePropertiesConfiguration.getValidField().size()); +// assertNotNull( +// "DataSourcePropertiesConfiguration zk constructor valid properties was null", +// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); +// } +// +// private FileDataSourceProperties buildFileProperties() { +// FileDataSourceProperties fileDataSourceProperties = new FileDataSourceProperties(); +// +// fileDataSourceProperties.setFile("/tmp/test.json"); +// fileDataSourceProperties.setBufSize(1024); +// fileDataSourceProperties.setRecommendRefreshMs(2000); +// return fileDataSourceProperties; +// } +// +// private NacosDataSourceProperties buildNacosProperties() { +// NacosDataSourceProperties nacosDataSourceProperties = new NacosDataSourceProperties(); +// nacosDataSourceProperties.setServerAddr("127.0.0.1:8848"); +// nacosDataSourceProperties.setDataId("sentinel"); +// nacosDataSourceProperties.setGroupId("custom-group"); +// return nacosDataSourceProperties; +// } +// +// private ApolloDataSourceProperties buildApolloProperties() { +// ApolloDataSourceProperties apolloDataSourceProperties = new +/// ApolloDataSourceProperties(); +// apolloDataSourceProperties.setFlowRulesKey("test-key"); +// apolloDataSourceProperties.setDefaultFlowRuleValue("dft-val"); +// apolloDataSourceProperties.setNamespaceName("namespace"); +// return apolloDataSourceProperties; +// } +// +// private ZookeeperDataSourceProperties buildZKProperties() { +// ZookeeperDataSourceProperties zookeeperDataSourceProperties = new +/// ZookeeperDataSourceProperties(); +// +// zookeeperDataSourceProperties.setServerAddr("localhost:2181"); +// zookeeperDataSourceProperties.setPath("/path"); +// return zookeeperDataSourceProperties; +// } +// +// } diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/DataSourcePropertiesTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/DataSourcePropertiesTests.java similarity index 91% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/DataSourcePropertiesTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/DataSourcePropertiesTests.java index d1e6960d..6b13fe35 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/DataSourcePropertiesTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/DataSourcePropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -22,23 +22,24 @@ import static org.junit.Assert.assertNull; import java.io.IOException; import java.util.List; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.config.ApolloDataSourceProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.config.FileDataSourceProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.config.ZookeeperDataSourceProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ApolloDataSourceFactoryBean; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.FileRefreshableDataSourceFactoryBean; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean; import org.springframework.util.ResourceUtils; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.config.ApolloDataSourceProperties; +import com.alibaba.cloud.sentinel.datasource.config.FileDataSourceProperties; +import com.alibaba.cloud.sentinel.datasource.config.ZookeeperDataSourceProperties; +import com.alibaba.cloud.sentinel.datasource.factorybean.ApolloDataSourceFactoryBean; +import com.alibaba.cloud.sentinel.datasource.factorybean.FileRefreshableDataSourceFactoryBean; +import com.alibaba.cloud.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.datasource.FileRefreshableDataSource; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * @author Jim */ diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/FileRefreshableDataSourceFactoryBeanTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/FileRefreshableDataSourceFactoryBeanTests.java similarity index 95% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/FileRefreshableDataSourceFactoryBeanTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/FileRefreshableDataSourceFactoryBeanTests.java index 3e95d240..5e49678e 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/FileRefreshableDataSourceFactoryBeanTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/FileRefreshableDataSourceFactoryBeanTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -23,19 +23,20 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.FileRefreshableDataSourceFactoryBean; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.ResourceUtils; +import com.alibaba.cloud.sentinel.datasource.factorybean.FileRefreshableDataSourceFactoryBean; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.datasource.FileRefreshableDataSource; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * @author Jim */ diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/NacosDataSourceFactoryBeanTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/NacosDataSourceFactoryBeanTests.java similarity index 94% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/NacosDataSourceFactoryBeanTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/NacosDataSourceFactoryBeanTests.java index e724278c..3fbf1060 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/NacosDataSourceFactoryBeanTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/NacosDataSourceFactoryBeanTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; @@ -23,9 +23,9 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.SentinelConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.NacosDataSourceFactoryBean; +import com.alibaba.cloud.sentinel.datasource.converter.SentinelConverter; +import com.alibaba.cloud.sentinel.datasource.factorybean.NacosDataSourceFactoryBean; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/NacosDataSourcePropertiesTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/NacosDataSourcePropertiesTests.java similarity index 91% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/NacosDataSourcePropertiesTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/NacosDataSourcePropertiesTests.java index fd2a157c..11c39103 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/NacosDataSourcePropertiesTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/NacosDataSourcePropertiesTests.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.config.NacosDataSourceProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.NacosDataSourceFactoryBean; + +import com.alibaba.cloud.sentinel.datasource.config.NacosDataSourceProperties; +import com.alibaba.cloud.sentinel.datasource.factorybean.NacosDataSourceFactoryBean; /** * @author Jim diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleTypeTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/RuleTypeTests.java similarity index 98% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleTypeTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/RuleTypeTests.java index a540ab86..4eea620a 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleTypeTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/RuleTypeTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelConverterTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/SentinelConverterTests.java similarity index 95% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelConverterTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/SentinelConverterTests.java index c4ffdc3b..e909b751 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelConverterTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/SentinelConverterTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; @@ -23,11 +23,11 @@ import java.util.List; import org.apache.commons.io.FileUtils; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.JsonConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.XmlConverter; import org.springframework.util.ResourceUtils; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.datasource.converter.JsonConverter; +import com.alibaba.cloud.sentinel.datasource.converter.XmlConverter; import com.alibaba.csp.sentinel.slots.block.RuleConstant; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/ZookeeperDataSourceFactoryBeanTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/ZookeeperDataSourceFactoryBeanTests.java similarity index 93% rename from spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/ZookeeperDataSourceFactoryBeanTests.java rename to spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/ZookeeperDataSourceFactoryBeanTests.java index df7158ce..813b4053 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/ZookeeperDataSourceFactoryBeanTests.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/java/com/alibaba/cloud/sentinel/datasource/ZookeeperDataSourceFactoryBeanTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.datasource; +package com.alibaba.cloud.sentinel.datasource; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; @@ -23,9 +23,9 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import org.junit.Test; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.XmlConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean; +import com.alibaba.cloud.sentinel.datasource.converter.XmlConverter; +import com.alibaba.cloud.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean; import com.alibaba.csp.sentinel.datasource.Converter; import com.alibaba.csp.sentinel.datasource.zookeeper.ZookeeperDataSource; diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/DataSourcePropertiesConfigurationTests.java b/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/DataSourcePropertiesConfigurationTests.java deleted file mode 100644 index 542622ec..00000000 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/java/org/springframework/cloud/alibaba/sentinel/datasource/DataSourcePropertiesConfigurationTests.java +++ /dev/null @@ -1,230 +0,0 @@ -///* -// * Copyright (C) 2018 the original author or authors. -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package org.springframework.cloud.alibaba.sentinel.datasource; -// -//import static org.junit.Assert.assertEquals; -//import static org.junit.Assert.assertNotNull; -//import static org.junit.Assert.assertNull; -// -//import org.junit.Test; -//import org.springframework.cloud.alibaba.sentinel.datasource.config.ApolloDataSourceProperties; -//import org.springframework.cloud.alibaba.sentinel.datasource.config.DataSourcePropertiesConfiguration; -//import org.springframework.cloud.alibaba.sentinel.datasource.config.FileDataSourceProperties; -//import org.springframework.cloud.alibaba.sentinel.datasource.config.NacosDataSourceProperties; -//import org.springframework.cloud.alibaba.sentinel.datasource.config.ZookeeperDataSourceProperties; -// -///** -// * @author Jim -// */ -//public class DataSourcePropertiesConfigurationTests { -// -// @Test -// public void testFileAttr() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration(); -// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, -// dataSourcePropertiesConfiguration.getValidField().size()); -// assertNull("DataSourcePropertiesConfiguration valid properties was not null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// -// FileDataSourceProperties fileDataSourceProperties = buildFileProperties(); -// -// dataSourcePropertiesConfiguration.setFile(fileDataSourceProperties); -// -// assertEquals( -// "DataSourcePropertiesConfiguration valid field size was wrong after set file attribute", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration file properties was null after set file attribute", -// dataSourcePropertiesConfiguration.getFile()); -// assertNotNull( -// "DataSourcePropertiesConfiguration valid properties was null after set file attribute", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testNacosAttr() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration(); -// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, -// dataSourcePropertiesConfiguration.getValidField().size()); -// assertNull("DataSourcePropertiesConfiguration valid properties was not null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// -// NacosDataSourceProperties nacosDataSourceProperties = buildNacosProperties(); -// -// dataSourcePropertiesConfiguration.setNacos(nacosDataSourceProperties); -// -// assertEquals( -// "DataSourcePropertiesConfiguration valid field size was wrong after set nacos attribute", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration nacos properties was null after set nacos attribute", -// dataSourcePropertiesConfiguration.getNacos()); -// assertNotNull( -// "DataSourcePropertiesConfiguration valid properties was null after set nacos attribute", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testZKAttr() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration(); -// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, -// dataSourcePropertiesConfiguration.getValidField().size()); -// assertNull("DataSourcePropertiesConfiguration valid properties was not null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// -// ZookeeperDataSourceProperties zookeeperDataSourceProperties = buildZKProperties(); -// -// dataSourcePropertiesConfiguration.setZk(zookeeperDataSourceProperties); -// -// assertEquals( -// "DataSourcePropertiesConfiguration valid field size was wrong after set zk attribute", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration zk properties was null after set zk attribute", -// dataSourcePropertiesConfiguration.getZk()); -// assertNotNull( -// "DataSourcePropertiesConfiguration valid properties was null after set zk attribute", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testApolloAttr() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration(); -// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, -// dataSourcePropertiesConfiguration.getValidField().size()); -// assertNull("DataSourcePropertiesConfiguration valid properties was not null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// -// ApolloDataSourceProperties apolloDataSourceProperties = buildApolloProperties(); -// -// dataSourcePropertiesConfiguration.setApollo(apolloDataSourceProperties); -// -// assertEquals( -// "DataSourcePropertiesConfiguration valid field size was wrong after set apollo attribute", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration apollo properties was null after set apollo attribute", -// dataSourcePropertiesConfiguration.getApollo()); -// assertNotNull( -// "DataSourcePropertiesConfiguration valid properties was null after set apollo attribute", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testMultiAttr() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration(); -// assertEquals("DataSourcePropertiesConfiguration valid field size was wrong", 0, -// dataSourcePropertiesConfiguration.getValidField().size()); -// assertNull("DataSourcePropertiesConfiguration valid properties was not null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// -// FileDataSourceProperties fileDataSourceProperties = buildFileProperties(); -// NacosDataSourceProperties nacosDataSourceProperties = buildNacosProperties(); -// -// dataSourcePropertiesConfiguration.setFile(fileDataSourceProperties); -// dataSourcePropertiesConfiguration.setNacos(nacosDataSourceProperties); -// -// assertEquals( -// "DataSourcePropertiesConfiguration valid field size was wrong after set file and nacos attribute", -// 2, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNull( -// "DataSourcePropertiesConfiguration valid properties was not null after set file and nacos attribute", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testFileConstructor() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration( -// buildFileProperties()); -// assertEquals( -// "DataSourcePropertiesConfiguration file constructor valid field size was wrong", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration file constructor valid properties was null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testNacosConstructor() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration( -// buildNacosProperties()); -// assertEquals( -// "DataSourcePropertiesConfiguration nacos constructor valid field size was wrong", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration nacos constructor valid properties was null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testApolloConstructor() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration( -// buildApolloProperties()); -// assertEquals( -// "DataSourcePropertiesConfiguration apollo constructor valid field size was wrong", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration apollo constructor valid properties was null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// @Test -// public void testZKConstructor() { -// DataSourcePropertiesConfiguration dataSourcePropertiesConfiguration = new DataSourcePropertiesConfiguration( -// buildZKProperties()); -// assertEquals( -// "DataSourcePropertiesConfiguration zk constructor valid field size was wrong", -// 1, dataSourcePropertiesConfiguration.getValidField().size()); -// assertNotNull( -// "DataSourcePropertiesConfiguration zk constructor valid properties was null", -// dataSourcePropertiesConfiguration.getValidDataSourceProperties()); -// } -// -// private FileDataSourceProperties buildFileProperties() { -// FileDataSourceProperties fileDataSourceProperties = new FileDataSourceProperties(); -// -// fileDataSourceProperties.setFile("/tmp/test.json"); -// fileDataSourceProperties.setBufSize(1024); -// fileDataSourceProperties.setRecommendRefreshMs(2000); -// return fileDataSourceProperties; -// } -// -// private NacosDataSourceProperties buildNacosProperties() { -// NacosDataSourceProperties nacosDataSourceProperties = new NacosDataSourceProperties(); -// nacosDataSourceProperties.setServerAddr("127.0.0.1:8848"); -// nacosDataSourceProperties.setDataId("sentinel"); -// nacosDataSourceProperties.setGroupId("custom-group"); -// return nacosDataSourceProperties; -// } -// -// private ApolloDataSourceProperties buildApolloProperties() { -// ApolloDataSourceProperties apolloDataSourceProperties = new ApolloDataSourceProperties(); -// apolloDataSourceProperties.setFlowRulesKey("test-key"); -// apolloDataSourceProperties.setDefaultFlowRuleValue("dft-val"); -// apolloDataSourceProperties.setNamespaceName("namespace"); -// return apolloDataSourceProperties; -// } -// -// private ZookeeperDataSourceProperties buildZKProperties() { -// ZookeeperDataSourceProperties zookeeperDataSourceProperties = new ZookeeperDataSourceProperties(); -// -// zookeeperDataSourceProperties.setServerAddr("localhost:2181"); -// zookeeperDataSourceProperties.setPath("/path"); -// return zookeeperDataSourceProperties; -// } -// -//} diff --git a/spring-cloud-alibaba-sentinel-datasource/src/test/resources/flowrule-errorformat.json b/spring-cloud-alibaba-sentinel-datasource/src/test/resources/flowrule-errorformat.json index 48c738b6..7ee3cb68 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/test/resources/flowrule-errorformat.json +++ b/spring-cloud-alibaba-sentinel-datasource/src/test/resources/flowrule-errorformat.json @@ -6,5 +6,6 @@ "grade": 1, "limitApp": "default", "strategy": 0 - }== + } + == ] diff --git a/spring-cloud-alibaba-sentinel-gateway/README.md b/spring-cloud-alibaba-sentinel-gateway/README.md index 8c8c4a02..d2dc9063 100755 --- a/spring-cloud-alibaba-sentinel-gateway/README.md +++ b/spring-cloud-alibaba-sentinel-gateway/README.md @@ -13,7 +13,7 @@ Sentinel can provide `ServiceId` level and `API Path` level flow control for spr ```xml - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway x.y.z diff --git a/spring-cloud-alibaba-sentinel-gateway/pom.xml b/spring-cloud-alibaba-sentinel-gateway/pom.xml index 1a005608..33f2ba9f 100644 --- a/spring-cloud-alibaba-sentinel-gateway/pom.xml +++ b/spring-cloud-alibaba-sentinel-gateway/pom.xml @@ -3,13 +3,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-sentinel-gateway Spring Cloud Alibaba Sentinel Gateway @@ -36,7 +35,7 @@ sentinel-spring-cloud-gateway-adapter - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-datasource diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/ConfigConstants.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java similarity index 94% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/ConfigConstants.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java index a83f6cee..bd1e2c4e 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/ConfigConstants.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway; +package com.alibaba.cloud.sentinel.gateway; /** * @author Jim diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/FallbackProperties.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/FallbackProperties.java similarity index 97% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/FallbackProperties.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/FallbackProperties.java index 7721571b..6d9d3a28 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/FallbackProperties.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/FallbackProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway; +package com.alibaba.cloud.sentinel.gateway; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/SentinelGatewayAutoConfiguration.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/SentinelGatewayAutoConfiguration.java similarity index 96% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/SentinelGatewayAutoConfiguration.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/SentinelGatewayAutoConfiguration.java index 223ff526..3efd42ab 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/SentinelGatewayAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/SentinelGatewayAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway; +package com.alibaba.cloud.sentinel.gateway; import java.io.IOException; import java.util.HashMap; @@ -24,11 +24,11 @@ import java.util.Map.Entry; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.JsonConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.XmlConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.sentinel.datasource.converter.JsonConverter; +import com.alibaba.cloud.sentinel.datasource.converter.XmlConverter; import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPathPredicateItem; import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPredicateGroupItem; diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/scg/SentinelGatewayProperties.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelGatewayProperties.java similarity index 84% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/scg/SentinelGatewayProperties.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelGatewayProperties.java index 64b61253..034221e9 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/scg/SentinelGatewayProperties.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelGatewayProperties.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway.scg; +package com.alibaba.cloud.sentinel.gateway.scg; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.NestedConfigurationProperty; -import org.springframework.cloud.alibaba.sentinel.gateway.ConfigConstants; -import org.springframework.cloud.alibaba.sentinel.gateway.FallbackProperties; + +import com.alibaba.cloud.sentinel.gateway.ConfigConstants; +import com.alibaba.cloud.sentinel.gateway.FallbackProperties; /** * @author Jim diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java similarity index 96% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java index 393e63cc..1a8e6835 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway.scg; +package com.alibaba.cloud.sentinel.gateway.scg; import static org.springframework.web.reactive.function.BodyInserters.fromObject; @@ -32,8 +32,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.sentinel.gateway.ConfigConstants; -import org.springframework.cloud.alibaba.sentinel.gateway.FallbackProperties; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -45,6 +43,8 @@ import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.reactive.result.view.ViewResolver; import org.springframework.web.server.ServerWebExchange; +import com.alibaba.cloud.sentinel.gateway.ConfigConstants; +import com.alibaba.cloud.sentinel.gateway.FallbackProperties; import com.alibaba.csp.sentinel.adapter.gateway.common.SentinelGatewayConstants; import com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter; import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler; diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/FallBackProviderHandler.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/FallBackProviderHandler.java similarity index 95% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/FallBackProviderHandler.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/FallBackProviderHandler.java index be27b988..9f9074e6 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/FallBackProviderHandler.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/FallBackProviderHandler.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.sentinel.gateway.zuul; +package com.alibaba.cloud.sentinel.gateway.zuul; import java.util.Map; diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java similarity index 96% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java index 0867df6a..12a866b4 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway.zuul; +package com.alibaba.cloud.sentinel.gateway.zuul; import java.util.Optional; @@ -28,10 +28,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.sentinel.gateway.ConfigConstants; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.sentinel.gateway.ConfigConstants; import com.alibaba.csp.sentinel.adapter.gateway.zuul.callback.RequestOriginParser; import com.alibaba.csp.sentinel.adapter.gateway.zuul.callback.ZuulGatewayCallbackManager; import com.alibaba.csp.sentinel.adapter.gateway.zuul.filters.SentinelZuulErrorFilter; diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/SentinelZuulProperties.java b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java similarity index 93% rename from spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/SentinelZuulProperties.java rename to spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java index a89a1ad7..5989b5d9 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/java/org/springframework/cloud/alibaba/sentinel/gateway/zuul/SentinelZuulProperties.java +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.gateway.zuul; +package com.alibaba.cloud.sentinel.gateway.zuul; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.NestedConfigurationProperty; -import org.springframework.cloud.alibaba.sentinel.gateway.ConfigConstants; +import com.alibaba.cloud.sentinel.gateway.ConfigConstants; import com.alibaba.csp.sentinel.adapter.gateway.zuul.constants.ZuulConstant; import com.alibaba.csp.sentinel.adapter.gateway.zuul.filters.SentinelZuulErrorFilter; import com.alibaba.csp.sentinel.adapter.gateway.zuul.filters.SentinelZuulPostFilter; diff --git a/spring-cloud-alibaba-sentinel-gateway/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-sentinel-gateway/src/main/resources/META-INF/spring.factories index 8917e7c4..d4c02887 100644 --- a/spring-cloud-alibaba-sentinel-gateway/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-sentinel-gateway/src/main/resources/META-INF/spring.factories @@ -1,4 +1,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alibaba.sentinel.gateway.zuul.SentinelZuulAutoConfiguration,\ -org.springframework.cloud.alibaba.sentinel.gateway.scg.SentinelSCGAutoConfiguration,\ -org.springframework.cloud.alibaba.sentinel.gateway.SentinelGatewayAutoConfiguration \ No newline at end of file +com.alibaba.cloud.sentinel.gateway.zuul.SentinelZuulAutoConfiguration,\ +com.alibaba.cloud.sentinel.gateway.scg.SentinelSCGAutoConfiguration,\ +com.alibaba.cloud.sentinel.gateway.SentinelGatewayAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-alibaba-sentinel/pom.xml b/spring-cloud-alibaba-sentinel/pom.xml index 5dfe3fd5..33c36cc6 100644 --- a/spring-cloud-alibaba-sentinel/pom.xml +++ b/spring-cloud-alibaba-sentinel/pom.xml @@ -3,23 +3,17 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alibaba-sentinel Spring Cloud Alibaba Sentinel - - com.alibaba.csp - sentinel-web-servlet - - com.alibaba.csp sentinel-transport-simple-http @@ -100,7 +94,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel-datasource diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelConstants.java similarity index 94% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelConstants.java index 0c2a9d09..921458e3 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; /** * @author fangjian diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java similarity index 97% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java index 68cedb64..8fab12bf 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.config.DataSourcePropertiesConfiguration; import org.springframework.core.Ordered; import org.springframework.validation.annotation.Validated; +import com.alibaba.cloud.sentinel.datasource.config.DataSourcePropertiesConfiguration; import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.LogBase; import com.alibaba.csp.sentinel.transport.config.TransportConfig; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java similarity index 98% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java index 37d77137..dadb235f 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; import java.util.ArrayList; import java.util.List; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebFluxAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java similarity index 98% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebFluxAutoConfiguration.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java index f36f326e..86a6bcbc 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebFluxAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; import java.util.Collections; import java.util.List; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/annotation/SentinelRestTemplate.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/annotation/SentinelRestTemplate.java similarity index 94% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/annotation/SentinelRestTemplate.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/annotation/SentinelRestTemplate.java index da1a3c26..2638ee33 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/annotation/SentinelRestTemplate.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/annotation/SentinelRestTemplate.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.annotation; +package com.alibaba.cloud.sentinel.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/BlockClassRegistry.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/BlockClassRegistry.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java index 42eeca3c..1e5d6c8b 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/BlockClassRegistry.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.custom; +package com.alibaba.cloud.sentinel.custom; import java.lang.reflect.Method; import java.util.Map; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelAutoConfiguration.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java index b2f5c172..701cc567 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.custom; +package com.alibaba.cloud.sentinel.custom; import javax.annotation.PostConstruct; @@ -25,15 +25,15 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.sentinel.SentinelProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.JsonConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.XmlConverter; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.SentinelProperties; +import com.alibaba.cloud.sentinel.datasource.converter.JsonConverter; +import com.alibaba.cloud.sentinel.datasource.converter.XmlConverter; import com.alibaba.csp.sentinel.adapter.servlet.config.WebServletConfig; import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect; import com.alibaba.csp.sentinel.config.SentinelConfig; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelBeanPostProcessor.java similarity index 97% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelBeanPostProcessor.java index 26641002..178060bf 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelBeanPostProcessor.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelBeanPostProcessor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.custom; +package com.alibaba.cloud.sentinel.custom; import java.lang.reflect.Method; import java.util.Arrays; @@ -28,8 +28,6 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor; import org.springframework.beans.factory.support.RootBeanDefinition; -import org.springframework.cloud.alibaba.sentinel.SentinelConstants; -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; import org.springframework.context.ApplicationContext; import org.springframework.core.type.StandardMethodMetadata; import org.springframework.core.type.classreading.MethodMetadataReadingVisitor; @@ -40,6 +38,8 @@ import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.sentinel.SentinelConstants; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; import com.alibaba.csp.sentinel.slots.block.BlockException; /** diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelCircuitBreakerConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelCircuitBreakerConfiguration.java similarity index 78% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelCircuitBreakerConfiguration.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelCircuitBreakerConfiguration.java index f8d61034..526719bc 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelCircuitBreakerConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelCircuitBreakerConfiguration.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.sentinel.custom; +package com.alibaba.cloud.sentinel.custom; import org.springframework.context.annotation.Configuration; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java similarity index 94% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java index f1dd0cfc..6c7d3f1d 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.sentinel.custom; +package com.alibaba.cloud.sentinel.custom; import java.lang.reflect.Field; import java.util.Arrays; @@ -12,14 +12,14 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.cloud.alibaba.sentinel.SentinelProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.config.AbstractDataSourceProperties; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.JsonConverter; -import org.springframework.cloud.alibaba.sentinel.datasource.converter.XmlConverter; import org.springframework.core.env.Environment; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.SentinelProperties; +import com.alibaba.cloud.sentinel.datasource.config.AbstractDataSourceProperties; +import com.alibaba.cloud.sentinel.datasource.converter.JsonConverter; +import com.alibaba.cloud.sentinel.datasource.converter.XmlConverter; import com.alibaba.csp.sentinel.datasource.AbstractDataSource; import com.alibaba.csp.sentinel.datasource.ReadableDataSource; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelProtectInterceptor.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelProtectInterceptor.java index dc69efbb..4594caef 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelProtectInterceptor.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelProtectInterceptor.java @@ -14,21 +14,21 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.custom; +package com.alibaba.cloud.sentinel.custom; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URI; -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; -import org.springframework.cloud.alibaba.sentinel.rest.SentinelClientHttpResponse; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; +import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse; import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.EntryType; import com.alibaba.csp.sentinel.SphU; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpoint.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpoint.java index 9562fdc0..3d523ebb 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpoint.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.endpoint; +package com.alibaba.cloud.sentinel.endpoint; import java.util.HashMap; import java.util.Map; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alibaba.sentinel.SentinelProperties; +import com.alibaba.cloud.sentinel.SentinelProperties; import com.alibaba.csp.sentinel.adapter.servlet.config.WebServletConfig; import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.LogBase; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpointAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java similarity index 93% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpointAutoConfiguration.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java index 132717b6..df8f6f45 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.endpoint; +package com.alibaba.cloud.sentinel.endpoint; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; @@ -23,9 +23,10 @@ import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alibaba.sentinel.SentinelProperties; import org.springframework.context.annotation.Bean; +import com.alibaba.cloud.sentinel.SentinelProperties; + /** * @author hengyunabc */ diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelHealthIndicator.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java similarity index 97% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelHealthIndicator.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java index b8fae17b..e5415047 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelHealthIndicator.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.endpoint; +package com.alibaba.cloud.sentinel.endpoint; import java.util.HashMap; import java.util.Map; @@ -24,9 +24,9 @@ import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.actuate.health.Status; -import org.springframework.cloud.alibaba.sentinel.SentinelProperties; import org.springframework.util.StringUtils; +import com.alibaba.cloud.sentinel.SentinelProperties; import com.alibaba.csp.sentinel.datasource.AbstractDataSource; import com.alibaba.csp.sentinel.heartbeat.HeartbeatSenderProvider; import com.alibaba.csp.sentinel.transport.HeartbeatSender; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelContractHolder.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelContractHolder.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java index 6056e800..64400cf3 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelContractHolder.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.feign; +package com.alibaba.cloud.sentinel.feign; import java.util.HashMap; import java.util.List; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelFeign.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java similarity index 98% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelFeign.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java index 863c0d4a..b869f844 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelFeign.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.feign; +package com.alibaba.cloud.sentinel.feign; import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelFeignAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeignAutoConfiguration.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelFeignAutoConfiguration.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeignAutoConfiguration.java index 1ed20e1b..9989c996 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelFeignAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeignAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.feign; +package com.alibaba.cloud.sentinel.feign; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java similarity index 98% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java index 54636509..1dc237b6 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.feign; +package com.alibaba.cloud.sentinel.feign; import static feign.Util.checkNotNull; diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/rest/SentinelClientHttpResponse.java b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java similarity index 90% rename from spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/rest/SentinelClientHttpResponse.java rename to spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java index 0d4d42c7..a38084e3 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/rest/SentinelClientHttpResponse.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java @@ -14,14 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel.rest; - -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; -import org.springframework.cloud.alibaba.sentinel.custom.SentinelProtectInterceptor; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.client.AbstractClientHttpResponse; +package com.alibaba.cloud.sentinel.rest; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -31,6 +24,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.AbstractClientHttpResponse; + +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; +import com.alibaba.cloud.sentinel.custom.SentinelProtectInterceptor; + /** * Using by {@link SentinelRestTemplate} and {@link SentinelProtectInterceptor} * diff --git a/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/spring.factories index 20f314cc..8d07d335 100644 --- a/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/spring.factories @@ -1,9 +1,8 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alibaba.sentinel.SentinelWebAutoConfiguration,\ -org.springframework.cloud.alibaba.sentinel.SentinelWebFluxAutoConfiguration,\ -org.springframework.cloud.alibaba.sentinel.endpoint.SentinelEndpointAutoConfiguration,\ -org.springframework.cloud.alibaba.sentinel.custom.SentinelAutoConfiguration,\ -org.springframework.cloud.alibaba.sentinel.feign.SentinelFeignAutoConfiguration - +com.alibaba.cloud.sentinel.SentinelWebAutoConfiguration,\ +com.alibaba.cloud.sentinel.SentinelWebFluxAutoConfiguration,\ +com.alibaba.cloud.sentinel.endpoint.SentinelEndpointAutoConfiguration,\ +com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration,\ +com.alibaba.cloud.sentinel.feign.SentinelFeignAutoConfiguration org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker=\ -org.springframework.cloud.alibaba.sentinel.custom.SentinelCircuitBreakerConfiguration +com.alibaba.cloud.sentinel.custom.SentinelCircuitBreakerConfiguration diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelAutoConfigurationTests.java b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelAutoConfigurationTests.java rename to spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java index 49f17197..24841208 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelAutoConfigurationTests.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.junit.Assert.assertEquals; @@ -34,11 +34,6 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; -import org.springframework.cloud.alibaba.sentinel.custom.SentinelAutoConfiguration; -import org.springframework.cloud.alibaba.sentinel.custom.SentinelBeanPostProcessor; -import org.springframework.cloud.alibaba.sentinel.endpoint.SentinelEndpoint; -import org.springframework.cloud.alibaba.sentinel.rest.SentinelClientHttpResponse; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpRequest; @@ -50,6 +45,11 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; +import com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration; +import com.alibaba.cloud.sentinel.custom.SentinelBeanPostProcessor; +import com.alibaba.cloud.sentinel.endpoint.SentinelEndpoint; +import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse; import com.alibaba.csp.sentinel.adapter.servlet.config.WebServletConfig; import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.LogBase; @@ -248,14 +248,15 @@ public class SentinelAutoConfigurationTests { restTemplate.getInterceptors().size()); assertEquals("RestTemplateWithBlockClass interceptors size was wrong", 1, restTemplateWithBlockClass.getInterceptors().size()); - ResponseEntity responseEntityBlock = restTemplateWithBlockClass.getForEntity(flowUrl, - String.class); + ResponseEntity responseEntityBlock = restTemplateWithBlockClass + .getForEntity(flowUrl, String.class); assertEquals("RestTemplateWithBlockClass Sentinel Block Message was wrong", "Oops", responseEntityBlock.getBody()); assertEquals( "RestTemplateWithBlockClass Sentinel Block Http Status Code was wrong", HttpStatus.OK, responseEntityBlock.getStatusCode()); - ResponseEntity responseEntityRaw = restTemplate.getForEntity(flowUrl, String.class); + ResponseEntity responseEntityRaw = restTemplate.getForEntity(flowUrl, + String.class); assertEquals("RestTemplate Sentinel Block Message was wrong", "RestTemplate request block by sentinel", responseEntityRaw.getBody()); assertEquals("RestTemplate Sentinel Block Http Status Code was wrong", diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelBeanAutowiredTests.java b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelBeanAutowiredTests.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelBeanAutowiredTests.java rename to spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelBeanAutowiredTests.java index ed24c33f..ef8c67e3 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelBeanAutowiredTests.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelBeanAutowiredTests.java @@ -14,31 +14,33 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; -import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser; -import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlBlockHandler; -import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner; -import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager; -import com.alibaba.csp.sentinel.adapter.servlet.util.FilterUtil; -import com.alibaba.csp.sentinel.slots.block.BlockException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.sentinel.custom.SentinelAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration; +import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser; +import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlBlockHandler; +import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner; +import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager; +import com.alibaba.csp.sentinel.adapter.servlet.util.FilterUtil; +import com.alibaba.csp.sentinel.slots.block.BlockException; /** * @author Jim diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelDataSourceTests.java b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelDataSourceTests.java similarity index 92% rename from spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelDataSourceTests.java rename to spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelDataSourceTests.java index 1c3be389..40446485 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelDataSourceTests.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelDataSourceTests.java @@ -14,7 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,14 +26,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.sentinel.custom.SentinelAutoConfiguration; -import org.springframework.cloud.alibaba.sentinel.datasource.RuleType; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration; +import com.alibaba.cloud.sentinel.datasource.RuleType; /** * @author Jim @@ -52,7 +53,7 @@ import static org.junit.Assert.assertNull; "spring.cloud.sentinel.datasource.ds5.file.file=classpath: param-flow.json", "spring.cloud.sentinel.datasource.ds5.file.data-type=custom", - "spring.cloud.sentinel.datasource.ds5.file.converter-class=org.springframework.cloud.alibaba.sentinel.TestConverter", + "spring.cloud.sentinel.datasource.ds5.file.converter-class=TestConverter", "spring.cloud.sentinel.datasource.ds5.file.rule-type=param-flow" }) public class SentinelDataSourceTests { diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java similarity index 97% rename from spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java rename to spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java index 5a3a8471..92e17bea 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.junit.Assert.assertEquals; @@ -31,7 +31,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alibaba.sentinel.feign.SentinelFeignAutoConfiguration; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Bean; @@ -40,6 +39,7 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import com.alibaba.cloud.sentinel.feign.SentinelFeignAutoConfiguration; import com.alibaba.csp.sentinel.slots.block.RuleConstant; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelRestTemplateTests.java b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java similarity index 89% rename from spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelRestTemplateTests.java rename to spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java index 43b0b43d..d05624fb 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelRestTemplateTests.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java @@ -14,14 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; +package com.alibaba.cloud.sentinel; + +import static org.junit.Assert.assertEquals; -import com.alibaba.csp.sentinel.slots.block.BlockException; import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; -import org.springframework.cloud.alibaba.sentinel.annotation.SentinelRestTemplate; -import org.springframework.cloud.alibaba.sentinel.custom.SentinelBeanPostProcessor; -import org.springframework.cloud.alibaba.sentinel.rest.SentinelClientHttpResponse; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; @@ -30,7 +28,10 @@ import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.web.client.RestTemplate; -import static org.junit.Assert.assertEquals; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; +import com.alibaba.cloud.sentinel.custom.SentinelBeanPostProcessor; +import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse; +import com.alibaba.csp.sentinel.slots.block.BlockException; /** * @author Jim @@ -85,10 +86,10 @@ public class SentinelRestTemplateTests { new AnnotationConfigApplicationContext(TestConfig9.class); } - @Test - public void testNormalWithoutParam() { - new AnnotationConfigApplicationContext(TestConfig10.class); - } + @Test + public void testNormalWithoutParam() { + new AnnotationConfigApplicationContext(TestConfig10.class); + } @Configuration public static class TestConfig1 { @@ -225,26 +226,26 @@ public class SentinelRestTemplateTests { } } - @Configuration - public static class TestConfig10 { - @Bean - SentinelBeanPostProcessor sentinelBeanPostProcessor( - ApplicationContext applicationContext) { - return new SentinelBeanPostProcessor(applicationContext); - } + @Configuration + public static class TestConfig10 { + @Bean + SentinelBeanPostProcessor sentinelBeanPostProcessor( + ApplicationContext applicationContext) { + return new SentinelBeanPostProcessor(applicationContext); + } - @Bean - @SentinelRestTemplate - RestTemplate restTemplate() { - return new RestTemplate(); - } + @Bean + @SentinelRestTemplate + RestTemplate restTemplate() { + return new RestTemplate(); + } - @Bean - @SentinelRestTemplate - RestTemplate restTemplate2() { - return new RestTemplate(); - } - } + @Bean + @SentinelRestTemplate + RestTemplate restTemplate2() { + return new RestTemplate(); + } + } public static class ExceptionUtil { public static SentinelClientHttpResponse handleException(HttpRequest request, diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/TestConverter.java b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/TestConverter.java similarity index 96% rename from spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/TestConverter.java rename to spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/TestConverter.java index 43012442..b17f45ae 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/TestConverter.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/TestConverter.java @@ -14,16 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.sentinel; - -import com.alibaba.csp.sentinel.datasource.Converter; -import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; +package com.alibaba.cloud.sentinel; import java.io.IOException; import java.util.List; +import com.alibaba.csp.sentinel.datasource.Converter; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * @author Jim */ diff --git a/spring-cloud-alibaba-test/core-support/pom.xml b/spring-cloud-alibaba-test/core-support/pom.xml deleted file mode 100644 index 6558b332..00000000 --- a/spring-cloud-alibaba-test/core-support/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - org.springframework.cloud - spring-cloud-alibaba-test - 0.2.3.BUILD-SNAPSHOT - - 4.0.0 - - - core-support - test core support - - - - - - - - - org.apache.maven.plugins - maven-deploy-plugin - ${maven-deploy-plugin.version} - - true - - - - - - diff --git a/spring-cloud-alibaba-test/pom.xml b/spring-cloud-alibaba-test/pom.xml deleted file mode 100644 index 20d3bd1e..00000000 --- a/spring-cloud-alibaba-test/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - org.springframework.cloud - spring-cloud-alibaba - 0.2.3.BUILD-SNAPSHOT - - 4.0.0 - - - spring-cloud-alibaba-test - pom - spring cloud alibaba test support - - - core-support - sentinel-test-support - - - - - - org.apache.maven.plugins - maven-deploy-plugin - ${maven-deploy-plugin.version} - - true - - - - - - - diff --git a/spring-cloud-alibaba-test/sentinel-test-support/pom.xml b/spring-cloud-alibaba-test/sentinel-test-support/pom.xml deleted file mode 100644 index 533c91e3..00000000 --- a/spring-cloud-alibaba-test/sentinel-test-support/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - org.springframework.cloud - spring-cloud-alibaba-test - 0.2.3.BUILD-SNAPSHOT - - 4.0.0 - - - sentinel-test-support - sentinel test support - - - - - - - - org.apache.maven.plugins - maven-deploy-plugin - ${maven-deploy-plugin.version} - - true - - - - - - diff --git a/spring-cloud-alicloud-acm/pom.xml b/spring-cloud-alicloud-acm/pom.xml index 0d0acfda..690c6522 100644 --- a/spring-cloud-alicloud-acm/pom.xml +++ b/spring-cloud-alicloud-acm/pom.xml @@ -5,7 +5,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT @@ -16,7 +16,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-context diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/AcmAutoConfiguration.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java similarity index 88% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/AcmAutoConfiguration.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java index 9599decb..4bb29694 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/AcmAutoConfiguration.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java @@ -14,19 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm; +package com.alibaba.alicloud.acm; import org.springframework.beans.BeansException; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.alicloud.acm.refresh.AcmContextRefresher; -import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory; -import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties; import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.acm.refresh.AcmContextRefresher; +import com.alibaba.alicloud.acm.refresh.AcmRefreshHistory; +import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; + import com.taobao.diamond.client.Diamond; /** diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/AcmPropertySourceRepository.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java similarity index 94% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/AcmPropertySourceRepository.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java index 42b84c89..e16d686c 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/AcmPropertySourceRepository.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java @@ -14,16 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm; +package com.alibaba.alicloud.acm; + +import java.util.ArrayList; +import java.util.List; -import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySource; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.PropertySource; -import java.util.ArrayList; -import java.util.List; +import com.alibaba.alicloud.acm.bootstrap.AcmPropertySource; /** * @author juven.xuxb, 5/17/16. diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySource.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java similarity index 95% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySource.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java index fb7b58ad..caf7e62a 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySource.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.bootstrap; - -import org.springframework.core.env.MapPropertySource; +package com.alibaba.alicloud.acm.bootstrap; import java.util.Date; import java.util.Map; +import org.springframework.core.env.MapPropertySource; + /** * @author juven.xuxb * @author xiaolongzuo diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java similarity index 98% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java index b4a96a3e..5c45cfeb 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java @@ -14,15 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.bootstrap; - -import com.alibaba.edas.acm.ConfigService; -import com.alibaba.edas.acm.exception.ConfigException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; -import org.springframework.core.io.ByteArrayResource; -import org.springframework.util.StringUtils; +package com.alibaba.alicloud.acm.bootstrap; import java.io.StringReader; import java.util.Date; @@ -31,6 +23,15 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.util.StringUtils; + +import com.alibaba.edas.acm.ConfigService; +import com.alibaba.edas.acm.exception.ConfigException; + /** * @author juven.xuxb * @author xiaolongzuo diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySourceLocator.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java similarity index 94% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySourceLocator.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java index 62ded421..6f59f333 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/bootstrap/AcmPropertySourceLocator.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java @@ -14,15 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.bootstrap; +package com.alibaba.alicloud.acm.bootstrap; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties; import org.springframework.cloud.bootstrap.config.PropertySourceLocator; import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.Environment; import org.springframework.core.env.PropertySource; +import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; + /** * @author juven.xuxb * @author xiaolongzuo diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpoint.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java similarity index 87% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpoint.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java index 6952fa89..172b058a 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpoint.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java @@ -14,14 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.endpoint; - -import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository; -import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySource; -import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory; -import org.springframework.cloud.alicloud.context.acm.AcmProperties; +package com.alibaba.alicloud.acm.endpoint; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -30,6 +23,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; + +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; +import com.alibaba.alicloud.acm.bootstrap.AcmPropertySource; +import com.alibaba.alicloud.acm.refresh.AcmRefreshHistory; +import com.alibaba.alicloud.context.acm.AcmProperties; + /** * Created on 01/10/2017. * diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java similarity index 87% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java index a2f7d312..e997b1ac 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java @@ -14,18 +14,19 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.endpoint; +package com.alibaba.alicloud.acm.endpoint; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository; -import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory; -import org.springframework.cloud.alicloud.context.acm.AcmProperties; import org.springframework.context.annotation.Bean; +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; +import com.alibaba.alicloud.acm.refresh.AcmRefreshHistory; +import com.alibaba.alicloud.context.acm.AcmProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmHealthIndicator.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java similarity index 88% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmHealthIndicator.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java index c6052ae1..d172baa4 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/endpoint/AcmHealthIndicator.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java @@ -14,19 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.endpoint; - -import com.alibaba.edas.acm.ConfigService; -import org.springframework.boot.actuate.health.AbstractHealthIndicator; -import org.springframework.boot.actuate.health.Health; -import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository; -import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySource; -import org.springframework.cloud.alicloud.context.acm.AcmProperties; -import org.springframework.util.StringUtils; +package com.alibaba.alicloud.acm.endpoint; import java.util.ArrayList; import java.util.List; +import org.springframework.boot.actuate.health.AbstractHealthIndicator; +import org.springframework.boot.actuate.health.Health; +import org.springframework.util.StringUtils; + +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; +import com.alibaba.alicloud.acm.bootstrap.AcmPropertySource; +import com.alibaba.alicloud.context.acm.AcmProperties; +import com.alibaba.edas.acm.ConfigService; + /** * @author leijuan * @author juven diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/refresh/AcmContextRefresher.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java similarity index 95% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/refresh/AcmContextRefresher.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java index 59883bb8..245d578e 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/refresh/AcmContextRefresher.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java @@ -14,23 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.refresh; - -import com.alibaba.edas.acm.ConfigService; -import com.alibaba.edas.acm.listener.ConfigChangeListener; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeansException; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository; -import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties; -import org.springframework.cloud.context.refresh.ContextRefresher; -import org.springframework.cloud.endpoint.event.RefreshEvent; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.context.ApplicationListener; -import org.springframework.util.StringUtils; +package com.alibaba.alicloud.acm.refresh; import java.io.UnsupportedEncodingException; import java.math.BigInteger; @@ -39,6 +23,22 @@ import java.security.NoSuchAlgorithmException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cloud.context.refresh.ContextRefresher; +import org.springframework.cloud.endpoint.event.RefreshEvent; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationListener; +import org.springframework.util.StringUtils; + +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; +import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; +import com.alibaba.edas.acm.ConfigService; +import com.alibaba.edas.acm.listener.ConfigChangeListener; + /** * On application start up, AcmContextRefresher add diamond listeners to all application * level dataIds, when there is a change in the data, listeners will refresh diff --git a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/refresh/AcmRefreshHistory.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmRefreshHistory.java similarity index 96% rename from spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/refresh/AcmRefreshHistory.java rename to spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmRefreshHistory.java index 19197b89..f974dd65 100644 --- a/spring-cloud-alicloud-acm/src/main/java/org/springframework/cloud/alicloud/acm/refresh/AcmRefreshHistory.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmRefreshHistory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.refresh; +package com.alibaba.alicloud.acm.refresh; import java.text.DateFormat; import java.text.SimpleDateFormat; diff --git a/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories index b5708d18..0ed3fa01 100644 --- a/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories @@ -1,6 +1,6 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\ -org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySourceLocator +com.alibaba.alicloud.acm.bootstrap.AcmPropertySourceLocator org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alicloud.acm.AcmAutoConfiguration,\ -org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration \ No newline at end of file +com.alibaba.alicloud.acm.AcmAutoConfiguration,\ +com.alibaba.alicloud.acm.endpoint.AcmEndpointAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmConfigurationTests.java b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmConfigurationTests.java similarity index 92% rename from spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmConfigurationTests.java rename to spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmConfigurationTests.java index 9d09fd7a..038983d9 100644 --- a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmConfigurationTests.java +++ b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm; +package com.alibaba.alicloud.acm; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -24,8 +24,6 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import com.alibaba.edas.acm.ConfigService; - import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -38,15 +36,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySourceLocator; -import org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration; -import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration; -import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties; -import org.springframework.cloud.alicloud.context.acm.AcmProperties; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.acm.bootstrap.AcmPropertySourceLocator; +import com.alibaba.alicloud.acm.endpoint.AcmEndpointAutoConfiguration; +import com.alibaba.alicloud.context.acm.AcmContextBootstrapConfiguration; +import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; +import com.alibaba.alicloud.context.acm.AcmProperties; +import com.alibaba.edas.acm.ConfigService; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmFileExtensionTest.java b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmFileExtensionTest.java similarity index 93% rename from spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmFileExtensionTest.java rename to spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmFileExtensionTest.java index b463cf8f..52daad49 100644 --- a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmFileExtensionTest.java +++ b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmFileExtensionTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm; +package com.alibaba.alicloud.acm; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; @@ -33,12 +33,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration; -import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.acm.endpoint.AcmEndpointAutoConfiguration; +import com.alibaba.alicloud.context.acm.AcmContextBootstrapConfiguration; import com.alibaba.edas.acm.ConfigService; /** diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmGroupConfigurationTest.java b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmGroupConfigurationTest.java similarity index 94% rename from spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmGroupConfigurationTest.java rename to spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmGroupConfigurationTest.java index 030b26d0..ba25f8db 100644 --- a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/AcmGroupConfigurationTest.java +++ b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/AcmGroupConfigurationTest.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm; +package com.alibaba.alicloud.acm; + +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import com.alibaba.edas.acm.ConfigService; - import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,13 +33,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.acm.endpoint.AcmEndpointAutoConfiguration; -import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; +import com.alibaba.alicloud.acm.endpoint.AcmEndpointAutoConfiguration; +import com.alibaba.alicloud.context.acm.AcmContextBootstrapConfiguration; +import com.alibaba.edas.acm.ConfigService; /** * @author xiaojing diff --git a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointTests.java b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java similarity index 90% rename from spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointTests.java rename to spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java index d05ddb5f..36376ae9 100644 --- a/spring-cloud-alicloud-acm/src/test/java/org/springframework/cloud/alicloud/acm/endpoint/AcmEndpointTests.java +++ b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm.endpoint; +package com.alibaba.alicloud.acm.endpoint; import static org.junit.Assert.assertEquals; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; @@ -38,14 +38,14 @@ import org.springframework.boot.actuate.health.Health.Builder; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.acm.AcmAutoConfiguration; -import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository; -import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory; -import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration; -import org.springframework.cloud.alicloud.context.acm.AcmProperties; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.acm.AcmAutoConfiguration; +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; +import com.alibaba.alicloud.acm.refresh.AcmRefreshHistory; +import com.alibaba.alicloud.context.acm.AcmContextBootstrapConfiguration; +import com.alibaba.alicloud.context.acm.AcmProperties; import com.alibaba.edas.acm.ConfigService; /** diff --git a/spring-cloud-alicloud-ans/pom.xml b/spring-cloud-alicloud-ans/pom.xml index efdfc654..19c441a5 100644 --- a/spring-cloud-alicloud-ans/pom.xml +++ b/spring-cloud-alicloud-ans/pom.xml @@ -3,13 +3,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alicloud-ans Spring Cloud Alibaba Cloud ANS @@ -31,7 +30,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-context diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsAutoConfiguration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsAutoConfiguration.java similarity index 89% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsAutoConfiguration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsAutoConfiguration.java index a2958484..c86049e9 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsAutoConfiguration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsAutoConfiguration.java @@ -14,17 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.ans.registry.AnsAutoServiceRegistration; -import org.springframework.cloud.alicloud.ans.registry.AnsRegistration; -import org.springframework.cloud.alicloud.ans.registry.AnsServiceRegistry; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; @@ -32,6 +28,11 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.ans.registry.AnsAutoServiceRegistration; +import com.alibaba.alicloud.ans.registry.AnsRegistration; +import com.alibaba.alicloud.ans.registry.AnsServiceRegistry; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaolongzuo */ diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClient.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsDiscoveryClient.java similarity index 93% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClient.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsDiscoveryClient.java index 493dfdcd..7f7d34ab 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClient.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsDiscoveryClient.java @@ -14,15 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; -import com.alibaba.ans.core.NamingService; -import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; -import java.util.*; +import com.alibaba.ans.core.NamingService; +import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClientAutoConfiguration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsDiscoveryClientAutoConfiguration.java similarity index 96% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClientAutoConfiguration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsDiscoveryClientAutoConfiguration.java index e035b2a3..6cb09207 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsDiscoveryClientAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsServiceInstance.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsServiceInstance.java similarity index 97% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsServiceInstance.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsServiceInstance.java index 52f7858c..2c7bc37c 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/AnsServiceInstance.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/AnsServiceInstance.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; import java.net.URI; import java.util.Map; diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ConditionalOnAnsEnabled.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ConditionalOnAnsEnabled.java similarity index 95% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ConditionalOnAnsEnabled.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ConditionalOnAnsEnabled.java index dc12044e..98926d59 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ConditionalOnAnsEnabled.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ConditionalOnAnsEnabled.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/endpoint/AnsEndpoint.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/endpoint/AnsEndpoint.java similarity index 94% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/endpoint/AnsEndpoint.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/endpoint/AnsEndpoint.java index 7688074e..d119791d 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/endpoint/AnsEndpoint.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/endpoint/AnsEndpoint.java @@ -14,22 +14,22 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.endpoint; - -import com.alibaba.ans.core.NamingService; -import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; +package com.alibaba.alicloud.ans.endpoint; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; + +import com.alibaba.alicloud.context.ans.AnsProperties; +import com.alibaba.ans.core.NamingService; +import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; + /** * @author xiaolongzuo * @author pbting diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/endpoint/AnsEndpointAutoConfiguration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/endpoint/AnsEndpointAutoConfiguration.java similarity index 90% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/endpoint/AnsEndpointAutoConfiguration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/endpoint/AnsEndpointAutoConfiguration.java index 65f5803c..befe6733 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/endpoint/AnsEndpointAutoConfiguration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/endpoint/AnsEndpointAutoConfiguration.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.endpoint; +package com.alibaba.alicloud.ans.endpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.context.annotation.Bean; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaolongzuo */ diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistration.java similarity index 98% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistration.java index 56a37ade..c7612698 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsRegistration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsRegistration.java similarity index 96% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsRegistration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsRegistration.java index f04abadf..8f738260 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsRegistration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsRegistration.java @@ -14,9 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; + +import java.net.URI; +import java.util.Map; + +import javax.annotation.PostConstruct; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.ManagementServerPortUtils; @@ -25,9 +29,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; -import javax.annotation.PostConstruct; -import java.net.URI; -import java.util.Map; +import com.alibaba.alicloud.context.ans.AnsProperties; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsServiceRegistry.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsServiceRegistry.java similarity index 98% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsServiceRegistry.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsServiceRegistry.java index 05b43639..fda95738 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/registry/AnsServiceRegistry.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/registry/AnsServiceRegistry.java @@ -14,19 +14,19 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; -import com.alibaba.ans.core.NamingService; -import com.alibaba.ans.shaded.com.taobao.vipserver.client.ipms.NodeReactor; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import com.alibaba.ans.core.NamingService; +import com.alibaba.ans.shaded.com.taobao.vipserver.client.ipms.NodeReactor; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsRibbonClientConfiguration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsRibbonClientConfiguration.java similarity index 95% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsRibbonClientConfiguration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsRibbonClientConfiguration.java index d189a4da..59ba3fa6 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsRibbonClientConfiguration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsRibbonClientConfiguration.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; -import com.netflix.client.config.IClientConfig; -import com.netflix.loadbalancer.ServerList; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.netflix.client.config.IClientConfig; +import com.netflix.loadbalancer.ServerList; + /** * @author xiaolongzuo * @author pbting diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServer.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsServer.java similarity index 97% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServer.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsServer.java index 55684a64..5d36f51c 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServer.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsServer.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; import java.util.Collections; import java.util.Map; import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; + import com.netflix.loadbalancer.Server; /** diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServerList.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsServerList.java similarity index 97% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServerList.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsServerList.java index f34f19ff..b3f749f4 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServerList.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/AnsServerList.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; import java.util.ArrayList; import java.util.List; import com.alibaba.ans.core.NamingService; import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; + import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.AbstractServerList; diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/ConditionalOnRibbonAns.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/ConditionalOnRibbonAns.java similarity index 95% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/ConditionalOnRibbonAns.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/ConditionalOnRibbonAns.java index 078e6fdd..7094d43b 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/ConditionalOnRibbonAns.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/ConditionalOnRibbonAns.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/RibbonAnsAutoConfiguration.java b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/RibbonAnsAutoConfiguration.java similarity index 92% rename from spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/RibbonAnsAutoConfiguration.java rename to spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/RibbonAnsAutoConfiguration.java index 4333cb53..5c4ddb88 100644 --- a/spring-cloud-alicloud-ans/src/main/java/org/springframework/cloud/alicloud/ans/ribbon/RibbonAnsAutoConfiguration.java +++ b/spring-cloud-alicloud-ans/src/main/java/com/alibaba/alicloud/ans/ribbon/RibbonAnsAutoConfiguration.java @@ -14,17 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.ans.ConditionalOnAnsEnabled; import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.ans.ConditionalOnAnsEnabled; + /** * @author xiaolongzuo */ diff --git a/spring-cloud-alicloud-ans/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-ans/src/main/resources/META-INF/spring.factories index 02177b93..c297fef7 100644 --- a/spring-cloud-alicloud-ans/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-ans/src/main/resources/META-INF/spring.factories @@ -1,5 +1,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - org.springframework.cloud.alicloud.ans.endpoint.AnsEndpointAutoConfiguration,\ - org.springframework.cloud.alicloud.ans.ribbon.RibbonAnsAutoConfiguration,\ - org.springframework.cloud.alicloud.ans.AnsAutoConfiguration,\ - org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration \ No newline at end of file + com.alibaba.alicloud.ans.endpoint.AnsEndpointAutoConfiguration,\ + com.alibaba.alicloud.ans.ribbon.RibbonAnsAutoConfiguration,\ + com.alibaba.alicloud.ans.AnsAutoConfiguration,\ + com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClientTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/AnsDiscoveryClientTests.java similarity index 94% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClientTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/AnsDiscoveryClientTests.java index 3e02bc3d..009db660 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/AnsDiscoveryClientTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/AnsDiscoveryClientTests.java @@ -14,12 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; -import static org.springframework.cloud.alicloud.ans.test.AnsMockTest.hostInstance; import java.util.ArrayList; import java.util.HashMap; @@ -34,6 +33,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.cloud.client.ServiceInstance; +import com.alibaba.alicloud.ans.test.AnsMockTest; import com.alibaba.ans.core.NamingService; import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; @@ -57,7 +57,7 @@ public class AnsDiscoveryClientTests { map.put("test-key", "test-value"); map.put("secure", "true"); - hosts.add(hostInstance(serviceName, false, host, port, map)); + hosts.add(AnsMockTest.hostInstance(serviceName, false, host, port, map)); PowerMockito.mockStatic(NamingService.class); when(NamingService.getHosts(eq(serviceName))).thenReturn(hosts); diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationEnabledTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationEnabledTests.java similarity index 90% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationEnabledTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationEnabledTests.java index 28c465f7..21c78b6b 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationEnabledTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationEnabledTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -26,13 +26,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationIpNetworkInterfaceTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationIpNetworkInterfaceTests.java similarity index 93% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationIpNetworkInterfaceTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationIpNetworkInterfaceTests.java index 7a31f30d..ebfbf090 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationIpNetworkInterfaceTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationIpNetworkInterfaceTests.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import java.net.Inet4Address; @@ -25,21 +25,21 @@ import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationIpTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationIpTests.java similarity index 91% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationIpTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationIpTests.java index 7bf76b25..ed185a98 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationIpTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationIpTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -26,13 +26,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationManagementPortTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationManagementPortTests.java similarity index 86% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationManagementPortTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationManagementPortTests.java index a73f25c2..c3a89ab6 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationManagementPortTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationManagementPortTests.java @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; +import static com.alibaba.alicloud.ans.registry.AnsRegistration.MANAGEMENT_CONTEXT_PATH; +import static com.alibaba.alicloud.ans.registry.AnsRegistration.MANAGEMENT_PORT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; -import static org.springframework.cloud.alicloud.ans.registry.AnsRegistration.MANAGEMENT_CONTEXT_PATH; -import static org.springframework.cloud.alicloud.ans.registry.AnsRegistration.MANAGEMENT_PORT; import org.junit.Test; import org.junit.runner.RunWith; @@ -28,13 +28,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationPortTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationPortTests.java similarity index 90% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationPortTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationPortTests.java index 20e03eb4..46ed81b2 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationPortTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationPortTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -26,13 +26,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; +import com.alibaba.alicloud.context.ans.AnsProperties; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationTests.java similarity index 93% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationTests.java index 9d6904b8..e44467fc 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/registry/AnsAutoServiceRegistrationTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/registry/AnsAutoServiceRegistrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.registry; +package com.alibaba.alicloud.ans.registry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -26,9 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.alibaba.ans.core.NamingService; -import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -36,15 +33,18 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; -import org.springframework.cloud.alicloud.ans.endpoint.AnsEndpoint; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; +import com.alibaba.alicloud.ans.endpoint.AnsEndpoint; +import com.alibaba.alicloud.context.ans.AnsProperties; +import com.alibaba.ans.core.NamingService; +import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; + /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsRibbonClientConfigurationTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsRibbonClientConfigurationTests.java similarity index 93% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsRibbonClientConfigurationTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsRibbonClientConfigurationTests.java index beb825c7..f5d1587e 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsRibbonClientConfigurationTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsRibbonClientConfigurationTests.java @@ -14,7 +14,10 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,8 +25,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.alicloud.ans.AnsAutoConfiguration; -import org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Bean; @@ -31,12 +32,12 @@ import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; +import com.alibaba.alicloud.ans.AnsAutoConfiguration; +import com.alibaba.alicloud.ans.AnsDiscoveryClientAutoConfiguration; + import com.netflix.client.config.DefaultClientConfigImpl; import com.netflix.client.config.IClientConfig; -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - /** * @author xiaojing */ diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServerListTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsServerListTests.java similarity index 87% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServerListTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsServerListTests.java index b7cf34e3..9d62610d 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServerListTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsServerListTests.java @@ -14,14 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.cloud.alicloud.ans.test.AnsMockTest.hostInstance; import java.util.ArrayList; import java.util.Collections; @@ -29,12 +28,14 @@ import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; +import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import com.alibaba.alicloud.ans.test.AnsMockTest; import com.alibaba.ans.core.NamingService; import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; @@ -59,7 +60,7 @@ public class AnsServerListTests { AnsServerList serverList = new AnsServerList("test-service"); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); - assertThat(servers).isEmpty(); + Assertions.assertThat(servers).isEmpty(); } @Test @@ -67,7 +68,7 @@ public class AnsServerListTests { public void testGetServers() throws Exception { ArrayList hosts = new ArrayList<>(); - hosts.add(hostInstance("test-service", true, Collections.emptyMap())); + hosts.add(AnsMockTest.hostInstance("test-service", true, Collections.emptyMap())); PowerMockito.mockStatic(NamingService.class); when(NamingService.getHosts(anyString())).thenReturn(hosts); @@ -77,10 +78,10 @@ public class AnsServerListTests { AnsServerList serverList = new AnsServerList("test-service"); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); servers = serverList.getUpdatedListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); } @Test @@ -92,20 +93,19 @@ public class AnsServerListTests { map1.put("instanceNum", "1"); HashMap map2 = new HashMap<>(); map2.put("instanceNum", "2"); - hosts.add(hostInstance("test-service", false, map1)); - hosts.add(hostInstance("test-service", true, map2)); + hosts.add(AnsMockTest.hostInstance("test-service", false, map1)); + hosts.add(AnsMockTest.hostInstance("test-service", true, map2)); PowerMockito.mockStatic(NamingService.class); when(NamingService.getHosts(eq("test-service"))).thenReturn( hosts.stream().filter(Host::isValid).collect(Collectors.toList())); - IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); AnsServerList serverList = new AnsServerList("test-service"); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); AnsServer ansServer = servers.get(0); Host host = ansServer.getHealthService(); @@ -123,7 +123,7 @@ public class AnsServerListTests { HashMap map = new HashMap<>(); map.put("instanceNum", "1"); - hosts.add(hostInstance("test-service", true, map)); + hosts.add(AnsMockTest.hostInstance("test-service", true, map)); PowerMockito.mockStatic(NamingService.class); when(NamingService.getHosts(eq("test-service"))).thenReturn( @@ -135,7 +135,7 @@ public class AnsServerListTests { serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getUpdatedListOfServers(); - assertThat(servers).hasSize(1); + Assertions.assertThat(servers).hasSize(1); assertThat(servers.get(0).getHealthService().isValid()).isEqualTo(true); } diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServiceListTests.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsServiceListTests.java similarity index 93% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServiceListTests.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsServiceListTests.java index 3e3d59e4..bef39ad7 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/ribbon/AnsServiceListTests.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/ribbon/AnsServiceListTests.java @@ -14,9 +14,11 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.ribbon; +package com.alibaba.alicloud.ans.ribbon; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -26,6 +28,7 @@ import java.util.List; import org.junit.Test; import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host; + import com.netflix.loadbalancer.Server; /** diff --git a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/test/AnsMockTest.java b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/test/AnsMockTest.java similarity index 95% rename from spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/test/AnsMockTest.java rename to spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/test/AnsMockTest.java index 795f2b49..8eaeb0e7 100644 --- a/spring-cloud-alicloud-ans/src/test/java/org/springframework/cloud/alicloud/ans/test/AnsMockTest.java +++ b/spring-cloud-alicloud-ans/src/test/java/com/alibaba/alicloud/ans/test/AnsMockTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans.test; +package com.alibaba.alicloud.ans.test; import java.util.Map; diff --git a/spring-cloud-alicloud-context/pom.xml b/spring-cloud-alicloud-context/pom.xml index dd9fe084..6d63f3a4 100644 --- a/spring-cloud-alicloud-context/pom.xml +++ b/spring-cloud-alicloud-context/pom.xml @@ -3,13 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alicloud-context Spring Cloud AliCloud Context @@ -50,12 +49,6 @@ provided - - com.alibaba.ans - ans-sdk - provided - - com.aliyun.oss aliyun-sdk-oss diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/AliCloudContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/AliCloudContextAutoConfiguration.java similarity index 96% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/AliCloudContextAutoConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/AliCloudContextAutoConfiguration.java index e7c84a53..32c93b78 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/AliCloudContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/AliCloudContextAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context; +package com.alibaba.alicloud.context; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/AliCloudProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/AliCloudProperties.java similarity index 96% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/AliCloudProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/AliCloudProperties.java index 09517329..a43c695d 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/AliCloudProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/AliCloudProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context; +package com.alibaba.alicloud.context; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/Constants.java similarity index 95% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/Constants.java index b44773d4..8e3fe893 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/Constants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context; +package com.alibaba.alicloud.context; /** * @author Jim diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmContextBootstrapConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmContextBootstrapConfiguration.java similarity index 87% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmContextBootstrapConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmContextBootstrapConfiguration.java index 13f038aa..0be77f62 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmContextBootstrapConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmContextBootstrapConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.acm; +package com.alibaba.alicloud.context.acm; import javax.annotation.PostConstruct; @@ -22,15 +22,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.alibaba.alicloud.context.AliCloudProperties; +import com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration; +import com.alibaba.alicloud.context.edas.EdasProperties; import com.alibaba.cloud.context.acm.AliCloudAcmInitializer; /** @@ -38,7 +38,7 @@ import com.alibaba.cloud.context.acm.AliCloudAcmInitializer; */ @Configuration @EnableConfigurationProperties(AcmProperties.class) -@ConditionalOnClass(name = "org.springframework.cloud.alicloud.acm.AcmAutoConfiguration") +@ConditionalOnClass(name = "com.alibaba.alicloud.acm.AcmAutoConfiguration") @ImportAutoConfiguration(EdasContextAutoConfiguration.class) public class AcmContextBootstrapConfiguration { diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmIntegrationProperties.java similarity index 98% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmIntegrationProperties.java index 55c073b9..da5abac5 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmIntegrationProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmIntegrationProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.acm; +package com.alibaba.alicloud.context.acm; import java.util.ArrayList; import java.util.List; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmProperties.java similarity index 98% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmProperties.java index 2a1993e9..f66ba230 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/acm/AcmProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/acm/AcmProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.acm; +package com.alibaba.alicloud.context.acm; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListener.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsContextApplicationListener.java similarity index 82% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListener.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsContextApplicationListener.java index 6d9e9ca2..6d028331 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListener.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsContextApplicationListener.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.ans; +package com.alibaba.alicloud.context.ans; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; -import org.springframework.cloud.alicloud.context.listener.AbstractOnceApplicationListener; import org.springframework.context.ApplicationContext; import org.springframework.context.event.ContextRefreshedEvent; +import com.alibaba.alicloud.context.AliCloudProperties; +import com.alibaba.alicloud.context.edas.EdasProperties; +import com.alibaba.alicloud.context.listener.AbstractOnceApplicationListener; import com.alibaba.cloud.context.ans.AliCloudAnsInitializer; import com.alibaba.cloud.context.edas.AliCloudEdasSdk; @@ -35,7 +35,7 @@ public class AnsContextApplicationListener @Override protected String conditionalOnClass() { - return "org.springframework.cloud.alicloud.ans.AnsAutoConfiguration"; + return "com.alibaba.alicloud.ans.AnsAutoConfiguration"; } @Override diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsContextAutoConfiguration.java similarity index 82% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsContextAutoConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsContextAutoConfiguration.java index b1a7d64d..56f8ebc9 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsContextAutoConfiguration.java @@ -14,19 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.ans; +package com.alibaba.alicloud.context.ans; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration; + /** * @author xiaolongzuo */ @Configuration -@ConditionalOnClass(name = "org.springframework.cloud.alicloud.ans.AnsAutoConfiguration") +@ConditionalOnClass(name = "com.alibaba.alicloud.ans.AnsAutoConfiguration") @EnableConfigurationProperties(AnsProperties.class) @ImportAutoConfiguration(EdasContextAutoConfiguration.class) public class AnsContextAutoConfiguration { diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsProperties.java similarity index 99% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsProperties.java index 1952a524..99aa4a69 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/ans/AnsProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/ans/AnsProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.ans; +package com.alibaba.alicloud.context.ans; import java.net.Inet4Address; import java.net.InetAddress; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/edas/EdasContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/edas/EdasContextAutoConfiguration.java similarity index 89% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/edas/EdasContextAutoConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/edas/EdasContextAutoConfiguration.java index 12945c23..61a8e1da 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/edas/EdasContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/edas/EdasContextAutoConfiguration.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.edas; +package com.alibaba.alicloud.context.edas; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.AliCloudProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.context.AliCloudContextAutoConfiguration; +import com.alibaba.alicloud.context.AliCloudProperties; import com.alibaba.cloud.context.edas.AliCloudEdasSdk; import com.alibaba.cloud.context.edas.AliCloudEdasSdkFactory; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/edas/EdasProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/edas/EdasProperties.java similarity index 97% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/edas/EdasProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/edas/EdasProperties.java index 43c9a7cb..c34979c9 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/edas/EdasProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/edas/EdasProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.edas; +package com.alibaba.alicloud.context.edas; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/listener/AbstractOnceApplicationListener.java similarity index 97% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/listener/AbstractOnceApplicationListener.java index dbe554d9..ffc09c7b 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/listener/AbstractOnceApplicationListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.listener; +package com.alibaba.alicloud.context.listener; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListener.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/nacos/NacosConfigParameterInitListener.java similarity index 88% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListener.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/nacos/NacosConfigParameterInitListener.java index 2a7920f3..e413edcf 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListener.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/nacos/NacosConfigParameterInitListener.java @@ -1,12 +1,12 @@ -package org.springframework.cloud.alicloud.context.nacos; - -import com.alibaba.cloud.context.edas.EdasChangeOrderConfiguration; -import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; +package com.alibaba.alicloud.context.nacos; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; -import org.springframework.cloud.alicloud.context.listener.AbstractOnceApplicationListener; + +import com.alibaba.alicloud.context.listener.AbstractOnceApplicationListener; +import com.alibaba.cloud.context.edas.EdasChangeOrderConfiguration; +import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; /** * @author pbting @@ -18,7 +18,7 @@ public class NacosConfigParameterInitListener @Override protected String conditionalOnClass() { - return "org.springframework.cloud.alibaba.nacos.NacosConfigAutoConfiguration"; + return "com.alibaba.cloud.nacos.NacosConfigAutoConfiguration"; } @Override diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java similarity index 92% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java index 1e7b8d8e..2abba6ee 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.context.nacos; +package com.alibaba.alicloud.context.nacos; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; -import org.springframework.cloud.alicloud.context.listener.AbstractOnceApplicationListener; +import com.alibaba.alicloud.context.listener.AbstractOnceApplicationListener; import com.alibaba.cloud.context.edas.EdasChangeOrderConfiguration; import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; @@ -36,7 +36,7 @@ public class NacosDiscoveryParameterInitListener @Override protected String conditionalOnClass() { - return "org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration"; + return "com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration"; } @Override diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/oss/OssContextAutoConfiguration.java similarity index 91% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/oss/OssContextAutoConfiguration.java index f197a0f0..840783f8 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/oss/OssContextAutoConfiguration.java @@ -14,21 +14,22 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.oss; +package com.alibaba.alicloud.context.oss; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.AliCloudProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.alibaba.alicloud.context.AliCloudContextAutoConfiguration; +import com.alibaba.alicloud.context.AliCloudProperties; import com.alibaba.cloud.context.AliCloudAuthorizationMode; + import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; @@ -39,7 +40,7 @@ import com.aliyun.oss.OSSClientBuilder; * @author xiaolongzuo */ @Configuration -@ConditionalOnClass(name = "org.springframework.cloud.alicloud.oss.OssAutoConfiguration") +@ConditionalOnClass(name = "com.alibaba.alicloud.oss.OssAutoConfiguration") @ConditionalOnProperty(name = "spring.cloud.alicloud.oss.enabled", matchIfMissing = true) @EnableConfigurationProperties(OssProperties.class) @ImportAutoConfiguration(AliCloudContextAutoConfiguration.class) diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/oss/OssProperties.java similarity index 98% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/oss/OssProperties.java index 4897bf5f..a261e6ad 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/oss/OssProperties.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.oss; +package com.alibaba.alicloud.context.oss; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import com.alibaba.cloud.context.AliCloudAuthorizationMode; + import com.aliyun.oss.ClientBuilderConfiguration; /** diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/scx/ScxContextAutoConfiguration.java similarity index 83% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/scx/ScxContextAutoConfiguration.java index d4640c73..69504bb9 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/scx/ScxContextAutoConfiguration.java @@ -14,27 +14,28 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.scx; +package com.alibaba.alicloud.context.scx; -import com.alibaba.cloud.context.edas.AliCloudEdasSdk; -import com.alibaba.cloud.context.scx.AliCloudScxInitializer; -import com.alibaba.edas.schedulerx.SchedulerXClient; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.context.AliCloudProperties; +import com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration; +import com.alibaba.alicloud.context.edas.EdasProperties; +import com.alibaba.cloud.context.edas.AliCloudEdasSdk; +import com.alibaba.cloud.context.scx.AliCloudScxInitializer; +import com.alibaba.edas.schedulerx.SchedulerXClient; + /** * @author xiaolongzuo */ @Configuration -@ConditionalOnClass(name = "org.springframework.cloud.alicloud.scx.ScxAutoConfiguration") +@ConditionalOnClass(name = "com.alibaba.alicloud.scx.ScxAutoConfiguration") @ConditionalOnProperty(name = "spring.cloud.alicloud.scx.enabled", matchIfMissing = true) @EnableConfigurationProperties(ScxProperties.class) @ImportAutoConfiguration(EdasContextAutoConfiguration.class) diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/scx/ScxProperties.java similarity index 96% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/scx/ScxProperties.java index 5ddfb0ab..e0671705 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/scx/ScxProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.scx; +package com.alibaba.alicloud.context.scx; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sentinel/SentinelAliCloudListener.java similarity index 91% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sentinel/SentinelAliCloudListener.java index 9e64b835..2a0c6b50 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sentinel/SentinelAliCloudListener.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.sentinel; +package com.alibaba.alicloud.context.sentinel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; -import org.springframework.cloud.alicloud.context.Constants; -import org.springframework.cloud.alicloud.context.listener.AbstractOnceApplicationListener; +import com.alibaba.alicloud.context.Constants; +import com.alibaba.alicloud.context.listener.AbstractOnceApplicationListener; import com.alibaba.cloud.context.edas.EdasChangeOrderConfiguration; import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sms/SmsContextAutoConfiguration.java similarity index 78% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sms/SmsContextAutoConfiguration.java index 664647dd..d741803e 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sms/SmsContextAutoConfiguration.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alicloud.context.sms; +package com.alibaba.alicloud.context.sms; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -12,7 +12,7 @@ import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(SmsProperties.class) @ConditionalOnClass(name = "com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest") -@ConditionalOnProperty(value = "spring.cloud.alibaba.deshao.enable.sms", matchIfMissing = true) +@ConditionalOnProperty(value = "spring.cloud.alicloud.sms.enabled", matchIfMissing = true) public class SmsContextAutoConfiguration { } \ No newline at end of file diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsProperties.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sms/SmsProperties.java similarity index 95% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsProperties.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sms/SmsProperties.java index 11ba8cb7..8ada0a80 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsProperties.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/sms/SmsProperties.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alicloud.context.sms; +package com.alibaba.alicloud.context.sms; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/statistics/StatisticsTaskStarter.java similarity index 83% rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java rename to spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/statistics/StatisticsTaskStarter.java index e820d4a9..c3e64a66 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java +++ b/spring-cloud-alicloud-context/src/main/java/com/alibaba/alicloud/context/statistics/StatisticsTaskStarter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.statistics; +package com.alibaba.alicloud.context.statistics; import java.util.ArrayList; import java.util.List; @@ -22,17 +22,17 @@ import java.util.List; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration; -import org.springframework.cloud.alicloud.context.acm.AcmProperties; -import org.springframework.cloud.alicloud.context.ans.AnsContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.ans.AnsProperties; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; -import org.springframework.cloud.alicloud.context.oss.OssContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.oss.OssProperties; -import org.springframework.cloud.alicloud.context.scx.ScxContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.scx.ScxProperties; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.context.acm.AcmContextBootstrapConfiguration; +import com.alibaba.alicloud.context.acm.AcmProperties; +import com.alibaba.alicloud.context.ans.AnsContextAutoConfiguration; +import com.alibaba.alicloud.context.ans.AnsProperties; +import com.alibaba.alicloud.context.edas.EdasProperties; +import com.alibaba.alicloud.context.oss.OssContextAutoConfiguration; +import com.alibaba.alicloud.context.oss.OssProperties; +import com.alibaba.alicloud.context.scx.ScxContextAutoConfiguration; +import com.alibaba.alicloud.context.scx.ScxProperties; import com.alibaba.cloud.context.AliCloudServerMode; import com.alibaba.cloud.context.edas.AliCloudEdasSdk; import com.alibaba.cloud.context.statistics.StatisticsTask; diff --git a/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories index b39c6499..8c6c9957 100644 --- a/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories @@ -1,15 +1,15 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\ - org.springframework.cloud.alicloud.context.acm.AcmContextBootstrapConfiguration + com.alibaba.alicloud.context.acm.AcmContextBootstrapConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration,\ - org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration,\ - org.springframework.cloud.alicloud.context.ans.AnsContextAutoConfiguration,\ - org.springframework.cloud.alicloud.context.oss.OssContextAutoConfiguration,\ - org.springframework.cloud.alicloud.context.scx.ScxContextAutoConfiguration,\ - org.springframework.cloud.alicloud.context.statistics.StatisticsTaskStarter,\ - org.springframework.cloud.alicloud.context.sms.SmsContextAutoConfiguration + com.alibaba.alicloud.context.AliCloudContextAutoConfiguration,\ + com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration,\ + com.alibaba.alicloud.context.ans.AnsContextAutoConfiguration,\ + com.alibaba.alicloud.context.oss.OssContextAutoConfiguration,\ + com.alibaba.alicloud.context.scx.ScxContextAutoConfiguration,\ + com.alibaba.alicloud.context.statistics.StatisticsTaskStarter,\ + com.alibaba.alicloud.context.sms.SmsContextAutoConfiguration org.springframework.context.ApplicationListener=\ - org.springframework.cloud.alicloud.context.ans.AnsContextApplicationListener,\ - org.springframework.cloud.alicloud.context.nacos.NacosConfigParameterInitListener,\ - org.springframework.cloud.alicloud.context.nacos.NacosDiscoveryParameterInitListener,\ - org.springframework.cloud.alicloud.context.sentinel.SentinelAliCloudListener \ No newline at end of file + com.alibaba.alicloud.context.ans.AnsContextApplicationListener,\ + com.alibaba.alicloud.context.nacos.NacosConfigParameterInitListener,\ + com.alibaba.alicloud.context.nacos.NacosDiscoveryParameterInitListener,\ + com.alibaba.alicloud.context.sentinel.SentinelAliCloudListener \ No newline at end of file diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/acm/AcmAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/acm/AcmAutoConfiguration.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java index 1ecff17f..9fbb2ed8 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/acm/AcmAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.acm; +package com.alibaba.alicloud.acm; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/ans/AnsAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/ans/AnsAutoConfiguration.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/ans/AnsAutoConfiguration.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/ans/AnsAutoConfiguration.java index 1f15f882..94946f00 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/ans/AnsAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/ans/AnsAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.ans; +package com.alibaba.alicloud.ans; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/AliCloudPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/AliCloudPropertiesTests.java similarity index 97% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/AliCloudPropertiesTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/AliCloudPropertiesTests.java index 1094b928..34afd223 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/AliCloudPropertiesTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/AliCloudPropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context; +package com.alibaba.alicloud.context; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/BaseAliCloudSpringApplication.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/BaseAliCloudSpringApplication.java similarity index 97% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/BaseAliCloudSpringApplication.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/BaseAliCloudSpringApplication.java index 6cc999ff..72fe9d28 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/BaseAliCloudSpringApplication.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/BaseAliCloudSpringApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context; +package com.alibaba.alicloud.context; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PowerMockIgnore; diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/acm/AcmPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/acm/AcmPropertiesTests.java similarity index 95% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/acm/AcmPropertiesTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/acm/AcmPropertiesTests.java index d129d64e..cbd4ff90 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/acm/AcmPropertiesTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/acm/AcmPropertiesTests.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.acm; +package com.alibaba.alicloud.context.acm; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; +import com.alibaba.alicloud.context.AliCloudContextAutoConfiguration; +import com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration; import com.alibaba.cloud.context.AliCloudServerMode; /** diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListenerTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/ans/AnsContextApplicationListenerTests.java similarity index 89% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListenerTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/ans/AnsContextApplicationListenerTests.java index 153e234d..a60923be 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListenerTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/ans/AnsContextApplicationListenerTests.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.ans; +package com.alibaba.alicloud.context.ans; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import org.junit.Test; -import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; + +import com.alibaba.alicloud.context.BaseAliCloudSpringApplication; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/ans/AnsPropertiesTests.java similarity index 96% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/ans/AnsPropertiesTests.java index 023c5ad8..225acc7b 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/ans/AnsPropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.ans; +package com.alibaba.alicloud.context.ans; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; @@ -31,9 +31,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; +import com.alibaba.alicloud.context.AliCloudContextAutoConfiguration; +import com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration; import com.alibaba.cloud.context.AliCloudServerMode; /** diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/edas/EdasPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/edas/EdasPropertiesTests.java similarity index 94% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/edas/EdasPropertiesTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/edas/EdasPropertiesTests.java index ed59a46c..f16d9f6c 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/edas/EdasPropertiesTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/edas/EdasPropertiesTests.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.edas; +package com.alibaba.alicloud.context.edas; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; + +import com.alibaba.alicloud.context.AliCloudContextAutoConfiguration; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java similarity index 90% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java index 355bc08b..6b028f09 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java @@ -14,18 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.nacos; +package com.alibaba.alicloud.context.nacos; -import com.alibaba.cloud.context.ans.AliCloudAnsInitializer; -import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import org.junit.BeforeClass; import org.junit.Test; import org.powermock.core.classloader.annotations.PrepareForTest; -import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; -import org.springframework.cloud.alicloud.utils.ChangeOrderUtils; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import com.alibaba.alicloud.context.BaseAliCloudSpringApplication; +import com.alibaba.alicloud.utils.ChangeOrderUtils; +import com.alibaba.cloud.context.ans.AliCloudAnsInitializer; +import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java similarity index 91% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java index 73754cf8..58ceebd6 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.nacos; +package com.alibaba.alicloud.context.nacos; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import org.junit.BeforeClass; import org.junit.Test; import org.powermock.core.classloader.annotations.PrepareForTest; -import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; -import org.springframework.cloud.alicloud.utils.ChangeOrderUtils; +import com.alibaba.alicloud.context.BaseAliCloudSpringApplication; +import com.alibaba.alicloud.utils.ChangeOrderUtils; import com.alibaba.cloud.context.ans.AliCloudAnsInitializer; import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/oss/OssAutoConfigurationTests.java similarity index 97% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/oss/OssAutoConfigurationTests.java index 44297f59..b3317a29 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/oss/OssAutoConfigurationTests.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.oss; +package com.alibaba.alicloud.context.oss; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.alicloud.context.AliCloudProperties; + +import com.alibaba.alicloud.context.AliCloudProperties; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/scx/ScxAutoConfigurationTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/scx/ScxAutoConfigurationTests.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/scx/ScxAutoConfigurationTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/scx/ScxAutoConfigurationTests.java index ca390ea9..c9803f81 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/scx/ScxAutoConfigurationTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/scx/ScxAutoConfigurationTests.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.scx; +package com.alibaba.alicloud.context.scx; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; + +import com.alibaba.alicloud.context.edas.EdasProperties; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListenerTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/sentinel/SentinelAliCloudListenerTests.java similarity index 86% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListenerTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/sentinel/SentinelAliCloudListenerTests.java index 6a812daf..abc88e33 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListenerTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/sentinel/SentinelAliCloudListenerTests.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.sentinel; +package com.alibaba.alicloud.context.sentinel; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import org.junit.BeforeClass; import org.junit.Test; import org.powermock.core.classloader.annotations.PrepareForTest; -import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; -import org.springframework.cloud.alicloud.context.Constants; -import org.springframework.cloud.alicloud.utils.ChangeOrderUtils; +import com.alibaba.alicloud.context.BaseAliCloudSpringApplication; +import com.alibaba.alicloud.context.Constants; +import com.alibaba.alicloud.utils.ChangeOrderUtils; import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; /** diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sms/SmsPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/sms/SmsPropertiesTests.java similarity index 91% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sms/SmsPropertiesTests.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/sms/SmsPropertiesTests.java index 4a2f74ea..2943f8de 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sms/SmsPropertiesTests.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/context/sms/SmsPropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.context.sms; +package com.alibaba.alicloud.context.sms; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; @@ -22,8 +22,9 @@ import org.assertj.core.api.AssertionsForClassTypes; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; -import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; + +import com.alibaba.alicloud.context.AliCloudContextAutoConfiguration; +import com.alibaba.alicloud.context.edas.EdasContextAutoConfiguration; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/oss/OssAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/oss/OssAutoConfiguration.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/oss/OssAutoConfiguration.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/oss/OssAutoConfiguration.java index 2f6961c6..159d28ee 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/oss/OssAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/oss/OssAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss; +package com.alibaba.alicloud.oss; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/scx/ScxAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/scx/ScxAutoConfiguration.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/scx/ScxAutoConfiguration.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/scx/ScxAutoConfiguration.java index a1128b92..cae4aade 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/scx/ScxAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/scx/ScxAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.scx; +package com.alibaba.alicloud.scx; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/utils/ChangeOrderUtils.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/utils/ChangeOrderUtils.java similarity index 97% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/utils/ChangeOrderUtils.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/utils/ChangeOrderUtils.java index adfd750f..316f1758 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/utils/ChangeOrderUtils.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/alicloud/utils/ChangeOrderUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.utils; +package com.alibaba.alicloud.utils; import org.powermock.api.mockito.PowerMockito; diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java index 3ae897f4..bef13171 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java similarity index 93% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java rename to spring-cloud-alicloud-context/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java index 74ac28bc..d9f47e11 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package com.alibaba.cloud.nacos; /** * @author xiaolongzuo diff --git a/spring-cloud-alicloud-oss/pom.xml b/spring-cloud-alicloud-oss/pom.xml index 53625e8e..de152110 100644 --- a/spring-cloud-alicloud-oss/pom.xml +++ b/spring-cloud-alicloud-oss/pom.xml @@ -3,20 +3,19 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alicloud-oss Spring Cloud Alibaba Cloud OSS - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-context diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssApplicationListener.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssApplicationListener.java similarity index 97% rename from spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssApplicationListener.java rename to spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssApplicationListener.java index fa0473d6..7024cfc2 100644 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssApplicationListener.java +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssApplicationListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss; +package com.alibaba.alicloud.oss; import java.util.Map; diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssAutoConfiguration.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssAutoConfiguration.java similarity index 81% rename from spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssAutoConfiguration.java rename to spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssAutoConfiguration.java index 5d7b5731..0cbf049e 100644 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssAutoConfiguration.java +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssAutoConfiguration.java @@ -14,16 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss; +package com.alibaba.alicloud.oss; -import com.aliyun.oss.OSS; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alicloud.oss.resource.OssStorageProtocolResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.oss.resource.OssStorageProtocolResolver; + +import com.aliyun.oss.OSS; + /** * OSS Auto {@link Configuration} * @@ -34,10 +36,10 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnProperty(name = OssConstants.ENABLED, havingValue = "true", matchIfMissing = true) public class OssAutoConfiguration { - @Bean - @ConditionalOnMissingBean - public OssStorageProtocolResolver ossStorageProtocolResolver() { - return new OssStorageProtocolResolver(); - } + @Bean + @ConditionalOnMissingBean + public OssStorageProtocolResolver ossStorageProtocolResolver() { + return new OssStorageProtocolResolver(); + } } diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssConstants.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssConstants.java similarity index 84% rename from spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssConstants.java rename to spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssConstants.java index e764ebac..d018b892 100644 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/OssConstants.java +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/OssConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss; +package com.alibaba.alicloud.oss; /** * OSS constants @@ -23,7 +23,7 @@ package org.springframework.cloud.alicloud.oss; */ public interface OssConstants { - String PREFIX = "spring.cloud.alibaba.oss"; - String ENABLED = PREFIX + ".enabled"; + String PREFIX = "spring.cloud.alibaba.oss"; + String ENABLED = PREFIX + ".enabled"; } diff --git a/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/endpoint/OssEndpoint.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/endpoint/OssEndpoint.java new file mode 100644 index 00000000..e7ef504d --- /dev/null +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/endpoint/OssEndpoint.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.alicloud.oss.endpoint; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.context.ApplicationContext; + +import com.aliyun.oss.OSSClient; + +/** + * Actuator {@link Endpoint} to expose OSS Meta Data + * + * @author Jim + */ +@Endpoint(id = "oss") +public class OssEndpoint { + + @Autowired + private ApplicationContext applicationContext; + + @ReadOperation + public Map invoke() { + Map result = new HashMap<>(); + + Map ossClientMap = applicationContext + .getBeansOfType(OSSClient.class); + + int size = ossClientMap.size(); + + List ossClientList = new ArrayList<>(); + + ossClientMap.keySet().forEach(beanName -> { + Map ossProperties = new HashMap<>(); + OSSClient client = ossClientMap.get(beanName); + ossProperties.put("beanName", beanName); + ossProperties.put("endpoint", client.getEndpoint().toString()); + ossProperties.put("clientConfiguration", client.getClientConfiguration()); + ossProperties.put("credentials", + client.getCredentialsProvider().getCredentials()); + ossProperties.put("bucketList", client.listBuckets().stream() + .map(bucket -> bucket.getName()).toArray()); + ossClientList.add(ossProperties); + }); + + result.put("size", size); + result.put("info", ossClientList); + + return result; + } + +} diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/endpoint/OssEndpointAutoConfiguration.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/endpoint/OssEndpointAutoConfiguration.java similarity index 96% rename from spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/endpoint/OssEndpointAutoConfiguration.java rename to spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/endpoint/OssEndpointAutoConfiguration.java index aec1cae9..e4e49f34 100644 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/endpoint/OssEndpointAutoConfiguration.java +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/endpoint/OssEndpointAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss.endpoint; +package com.alibaba.alicloud.oss.endpoint; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/resource/OssStorageProtocolResolver.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/resource/OssStorageProtocolResolver.java similarity index 97% rename from spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/resource/OssStorageProtocolResolver.java rename to spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/resource/OssStorageProtocolResolver.java index b062e644..2d1f2d50 100644 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/resource/OssStorageProtocolResolver.java +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/resource/OssStorageProtocolResolver.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss.resource; +package com.alibaba.alicloud.oss.resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/resource/OssStorageResource.java b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/resource/OssStorageResource.java similarity index 98% rename from spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/resource/OssStorageResource.java rename to spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/resource/OssStorageResource.java index 82f38fe5..6137b2d5 100644 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/resource/OssStorageResource.java +++ b/spring-cloud-alicloud-oss/src/main/java/com/alibaba/alicloud/oss/resource/OssStorageResource.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.oss.resource; +package com.alibaba.alicloud.oss.resource; import java.io.File; import java.io.FileNotFoundException; @@ -35,7 +35,8 @@ import com.aliyun.oss.model.OSSObject; /** * Implements {@link Resource} for reading and writing objects in Aliyun Object Storage - * Service (OSS). An instance of this class represents a handle to a bucket or an OSSObject. + * Service (OSS). An instance of this class represents a handle to a bucket or an + * OSSObject. * * @author Jim * @see OSS diff --git a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/endpoint/OssEndpoint.java b/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/endpoint/OssEndpoint.java deleted file mode 100644 index a09e53fd..00000000 --- a/spring-cloud-alicloud-oss/src/main/java/org/springframework/cloud/alicloud/oss/endpoint/OssEndpoint.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.alicloud.oss.endpoint; - -import com.aliyun.oss.OSSClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.context.ApplicationContext; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Actuator {@link Endpoint} to expose OSS Meta Data - * - * @author Jim - */ -@Endpoint(id = "oss") -public class OssEndpoint { - - @Autowired - private ApplicationContext applicationContext; - - @ReadOperation - public Map invoke() { - Map result = new HashMap<>(); - - Map ossClientMap = applicationContext - .getBeansOfType(OSSClient.class); - - int size = ossClientMap.size(); - - List ossClientList = new ArrayList<>(); - - ossClientMap.keySet().forEach(beanName -> { - Map ossProperties = new HashMap<>(); - OSSClient client = ossClientMap.get(beanName); - ossProperties.put("beanName", beanName); - ossProperties.put("endpoint", client.getEndpoint().toString()); - ossProperties.put("clientConfiguration", client.getClientConfiguration()); - ossProperties.put("credentials", - client.getCredentialsProvider().getCredentials()); - ossProperties.put("bucketList", client.listBuckets().stream() - .map(bucket -> bucket.getName()).toArray()); - ossClientList.add(ossProperties); - }); - - result.put("size", size); - result.put("info", ossClientList); - - return result; - } - -} diff --git a/spring-cloud-alicloud-oss/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-oss/src/main/resources/META-INF/spring.factories index 598bc216..4f24942b 100644 --- a/spring-cloud-alicloud-oss/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-oss/src/main/resources/META-INF/spring.factories @@ -1,5 +1,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.alicloud.oss.OssAutoConfiguration,\ -org.springframework.cloud.alicloud.oss.endpoint.OssEndpointAutoConfiguration +com.alibaba.alicloud.oss.OssAutoConfiguration,\ +com.alibaba.alicloud.oss.endpoint.OssEndpointAutoConfiguration + org.springframework.context.ApplicationListener=\ -org.springframework.cloud.alicloud.oss.OssApplicationListener \ No newline at end of file +com.alibaba.alicloud.oss.OssApplicationListener \ No newline at end of file diff --git a/spring-cloud-alicloud-schedulerx/pom.xml b/spring-cloud-alicloud-schedulerx/pom.xml index 584e6d2d..d435be52 100644 --- a/spring-cloud-alicloud-schedulerx/pom.xml +++ b/spring-cloud-alicloud-schedulerx/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + com.alibaba.cloud spring-cloud-alibaba - org.springframework.cloud 0.2.3.BUILD-SNAPSHOT 4.0.0 @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-context diff --git a/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/ScxAutoConfiguration.java b/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/ScxAutoConfiguration.java similarity index 94% rename from spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/ScxAutoConfiguration.java rename to spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/ScxAutoConfiguration.java index 77669f50..47beae5c 100644 --- a/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/ScxAutoConfiguration.java +++ b/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/ScxAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.scx; +package com.alibaba.alicloud.scx; import org.springframework.context.annotation.Configuration; diff --git a/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/endpoint/ScxEndpoint.java b/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/endpoint/ScxEndpoint.java new file mode 100644 index 00000000..2f173666 --- /dev/null +++ b/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/endpoint/ScxEndpoint.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.alicloud.scx.endpoint; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; + +import com.alibaba.alicloud.context.edas.EdasProperties; +import com.alibaba.alicloud.context.scx.ScxProperties; + +/** + * @author xiaolongzuo + */ +@Endpoint(id = "scx") +public class ScxEndpoint { + + private static final Logger LOGGER = LoggerFactory.getLogger(ScxEndpoint.class); + + private ScxProperties scxProperties; + + private EdasProperties edasProperties; + + public ScxEndpoint(EdasProperties edasProperties, ScxProperties scxProperties) { + this.edasProperties = edasProperties; + this.scxProperties = scxProperties; + } + + /** + * @return scx endpoint + */ + @ReadOperation + public Map invoke() { + Map scxEndpoint = new HashMap<>(); + LOGGER.info("SCX endpoint invoke, scxProperties is {}", scxProperties); + scxEndpoint.put("namespace", + edasProperties == null ? "" : edasProperties.getNamespace()); + scxEndpoint.put("scxProperties", scxProperties); + return scxEndpoint; + } + +} diff --git a/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/endpoint/ScxEndpointAutoConfiguration.java b/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/endpoint/ScxEndpointAutoConfiguration.java similarity index 88% rename from spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/endpoint/ScxEndpointAutoConfiguration.java rename to spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/endpoint/ScxEndpointAutoConfiguration.java index 46d749d2..98563e3a 100644 --- a/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/endpoint/ScxEndpointAutoConfiguration.java +++ b/spring-cloud-alicloud-schedulerx/src/main/java/com/alibaba/alicloud/scx/endpoint/ScxEndpointAutoConfiguration.java @@ -14,17 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alicloud.scx.endpoint; +package com.alibaba.alicloud.scx.endpoint; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; -import org.springframework.cloud.alicloud.context.scx.ScxProperties; import org.springframework.context.annotation.Bean; +import com.alibaba.alicloud.context.edas.EdasProperties; +import com.alibaba.alicloud.context.scx.ScxProperties; + /** * @author xiaolongzuo */ diff --git a/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/endpoint/ScxEndpoint.java b/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/endpoint/ScxEndpoint.java deleted file mode 100644 index d959cfb3..00000000 --- a/spring-cloud-alicloud-schedulerx/src/main/java/org/springframework/cloud/alicloud/scx/endpoint/ScxEndpoint.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.alicloud.scx.endpoint; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alicloud.context.edas.EdasProperties; -import org.springframework.cloud.alicloud.context.scx.ScxProperties; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author xiaolongzuo - */ -@Endpoint(id = "scx") -public class ScxEndpoint { - - private static final Logger LOGGER = LoggerFactory.getLogger(ScxEndpoint.class); - - private ScxProperties scxProperties; - - private EdasProperties edasProperties; - - public ScxEndpoint(EdasProperties edasProperties, ScxProperties scxProperties) { - this.edasProperties = edasProperties; - this.scxProperties = scxProperties; - } - - /** - * @return scx endpoint - */ - @ReadOperation - public Map invoke() { - Map scxEndpoint = new HashMap<>(); - LOGGER.info("SCX endpoint invoke, scxProperties is {}", scxProperties); - scxEndpoint.put("namespace", edasProperties == null ? "" : edasProperties.getNamespace()); - scxEndpoint.put("scxProperties", scxProperties); - return scxEndpoint; - } - -} diff --git a/spring-cloud-alicloud-schedulerx/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-schedulerx/src/main/resources/META-INF/spring.factories index 5003685d..3032200c 100644 --- a/spring-cloud-alicloud-schedulerx/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-schedulerx/src/main/resources/META-INF/spring.factories @@ -1,3 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - org.springframework.cloud.alicloud.scx.endpoint.ScxEndpointAutoConfiguration,\ - org.springframework.cloud.alicloud.scx.ScxAutoConfiguration \ No newline at end of file + com.alibaba.alicloud.scx.endpoint.ScxEndpointAutoConfiguration,\ + com.alibaba.alicloud.scx.ScxAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-alicloud-sms/pom.xml b/spring-cloud-alicloud-sms/pom.xml index 40e4d406..5ef78b60 100644 --- a/spring-cloud-alicloud-sms/pom.xml +++ b/spring-cloud-alicloud-sms/pom.xml @@ -3,20 +3,19 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT 4.0.0 - org.springframework.cloud spring-cloud-alicloud-sms Spring Cloud Alibaba Cloud SMS - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-context diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/AbstractSmsService.java similarity index 96% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/AbstractSmsService.java index 5d25bcc0..b27c5dab 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/AbstractSmsService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; +package com.alibaba.alicloud.sms; import java.util.concurrent.ConcurrentHashMap; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/ISmsService.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/ISmsService.java similarity index 87% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/ISmsService.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/ISmsService.java index 54a8201c..45f81b44 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/ISmsService.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/ISmsService.java @@ -13,10 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; +package com.alibaba.alicloud.sms; import com.aliyuncs.IAcsClient; -import com.aliyuncs.dysmsapi.model.v20170525.*; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsInitializerEventListener.java similarity index 94% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsInitializerEventListener.java index 4133d498..5724785c 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsInitializerEventListener.java @@ -13,19 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; - -import com.aliyuncs.exceptions.ClientException; -import com.aliyuncs.profile.DefaultProfile; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.cloud.alicloud.context.sms.SmsProperties; -import org.springframework.cloud.alicloud.sms.base.MessageListener; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; +package com.alibaba.alicloud.sms; import java.util.Collection; import java.util.concurrent.atomic.AtomicBoolean; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +import com.alibaba.alicloud.context.sms.SmsProperties; +import com.alibaba.alicloud.sms.base.MessageListener; + +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.profile.DefaultProfile; + /** * @author pbting */ diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsMessageListener.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsMessageListener.java similarity index 85% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsMessageListener.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsMessageListener.java index 5fc34dd5..5904f053 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsMessageListener.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsMessageListener.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; +package com.alibaba.alicloud.sms; -import org.springframework.cloud.alicloud.sms.base.MessageListener; +import com.alibaba.alicloud.sms.base.MessageListener; /** * @author pbting diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsReportMessageListener.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsReportMessageListener.java similarity index 93% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsReportMessageListener.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsReportMessageListener.java index c214a628..39deafa6 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsReportMessageListener.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsReportMessageListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; +package com.alibaba.alicloud.sms; /** * @author pbting diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsServiceImpl.java similarity index 93% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsServiceImpl.java index 91a0cccb..b7e6ea3b 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsServiceImpl.java @@ -13,17 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; +package com.alibaba.alicloud.sms; import java.text.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.cloud.alicloud.context.sms.SmsProperties; -import org.springframework.cloud.alicloud.sms.base.DefaultAlicomMessagePuller; -import org.springframework.cloud.alicloud.sms.endpoint.EndpointManager; -import org.springframework.cloud.alicloud.sms.endpoint.ReceiveMessageEntity; + +import com.alibaba.alicloud.context.AliCloudProperties; +import com.alibaba.alicloud.context.sms.SmsProperties; +import com.alibaba.alicloud.sms.base.DefaultAlicomMessagePuller; +import com.alibaba.alicloud.sms.endpoint.EndpointManager; +import com.alibaba.alicloud.sms.endpoint.ReceiveMessageEntity; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsUpMessageListener.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsUpMessageListener.java similarity index 93% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsUpMessageListener.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsUpMessageListener.java index 4da61438..9e4e8124 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsUpMessageListener.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/SmsUpMessageListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms; +package com.alibaba.alicloud.sms; /** * @author pbting diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/DefaultAlicomMessagePuller.java similarity index 96% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/DefaultAlicomMessagePuller.java index 4d23ccff..4cf87d7b 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/DefaultAlicomMessagePuller.java @@ -1,431 +1,431 @@ -/* - * Copyright (C) 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alicloud.sms.base; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; - -import org.apache.commons.lang3.concurrent.BasicThreadFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.aliyun.mns.client.CloudQueue; -import com.aliyun.mns.common.ClientException; -import com.aliyun.mns.common.ServiceException; -import com.aliyun.mns.model.Message; - -/** - * 阿里通信官方消息默认拉取工具类 - */ -public class DefaultAlicomMessagePuller { - - private static final Logger log = LoggerFactory - .getLogger(DefaultAlicomMessagePuller.class); - - private String mnsAccountEndpoint = "https://1943695596114318.mns.cn-hangzhou.aliyuncs.com/";// 阿里通信消息的endpoint,固定。 - private String endpointNameForPop = "cn-hangzhou"; - private String regionIdForPop = "cn-hangzhou"; - private String domainForPop = "dybaseapi.aliyuncs.com"; - private TokenGetterForAlicom tokenGetter; - private MessageListener messageListener; - private boolean isRunning = false; - private Integer pullMsgThreadSize = 1; - private boolean debugLogOpen = false; - private Integer sleepSecondWhenNoData = 30; - - public void openDebugLog(boolean debugLogOpen) { - this.debugLogOpen = debugLogOpen; - } - - public Integer getSleepSecondWhenNoData() { - return sleepSecondWhenNoData; - } - - public void setSleepSecondWhenNoData(Integer sleepSecondWhenNoData) { - this.sleepSecondWhenNoData = sleepSecondWhenNoData; - } - - public Integer getPullMsgThreadSize() { - return pullMsgThreadSize; - } - - public void setPullMsgThreadSize(Integer pullMsgThreadSize) { - if (pullMsgThreadSize != null && pullMsgThreadSize > 1) { - this.pullMsgThreadSize = pullMsgThreadSize; - } - } - - private ExecutorService executorService; - - public ExecutorService getExecutorService() { - return executorService; - } - - public void setExecutorService(ExecutorService executorService) { - this.executorService = executorService; - } - - protected static final Map S_LOCK_OBJ_MAP = new HashMap<>(); - protected static Map sPollingMap = new ConcurrentHashMap<>(); - protected Object lockObj; - - public boolean setPolling(String queueName) { - synchronized (lockObj) { - Boolean ret = sPollingMap.get(queueName); - if (ret == null || !ret) { - sPollingMap.put(queueName, true); - return true; - } - return false; - } - } - - public void clearPolling(String queueName) { - synchronized (lockObj) { - sPollingMap.put(queueName, false); - lockObj.notifyAll(); - if (debugLogOpen) { - log.info("PullMessageTask_WakeUp:Everyone WakeUp and Work!"); - } - } - } - - public boolean isRunning() { - return isRunning; - } - - public void setRunning(boolean running) { - isRunning = running; - } - - private class PullMessageTask implements Runnable { - private String messageType; - private String queueName; - - @Override - public void run() { - - boolean polling = false; - while (isRunning) { - try { - synchronized (lockObj) { - Boolean p = sPollingMap.get(queueName); - if (p != null && p) { - try { - if (debugLogOpen) { - log.info("PullMessageTask_sleep:" - + Thread.currentThread().getName() - + " Have a nice sleep!"); - } - polling = false; - lockObj.wait(); - } - catch (InterruptedException e) { - if (debugLogOpen) { - log.info("PullMessageTask_Interrupted!" - + Thread.currentThread().getName() - + " QueueName is " + queueName); - } - continue; - } - } - } - - TokenForAlicom tokenObject = tokenGetter.getTokenByMessageType( - messageType, queueName, mnsAccountEndpoint); - CloudQueue queue = tokenObject.getQueue(); - Message popMsg = null; - if (!polling) { - popMsg = queue.popMessage(); - if (debugLogOpen) { - SimpleDateFormat format = new SimpleDateFormat( - "yyyy-MM-dd HH:mm:ss"); - log.info("PullMessageTask_popMessage:" - + Thread.currentThread().getName() + "-popDone at " - + "," + format.format(new Date()) + " msgSize=" - + (popMsg == null ? 0 : popMsg.getMessageId())); - } - if (popMsg == null) { - polling = true; - continue; - } - } - else { - if (setPolling(queueName)) { - if (debugLogOpen) { - log.info("PullMessageTask_setPolling:" - + Thread.currentThread().getName() + " Polling!"); - } - } - else { - continue; - } - do { - if (debugLogOpen) { - log.info("PullMessageTask_Keep_Polling" - + Thread.currentThread().getName() - + "KEEP Polling!"); - } - try { - popMsg = queue.popMessage(sleepSecondWhenNoData); - } - catch (ClientException e) { - if (debugLogOpen) { - log.info( - "PullMessageTask_Pop_Message:ClientException Refresh accessKey" - + e); - } - tokenObject = tokenGetter.getTokenByMessageType( - messageType, queueName, mnsAccountEndpoint); - queue = tokenObject.getQueue(); - - } - catch (ServiceException e) { - if (debugLogOpen) { - log.info( - "PullMessageTask_Pop_Message:ServiceException Refresh accessKey" - + e); - } - tokenObject = tokenGetter.getTokenByMessageType( - messageType, queueName, mnsAccountEndpoint); - queue = tokenObject.getQueue(); - - } - catch (Exception e) { - if (debugLogOpen) { - log.info( - "PullMessageTask_Pop_Message:Exception Happened when polling popMessage: " - + e); - } - } - } - while (popMsg == null && isRunning); - clearPolling(queueName); - } - boolean dealResult = messageListener.dealMessage(popMsg); - if (dealResult) { - // remember to delete message when consume message successfully. - if (debugLogOpen) { - log.info("PullMessageTask_Deal_Message:" - + Thread.currentThread().getName() + "deleteMessage " - + popMsg.getMessageId()); - } - queue.deleteMessage(popMsg.getReceiptHandle()); - } - } - catch (ClientException e) { - log.error("PullMessageTask_execute_error,messageType:" + messageType - + ",queueName:" + queueName, e); - break; - - } - catch (ServiceException e) { - if (e.getErrorCode().equals("AccessDenied")) { - log.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName - + ",please check messageType and queueName", e); - } - else { - log.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName, e); - } - break; - - } - catch (com.aliyuncs.exceptions.ClientException e) { - if (e.getErrCode().equals("InvalidAccessKeyId.NotFound")) { - log.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName - + ",please check AccessKeyId", e); - } - if (e.getErrCode().equals("SignatureDoesNotMatch")) { - log.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName - + ",please check AccessKeySecret", e); - } - else { - log.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName, e); - } - break; - - } - catch (Exception e) { - log.error("PullMessageTask_execute_error,messageType:" + messageType - + ",queueName:" + queueName, e); - try { - Thread.sleep(sleepSecondWhenNoData); - } - catch (InterruptedException e1) { - log.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName, e); - } - } - } - - } - - } - - /** - * @param accessKeyId accessKeyId - * @param accessKeySecret accessKeySecret - * @param messageType 消息类型 - * @param queueName 队列名称 - * @param messageListener 回调的listener,用户自己实现 - * @throws com.aliyuncs.exceptions.ClientException - * @throws ParseException - */ - public void startReceiveMsg(String accessKeyId, String accessKeySecret, - String messageType, String queueName, MessageListener messageListener) - throws com.aliyuncs.exceptions.ClientException, ParseException { - - tokenGetter = new TokenGetterForAlicom(accessKeyId, accessKeySecret, - endpointNameForPop, regionIdForPop, domainForPop, null); - - this.messageListener = messageListener; - isRunning = true; - PullMessageTask task = new PullMessageTask(); - task.messageType = messageType; - task.queueName = queueName; - - synchronized (S_LOCK_OBJ_MAP) { - lockObj = S_LOCK_OBJ_MAP.get(queueName); - if (lockObj == null) { - lockObj = new Object(); - S_LOCK_OBJ_MAP.put(queueName, lockObj); - } - } - - if (executorService == null) { - ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor( - pullMsgThreadSize, - new BasicThreadFactory.Builder() - .namingPattern( - "PullMessageTask-" + messageType + "-thread-pool-%d") - .daemon(true).build()); - executorService = scheduledExecutorService; - } - for (int i = 0; i < pullMsgThreadSize; i++) { - executorService.execute(task); - } - } - - /** - * @param accessKeyId accessKeyId - * @param accessKeySecret accessKeySecret - * @param messageType 消息类型 - * @param queueName 队列名称 - * @param messageListener 回调的listener,用户自己实现 - * @throws com.aliyuncs.exceptions.ClientException - * @throws ParseException - */ - public void startReceiveMsgForVPC(String accessKeyId, String accessKeySecret, - String messageType, String queueName, String regionIdForPop, - String endpointNameForPop, String domainForPop, String mnsAccountEndpoint, - MessageListener messageListener) - throws com.aliyuncs.exceptions.ClientException, ParseException { - this.mnsAccountEndpoint = mnsAccountEndpoint; - tokenGetter = new TokenGetterForAlicom(accessKeyId, accessKeySecret, - endpointNameForPop, regionIdForPop, domainForPop, null); - - this.messageListener = messageListener; - isRunning = true; - PullMessageTask task = new PullMessageTask(); - task.messageType = messageType; - task.queueName = queueName; - - synchronized (S_LOCK_OBJ_MAP) { - lockObj = S_LOCK_OBJ_MAP.get(queueName); - if (lockObj == null) { - lockObj = new Object(); - S_LOCK_OBJ_MAP.put(queueName, lockObj); - } - } - - if (executorService == null) { - ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor( - pullMsgThreadSize, - new BasicThreadFactory.Builder() - .namingPattern( - "PullMessageTask-" + messageType + "-thread-pool-%d") - .daemon(true).build()); - executorService = scheduledExecutorService; - } - for (int i = 0; i < pullMsgThreadSize; i++) { - executorService.execute(task); - } - } - - /** - * 虚商用户定制接收消息方法 - * @param accessKeyId accessKeyId - * @param accessKeySecret accessKeySecret - * @param ownerId 实际的ownerId - * @param messageType 消息类型 - * @param queueName 队列名称 - * @param messageListener 回调listener - * @throws com.aliyuncs.exceptions.ClientException - * @throws ParseException - */ - public void startReceiveMsgForPartnerUser(String accessKeyId, String accessKeySecret, - Long ownerId, String messageType, String queueName, - MessageListener messageListener) - throws com.aliyuncs.exceptions.ClientException, ParseException { - - tokenGetter = new TokenGetterForAlicom(accessKeyId, accessKeySecret, - endpointNameForPop, regionIdForPop, domainForPop, ownerId); - - this.messageListener = messageListener; - isRunning = true; - PullMessageTask task = new PullMessageTask(); - task.messageType = messageType; - task.queueName = queueName; - - synchronized (S_LOCK_OBJ_MAP) { - lockObj = S_LOCK_OBJ_MAP.get(queueName); - if (lockObj == null) { - lockObj = new Object(); - S_LOCK_OBJ_MAP.put(queueName, lockObj); - } - } - - if (executorService == null) { - ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor( - pullMsgThreadSize, - new BasicThreadFactory.Builder() - .namingPattern( - "PullMessageTask-" + messageType + "-thread-pool-%d") - .daemon(true).build()); - executorService = scheduledExecutorService; - } - for (int i = 0; i < pullMsgThreadSize; i++) { - executorService.execute(task); - } - } - - public void stop() { - isRunning = false; - } - -} +/* + * Copyright (C) 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.alicloud.sms.base; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.aliyun.mns.client.CloudQueue; +import com.aliyun.mns.common.ClientException; +import com.aliyun.mns.common.ServiceException; +import com.aliyun.mns.model.Message; + +/** + * 阿里通信官方消息默认拉取工具类 + */ +public class DefaultAlicomMessagePuller { + + private static final Logger log = LoggerFactory + .getLogger(DefaultAlicomMessagePuller.class); + + private String mnsAccountEndpoint = "https://1943695596114318.mns.cn-hangzhou.aliyuncs.com/";// 阿里通信消息的endpoint,固定。 + private String endpointNameForPop = "cn-hangzhou"; + private String regionIdForPop = "cn-hangzhou"; + private String domainForPop = "dybaseapi.aliyuncs.com"; + private TokenGetterForAlicom tokenGetter; + private MessageListener messageListener; + private boolean isRunning = false; + private Integer pullMsgThreadSize = 1; + private boolean debugLogOpen = false; + private Integer sleepSecondWhenNoData = 30; + + public void openDebugLog(boolean debugLogOpen) { + this.debugLogOpen = debugLogOpen; + } + + public Integer getSleepSecondWhenNoData() { + return sleepSecondWhenNoData; + } + + public void setSleepSecondWhenNoData(Integer sleepSecondWhenNoData) { + this.sleepSecondWhenNoData = sleepSecondWhenNoData; + } + + public Integer getPullMsgThreadSize() { + return pullMsgThreadSize; + } + + public void setPullMsgThreadSize(Integer pullMsgThreadSize) { + if (pullMsgThreadSize != null && pullMsgThreadSize > 1) { + this.pullMsgThreadSize = pullMsgThreadSize; + } + } + + private ExecutorService executorService; + + public ExecutorService getExecutorService() { + return executorService; + } + + public void setExecutorService(ExecutorService executorService) { + this.executorService = executorService; + } + + protected static final Map S_LOCK_OBJ_MAP = new HashMap<>(); + protected static Map sPollingMap = new ConcurrentHashMap<>(); + protected Object lockObj; + + public boolean setPolling(String queueName) { + synchronized (lockObj) { + Boolean ret = sPollingMap.get(queueName); + if (ret == null || !ret) { + sPollingMap.put(queueName, true); + return true; + } + return false; + } + } + + public void clearPolling(String queueName) { + synchronized (lockObj) { + sPollingMap.put(queueName, false); + lockObj.notifyAll(); + if (debugLogOpen) { + log.info("PullMessageTask_WakeUp:Everyone WakeUp and Work!"); + } + } + } + + public boolean isRunning() { + return isRunning; + } + + public void setRunning(boolean running) { + isRunning = running; + } + + private class PullMessageTask implements Runnable { + private String messageType; + private String queueName; + + @Override + public void run() { + + boolean polling = false; + while (isRunning) { + try { + synchronized (lockObj) { + Boolean p = sPollingMap.get(queueName); + if (p != null && p) { + try { + if (debugLogOpen) { + log.info("PullMessageTask_sleep:" + + Thread.currentThread().getName() + + " Have a nice sleep!"); + } + polling = false; + lockObj.wait(); + } + catch (InterruptedException e) { + if (debugLogOpen) { + log.info("PullMessageTask_Interrupted!" + + Thread.currentThread().getName() + + " QueueName is " + queueName); + } + continue; + } + } + } + + TokenForAlicom tokenObject = tokenGetter.getTokenByMessageType( + messageType, queueName, mnsAccountEndpoint); + CloudQueue queue = tokenObject.getQueue(); + Message popMsg = null; + if (!polling) { + popMsg = queue.popMessage(); + if (debugLogOpen) { + SimpleDateFormat format = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + log.info("PullMessageTask_popMessage:" + + Thread.currentThread().getName() + "-popDone at " + + "," + format.format(new Date()) + " msgSize=" + + (popMsg == null ? 0 : popMsg.getMessageId())); + } + if (popMsg == null) { + polling = true; + continue; + } + } + else { + if (setPolling(queueName)) { + if (debugLogOpen) { + log.info("PullMessageTask_setPolling:" + + Thread.currentThread().getName() + " Polling!"); + } + } + else { + continue; + } + do { + if (debugLogOpen) { + log.info("PullMessageTask_Keep_Polling" + + Thread.currentThread().getName() + + "KEEP Polling!"); + } + try { + popMsg = queue.popMessage(sleepSecondWhenNoData); + } + catch (ClientException e) { + if (debugLogOpen) { + log.info( + "PullMessageTask_Pop_Message:ClientException Refresh accessKey" + + e); + } + tokenObject = tokenGetter.getTokenByMessageType( + messageType, queueName, mnsAccountEndpoint); + queue = tokenObject.getQueue(); + + } + catch (ServiceException e) { + if (debugLogOpen) { + log.info( + "PullMessageTask_Pop_Message:ServiceException Refresh accessKey" + + e); + } + tokenObject = tokenGetter.getTokenByMessageType( + messageType, queueName, mnsAccountEndpoint); + queue = tokenObject.getQueue(); + + } + catch (Exception e) { + if (debugLogOpen) { + log.info( + "PullMessageTask_Pop_Message:Exception Happened when polling popMessage: " + + e); + } + } + } + while (popMsg == null && isRunning); + clearPolling(queueName); + } + boolean dealResult = messageListener.dealMessage(popMsg); + if (dealResult) { + // remember to delete message when consume message successfully. + if (debugLogOpen) { + log.info("PullMessageTask_Deal_Message:" + + Thread.currentThread().getName() + "deleteMessage " + + popMsg.getMessageId()); + } + queue.deleteMessage(popMsg.getReceiptHandle()); + } + } + catch (ClientException e) { + log.error("PullMessageTask_execute_error,messageType:" + messageType + + ",queueName:" + queueName, e); + break; + + } + catch (ServiceException e) { + if (e.getErrorCode().equals("AccessDenied")) { + log.error("PullMessageTask_execute_error,messageType:" + + messageType + ",queueName:" + queueName + + ",please check messageType and queueName", e); + } + else { + log.error("PullMessageTask_execute_error,messageType:" + + messageType + ",queueName:" + queueName, e); + } + break; + + } + catch (com.aliyuncs.exceptions.ClientException e) { + if (e.getErrCode().equals("InvalidAccessKeyId.NotFound")) { + log.error("PullMessageTask_execute_error,messageType:" + + messageType + ",queueName:" + queueName + + ",please check AccessKeyId", e); + } + if (e.getErrCode().equals("SignatureDoesNotMatch")) { + log.error("PullMessageTask_execute_error,messageType:" + + messageType + ",queueName:" + queueName + + ",please check AccessKeySecret", e); + } + else { + log.error("PullMessageTask_execute_error,messageType:" + + messageType + ",queueName:" + queueName, e); + } + break; + + } + catch (Exception e) { + log.error("PullMessageTask_execute_error,messageType:" + messageType + + ",queueName:" + queueName, e); + try { + Thread.sleep(sleepSecondWhenNoData); + } + catch (InterruptedException e1) { + log.error("PullMessageTask_execute_error,messageType:" + + messageType + ",queueName:" + queueName, e); + } + } + } + + } + + } + + /** + * @param accessKeyId accessKeyId + * @param accessKeySecret accessKeySecret + * @param messageType 消息类型 + * @param queueName 队列名称 + * @param messageListener 回调的listener,用户自己实现 + * @throws com.aliyuncs.exceptions.ClientException + * @throws ParseException + */ + public void startReceiveMsg(String accessKeyId, String accessKeySecret, + String messageType, String queueName, MessageListener messageListener) + throws com.aliyuncs.exceptions.ClientException, ParseException { + + tokenGetter = new TokenGetterForAlicom(accessKeyId, accessKeySecret, + endpointNameForPop, regionIdForPop, domainForPop, null); + + this.messageListener = messageListener; + isRunning = true; + PullMessageTask task = new PullMessageTask(); + task.messageType = messageType; + task.queueName = queueName; + + synchronized (S_LOCK_OBJ_MAP) { + lockObj = S_LOCK_OBJ_MAP.get(queueName); + if (lockObj == null) { + lockObj = new Object(); + S_LOCK_OBJ_MAP.put(queueName, lockObj); + } + } + + if (executorService == null) { + ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor( + pullMsgThreadSize, + new BasicThreadFactory.Builder() + .namingPattern( + "PullMessageTask-" + messageType + "-thread-pool-%d") + .daemon(true).build()); + executorService = scheduledExecutorService; + } + for (int i = 0; i < pullMsgThreadSize; i++) { + executorService.execute(task); + } + } + + /** + * @param accessKeyId accessKeyId + * @param accessKeySecret accessKeySecret + * @param messageType 消息类型 + * @param queueName 队列名称 + * @param messageListener 回调的listener,用户自己实现 + * @throws com.aliyuncs.exceptions.ClientException + * @throws ParseException + */ + public void startReceiveMsgForVPC(String accessKeyId, String accessKeySecret, + String messageType, String queueName, String regionIdForPop, + String endpointNameForPop, String domainForPop, String mnsAccountEndpoint, + MessageListener messageListener) + throws com.aliyuncs.exceptions.ClientException, ParseException { + this.mnsAccountEndpoint = mnsAccountEndpoint; + tokenGetter = new TokenGetterForAlicom(accessKeyId, accessKeySecret, + endpointNameForPop, regionIdForPop, domainForPop, null); + + this.messageListener = messageListener; + isRunning = true; + PullMessageTask task = new PullMessageTask(); + task.messageType = messageType; + task.queueName = queueName; + + synchronized (S_LOCK_OBJ_MAP) { + lockObj = S_LOCK_OBJ_MAP.get(queueName); + if (lockObj == null) { + lockObj = new Object(); + S_LOCK_OBJ_MAP.put(queueName, lockObj); + } + } + + if (executorService == null) { + ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor( + pullMsgThreadSize, + new BasicThreadFactory.Builder() + .namingPattern( + "PullMessageTask-" + messageType + "-thread-pool-%d") + .daemon(true).build()); + executorService = scheduledExecutorService; + } + for (int i = 0; i < pullMsgThreadSize; i++) { + executorService.execute(task); + } + } + + /** + * 虚商用户定制接收消息方法 + * @param accessKeyId accessKeyId + * @param accessKeySecret accessKeySecret + * @param ownerId 实际的ownerId + * @param messageType 消息类型 + * @param queueName 队列名称 + * @param messageListener 回调listener + * @throws com.aliyuncs.exceptions.ClientException + * @throws ParseException + */ + public void startReceiveMsgForPartnerUser(String accessKeyId, String accessKeySecret, + Long ownerId, String messageType, String queueName, + MessageListener messageListener) + throws com.aliyuncs.exceptions.ClientException, ParseException { + + tokenGetter = new TokenGetterForAlicom(accessKeyId, accessKeySecret, + endpointNameForPop, regionIdForPop, domainForPop, ownerId); + + this.messageListener = messageListener; + isRunning = true; + PullMessageTask task = new PullMessageTask(); + task.messageType = messageType; + task.queueName = queueName; + + synchronized (S_LOCK_OBJ_MAP) { + lockObj = S_LOCK_OBJ_MAP.get(queueName); + if (lockObj == null) { + lockObj = new Object(); + S_LOCK_OBJ_MAP.put(queueName, lockObj); + } + } + + if (executorService == null) { + ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor( + pullMsgThreadSize, + new BasicThreadFactory.Builder() + .namingPattern( + "PullMessageTask-" + messageType + "-thread-pool-%d") + .daemon(true).build()); + executorService = scheduledExecutorService; + } + for (int i = 0; i < pullMsgThreadSize; i++) { + executorService.execute(task); + } + } + + public void stop() { + isRunning = false; + } + +} diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/MessageListener.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/MessageListener.java similarity index 90% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/MessageListener.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/MessageListener.java index 9921232a..9e857f2a 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/MessageListener.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/MessageListener.java @@ -1,24 +1,24 @@ -/* - * Copyright (C) 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alicloud.sms.base; - -import com.aliyun.mns.model.Message; - -public interface MessageListener { - - boolean dealMessage(Message message); - -} +/* + * Copyright (C) 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.alicloud.sms.base; + +import com.aliyun.mns.model.Message; + +public interface MessageListener { + + boolean dealMessage(Message message); + +} diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueRequest.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueRequest.java similarity index 97% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueRequest.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueRequest.java index 1de389ca..e8214812 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueRequest.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueRequest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.base; +package com.alibaba.alicloud.sms.base; import com.aliyuncs.RpcAcsRequest; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueResponse.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueResponse.java similarity index 98% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueResponse.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueResponse.java index 5e296ed6..724804e8 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueResponse.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueResponse.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.base; +package com.alibaba.alicloud.sms.base; import com.aliyuncs.AcsResponse; import com.aliyuncs.transform.UnmarshallerContext; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueResponseUnmarshaller.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueResponseUnmarshaller.java similarity index 97% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueResponseUnmarshaller.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueResponseUnmarshaller.java index 627e8bb5..87c58c28 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/QueryTokenForMnsQueueResponseUnmarshaller.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/QueryTokenForMnsQueueResponseUnmarshaller.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.base; +package com.alibaba.alicloud.sms.base; import com.aliyuncs.transform.UnmarshallerContext; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/TokenForAlicom.java similarity index 93% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenForAlicom.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/TokenForAlicom.java index 8af1a63c..443e8517 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenForAlicom.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/TokenForAlicom.java @@ -1,96 +1,96 @@ -/* - * Copyright (C) 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alicloud.sms.base; - -import com.aliyun.mns.client.CloudQueue; -import com.aliyun.mns.client.MNSClient; - -/** - * 用于接收云通信消息的临时token - * - */ -public class TokenForAlicom { - private String messageType; - private String token; - private Long expireTime; - private String tempAccessKeyId; - private String tempAccessKeySecret; - private MNSClient client; - private CloudQueue queue; - - public String getMessageType() { - return messageType; - } - - public void setMessageType(String messageType) { - this.messageType = messageType; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public Long getExpireTime() { - return expireTime; - } - - public void setExpireTime(Long expireTime) { - this.expireTime = expireTime; - } - - public String getTempAccessKeyId() { - return tempAccessKeyId; - } - - public void setTempAccessKeyId(String tempAccessKeyId) { - this.tempAccessKeyId = tempAccessKeyId; - } - - public String getTempAccessKeySecret() { - return tempAccessKeySecret; - } - - public void setTempAccessKeySecret(String tempAccessKeySecret) { - this.tempAccessKeySecret = tempAccessKeySecret; - } - - public MNSClient getClient() { - return client; - } - - public void setClient(MNSClient client) { - this.client = client; - } - - public CloudQueue getQueue() { - return queue; - } - - public void setQueue(CloudQueue queue) { - this.queue = queue; - } - - public void closeClient() { - if (client != null) { - this.client.close(); - } - } - -} +/* + * Copyright (C) 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.alicloud.sms.base; + +import com.aliyun.mns.client.CloudQueue; +import com.aliyun.mns.client.MNSClient; + +/** + * 用于接收云通信消息的临时token + * + */ +public class TokenForAlicom { + private String messageType; + private String token; + private Long expireTime; + private String tempAccessKeyId; + private String tempAccessKeySecret; + private MNSClient client; + private CloudQueue queue; + + public String getMessageType() { + return messageType; + } + + public void setMessageType(String messageType) { + this.messageType = messageType; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public Long getExpireTime() { + return expireTime; + } + + public void setExpireTime(Long expireTime) { + this.expireTime = expireTime; + } + + public String getTempAccessKeyId() { + return tempAccessKeyId; + } + + public void setTempAccessKeyId(String tempAccessKeyId) { + this.tempAccessKeyId = tempAccessKeyId; + } + + public String getTempAccessKeySecret() { + return tempAccessKeySecret; + } + + public void setTempAccessKeySecret(String tempAccessKeySecret) { + this.tempAccessKeySecret = tempAccessKeySecret; + } + + public MNSClient getClient() { + return client; + } + + public void setClient(MNSClient client) { + this.client = client; + } + + public CloudQueue getQueue() { + return queue; + } + + public void setQueue(CloudQueue queue) { + this.queue = queue; + } + + public void closeClient() { + if (client != null) { + this.client.close(); + } + } + +} diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/TokenGetterForAlicom.java similarity index 96% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/TokenGetterForAlicom.java index 3daf1c83..70def740 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/base/TokenGetterForAlicom.java @@ -1,141 +1,141 @@ -/* - * Copyright (C) 2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.cloud.alicloud.sms.base; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.TimeZone; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.aliyun.mns.client.CloudAccount; -import com.aliyun.mns.client.CloudQueue; -import com.aliyun.mns.client.MNSClient; -import com.aliyuncs.DefaultAcsClient; -import com.aliyuncs.IAcsClient; -import com.aliyuncs.exceptions.ClientException; -import com.aliyuncs.exceptions.ServerException; -import com.aliyuncs.http.FormatType; -import com.aliyuncs.http.MethodType; -import com.aliyuncs.http.ProtocolType; -import com.aliyuncs.profile.DefaultProfile; -import com.aliyuncs.profile.IClientProfile; - -/** - * 获取接收云通信消息的临时token - * - */ -public class TokenGetterForAlicom { - private static final Logger log = LoggerFactory.getLogger(TokenGetterForAlicom.class); - private String accessKeyId; - private String accessKeySecret; - private String endpointNameForPop; - private String regionIdForPop; - private String domainForPop; - private IAcsClient iAcsClient; - private Long ownerId; - private final static String PRODUCT_NAME = "Dybaseapi"; - private long bufferTime = 1000 * 60 * 2;// 过期时间小于2分钟则重新获取,防止服务器时间误差 - private final Object lock = new Object(); - private ConcurrentMap tokenMap = new ConcurrentHashMap(); - - public TokenGetterForAlicom(String accessKeyId, String accessKeySecret, - String endpointNameForPop, String regionIdForPop, String domainForPop, - Long ownerId) throws ClientException { - this.accessKeyId = accessKeyId; - this.accessKeySecret = accessKeySecret; - this.endpointNameForPop = endpointNameForPop; - this.regionIdForPop = regionIdForPop; - this.domainForPop = domainForPop; - this.ownerId = ownerId; - init(); - } - - private void init() throws ClientException { - DefaultProfile.addEndpoint(endpointNameForPop, regionIdForPop, PRODUCT_NAME, - domainForPop); - IClientProfile profile = DefaultProfile.getProfile(regionIdForPop, accessKeyId, - accessKeySecret); - profile.getHttpClientConfig().setCompatibleMode(true); - iAcsClient = new DefaultAcsClient(profile); - } - - private TokenForAlicom getTokenFromRemote(String messageType) - throws ServerException, ClientException, ParseException { - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); - QueryTokenForMnsQueueRequest request = new QueryTokenForMnsQueueRequest(); - request.setAcceptFormat(FormatType.JSON); - request.setMessageType(messageType); - request.setOwnerId(ownerId); - request.setProtocol(ProtocolType.HTTPS); - request.setMethod(MethodType.POST); - QueryTokenForMnsQueueResponse response = iAcsClient.getAcsResponse(request); - String resultCode = response.getCode(); - if (resultCode != null && "OK".equals(resultCode)) { - QueryTokenForMnsQueueResponse.MessageTokenDTO dto = response - .getMessageTokenDTO(); - TokenForAlicom token = new TokenForAlicom(); - String timeStr = dto.getExpireTime(); - token.setMessageType(messageType); - token.setExpireTime(df.parse(timeStr).getTime()); - token.setToken(dto.getSecurityToken()); - token.setTempAccessKeyId(dto.getAccessKeyId()); - token.setTempAccessKeySecret(dto.getAccessKeySecret()); - return token; - } - else { - log.error("getTokenFromRemote_error,messageType:" + messageType + ",code:" - + response.getCode() + ",message:" + response.getMessage()); - throw new ServerException(response.getCode(), response.getMessage()); - } - } - - public TokenForAlicom getTokenByMessageType(String messageType, String queueName, - String mnsAccountEndpoint) - throws ServerException, ClientException, ParseException { - TokenForAlicom token = tokenMap.get(messageType); - Long now = System.currentTimeMillis(); - if (token == null || (token.getExpireTime() - now) < bufferTime) {// 过期时间小于2分钟则重新获取,防止服务器时间误差 - synchronized (lock) { - token = tokenMap.get(messageType); - if (token == null || (token.getExpireTime() - now) < bufferTime) { - TokenForAlicom oldToken = null; - if (token != null) { - oldToken = token; - } - token = getTokenFromRemote(messageType); - // 因为换token时需要重建client和关闭老的client,所以创建client的代码和创建token放在一起 - CloudAccount account = new CloudAccount(token.getTempAccessKeyId(), - token.getTempAccessKeySecret(), mnsAccountEndpoint, - token.getToken()); - MNSClient client = account.getMNSClient(); - CloudQueue queue = client.getQueueRef(queueName); - token.setClient(client); - token.setQueue(queue); - tokenMap.put(messageType, token); - if (oldToken != null) { - oldToken.closeClient(); - } - } - } - } - return token; - } -} +/* + * Copyright (C) 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.alicloud.sms.base; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.TimeZone; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.aliyun.mns.client.CloudAccount; +import com.aliyun.mns.client.CloudQueue; +import com.aliyun.mns.client.MNSClient; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.exceptions.ServerException; +import com.aliyuncs.http.FormatType; +import com.aliyuncs.http.MethodType; +import com.aliyuncs.http.ProtocolType; +import com.aliyuncs.profile.DefaultProfile; +import com.aliyuncs.profile.IClientProfile; + +/** + * 获取接收云通信消息的临时token + * + */ +public class TokenGetterForAlicom { + private static final Logger log = LoggerFactory.getLogger(TokenGetterForAlicom.class); + private String accessKeyId; + private String accessKeySecret; + private String endpointNameForPop; + private String regionIdForPop; + private String domainForPop; + private IAcsClient iAcsClient; + private Long ownerId; + private final static String PRODUCT_NAME = "Dybaseapi"; + private long bufferTime = 1000 * 60 * 2;// 过期时间小于2分钟则重新获取,防止服务器时间误差 + private final Object lock = new Object(); + private ConcurrentMap tokenMap = new ConcurrentHashMap(); + + public TokenGetterForAlicom(String accessKeyId, String accessKeySecret, + String endpointNameForPop, String regionIdForPop, String domainForPop, + Long ownerId) throws ClientException { + this.accessKeyId = accessKeyId; + this.accessKeySecret = accessKeySecret; + this.endpointNameForPop = endpointNameForPop; + this.regionIdForPop = regionIdForPop; + this.domainForPop = domainForPop; + this.ownerId = ownerId; + init(); + } + + private void init() throws ClientException { + DefaultProfile.addEndpoint(endpointNameForPop, regionIdForPop, PRODUCT_NAME, + domainForPop); + IClientProfile profile = DefaultProfile.getProfile(regionIdForPop, accessKeyId, + accessKeySecret); + profile.getHttpClientConfig().setCompatibleMode(true); + iAcsClient = new DefaultAcsClient(profile); + } + + private TokenForAlicom getTokenFromRemote(String messageType) + throws ServerException, ClientException, ParseException { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + QueryTokenForMnsQueueRequest request = new QueryTokenForMnsQueueRequest(); + request.setAcceptFormat(FormatType.JSON); + request.setMessageType(messageType); + request.setOwnerId(ownerId); + request.setProtocol(ProtocolType.HTTPS); + request.setMethod(MethodType.POST); + QueryTokenForMnsQueueResponse response = iAcsClient.getAcsResponse(request); + String resultCode = response.getCode(); + if (resultCode != null && "OK".equals(resultCode)) { + QueryTokenForMnsQueueResponse.MessageTokenDTO dto = response + .getMessageTokenDTO(); + TokenForAlicom token = new TokenForAlicom(); + String timeStr = dto.getExpireTime(); + token.setMessageType(messageType); + token.setExpireTime(df.parse(timeStr).getTime()); + token.setToken(dto.getSecurityToken()); + token.setTempAccessKeyId(dto.getAccessKeyId()); + token.setTempAccessKeySecret(dto.getAccessKeySecret()); + return token; + } + else { + log.error("getTokenFromRemote_error,messageType:" + messageType + ",code:" + + response.getCode() + ",message:" + response.getMessage()); + throw new ServerException(response.getCode(), response.getMessage()); + } + } + + public TokenForAlicom getTokenByMessageType(String messageType, String queueName, + String mnsAccountEndpoint) + throws ServerException, ClientException, ParseException { + TokenForAlicom token = tokenMap.get(messageType); + Long now = System.currentTimeMillis(); + if (token == null || (token.getExpireTime() - now) < bufferTime) {// 过期时间小于2分钟则重新获取,防止服务器时间误差 + synchronized (lock) { + token = tokenMap.get(messageType); + if (token == null || (token.getExpireTime() - now) < bufferTime) { + TokenForAlicom oldToken = null; + if (token != null) { + oldToken = token; + } + token = getTokenFromRemote(messageType); + // 因为换token时需要重建client和关闭老的client,所以创建client的代码和创建token放在一起 + CloudAccount account = new CloudAccount(token.getTempAccessKeyId(), + token.getTempAccessKeySecret(), mnsAccountEndpoint, + token.getToken()); + MNSClient client = account.getMNSClient(); + CloudQueue queue = client.getQueueRef(queueName); + token.setClient(client); + token.setQueue(queue); + tokenMap.put(messageType, token); + if (oldToken != null) { + oldToken.closeClient(); + } + } + } + } + return token; + } +} diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/config/SmsAutoConfiguration.java similarity index 81% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/config/SmsAutoConfiguration.java index 6fb5727d..08e75098 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/config/SmsAutoConfiguration.java @@ -13,19 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.config; +package com.alibaba.alicloud.sms.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.cloud.alicloud.context.sms.SmsProperties; -import org.springframework.cloud.alicloud.sms.ISmsService; -import org.springframework.cloud.alicloud.sms.SmsInitializerEventListener; -import org.springframework.cloud.alicloud.sms.SmsServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.alicloud.context.AliCloudProperties; +import com.alibaba.alicloud.context.sms.SmsProperties; +import com.alibaba.alicloud.sms.ISmsService; +import com.alibaba.alicloud.sms.SmsInitializerEventListener; +import com.alibaba.alicloud.sms.SmsServiceImpl; + import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; /** diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/EndpointManager.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/EndpointManager.java similarity index 98% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/EndpointManager.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/EndpointManager.java index 3b807d08..79354f24 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/EndpointManager.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/EndpointManager.java @@ -13,10 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.endpoint; - -import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +package com.alibaba.alicloud.sms.endpoint; import java.util.HashMap; import java.util.LinkedList; @@ -25,6 +22,9 @@ import java.util.Map; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.locks.ReentrantLock; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; + /** * */ diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/ReceiveMessageEntity.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/ReceiveMessageEntity.java similarity index 92% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/ReceiveMessageEntity.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/ReceiveMessageEntity.java index 3e941c3c..685fbe97 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/ReceiveMessageEntity.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/ReceiveMessageEntity.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.endpoint; - -import org.springframework.cloud.alicloud.sms.base.MessageListener; +package com.alibaba.alicloud.sms.endpoint; import java.io.Serializable; +import com.alibaba.alicloud.sms.base.MessageListener; + /** * @author pbting */ diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/SmsEndpoint.java similarity index 94% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/SmsEndpoint.java index 77d8e39b..57da7bd5 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/SmsEndpoint.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.endpoint; +package com.alibaba.alicloud.sms.endpoint; import java.util.Map; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpointAutoConfiguration.java b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/SmsEndpointAutoConfiguration.java similarity index 95% rename from spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpointAutoConfiguration.java rename to spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/SmsEndpointAutoConfiguration.java index 1db0ec25..cf8a6bb7 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpointAutoConfiguration.java +++ b/spring-cloud-alicloud-sms/src/main/java/com/alibaba/alicloud/sms/endpoint/SmsEndpointAutoConfiguration.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.alicloud.sms.endpoint; +package com.alibaba.alicloud.sms.endpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; diff --git a/spring-cloud-alicloud-sms/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-sms/src/main/resources/META-INF/spring.factories index 875d39db..a6c328d2 100644 --- a/spring-cloud-alicloud-sms/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-sms/src/main/resources/META-INF/spring.factories @@ -1,3 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - org.springframework.cloud.alicloud.sms.config.SmsAutoConfiguration,\ - org.springframework.cloud.alicloud.sms.endpoint.SmsEndpointAutoConfiguration \ No newline at end of file + com.alibaba.alicloud.sms.config.SmsAutoConfiguration,\ + com.alibaba.alicloud.sms.endpoint.SmsEndpointAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-starter-alibaba/pom.xml b/spring-cloud-starter-alibaba/pom.xml index 70ae5445..653a4163 100644 --- a/spring-cloud-starter-alibaba/pom.xml +++ b/spring-cloud-starter-alibaba/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml index 4251d3f0..18ed699a 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-nacos-config diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml index 20bcbf3e..411e1844 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-nacos-config diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml index 4385af54..bee19b17 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-nacos-discovery diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml index 9e24640c..159a1130 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-seata diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml index f4267422..36d9e3e7 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba-sentinel diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml index 5781282a..4969d76d 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml @@ -3,14 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml 4.0.0 - org.springframework.cloud spring-cloud-starter-bus-rocketmq Spring Cloud Alibaba Bus RocketMQ @@ -18,7 +17,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-stream-binder-rocketmq diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/java/org/springframework/cloud/bus/rocketmq/env/RocketMQBusEnvironmentPostProcessor.java b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/java/com/alibaba/cloud/bus/rocketmq/env/RocketMQBusEnvironmentPostProcessor.java similarity index 98% rename from spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/java/org/springframework/cloud/bus/rocketmq/env/RocketMQBusEnvironmentPostProcessor.java rename to spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/java/com/alibaba/cloud/bus/rocketmq/env/RocketMQBusEnvironmentPostProcessor.java index 093dce41..4895741c 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/java/org/springframework/cloud/bus/rocketmq/env/RocketMQBusEnvironmentPostProcessor.java +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/java/com/alibaba/cloud/bus/rocketmq/env/RocketMQBusEnvironmentPostProcessor.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.cloud.bus.rocketmq.env; +package com.alibaba.cloud.bus.rocketmq.env; import static org.springframework.cloud.bus.SpringCloudBusClient.INPUT; diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/resources/META-INF/spring.factories index c5a9fb95..9f26c6c5 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/src/main/resources/META-INF/spring.factories @@ -1,3 +1,3 @@ # EnvironmentPostProcessor org.springframework.boot.env.EnvironmentPostProcessor=\ -org.springframework.cloud.bus.rocketmq.env.RocketMQBusEnvironmentPostProcessor \ No newline at end of file +com.alibaba.cloud.bus.rocketmq.env.RocketMQBusEnvironmentPostProcessor \ No newline at end of file diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml index 5f6dfce8..df6bce38 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml @@ -3,14 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml 4.0.0 - org.springframework.cloud spring-cloud-starter-dubbo Spring Cloud Starter Dubbo diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml index 6871f5da..79206e1c 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-stream-binder-rocketmq diff --git a/spring-cloud-starter-alicloud/pom.xml b/spring-cloud-starter-alicloud/pom.xml index 61468a08..71651507 100644 --- a/spring-cloud-starter-alicloud/pom.xml +++ b/spring-cloud-starter-alicloud/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml index 0316109b..7b6c6a1a 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-acm diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml index 93933aa2..fd311f74 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud 0.2.3.BUILD-SNAPSHOT @@ -13,7 +13,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-ans diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml index d55df981..5d9f05ff 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-oss diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml index b7267767..23d4f88c 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-schedulerx diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml index 84ea69d7..0d6274e1 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml @@ -3,7 +3,7 @@ 4.0.0 - org.springframework.cloud + com.alibaba.cloud spring-cloud-starter-alicloud 0.2.3.BUILD-SNAPSHOT @@ -12,7 +12,7 @@ - org.springframework.cloud + com.alibaba.cloud spring-cloud-alicloud-sms diff --git a/spring-cloud-stream-binder-rocketmq/pom.xml b/spring-cloud-stream-binder-rocketmq/pom.xml index c6a232b2..b3f2d388 100644 --- a/spring-cloud-stream-binder-rocketmq/pom.xml +++ b/spring-cloud-stream-binder-rocketmq/pom.xml @@ -3,14 +3,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.springframework.cloud + com.alibaba.cloud spring-cloud-alibaba 0.2.3.BUILD-SNAPSHOT ../pom.xml 4.0.0 - org.springframework.cloud spring-cloud-stream-binder-rocketmq Spring Cloud Alibaba RocketMQ Binder diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQBinderConstants.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQBinderConstants.java similarity index 94% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQBinderConstants.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQBinderConstants.java index c57ce9b6..72c97420 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQBinderConstants.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQBinderConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq; +package com.alibaba.cloud.stream.binder.rocketmq; /** * @author Jim diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQBinderUtils.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQBinderUtils.java similarity index 94% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQBinderUtils.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQBinderUtils.java index b50e799d..673d3370 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQBinderUtils.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQBinderUtils.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq; +package com.alibaba.cloud.stream.binder.rocketmq; import org.apache.rocketmq.spring.autoconfigure.RocketMQProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; import org.springframework.util.StringUtils; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; + /** * @author Jim */ diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQMessageChannelBinder.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQMessageChannelBinder.java similarity index 89% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQMessageChannelBinder.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQMessageChannelBinder.java index 651cb987..64409e7b 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQMessageChannelBinder.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQMessageChannelBinder.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq; +package com.alibaba.cloud.stream.binder.rocketmq; import java.util.HashMap; import java.util.Map; @@ -31,16 +31,6 @@ import org.springframework.cloud.stream.binder.AbstractMessageChannelBinder; import org.springframework.cloud.stream.binder.ExtendedConsumerProperties; import org.springframework.cloud.stream.binder.ExtendedProducerProperties; import org.springframework.cloud.stream.binder.ExtendedPropertiesBinder; -import org.springframework.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer; -import org.springframework.cloud.stream.binder.rocketmq.integration.RocketMQInboundChannelAdapter; -import org.springframework.cloud.stream.binder.rocketmq.integration.RocketMQMessageHandler; -import org.springframework.cloud.stream.binder.rocketmq.integration.RocketMQMessageSource; -import org.springframework.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties; -import org.springframework.cloud.stream.binder.rocketmq.provisioning.RocketMQTopicProvisioner; import org.springframework.cloud.stream.provisioning.ConsumerDestination; import org.springframework.cloud.stream.provisioning.ProducerDestination; import org.springframework.integration.core.MessageProducer; @@ -52,6 +42,17 @@ import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessagingException; import org.springframework.util.StringUtils; +import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer; +import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQInboundChannelAdapter; +import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQMessageHandler; +import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQMessageSource; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties; +import com.alibaba.cloud.stream.binder.rocketmq.provisioning.RocketMQTopicProvisioner; + import com.fasterxml.jackson.databind.ObjectMapper; /** @@ -125,8 +126,8 @@ public class RocketMQMessageChannelBinder extends mergedProperties.isEnableMsgTrace(), mergedProperties.getCustomizedTraceTopic()); producer.setVipChannelEnabled(false); - producer.setInstanceName(RocketMQUtil.getInstanceName(rpcHook, - destination.getName() + "|" + UtilAll.getPid())); + producer.setInstanceName(RocketMQUtil.getInstanceName(rpcHook, + destination.getName() + "|" + UtilAll.getPid())); } else { producer = new DefaultMQProducer(producerGroup); diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/actuator/RocketMQBinderHealthIndicator.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/actuator/RocketMQBinderHealthIndicator.java similarity index 87% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/actuator/RocketMQBinderHealthIndicator.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/actuator/RocketMQBinderHealthIndicator.java index b7e31036..c7539822 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/actuator/RocketMQBinderHealthIndicator.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/actuator/RocketMQBinderHealthIndicator.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.actuator; +package com.alibaba.cloud.stream.binder.rocketmq.actuator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; -import org.springframework.cloud.stream.binder.rocketmq.metrics.Instrumentation; -import org.springframework.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; + +import com.alibaba.cloud.stream.binder.rocketmq.metrics.Instrumentation; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; /** * @author Timur Valiev diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQBinderAutoConfiguration.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQBinderAutoConfiguration.java similarity index 83% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQBinderAutoConfiguration.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQBinderAutoConfiguration.java index 6dc28442..642eb731 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQBinderAutoConfiguration.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQBinderAutoConfiguration.java @@ -14,21 +14,22 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.config; +package com.alibaba.cloud.stream.binder.rocketmq.config; import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration; import org.apache.rocketmq.spring.autoconfigure.RocketMQProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.RocketMQMessageChannelBinder; -import org.springframework.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties; -import org.springframework.cloud.stream.binder.rocketmq.provisioning.RocketMQTopicProvisioner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import com.alibaba.cloud.stream.binder.rocketmq.RocketMQMessageChannelBinder; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties; +import com.alibaba.cloud.stream.binder.rocketmq.provisioning.RocketMQTopicProvisioner; + /** * @author Timur Valiev * @author Jim diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQBinderHealthIndicatorAutoConfiguration.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQBinderHealthIndicatorAutoConfiguration.java similarity index 88% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQBinderHealthIndicatorAutoConfiguration.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQBinderHealthIndicatorAutoConfiguration.java index bac4927e..cdc3537a 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQBinderHealthIndicatorAutoConfiguration.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQBinderHealthIndicatorAutoConfiguration.java @@ -14,14 +14,15 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.config; +package com.alibaba.cloud.stream.binder.rocketmq.config; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.stream.binder.rocketmq.actuator.RocketMQBinderHealthIndicator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import com.alibaba.cloud.stream.binder.rocketmq.actuator.RocketMQBinderHealthIndicator; + /** * @author Jim */ diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQComponent4BinderAutoConfiguration.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQComponent4BinderAutoConfiguration.java similarity index 96% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQComponent4BinderAutoConfiguration.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQComponent4BinderAutoConfiguration.java index 1accf35f..33186962 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/config/RocketMQComponent4BinderAutoConfiguration.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/config/RocketMQComponent4BinderAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.config; +package com.alibaba.cloud.stream.binder.rocketmq.config; import org.apache.rocketmq.acl.common.AclClientRPCHook; import org.apache.rocketmq.acl.common.SessionCredentials; @@ -27,12 +27,13 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.stream.binder.rocketmq.RocketMQBinderConstants; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; +import com.alibaba.cloud.stream.binder.rocketmq.RocketMQBinderConstants; + import com.fasterxml.jackson.databind.ObjectMapper; /** diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/consuming/RocketMQListenerBindingContainer.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/consuming/RocketMQListenerBindingContainer.java similarity index 97% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/consuming/RocketMQListenerBindingContainer.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/consuming/RocketMQListenerBindingContainer.java index de19d262..1a11324f 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/consuming/RocketMQListenerBindingContainer.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/consuming/RocketMQListenerBindingContainer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.consuming; +package com.alibaba.cloud.stream.binder.rocketmq.consuming; import java.util.List; import java.util.Objects; @@ -45,13 +45,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.cloud.stream.binder.ExtendedConsumerProperties; -import org.springframework.cloud.stream.binder.rocketmq.RocketMQMessageChannelBinder; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; import org.springframework.context.SmartLifecycle; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.alibaba.cloud.stream.binder.rocketmq.RocketMQMessageChannelBinder; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; + /** * @author Jim */ diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/consuming/RocketMQMessageQueueChooser.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/consuming/RocketMQMessageQueueChooser.java similarity index 95% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/consuming/RocketMQMessageQueueChooser.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/consuming/RocketMQMessageQueueChooser.java index 03eacbe5..62724827 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/consuming/RocketMQMessageQueueChooser.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/consuming/RocketMQMessageQueueChooser.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.consuming; +package com.alibaba.cloud.stream.binder.rocketmq.consuming; import java.util.ArrayList; import java.util.List; diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQInboundChannelAdapter.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQInboundChannelAdapter.java similarity index 92% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQInboundChannelAdapter.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQInboundChannelAdapter.java index 33b3fef1..eeb8d3ef 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQInboundChannelAdapter.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQInboundChannelAdapter.java @@ -14,16 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.integration; +package com.alibaba.cloud.stream.binder.rocketmq.integration; import org.apache.rocketmq.spring.core.RocketMQListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.stream.binder.ExtendedConsumerProperties; -import org.springframework.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer; -import org.springframework.cloud.stream.binder.rocketmq.metrics.Instrumentation; -import org.springframework.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; import org.springframework.integration.endpoint.MessageProducerSupport; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; @@ -35,6 +31,11 @@ import org.springframework.retry.RetryListener; import org.springframework.retry.support.RetryTemplate; import org.springframework.util.Assert; +import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.Instrumentation; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; + /** * @author Jim */ diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQMessageHandler.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQMessageHandler.java similarity index 95% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQMessageHandler.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQMessageHandler.java index 65dbb9e5..6aa0e0fe 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQMessageHandler.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQMessageHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.integration; +package com.alibaba.cloud.stream.binder.rocketmq.integration; import java.util.Optional; @@ -27,9 +27,6 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.support.RocketMQHeaders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.cloud.stream.binder.rocketmq.RocketMQBinderConstants; -import org.springframework.cloud.stream.binder.rocketmq.metrics.Instrumentation; -import org.springframework.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; import org.springframework.context.Lifecycle; import org.springframework.integration.handler.AbstractMessageHandler; import org.springframework.integration.support.DefaultErrorMessageStrategy; @@ -41,6 +38,10 @@ import org.springframework.messaging.support.ErrorMessage; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.alibaba.cloud.stream.binder.rocketmq.RocketMQBinderConstants; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.Instrumentation; +import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager; + /** * @author Jim */ diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQMessageSource.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQMessageSource.java similarity index 96% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQMessageSource.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQMessageSource.java index 8647b548..2855bf9c 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/integration/RocketMQMessageSource.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/RocketMQMessageSource.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.integration; +package com.alibaba.cloud.stream.binder.rocketmq.integration; import java.util.List; import java.util.Set; @@ -33,9 +33,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.cloud.stream.binder.ExtendedConsumerProperties; -import org.springframework.cloud.stream.binder.rocketmq.consuming.RocketMQMessageQueueChooser; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; import org.springframework.context.Lifecycle; import org.springframework.integration.IntegrationMessageHeaderAccessor; import org.springframework.integration.endpoint.AbstractMessageSource; @@ -46,6 +43,10 @@ import org.springframework.messaging.Message; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQMessageQueueChooser; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; + /** * @author Jim */ diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/metrics/Instrumentation.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/metrics/Instrumentation.java similarity index 95% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/metrics/Instrumentation.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/metrics/Instrumentation.java index 885a183f..f62b018e 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/metrics/Instrumentation.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/metrics/Instrumentation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.metrics; +package com.alibaba.cloud.stream.binder.rocketmq.metrics; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/metrics/InstrumentationManager.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/metrics/InstrumentationManager.java similarity index 95% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/metrics/InstrumentationManager.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/metrics/InstrumentationManager.java index e07628bb..1152bf54 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/metrics/InstrumentationManager.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/metrics/InstrumentationManager.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.metrics; +package com.alibaba.cloud.stream.binder.rocketmq.metrics; import java.util.HashMap; import java.util.Map; diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQBinderConfigurationProperties.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQBinderConfigurationProperties.java similarity index 93% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQBinderConfigurationProperties.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQBinderConfigurationProperties.java index af292e74..4fda8c8f 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQBinderConfigurationProperties.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQBinderConfigurationProperties.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.properties; +package com.alibaba.cloud.stream.binder.rocketmq.properties; import org.apache.rocketmq.common.MixAll; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.RocketMQBinderConstants; + +import com.alibaba.cloud.stream.binder.rocketmq.RocketMQBinderConstants; /** * @author Timur Valiev diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQBindingProperties.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQBindingProperties.java similarity index 94% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQBindingProperties.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQBindingProperties.java index 094dafd1..f22d7b83 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQBindingProperties.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQBindingProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.properties; +package com.alibaba.cloud.stream.binder.rocketmq.properties; /** * @author Timur Valiev diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQConsumerProperties.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQConsumerProperties.java similarity index 98% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQConsumerProperties.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQConsumerProperties.java index b146c42e..e78345b6 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQConsumerProperties.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQConsumerProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.properties; +package com.alibaba.cloud.stream.binder.rocketmq.properties; import org.apache.rocketmq.client.consumer.MQPushConsumer; import org.apache.rocketmq.client.consumer.MessageSelector; diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQExtendedBindingProperties.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQExtendedBindingProperties.java similarity index 97% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQExtendedBindingProperties.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQExtendedBindingProperties.java index b016f693..16a3f76f 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQExtendedBindingProperties.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQExtendedBindingProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.properties; +package com.alibaba.cloud.stream.binder.rocketmq.properties; import java.util.HashMap; import java.util.Map; diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQProducerProperties.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQProducerProperties.java similarity index 98% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQProducerProperties.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQProducerProperties.java index a8d784e7..2d4d197e 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/properties/RocketMQProducerProperties.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/properties/RocketMQProducerProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.properties; +package com.alibaba.cloud.stream.binder.rocketmq.properties; import org.apache.rocketmq.client.producer.DefaultMQProducer; diff --git a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/provisioning/RocketMQTopicProvisioner.java b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/provisioning/RocketMQTopicProvisioner.java similarity index 91% rename from spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/provisioning/RocketMQTopicProvisioner.java rename to spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/provisioning/RocketMQTopicProvisioner.java index d8d08626..95f0b5fb 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/java/org/springframework/cloud/stream/binder/rocketmq/provisioning/RocketMQTopicProvisioner.java +++ b/spring-cloud-stream-binder-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/provisioning/RocketMQTopicProvisioner.java @@ -14,19 +14,20 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq.provisioning; +package com.alibaba.cloud.stream.binder.rocketmq.provisioning; import org.apache.rocketmq.client.Validators; import org.apache.rocketmq.client.exception.MQClientException; import org.springframework.cloud.stream.binder.ExtendedConsumerProperties; import org.springframework.cloud.stream.binder.ExtendedProducerProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties; import org.springframework.cloud.stream.provisioning.ConsumerDestination; import org.springframework.cloud.stream.provisioning.ProducerDestination; import org.springframework.cloud.stream.provisioning.ProvisioningException; import org.springframework.cloud.stream.provisioning.ProvisioningProvider; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties; + /** * @author Timur Valiev * @author Jim diff --git a/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.binders b/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.binders index 78d86cf9..2e5b9953 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.binders +++ b/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.binders @@ -1 +1 @@ -rocketmq:org.springframework.cloud.stream.binder.rocketmq.config.RocketMQBinderAutoConfiguration \ No newline at end of file +rocketmq:com.alibaba.cloud.stream.binder.rocketmq.config.RocketMQBinderAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.factories b/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.factories index 46f79a88..82d344e0 100644 --- a/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-stream-binder-rocketmq/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.stream.binder.rocketmq.config.RocketMQComponent4BinderAutoConfiguration +com.alibaba.cloud.stream.binder.rocketmq.config.RocketMQComponent4BinderAutoConfiguration diff --git a/spring-cloud-stream-binder-rocketmq/src/test/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQAutoConfigurationTests.java b/spring-cloud-stream-binder-rocketmq/src/test/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQAutoConfigurationTests.java similarity index 88% rename from spring-cloud-stream-binder-rocketmq/src/test/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQAutoConfigurationTests.java rename to spring-cloud-stream-binder-rocketmq/src/test/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQAutoConfigurationTests.java index 4a787e65..842c630c 100644 --- a/spring-cloud-stream-binder-rocketmq/src/test/java/org/springframework/cloud/stream/binder/rocketmq/RocketMQAutoConfigurationTests.java +++ b/spring-cloud-stream-binder-rocketmq/src/test/java/com/alibaba/cloud/stream/binder/rocketmq/RocketMQAutoConfigurationTests.java @@ -14,16 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.stream.binder.rocketmq; +package com.alibaba.cloud.stream.binder.rocketmq; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.cloud.stream.binder.rocketmq.config.RocketMQBinderAutoConfiguration; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; -import org.springframework.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties; + +import com.alibaba.cloud.stream.binder.rocketmq.config.RocketMQBinderAutoConfiguration; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties; +import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties; /** * @author Jim