This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new 31f4b3dca3 Restore accidentally deleted test cases (#14170)
31f4b3dca3 is described below
commit 31f4b3dca3c92ccbaecdd84cd7b5fd10f0d869a1
Author: 王聪洋 <[email protected]>
AuthorDate: Tue May 14 11:57:58 2024 +0800
Restore accidentally deleted test cases (#14170)
* recover test unit
* replace rest to tri
---------
Co-authored-by: xiaosheng <[email protected]>
---
dubbo-config/dubbo-config-api/pom.xml | 16 +++++
.../bootstrap/DubboServiceConsumerBootstrap.java | 53 ++++++++++++++
.../bootstrap/DubboServiceProviderBootstrap.java | 82 ++++++++++++++++++++++
.../DubboServiceProviderMinimumBootstrap.java | 41 +++++++++++
.../NacosDubboServiceConsumerBootstrap.java | 58 +++++++++++++++
.../NacosDubboServiceProviderBootstrap.java | 57 +++++++++++++++
.../ZookeeperDubboServiceConsumerBootstrap.java | 59 ++++++++++++++++
.../ZookeeperDubboServiceProviderBootstrap.java | 48 +++++++++++++
.../DubboInterfaceConsumerBootstrap.java | 57 +++++++++++++++
.../apache/dubbo/config/bootstrap/rest/User.java | 72 +++++++++++++++++++
.../dubbo/config/bootstrap/rest/UserService.java | 42 +++++++++++
.../config/bootstrap/rest/UserServiceImpl.java | 29 ++++++++
.../config/bootstrap/rest/support/ContentType.java | 27 +++++++
13 files changed, 641 insertions(+)
diff --git a/dubbo-config/dubbo-config-api/pom.xml
b/dubbo-config/dubbo-config-api/pom.xml
index bd7b28ed35..d6610da8b6 100644
--- a/dubbo-config/dubbo-config-api/pom.xml
+++ b/dubbo-config/dubbo-config-api/pom.xml
@@ -107,6 +107,22 @@
<version>${project.parent.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-annotations</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>jsr311-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxrs</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java
new file mode 100644
index 0000000000..5759a2c9db
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceConsumerBootstrap.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.MetadataReportConfig;
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import
org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
+/**
+ * Dubbo Provider Bootstrap
+ *
+ * @since 2.7.5
+ */
+public class DubboServiceConsumerBootstrap {
+
+ public static void main(String[] args) throws Exception {
+
+ DubboBootstrap bootstrap = DubboBootstrap.getInstance()
+ .application("dubbo-consumer-demo")
+ .protocol(builder -> builder.port(20887).name("dubbo"))
+ .registry(
+ "zookeeper",
+ builder ->
builder.address(ZookeeperRegistryCenterConfig.getConnectionAddress()
+ +
"?registry-type=service&subscribed-services=dubbo-provider-demo"))
+ .metadataReport(new
MetadataReportConfig(ZookeeperRegistryCenterConfig.getConnectionAddress()))
+ .reference("echo", builder ->
builder.interfaceClass(EchoService.class)
+ .protocol("dubbo"))
+ .reference("user", builder ->
builder.interfaceClass(UserService.class)
+ .protocol("tri"))
+ .start();
+
+ EchoService echoService = bootstrap.getCache().get(EchoService.class);
+
+ for (int i = 0; i < 500; i++) {
+ Thread.sleep(2000L);
+ System.out.println(echoService.echo("Hello,World"));
+ }
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.java
new file mode 100644
index 0000000000..49d608e8a2
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderBootstrap.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 org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.MetadataReportConfig;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.ServiceConfig;
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import org.apache.dubbo.config.bootstrap.rest.UserServiceImpl;
+import
org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
+import java.util.Arrays;
+
+/**
+ * Dubbo Provider Bootstrap
+ *
+ * @since 2.7.5
+ */
+public class DubboServiceProviderBootstrap {
+
+ public static void main(String[] args) {
+ multipleRegistries();
+ }
+
+ private static void multipleRegistries() {
+ ProtocolConfig triProtocol = new ProtocolConfig();
+ triProtocol.setName("tri");
+ triProtocol.setId("tri");
+ triProtocol.setPort(-1);
+
+ RegistryConfig interfaceRegistry = new RegistryConfig();
+ interfaceRegistry.setId("interfaceRegistry");
+
interfaceRegistry.setAddress(ZookeeperRegistryCenterConfig.getConnectionAddress());
+
+ RegistryConfig serviceRegistry = new RegistryConfig();
+ serviceRegistry.setId("serviceRegistry");
+
serviceRegistry.setAddress(ZookeeperRegistryCenterConfig.getConnectionAddress()
+ "?registry-type=service");
+
+ ServiceConfig<EchoService> echoService = new ServiceConfig<>();
+ echoService.setInterface(EchoService.class.getName());
+ echoService.setRef(new EchoServiceImpl());
+
+ ServiceConfig<UserService> userService = new ServiceConfig<>();
+ userService.setInterface(UserService.class.getName());
+ userService.setRef(new UserServiceImpl());
+ userService.setProtocol(triProtocol);
+
+ ApplicationConfig applicationConfig = new
ApplicationConfig("dubbo-provider-demo");
+ applicationConfig.setMetadataType("remote");
+ DubboBootstrap.getInstance()
+ .application(applicationConfig)
+ .registries(Arrays.asList(interfaceRegistry, serviceRegistry))
+ .protocol(builder -> builder.port(-1).name("dubbo"))
+ .metadataReport(new
MetadataReportConfig(ZookeeperRegistryCenterConfig.getConnectionAddress()))
+ .service(echoService)
+ .service(userService)
+ .start()
+ .await();
+ }
+
+ private static void testSCCallDubbo() {}
+
+ private static void testDubboCallSC() {}
+
+ private static void testDubboTansormation() {}
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java
new file mode 100644
index 0000000000..f291f5a821
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboServiceProviderMinimumBootstrap.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import org.apache.dubbo.config.bootstrap.rest.UserServiceImpl;
+import
org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
+/**
+ * TODO
+ */
+public class DubboServiceProviderMinimumBootstrap {
+
+ public static void main(String[] args) {
+ DubboBootstrap.getInstance()
+ .application("dubbo-provider-demo")
+ .registry(builder -> builder.address(
+ ZookeeperRegistryCenterConfig.getConnectionAddress() +
"?registry-type=service"))
+ .protocol(builder -> builder.port(-1).name("dubbo"))
+ .service("echo", builder ->
builder.interfaceClass(EchoService.class)
+ .ref(new EchoServiceImpl()))
+ .service("user", builder ->
builder.interfaceClass(UserService.class)
+ .ref(new UserServiceImpl()))
+ .start()
+ .await();
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/NacosDubboServiceConsumerBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/NacosDubboServiceConsumerBootstrap.java
new file mode 100644
index 0000000000..83ed228e1d
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/NacosDubboServiceConsumerBootstrap.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+
+import static
org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
+
+/**
+ * Dubbo Provider Bootstrap
+ *
+ * @since 2.7.5
+ */
+public class NacosDubboServiceConsumerBootstrap {
+
+ public static void main(String[] args) throws Exception {
+
+ ApplicationConfig applicationConfig = new
ApplicationConfig("dubbo-nacos-consumer-demo");
+ applicationConfig.setMetadataType(REMOTE_METADATA_STORAGE_TYPE);
+ DubboBootstrap bootstrap = DubboBootstrap.getInstance()
+ .application(applicationConfig)
+ // Nacos in service registry type
+ .registry("nacos", builder ->
builder.address("nacos://127.0.0.1:8848?registry-type=service")
+ .useAsConfigCenter(true)
+ .useAsMetadataCenter(true))
+ // Nacos in traditional registry type
+ // .registry("nacos-traditional", builder ->
builder.address("nacos://127.0.0.1:8848"))
+ .reference("echo", builder ->
builder.interfaceClass(EchoService.class)
+ .protocol("dubbo"))
+ .reference("user", builder ->
builder.interfaceClass(UserService.class)
+ .protocol("tri"))
+ .start();
+
+ EchoService echoService = bootstrap.getCache().get(EchoService.class);
+ UserService userService = bootstrap.getCache().get(UserService.class);
+
+ for (int i = 0; i < 5; i++) {
+ Thread.sleep(2000L);
+ System.out.println(echoService.echo("Hello,World"));
+ System.out.println(userService.getUser(i * 1L));
+ }
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/NacosDubboServiceProviderBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/NacosDubboServiceProviderBootstrap.java
new file mode 100644
index 0000000000..56850af3eb
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/NacosDubboServiceProviderBootstrap.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 org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import org.apache.dubbo.config.bootstrap.rest.UserServiceImpl;
+
+import static
org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
+import static
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
+import static
org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_TYPE;
+
+/**
+ * Dubbo Provider Bootstrap
+ *
+ * @since 2.7.5
+ */
+public class NacosDubboServiceProviderBootstrap {
+
+ public static void main(String[] args) {
+ ApplicationConfig applicationConfig = new
ApplicationConfig("dubbo-nacos-provider-demo");
+ applicationConfig.setMetadataType(REMOTE_METADATA_STORAGE_TYPE);
+ DubboBootstrap.getInstance()
+ .application(applicationConfig)
+ // Nacos in service registry type
+ .registry("nacos", builder ->
builder.address("nacos://127.0.0.1:8848?username=nacos&password=nacos")
+ .parameter(REGISTRY_TYPE_KEY, SERVICE_REGISTRY_TYPE))
+ // Nacos in traditional registry type
+ // .registry("nacos-traditional", builder ->
builder.address("nacos://127.0.0.1:8848"))
+ .protocol("dubbo", builder ->
builder.port(20885).name("dubbo"))
+ .protocol("tri", builder -> builder.port(9090).name("tri"))
+ .service(builder -> builder.id("echo")
+ .interfaceClass(EchoService.class)
+ .ref(new EchoServiceImpl())
+ .protocolIds("dubbo"))
+ .service(builder -> builder.id("user")
+ .interfaceClass(UserService.class)
+ .ref(new UserServiceImpl())
+ .protocolIds("tri"))
+ .start()
+ .await();
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ZookeeperDubboServiceConsumerBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ZookeeperDubboServiceConsumerBootstrap.java
new file mode 100644
index 0000000000..25a12c8373
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ZookeeperDubboServiceConsumerBootstrap.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import
org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
+import static
org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
+import static
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
+import static
org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_TYPE;
+
+/**
+ * Dubbo Provider Bootstrap
+ *
+ * @since 2.7.5
+ */
+public class ZookeeperDubboServiceConsumerBootstrap {
+
+ public static void main(String[] args) throws Exception {
+
+ DubboBootstrap bootstrap = DubboBootstrap.getInstance()
+ .application("zookeeper-dubbo-consumer", app ->
app.metadata(COMPOSITE_METADATA_STORAGE_TYPE))
+ .registry("zookeeper", builder ->
builder.address(ZookeeperRegistryCenterConfig.getConnectionAddress())
+ .parameter(REGISTRY_TYPE_KEY, SERVICE_REGISTRY_TYPE)
+ .useAsConfigCenter(true)
+ .useAsMetadataCenter(true))
+ .reference("echo", builder ->
builder.interfaceClass(EchoService.class)
+ .protocol("dubbo")
+ .services("zookeeper-dubbo-provider"))
+ .reference("user", builder ->
builder.interfaceClass(UserService.class)
+ .protocol("tri"))
+ .start();
+
+ EchoService echoService = bootstrap.getCache().get(EchoService.class);
+ UserService userService = bootstrap.getCache().get(UserService.class);
+
+ for (int i = 0; i < 5; i++) {
+ Thread.sleep(2000L);
+ System.out.println(echoService.echo("Hello,World"));
+ System.out.println(userService.getUser(i * 1L));
+ }
+
+ bootstrap.stop();
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ZookeeperDubboServiceProviderBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ZookeeperDubboServiceProviderBootstrap.java
new file mode 100644
index 0000000000..56a2ae67e0
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/ZookeeperDubboServiceProviderBootstrap.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap;
+
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import org.apache.dubbo.config.bootstrap.rest.UserServiceImpl;
+
+import static
org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
+import static
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
+import static
org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_TYPE;
+
+/**
+ * TODO
+ */
+public class ZookeeperDubboServiceProviderBootstrap {
+
+ public static void main(String[] args) {
+ DubboBootstrap.getInstance()
+ .application("zookeeper-dubbo-provider", app ->
app.metadata(COMPOSITE_METADATA_STORAGE_TYPE))
+ .registry(builder -> builder.address("127.0.0.1:2181")
+ .protocol("zookeeper")
+ .parameter(REGISTRY_TYPE_KEY, SERVICE_REGISTRY_TYPE))
+ .protocol("dubbo", builder -> builder.port(-1).name("dubbo"))
+ .protocol("tri", builder -> builder.port(8081).name("tri"))
+ .service("echo", builder ->
builder.interfaceClass(EchoService.class)
+ .ref(new EchoServiceImpl())
+ .protocolIds("dubbo"))
+ .service("user", builder ->
builder.interfaceClass(UserService.class)
+ .ref(new UserServiceImpl())
+ .protocolIds("tri"))
+ .start()
+ .await();
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.java
new file mode 100644
index 0000000000..1a6c2c14c7
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/compatible/DubboInterfaceConsumerBootstrap.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 org.apache.dubbo.config.bootstrap.compatible;
+
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.bootstrap.EchoService;
+import org.apache.dubbo.config.bootstrap.rest.UserService;
+import
org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig;
+
+/**
+ * Dubbo Provider Bootstrap
+ *
+ * @since 2.7.5
+ */
+public class DubboInterfaceConsumerBootstrap {
+
+ public static void main(String[] args) throws Exception {
+ RegistryConfig interfaceRegistry = new RegistryConfig();
+ interfaceRegistry.setId("interfaceRegistry");
+
interfaceRegistry.setAddress(ZookeeperRegistryCenterConfig.getConnectionAddress());
+
+ DubboBootstrap bootstrap = DubboBootstrap.getInstance()
+ .application("dubbo-consumer-demo")
+ // Zookeeper
+ .registry(interfaceRegistry)
+ .reference("echo", builder ->
builder.interfaceClass(EchoService.class)
+ .protocol("dubbo"))
+ .reference("user", builder ->
builder.interfaceClass(UserService.class)
+ .protocol("tri"))
+ .start()
+ .await();
+
+ EchoService echoService = bootstrap.getCache().get(EchoService.class);
+ UserService userService = bootstrap.getCache().get(UserService.class);
+
+ for (int i = 0; i < 500; i++) {
+ Thread.sleep(2000L);
+ System.out.println(echoService.echo("Hello,World"));
+ System.out.println(userService.getUser(1L));
+ }
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/User.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/User.java
new file mode 100644
index 0000000000..a1586f9955
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/User.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 org.apache.dubbo.config.bootstrap.rest;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import java.io.Serializable;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class User implements Serializable {
+
+ @NotNull
+ @Min(1L)
+ private Long id;
+
+ @JsonProperty("username")
+ @XmlElement(name = "username")
+ @NotNull
+ @Size(min = 6, max = 50)
+ private String name;
+
+ public User() {}
+
+ public User(Long id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "User (" + "id=" + id + ", name='" + name + '\'' + ')';
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/UserService.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/UserService.java
new file mode 100644
index 0000000000..7e1affb53e
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/UserService.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap.rest;
+
+import org.apache.dubbo.config.bootstrap.rest.support.ContentType;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+@Path("users")
+@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
+@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
+@Api(value = "UserService")
+public interface UserService {
+
+ @GET
+ @Path("{id : \\d+}")
+ @ApiOperation(value = "getUser")
+ User getUser(@ApiParam(value = "id") @PathParam("id") Long id);
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/UserServiceImpl.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/UserServiceImpl.java
new file mode 100644
index 0000000000..6d24d6206d
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/UserServiceImpl.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap.rest;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class UserServiceImpl implements UserService {
+
+ private final AtomicLong idGen = new AtomicLong();
+
+ @Override
+ public User getUser(Long id) {
+ return new User(id, "username" + id);
+ }
+}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/support/ContentType.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/support/ContentType.java
new file mode 100644
index 0000000000..43795ebe0f
--- /dev/null
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/rest/support/ContentType.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.config.bootstrap.rest.support;
+
+import javax.ws.rs.core.MediaType;
+
+public class ContentType {
+
+ public static final String APPLICATION_JSON_UTF_8 =
+ MediaType.APPLICATION_JSON + "; " + MediaType.CHARSET_PARAMETER +
"=UTF-8";
+ public static final String TEXT_XML_UTF_8 = MediaType.TEXT_XML + "; " +
MediaType.CHARSET_PARAMETER + "=UTF-8";
+ public static final String TEXT_PLAIN_UTF_8 = MediaType.TEXT_PLAIN + "; "
+ MediaType.CHARSET_PARAMETER + "=UTF-8";
+}