From 8ef4ca9f4af6742d5fb39376b40b4e4d30c1d7e1 Mon Sep 17 00:00:00 2001 From: heyile <2513931335@qq.com> Date: Sun, 5 May 2019 17:44:39 +0800 Subject: [PATCH] [SCB-1277]make sure demo and samples are normal --- demo/demo-local/pom.xml | 50 ------------------ .../servicecomb/demo/local/DemoLocal.java | 31 ----------- .../org/apache/servicecomb/demo/TestMgr.java | 12 +++++ .../demo/pojo/client/PojoClientTest.java | 15 +++++- .../resources/microservices/pojo/server.yaml | 2 +- demo/pom.xml | 1 - gpg-sec.tar.enc | Bin 10256 -> 0 bytes .../samples/apollo}/MainServer.java | 1 + 8 files changed, 27 insertions(+), 85 deletions(-) delete mode 100644 demo/demo-local/pom.xml delete mode 100644 demo/demo-local/src/main/java/org/apache/servicecomb/demo/local/DemoLocal.java delete mode 100644 gpg-sec.tar.enc rename samples/config-apollo-sample/src/main/java/{ => org/apache/servicecomb/samples/apollo}/MainServer.java (96%) diff --git a/demo/demo-local/pom.xml b/demo/demo-local/pom.xml deleted file mode 100644 index 146b3f14c69..00000000000 --- a/demo/demo-local/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - 4.0.0 - - org.apache.servicecomb.demo - demo-parent - 1.3.0-SNAPSHOT - - demo-local - Java Chassis::Demo::Local - - - org.apache.servicecomb.demo - pojo-server - - - org.apache.servicecomb.demo - pojo-client - - - - - org.apache.servicecomb.demo.local.DemoLocal - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - - diff --git a/demo/demo-local/src/main/java/org/apache/servicecomb/demo/local/DemoLocal.java b/demo/demo-local/src/main/java/org/apache/servicecomb/demo/local/DemoLocal.java deleted file mode 100644 index 05f5c82f9d1..00000000000 --- a/demo/demo-local/src/main/java/org/apache/servicecomb/demo/local/DemoLocal.java +++ /dev/null @@ -1,31 +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.apache.servicecomb.demo.local; - -import org.apache.servicecomb.foundation.common.utils.BeanUtils; -import org.apache.servicecomb.foundation.common.utils.Log4jUtils; - -public class DemoLocal { - public static void main(String[] args) throws Exception { - Log4jUtils.init(); - BeanUtils.init(); - - // TODO:当前未实现本地调用 - // DemoClient.runTest(); - } -} diff --git a/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/TestMgr.java b/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/TestMgr.java index e9444722faf..2fecac63806 100644 --- a/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/TestMgr.java +++ b/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/TestMgr.java @@ -47,6 +47,18 @@ public static void check(Object expect, Object real) { } } + public static void checkException(Throwable exception, String msg) { + String message = exception.getMessage(); + if (!exception.getMessage().contains(msg)) { + errorList.add(new Error( + message + " | Expect " + message + " contains " + msg + " , but not")); + } + } + + public static void fail(String msg) { + errorList.add(new Error(msg)); + } + public static void summary() { if (errorList.isEmpty()) { LOGGER.info("............. test finished ............"); diff --git a/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClientTest.java b/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClientTest.java index fdc7e388063..4aaa5903a04 100644 --- a/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClientTest.java +++ b/demo/demo-spring-boot-transport/demo-spring-boot-pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/PojoClientTest.java @@ -110,8 +110,19 @@ private static void testEmpty(Test test) { } private static void testNull(Test test) { - TestMgr.check("code is 'null'", test.getTestString(null)); - TestMgr.check(null, test.wrapParam(null)); + try { + test.getTestString(null); + TestMgr.fail("Should throw exception"); + } catch (Throwable e) { + TestMgr.checkException(e, "Parameter is not valid for operation"); + } + + try { + test.wrapParam(null); + TestMgr.fail("Should throw exception"); + } catch (Throwable e) { + TestMgr.checkException(e, "Parameter is not valid for operation"); + } } private static void testChinese(Test test) { diff --git a/demo/demo-spring-boot-transport/demo-spring-boot-pojo-server/src/main/resources/microservices/pojo/server.yaml b/demo/demo-spring-boot-transport/demo-spring-boot-pojo-server/src/main/resources/microservices/pojo/server.yaml index 3fa0fdab021..876bb19f3a3 100644 --- a/demo/demo-spring-boot-transport/demo-spring-boot-pojo-server/src/main/resources/microservices/pojo/server.yaml +++ b/demo/demo-spring-boot-transport/demo-spring-boot-pojo-server/src/main/resources/microservices/pojo/server.yaml @@ -167,7 +167,7 @@ paths: definitions: Error: type: object - x-java-class: org.apache.servicecomb.core.exception.CommonExceptionData + x-java-class: org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData properties: message: type: string diff --git a/demo/pom.xml b/demo/pom.xml index 32d17915355..a4da936e8e5 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -33,7 +33,6 @@ docker-build-config docker-run-config - demo-local demo-server-servlet demo-pojo demo-jaxrs diff --git a/gpg-sec.tar.enc b/gpg-sec.tar.enc deleted file mode 100644 index 2d4f786fbda1628f5e904249c3b5094a3dfe4dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10256 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 WUy!a^UQkhP0o