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: 王聪洋 <56506697+wcy666...@users.noreply.github.com>
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 <songxiaosh...@apache.org>
---
 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";
+}

Reply via email to