From 4a759d7f7f912d2f9105936e4f503ccbabcdf198 Mon Sep 17 00:00:00 2001 From: "william.liangf" Date: Tue, 22 May 2012 08:21:38 +0000 Subject: [PATCH] =?UTF-8?q?DUBBO-384=20=E4=BF=AE=E6=94=B9Validation?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@1837 1a56cb94-b969-4eaa-88fa-be21384802f2 --- .../validation/ValidationConsumer.java | 4 +- .../validation/api/ValidationParameter.java | 2 +- .../validation/api/ValidationService.java | 7 +- .../impl/ValidationServiceImpl.java | 2 +- .../examples/validation/ValidationTest.java | 137 ++++++++++++++++++ 5 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 dubbo-demo/dubbo-demo-examples/src/test/java/com/alibaba/dubbo/examples/validation/ValidationTest.java diff --git a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/ValidationConsumer.java b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/ValidationConsumer.java index ed10c4be992..6333638ecf9 100644 --- a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/ValidationConsumer.java +++ b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/ValidationConsumer.java @@ -63,12 +63,12 @@ public static void main(String[] args) throws Exception { } // Delete OK - validationService.delete(2); + validationService.delete(2, "abc"); System.out.println("Validation Delete OK"); // Delete Error try { - validationService.delete(0); + validationService.delete(0, "abc"); System.err.println("Validation Delete ERROR"); } catch (RpcException e) { ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); diff --git a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationParameter.java b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationParameter.java index 5f8a5ab0dbf..fea9dc6c210 100644 --- a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationParameter.java +++ b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationParameter.java @@ -36,7 +36,7 @@ public class ValidationParameter implements Serializable { private static final long serialVersionUID = 7158911668568000392L; @NotNull // 不允许为空 - @Size(min = 1, max = 20) // 长度或大小范围 + @Size(min = 2, max = 20) // 长度或大小范围 private String name; @NotNull(groups = ValidationService.Save.class) // 保存时不允许为空,更新时允许为空 ,表示不更新该字段 diff --git a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationService.java b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationService.java index a9c88299ac5..73e24fd97f4 100644 --- a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationService.java +++ b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/api/ValidationService.java @@ -16,6 +16,9 @@ package com.alibaba.dubbo.examples.validation.api; import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; /** @@ -30,7 +33,7 @@ public interface ValidationService { // 缺省可按服务接口区分验证场 @interface Update{} // 与方法同名接口,首字母大写,用于区分验证场景,如:@NotNull(groups = ValidationService.Update.class),可选 void update(ValidationParameter parameter); - - void delete(@Min(1) long id); + + void delete(@Min(1) long id, @NotNull @Size(min = 2, max = 16) @Pattern(regexp = "^[a-zA-Z]+$") String operator); } diff --git a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/impl/ValidationServiceImpl.java b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/impl/ValidationServiceImpl.java index ca0f856a07f..f420aafa121 100644 --- a/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/impl/ValidationServiceImpl.java +++ b/dubbo-demo/dubbo-demo-examples/src/main/java/com/alibaba/dubbo/examples/validation/impl/ValidationServiceImpl.java @@ -31,7 +31,7 @@ public void save(ValidationParameter parameter) { public void update(ValidationParameter parameter) { } - public void delete(long id) { + public void delete(long id, String operator) { } } diff --git a/dubbo-demo/dubbo-demo-examples/src/test/java/com/alibaba/dubbo/examples/validation/ValidationTest.java b/dubbo-demo/dubbo-demo-examples/src/test/java/com/alibaba/dubbo/examples/validation/ValidationTest.java new file mode 100644 index 00000000000..6038ba588db --- /dev/null +++ b/dubbo-demo/dubbo-demo-examples/src/test/java/com/alibaba/dubbo/examples/validation/ValidationTest.java @@ -0,0 +1,137 @@ +/* + * Copyright 1999-2012 Alibaba Group. + * + * 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.dubbo.examples.validation; + +import java.util.Date; +import java.util.Set; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; + +import junit.framework.Assert; + +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.alibaba.dubbo.examples.validation.api.ValidationParameter; +import com.alibaba.dubbo.examples.validation.api.ValidationService; +import com.alibaba.dubbo.rpc.RpcException; + +/** + * ValidationTest + * + * @author william.liangf + */ +public class ValidationTest { + + @Test + public void testAnnotation() { + ClassPathXmlApplicationContext providerContext = new ClassPathXmlApplicationContext(ValidationTest.class.getPackage().getName().replace('.', '/') + "/validation-provider.xml"); + providerContext.start(); + try { + ClassPathXmlApplicationContext consumerContext = new ClassPathXmlApplicationContext(ValidationTest.class.getPackage().getName().replace('.', '/') + "/validation-consumer.xml"); + consumerContext.start(); + try { + ValidationService validationService = (ValidationService) consumerContext.getBean("validationService"); + + // Save OK + ValidationParameter parameter = new ValidationParameter(); + parameter.setName("liangfei"); + parameter.setEmail("liangfei@liang.fei"); + parameter.setAge(50); + parameter.setLoginDate(new Date(System.currentTimeMillis() - 1000000)); + parameter.setExpiryDate(new Date(System.currentTimeMillis() + 1000000)); + validationService.save(parameter); + + try { + parameter = new ValidationParameter(); + parameter.setName("l"); + parameter.setEmail("liangfei@liang.fei"); + parameter.setAge(50); + parameter.setLoginDate(new Date(System.currentTimeMillis() - 1000000)); + parameter.setExpiryDate(new Date(System.currentTimeMillis() + 1000000)); + validationService.save(parameter); + Assert.fail(); + } catch (RpcException e) { + ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); + Set> violations = ve.getConstraintViolations(); + Assert.assertNotNull(violations); + } + + // Save Error + try { + parameter = new ValidationParameter(); + validationService.save(parameter); + Assert.fail(); + } catch (RpcException e) { + ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); + Set> violations = ve.getConstraintViolations(); + Assert.assertNotNull(violations); + } + + // Delete OK + validationService.delete(2, "abc"); + + // Delete Error + try { + validationService.delete(2, "a"); + Assert.fail(); + } catch (RpcException e) { + ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); + Set> violations = ve.getConstraintViolations(); + Assert.assertNotNull(violations); + Assert.assertEquals(1, violations.size()); + } + + // Delete Error + try { + validationService.delete(0, "abc"); + Assert.fail(); + } catch (RpcException e) { + ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); + Set> violations = ve.getConstraintViolations(); + Assert.assertNotNull(violations); + Assert.assertEquals(1, violations.size()); + } + try { + validationService.delete(2, null); + Assert.fail(); + } catch (RpcException e) { + ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); + Set> violations = ve.getConstraintViolations(); + Assert.assertNotNull(violations); + Assert.assertEquals(1, violations.size()); + } + try { + validationService.delete(0, null); + Assert.fail(); + } catch (RpcException e) { + ConstraintViolationException ve = (ConstraintViolationException)e.getCause(); + Set> violations = ve.getConstraintViolations(); + Assert.assertNotNull(violations); + Assert.assertEquals(2, violations.size()); + } + } finally { + consumerContext.stop(); + consumerContext.close(); + } + } finally { + providerContext.stop(); + providerContext.close(); + } + } + +}