diff --git a/examples/mini-service/pom.xml b/examples/mini-service/pom.xml index 65eb52c2..98ec3e1f 100644 --- a/examples/mini-service/pom.xml +++ b/examples/mini-service/pom.xml @@ -254,6 +254,7 @@ **/entity/**/*.class **/dto/**/*.class + **/response/**/*.class diff --git a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/AccountWebService.java b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/AccountWebService.java index 9a251200..ef1d8ac4 100644 --- a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/AccountWebService.java +++ b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/AccountWebService.java @@ -5,9 +5,9 @@ import javax.jws.WebService; import org.springside.examples.miniservice.webservice.WsConstants; import org.springside.examples.miniservice.webservice.dto.UserDTO; -import org.springside.examples.miniservice.webservice.ws.result.DepartmentResult; -import org.springside.examples.miniservice.webservice.ws.result.UserListResult; -import org.springside.examples.miniservice.webservice.ws.result.base.IdResult; +import org.springside.examples.miniservice.webservice.ws.response.DepartmentResponse; +import org.springside.examples.miniservice.webservice.ws.response.UserListResponse; +import org.springside.examples.miniservice.webservice.ws.response.base.IdResponse; /** * JAX-WS2.0的WebService接口定义类. @@ -23,16 +23,16 @@ public interface AccountWebService { /** * 获取部门的详细信息. */ - DepartmentResult getDepartmentDetail(@WebParam(name = "id") Long id); + DepartmentResponse getDepartmentDetail(@WebParam(name = "id") Long id); /** * 搜索用户信息. */ - UserListResult searchUser(@WebParam(name = "loginName") String loginName, @WebParam(name = "name") String name); + UserListResponse searchUser(@WebParam(name = "loginName") String loginName, @WebParam(name = "name") String name); /** * 新建用户. */ - IdResult createUser(@WebParam(name = "user") UserDTO user); + IdResponse createUser(@WebParam(name = "user") UserDTO user); } diff --git a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/impl/AccountWebServiceImpl.java b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/impl/AccountWebServiceImpl.java index 04c0ffab..d7411464 100644 --- a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/impl/AccountWebServiceImpl.java +++ b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/impl/AccountWebServiceImpl.java @@ -18,10 +18,10 @@ import org.springside.examples.miniservice.webservice.WsConstants; import org.springside.examples.miniservice.webservice.dto.DepartmentDTO; import org.springside.examples.miniservice.webservice.dto.UserDTO; import org.springside.examples.miniservice.webservice.ws.AccountWebService; -import org.springside.examples.miniservice.webservice.ws.result.DepartmentResult; -import org.springside.examples.miniservice.webservice.ws.result.UserListResult; -import org.springside.examples.miniservice.webservice.ws.result.base.IdResult; -import org.springside.examples.miniservice.webservice.ws.result.base.WSResult; +import org.springside.examples.miniservice.webservice.ws.response.DepartmentResponse; +import org.springside.examples.miniservice.webservice.ws.response.UserListResponse; +import org.springside.examples.miniservice.webservice.ws.response.base.IdResponse; +import org.springside.examples.miniservice.webservice.ws.response.base.WSResponse; import org.springside.modules.beanvalidator.BeanValidators; import org.springside.modules.mapper.BeanMapper; @@ -44,7 +44,7 @@ public class AccountWebServiceImpl implements AccountWebService { * @see AccountWebService#getDepartmentDetail() */ @Override - public DepartmentResult getDepartmentDetail(Long id) { + public DepartmentResponse getDepartmentDetail(Long id) { try { Department entity = accountManager.getDepartmentDetail(id); @@ -52,13 +52,13 @@ public class AccountWebServiceImpl implements AccountWebService { DepartmentDTO dto = BeanMapper.map(entity, DepartmentDTO.class); - return new DepartmentResult(dto); + return new DepartmentResponse(dto); } catch (IllegalArgumentException e) { logger.error(e.getMessage()); - return new DepartmentResult().setError(WSResult.PARAMETER_ERROR, e.getMessage()); + return new DepartmentResponse().setError(WSResponse.PARAMETER_ERROR, e.getMessage()); } catch (RuntimeException e) { logger.error(e.getMessage(), e); - return new DepartmentResult().setDefaultError(); + return new DepartmentResponse().setDefaultError(); } } @@ -66,16 +66,16 @@ public class AccountWebServiceImpl implements AccountWebService { * @see AccountWebService#searchUser() */ @Override - public UserListResult searchUser(String loginName, String name) { + public UserListResponse searchUser(String loginName, String name) { try { List entityList = accountManager.searchUser(loginName, name); List dtoList = BeanMapper.mapList(entityList, UserDTO.class); - return new UserListResult(dtoList); + return new UserListResponse(dtoList); } catch (RuntimeException e) { logger.error(e.getMessage(), e); - return new UserListResult().setDefaultError(); + return new UserListResponse().setDefaultError(); } } @@ -83,23 +83,23 @@ public class AccountWebServiceImpl implements AccountWebService { * @see AccountWebService#createUser() */ @Override - public IdResult createUser(UserDTO user) { + public IdResponse createUser(UserDTO user) { try { User userEntity = BeanMapper.map(user, User.class); Long userId = accountManager.saveUser(userEntity); - return new IdResult(userId); + return new IdResponse(userId); } catch (ConstraintViolationException e) { String message = StringUtils.join(BeanValidators.extractPropertyAndMessage(e), "\n"); - return new IdResult().setError(WSResult.PARAMETER_ERROR, message); + return new IdResponse().setError(WSResponse.PARAMETER_ERROR, message); } catch (DataIntegrityViolationException e) { String message = "新建用户参数存在唯一性冲突(用户:" + user + ")"; logger.error(message, e); - return new IdResult().setError(WSResult.PARAMETER_ERROR, message); + return new IdResponse().setError(WSResponse.PARAMETER_ERROR, message); } catch (RuntimeException e) { logger.error(e.getMessage(), e); - return new IdResult().setDefaultError(); + return new IdResponse().setDefaultError(); } } diff --git a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/DepartmentResult.java b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/DepartmentResponse.java similarity index 54% rename from examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/DepartmentResult.java rename to examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/DepartmentResponse.java index 525a17ee..04de4b7d 100644 --- a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/DepartmentResult.java +++ b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/DepartmentResponse.java @@ -1,26 +1,26 @@ -package org.springside.examples.miniservice.webservice.ws.result; +package org.springside.examples.miniservice.webservice.ws.response; import javax.xml.bind.annotation.XmlType; import org.springside.examples.miniservice.webservice.WsConstants; import org.springside.examples.miniservice.webservice.dto.DepartmentDTO; -import org.springside.examples.miniservice.webservice.ws.result.base.WSResult; +import org.springside.examples.miniservice.webservice.ws.response.base.WSResponse; /** - * GetDepartment方法的返回结果. + * 包含Department的返回结果. * * @author calvin * @author badqiu */ -@XmlType(name = "DepartmentResult", namespace = WsConstants.NS) -public class DepartmentResult extends WSResult { +@XmlType(name = "DepartmentResponse", namespace = WsConstants.NS) +public class DepartmentResponse extends WSResponse { private DepartmentDTO department; - public DepartmentResult() { + public DepartmentResponse() { } - public DepartmentResult(DepartmentDTO department) { + public DepartmentResponse(DepartmentDTO department) { this.department = department; } diff --git a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/UserListResult.java b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/UserListResponse.java similarity index 62% rename from examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/UserListResult.java rename to examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/UserListResponse.java index 0944625d..e93a144b 100644 --- a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/UserListResult.java +++ b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/UserListResponse.java @@ -1,4 +1,4 @@ -package org.springside.examples.miniservice.webservice.ws.result; +package org.springside.examples.miniservice.webservice.ws.response; import java.util.List; @@ -8,23 +8,23 @@ import javax.xml.bind.annotation.XmlType; import org.springside.examples.miniservice.webservice.WsConstants; import org.springside.examples.miniservice.webservice.dto.UserDTO; -import org.springside.examples.miniservice.webservice.ws.result.base.WSResult; +import org.springside.examples.miniservice.webservice.ws.response.base.WSResponse; /** - * 包含User + * 包含UserList的返回结果. * * @author calvin * @author badqiu */ -@XmlType(name = "UserPageResult", namespace = WsConstants.NS) -public class UserListResult extends WSResult { +@XmlType(name = "UserListResponse", namespace = WsConstants.NS) +public class UserListResponse extends WSResponse { private List userList; - public UserListResult() { + public UserListResponse() { } - public UserListResult(List userList) { + public UserListResponse(List userList) { this.userList = userList; } diff --git a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/base/IdResult.java b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/base/IdResponse.java similarity index 59% rename from examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/base/IdResult.java rename to examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/base/IdResponse.java index 1ebd4a3b..2cb01d66 100644 --- a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/base/IdResult.java +++ b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/base/IdResponse.java @@ -1,4 +1,4 @@ -package org.springside.examples.miniservice.webservice.ws.result.base; +package org.springside.examples.miniservice.webservice.ws.response.base; import javax.xml.bind.annotation.XmlType; @@ -10,14 +10,14 @@ import org.springside.examples.miniservice.webservice.WsConstants; * @author badqiu * */ -@XmlType(name = "IdResult", namespace = WsConstants.NS) -public class IdResult extends WSResult { +@XmlType(name = "IdResponse", namespace = WsConstants.NS) +public class IdResponse extends WSResponse { private Long id; - public IdResult() { + public IdResponse() { } - public IdResult(Long id) { + public IdResponse(Long id) { super(); this.id = id; } diff --git a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/base/WSResult.java b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/base/WSResponse.java similarity index 78% rename from examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/base/WSResult.java rename to examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/base/WSResponse.java index f1159a5e..6018ae81 100644 --- a/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/result/base/WSResult.java +++ b/examples/mini-service/src/main/java/org/springside/examples/miniservice/webservice/ws/response/base/WSResponse.java @@ -1,4 +1,4 @@ -package org.springside.examples.miniservice.webservice.ws.result.base; +package org.springside.examples.miniservice.webservice.ws.response.base; import javax.xml.bind.annotation.XmlType; @@ -9,8 +9,8 @@ import org.springside.examples.miniservice.webservice.WsConstants; * * @author calvin */ -@XmlType(name = "WSResult", namespace = WsConstants.NS) -public class WSResult { +@XmlType(name = "WSResponse", namespace = WsConstants.NS) +public class WSResponse { //-- 返回代码定义 --// // 按项目的规则进行定义, 比如4xx代表客户端参数错误,5xx代表服务端业务错误等. @@ -27,7 +27,7 @@ public class WSResult { /** * 创建结果. */ - public T setError(String resultCode, String resultMessage) { + public T setError(String resultCode, String resultMessage) { code = resultCode; message = resultMessage; return (T) this; @@ -36,7 +36,7 @@ public class WSResult { /** * 创建默认异常结果. */ - public T setDefaultError() { + public T setDefaultError() { return (T) setError(SYSTEM_ERROR, SYSTEM_ERROR_MESSAGE); } diff --git a/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithDynamicCreateClientIT.java b/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithDynamicCreateClientIT.java index 176c4b91..9af3a8f5 100644 --- a/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithDynamicCreateClientIT.java +++ b/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithDynamicCreateClientIT.java @@ -13,7 +13,7 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.springside.examples.miniservice.functional.BaseFunctionalTestCase; import org.springside.examples.miniservice.webservice.ws.AccountWebService; -import org.springside.examples.miniservice.webservice.ws.result.UserListResult; +import org.springside.examples.miniservice.webservice.ws.response.UserListResponse; import org.springside.modules.test.category.Smoke; /** @@ -54,7 +54,7 @@ public class AccountWebServiceWithDynamicCreateClientIT extends BaseFunctionalTe public void searchUser() { AccountWebService accountWebService = creatClient(); - UserListResult result = accountWebService.searchUser(null, null); + UserListResponse result = accountWebService.searchUser(null, null); assertTrue(result.getUserList().size() >= 4); assertEquals("Jack", result.getUserList().get(0).getName()); diff --git a/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithPredefineClientIT.java b/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithPredefineClientIT.java index f253b0bf..edddbc36 100644 --- a/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithPredefineClientIT.java +++ b/examples/mini-service/src/test/functional/org/springside/examples/miniservice/functional/ws/AccountWebServiceWithPredefineClientIT.java @@ -15,8 +15,8 @@ import org.springside.examples.miniservice.entity.User; import org.springside.examples.miniservice.functional.BaseFunctionalTestCase; import org.springside.examples.miniservice.webservice.dto.UserDTO; import org.springside.examples.miniservice.webservice.ws.AccountWebService; -import org.springside.examples.miniservice.webservice.ws.result.base.IdResult; -import org.springside.examples.miniservice.webservice.ws.result.base.WSResult; +import org.springside.examples.miniservice.webservice.ws.response.base.IdResponse; +import org.springside.examples.miniservice.webservice.ws.response.base.WSResponse; /** * UserService Web服务的功能测试, 测试主要的接口调用. @@ -45,7 +45,7 @@ public class AccountWebServiceWithPredefineClientIT extends BaseFunctionalTestCa userDTO.setName(user.getName()); userDTO.setEmail(user.getEmail()); - IdResult result = accountWebServiceClient.createUser(userDTO); + IdResponse result = accountWebServiceClient.createUser(userDTO); assertNotNull(result.getId()); } @@ -59,12 +59,12 @@ public class AccountWebServiceWithPredefineClientIT extends BaseFunctionalTestCa //登录名为空 userDTO.setLoginName(null); - IdResult result = accountWebServiceClient.createUser(userDTO); - assertEquals(result.getCode(), WSResult.PARAMETER_ERROR); + IdResponse result = accountWebServiceClient.createUser(userDTO); + assertEquals(result.getCode(), WSResponse.PARAMETER_ERROR); //登录名重复 userDTO.setLoginName("user1"); result = accountWebServiceClient.createUser(userDTO); - assertEquals(result.getCode(), WSResult.PARAMETER_ERROR); + assertEquals(result.getCode(), WSResponse.PARAMETER_ERROR); } } diff --git a/examples/mini-service/src/test/java/org/springside/examples/miniservice/webservice/ws/AccountWebServiceTest.java b/examples/mini-service/src/test/java/org/springside/examples/miniservice/webservice/ws/AccountWebServiceTest.java index 13c44173..2a7f7582 100644 --- a/examples/mini-service/src/test/java/org/springside/examples/miniservice/webservice/ws/AccountWebServiceTest.java +++ b/examples/mini-service/src/test/java/org/springside/examples/miniservice/webservice/ws/AccountWebServiceTest.java @@ -12,8 +12,8 @@ import org.springside.examples.miniservice.entity.Department; import org.springside.examples.miniservice.service.AccountManager; import org.springside.examples.miniservice.webservice.dto.DepartmentDTO; import org.springside.examples.miniservice.webservice.ws.impl.AccountWebServiceImpl; -import org.springside.examples.miniservice.webservice.ws.result.DepartmentResult; -import org.springside.examples.miniservice.webservice.ws.result.base.WSResult; +import org.springside.examples.miniservice.webservice.ws.response.DepartmentResponse; +import org.springside.examples.miniservice.webservice.ws.response.base.WSResponse; /** * Account WebService的单元测试用例. @@ -45,9 +45,9 @@ public class AccountWebServiceTest { Department department = AccountData.getRandomDepartment(); Mockito.when(mockAccountManager.getDepartmentDetail(1L)).thenReturn(department); - DepartmentResult result = accountWebService.getDepartmentDetail(1L); + DepartmentResponse result = accountWebService.getDepartmentDetail(1L); - assertEquals(WSResult.SUCCESS, result.getCode()); + assertEquals(WSResponse.SUCCESS, result.getCode()); DepartmentDTO dto = result.getDepartment(); @@ -62,9 +62,9 @@ public class AccountWebServiceTest { public void handleException() { Mockito.when(mockAccountManager.getDepartmentDetail(1L)).thenThrow(new RuntimeException("Expected exception.")); - DepartmentResult result = accountWebService.getDepartmentDetail(1L); + DepartmentResponse result = accountWebService.getDepartmentDetail(1L); - assertEquals(WSResult.SYSTEM_ERROR, result.getCode()); - assertEquals(WSResult.SYSTEM_ERROR_MESSAGE, result.getMessage()); + assertEquals(WSResponse.SYSTEM_ERROR, result.getCode()); + assertEquals(WSResponse.SYSTEM_ERROR_MESSAGE, result.getMessage()); } } diff --git a/examples/mini-web/src/test/java/org/springside/examples/miniweb/service/account/AccountManagerTest.java b/examples/mini-web/src/test/java/org/springside/examples/miniweb/service/account/AccountManagerTest.java index 0d01071b..1c3850d9 100644 --- a/examples/mini-web/src/test/java/org/springside/examples/miniweb/service/account/AccountManagerTest.java +++ b/examples/mini-web/src/test/java/org/springside/examples/miniweb/service/account/AccountManagerTest.java @@ -9,7 +9,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springside.examples.miniweb.dao.account.UserDao; import org.springside.examples.miniweb.service.ServiceException; -import org.springside.modules.test.security.shiro.ShiroTestHelper; +import org.springside.modules.test.security.shiro.ShiroTestUtils; /** * SecurityEntityManager的测试用例, 测试Service层的业务逻辑. @@ -25,7 +25,7 @@ public class AccountManagerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - ShiroTestHelper.mockSubject("foo"); + ShiroTestUtils.mockSubject("foo"); accountManager = new AccountManager(); accountManager.setUserDao(mockUserDao); @@ -33,7 +33,7 @@ public class AccountManagerTest { @After public void tearDown() { - ShiroTestHelper.clearSubject(); + ShiroTestUtils.clearSubject(); } @Test diff --git a/examples/showcase/src/test/java/org/springside/examples/showcase/common/AccountManagerTest.java b/examples/showcase/src/test/java/org/springside/examples/showcase/common/AccountManagerTest.java index 5657dbc2..378c97b8 100644 --- a/examples/showcase/src/test/java/org/springside/examples/showcase/common/AccountManagerTest.java +++ b/examples/showcase/src/test/java/org/springside/examples/showcase/common/AccountManagerTest.java @@ -11,7 +11,7 @@ import org.springside.examples.showcase.common.dao.UserJpaDao; import org.springside.examples.showcase.common.entity.User; import org.springside.examples.showcase.common.service.AccountManager; import org.springside.examples.showcase.common.service.ServiceException; -import org.springside.modules.test.security.shiro.ShiroTestHelper; +import org.springside.modules.test.security.shiro.ShiroTestUtils; public class AccountManagerTest { @@ -22,7 +22,7 @@ public class AccountManagerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - ShiroTestHelper.mockSubject("foo"); + ShiroTestUtils.mockSubject("foo"); accountManager = new AccountManager(); accountManager.setUserJpaDao(mockUserDao); @@ -30,7 +30,7 @@ public class AccountManagerTest { @After public void tearDown() { - ShiroTestHelper.clearSubject(); + ShiroTestUtils.clearSubject(); } @Test diff --git a/modules/core/src/main/java/org/springside/modules/beanvalidator/BeanValidators.java b/modules/core/src/main/java/org/springside/modules/beanvalidator/BeanValidators.java index d6427dcc..0b8d4333 100644 --- a/modules/core/src/main/java/org/springside/modules/beanvalidator/BeanValidators.java +++ b/modules/core/src/main/java/org/springside/modules/beanvalidator/BeanValidators.java @@ -27,9 +27,6 @@ import com.google.common.collect.Lists; */ public class BeanValidators { - private BeanValidators() { - } - /** * 调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException. */ diff --git a/modules/core/src/main/java/org/springside/modules/mapper/BeanMapper.java b/modules/core/src/main/java/org/springside/modules/mapper/BeanMapper.java index df9e449c..b3bef235 100644 --- a/modules/core/src/main/java/org/springside/modules/mapper/BeanMapper.java +++ b/modules/core/src/main/java/org/springside/modules/mapper/BeanMapper.java @@ -16,7 +16,7 @@ import com.google.common.collect.Lists; * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.实现: * * 1. 持有Mapper的单例. - * 2. 泛型返回值转换. + * 2. 返回值类型转换. * 3. 批量转换Collection中的所有对象. * 4. 区分创建新的B对象与将对象A值复制到已存在的B对象两种函数. * @@ -29,9 +29,6 @@ public class BeanMapper { */ private static DozerBeanMapper dozer = new DozerBeanMapper(); - private BeanMapper() { - } - /** * 基于Dozer转换对象的类型. */ diff --git a/modules/core/src/main/java/org/springside/modules/orm/jpa/Jpas.java b/modules/core/src/main/java/org/springside/modules/orm/jpa/Jpas.java index 4460842a..bb5c681d 100644 --- a/modules/core/src/main/java/org/springside/modules/orm/jpa/Jpas.java +++ b/modules/core/src/main/java/org/springside/modules/orm/jpa/Jpas.java @@ -3,9 +3,6 @@ package org.springside.modules.orm.jpa; import org.hibernate.Hibernate; public class Jpas { - private Jpas() { - - } public static void initLazyProperty(Object proxyed) { Hibernate.initialize(proxyed); diff --git a/modules/core/src/main/java/org/springside/modules/rest/RsResponse.java b/modules/core/src/main/java/org/springside/modules/rest/RsResponse.java index 38a951b1..fb9e3de0 100644 --- a/modules/core/src/main/java/org/springside/modules/rest/RsResponse.java +++ b/modules/core/src/main/java/org/springside/modules/rest/RsResponse.java @@ -17,9 +17,6 @@ public class RsResponse { private static Logger logger = LoggerFactory.getLogger(RsResponse.class); - private RsResponse() { - } - /** * 创建WebApplicationException并记打印日志, 使用标准状态码与自定义信息并记录错误信息. */ diff --git a/modules/core/src/main/java/org/springside/modules/security/utils/Cryptos.java b/modules/core/src/main/java/org/springside/modules/security/utils/Cryptos.java index 111c4fdc..bcb06e7f 100644 --- a/modules/core/src/main/java/org/springside/modules/security/utils/Cryptos.java +++ b/modules/core/src/main/java/org/springside/modules/security/utils/Cryptos.java @@ -37,9 +37,6 @@ public class Cryptos { private static SecureRandom random = new SecureRandom(); - private Cryptos() { - } - //-- HMAC-SHA1 funciton --// /** * 使用HMAC-SHA1进行消息签名, 返回字节数组,长度为20字节. diff --git a/modules/core/src/main/java/org/springside/modules/security/utils/Digests.java b/modules/core/src/main/java/org/springside/modules/security/utils/Digests.java index 8da31ced..8adfd7f6 100644 --- a/modules/core/src/main/java/org/springside/modules/security/utils/Digests.java +++ b/modules/core/src/main/java/org/springside/modules/security/utils/Digests.java @@ -11,6 +11,7 @@ import java.security.GeneralSecurityException; import java.security.MessageDigest; import java.security.SecureRandom; +import org.apache.commons.lang.Validate; import org.springside.modules.utils.Exceptions; /** @@ -27,9 +28,6 @@ public class Digests { private static SecureRandom random = new SecureRandom(); - private Digests() { - } - /** * 对输入字符串进行sha1散列. */ @@ -74,9 +72,8 @@ public class Digests { * @param numBytes byte数组的大小 */ public static byte[] generateSalt(int numBytes) { - if (numBytes <= 0) { - throw new IllegalArgumentException("numBytes argument must be a positive integer (1 or larger)"); - } + Validate.isTrue(numBytes > 0, "numBytes argument must be a positive integer (1 or larger)", numBytes); + byte[] bytes = new byte[numBytes]; random.nextBytes(bytes); return bytes; diff --git a/modules/core/src/main/java/org/springside/modules/utils/Collections3.java b/modules/core/src/main/java/org/springside/modules/utils/Collections3.java index af668a39..737f4e1b 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Collections3.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Collections3.java @@ -22,9 +22,6 @@ import org.apache.commons.lang3.StringUtils; */ public class Collections3 { - private Collections3() { - } - /** * 返回a-b的集合. */ diff --git a/modules/core/src/main/java/org/springside/modules/utils/Encodes.java b/modules/core/src/main/java/org/springside/modules/utils/Encodes.java index 16e1e8c5..5b4ba397 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Encodes.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Encodes.java @@ -19,7 +19,7 @@ import org.apache.commons.lang3.StringEscapeUtils; * * 1.Commons-Codec的 hex/base64 编码 * 2.自制的base62 编码 - * 3.Commons-Lang的xml/html/csv escape + * 3.Commons-Lang的xml/html escape * 4.JDK提供的URLEncoder * * @author calvin @@ -29,9 +29,6 @@ public class Encodes { private static final String DEFAULT_URL_ENCODING = "UTF-8"; private static final char[] BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); - private Encodes() { - } - /** * Hex编码. */ @@ -46,7 +43,7 @@ public class Encodes { try { return Hex.decodeHex(input.toCharArray()); } catch (DecoderException e) { - throw new IllegalStateException("Hex Decoder exception", e); + throw Exceptions.unchecked(e); } } @@ -110,20 +107,6 @@ public class Encodes { return StringEscapeUtils.unescapeXml(xmlEscaped); } - /** - * Csv 转码. - */ - public static String escapeCsv(String csv) { - return StringEscapeUtils.escapeCsv(csv); - } - - /** - * Csv 解码. - */ - public static String unescapeCsv(String csvEscaped) { - return StringEscapeUtils.unescapeCsv(csvEscaped); - } - /** * URL 编码, Encode默认为UTF-8. */ diff --git a/modules/core/src/main/java/org/springside/modules/utils/Exceptions.java b/modules/core/src/main/java/org/springside/modules/utils/Exceptions.java index 2c7a0db6..8cfef88f 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Exceptions.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Exceptions.java @@ -15,9 +15,6 @@ import java.io.StringWriter; */ public class Exceptions { - private Exceptions() { - } - /** * 将CheckedException转换为UncheckedException. */ diff --git a/modules/core/src/main/java/org/springside/modules/utils/FreeMarkers.java b/modules/core/src/main/java/org/springside/modules/utils/FreeMarkers.java index 772c3814..4602d81d 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/FreeMarkers.java +++ b/modules/core/src/main/java/org/springside/modules/utils/FreeMarkers.java @@ -10,23 +10,17 @@ import org.springframework.core.io.Resource; import freemarker.template.Configuration; import freemarker.template.Template; -import freemarker.template.TemplateException; public class FreeMarkers { - private FreeMarkers() { - } - public static String rendereString(String templateString, Map model) { try { StringWriter result = new StringWriter(); Template t = new Template("name", new StringReader(templateString), new Configuration()); t.process(model, result); return result.toString(); - } catch (IOException e) { - throw new RuntimeException("Freemarker template error", e); - } catch (TemplateException e) { - throw new RuntimeException("Freemarker template error", e); + } catch (Exception e) { + throw Exceptions.unchecked(e); } } @@ -35,19 +29,15 @@ public class FreeMarkers { StringWriter result = new StringWriter(); template.process(model, result); return result.toString(); - } catch (IOException e) { - throw new RuntimeException("Freemarker template not exist", e); - } catch (TemplateException e) { - throw new RuntimeException("Freemarker template error", e); + } catch (Exception e) { + throw Exceptions.unchecked(e); } } public static Configuration buildConfiguration(String directory) throws IOException { - Configuration cfg = new Configuration(); Resource path = new DefaultResourceLoader().getResource(directory); cfg.setDirectoryForTemplateLoading(path.getFile()); return cfg; - } } diff --git a/modules/core/src/main/java/org/springside/modules/utils/Identities.java b/modules/core/src/main/java/org/springside/modules/utils/Identities.java index 69258f8d..f1a7a0de 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Identities.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Identities.java @@ -17,9 +17,6 @@ public class Identities { private static SecureRandom random = new SecureRandom(); - private Identities() { - } - /** * 封装JDK自带的UUID, 通过Random数字生成, 中间有-分割. */ diff --git a/modules/core/src/main/java/org/springside/modules/utils/PropertiesLoader.java b/modules/core/src/main/java/org/springside/modules/utils/PropertiesLoader.java index 34a1e05c..67551008 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/PropertiesLoader.java +++ b/modules/core/src/main/java/org/springside/modules/utils/PropertiesLoader.java @@ -63,14 +63,19 @@ public class PropertiesLoader { } /** - * 取出Property,但以System的Property优先. + * 取出Integer类型的Property,但以System的Property优先.如果都為Null則返回0. */ public Integer getInteger(String key) { - return Integer.valueOf(getProperty(key)); + String strResult = getProperty(key); + if (strResult != null) { + return Integer.valueOf(strResult); + } else { + return 0; + } } /** - * 取出Property,但以System的Property优先. + * 取出Integer类型的Property,但以System的Property优先.如果都為Null則返回Default值. */ public Integer getInteger(String key, Integer defaultValue) { String strResult = getProperty(key); @@ -82,14 +87,14 @@ public class PropertiesLoader { } /** - * 取出Property,但以System的Property优先. + * 取出Boolean类型的Property,但以System的Property优先.如果都為Null則返回false. */ public Boolean getBoolean(String key) { return Boolean.valueOf(getProperty(key)); } /** - * 取出Property,但以System的Property优先. + * 取出Boolean类型的Property,但以System的Property优先.如果都為Null則返回Default值. */ public Boolean getBoolean(String key, boolean defaultValue) { String strResult = getProperty(key); @@ -98,7 +103,6 @@ public class PropertiesLoader { } else { return defaultValue; } - } /** diff --git a/modules/core/src/main/java/org/springside/modules/utils/Reflections.java b/modules/core/src/main/java/org/springside/modules/utils/Reflections.java index 21050071..2237c6cf 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Reflections.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Reflections.java @@ -29,9 +29,6 @@ public class Reflections { private static Logger logger = LoggerFactory.getLogger(Reflections.class); - private Reflections() { - } - /** * 调用Getter方法. */ @@ -41,7 +38,9 @@ public class Reflections { } /** - * 调用Setter方法.使用value的Class来查找Setter方法. + * 调用Setter方法,如果屬性是原始類型,需要使用帶propertyType的版本. + * + * @see #invokeSetter(Object, String, Object, Class) */ public static void invokeSetter(Object obj, String propertyName, Object value) { invokeSetter(obj, propertyName, value, null); @@ -50,10 +49,11 @@ public class Reflections { /** * 调用Setter方法. * - * @param propertyType 用于查找Setter方法,为空时使用value的Class替代. + * @param propertyType 作为setter方法的输入参数类型查找Setter方法,为Null时使用value的Class替代. */ public static void invokeSetter(Object obj, String propertyName, Object value, Class propertyType) { Class type = propertyType != null ? propertyType : value.getClass(); + String setterMethodName = "set" + StringUtils.capitalize(propertyName); invokeMethod(obj, setterMethodName, new Class[] { type }, new Object[] { value }); } diff --git a/modules/core/src/main/java/org/springside/modules/utils/Threads.java b/modules/core/src/main/java/org/springside/modules/utils/Threads.java index 58204f71..3d8d07bc 100644 --- a/modules/core/src/main/java/org/springside/modules/utils/Threads.java +++ b/modules/core/src/main/java/org/springside/modules/utils/Threads.java @@ -15,9 +15,6 @@ import java.util.concurrent.TimeUnit; */ public class Threads { - private Threads() { - } - /** * sleep等待,单位为毫秒,忽略InterruptedException. */ diff --git a/modules/core/src/main/java/org/springside/modules/web/Servlets.java b/modules/core/src/main/java/org/springside/modules/web/Servlets.java index 8f641b95..db2997d4 100644 --- a/modules/core/src/main/java/org/springside/modules/web/Servlets.java +++ b/modules/core/src/main/java/org/springside/modules/web/Servlets.java @@ -39,9 +39,6 @@ public class Servlets { //-- 常用数值定义 --// public static final long ONE_YEAR_SECONDS = 60 * 60 * 24 * 365; - private Servlets() { - } - /** * 设置客户端缓存过期时间 的Header. */ diff --git a/modules/core/src/test/java/org/springside/modules/beanvalidator/BeanValidatorsTest.java b/modules/core/src/test/java/org/springside/modules/beanvalidator/BeanValidatorsTest.java index 1432b7bd..205a7e86 100644 --- a/modules/core/src/test/java/org/springside/modules/beanvalidator/BeanValidatorsTest.java +++ b/modules/core/src/test/java/org/springside/modules/beanvalidator/BeanValidatorsTest.java @@ -42,6 +42,10 @@ public class BeanValidatorsTest extends SpringContextTestCase { String result = StringUtils.join(BeanValidators.extractPropertyAndMessage(violations, " "), ","); assertTrue(StringUtils.contains(result, "email not a well-formed email address")); assertTrue(StringUtils.contains(result, "name may not be empty")); + + result = StringUtils.join(BeanValidators.extractMessage(violations), ","); + assertTrue(StringUtils.contains(result, "not a well-formed email address")); + assertTrue(StringUtils.contains(result, "may not be empty")); } @Test @@ -62,9 +66,9 @@ public class BeanValidatorsTest extends SpringContextTestCase { private static class Customer { - String name; + private String name; - String email; + private String email; @NotBlank public String getName() { diff --git a/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java b/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java index d38fa804..cabefa77 100644 --- a/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java +++ b/modules/core/src/test/java/org/springside/modules/utils/EncodesTest.java @@ -51,17 +51,4 @@ public class EncodesTest { assertEquals("1>2", result); assertEquals(input, Encodes.unescapeHtml(result)); } - - @Test - public void csv() { - String input = "haha,kaka"; - String result = Encodes.escapeCsv(input); - System.out.println(result); - assertEquals(input, Encodes.unescapeCsv(result)); - // - input = "\"ha\"ka"; - result = Encodes.escapeCsv(input); - System.out.println(result); - assertEquals(input, Encodes.unescapeCsv(result)); - } } diff --git a/modules/core/src/test/java/org/springside/modules/utils/ExceptionsTest.java b/modules/core/src/test/java/org/springside/modules/utils/ExceptionsTest.java new file mode 100644 index 00000000..772dafdb --- /dev/null +++ b/modules/core/src/test/java/org/springside/modules/utils/ExceptionsTest.java @@ -0,0 +1,5 @@ +package org.springside.modules.utils; + +public class ExceptionsTest { + +} diff --git a/modules/core/src/test/java/org/springside/modules/utils/PropertiesLoaderTest.java b/modules/core/src/test/java/org/springside/modules/utils/PropertiesLoaderTest.java index f7aaafe2..41396a07 100644 --- a/modules/core/src/test/java/org/springside/modules/utils/PropertiesLoaderTest.java +++ b/modules/core/src/test/java/org/springside/modules/utils/PropertiesLoaderTest.java @@ -24,6 +24,21 @@ public class PropertiesLoaderTest { public void notExistProperty() throws IOException { Properties p = new PropertiesLoader("classpath:/notexist.properties").getProperties(); assertNull(p.getProperty("notexist")); + + assertEquals("defaultValue", p.getProperty("notexist", "defaultValue")); + } + + @Test + public void integerAndBooleanProperty() { + PropertiesLoader p = new PropertiesLoader("classpath:/test1.properties", "classpath:/test2.properties"); + + assertEquals(new Integer(1), p.getInteger("p1")); + assertEquals(new Integer(0), p.getInteger("notExist")); + assertEquals(new Integer(100), p.getInteger("notExist", 100)); + + assertEquals(new Boolean(true), p.getBoolean("p4")); + assertEquals(new Boolean(false), p.getBoolean("notExist")); + assertEquals(new Boolean(true), p.getBoolean("notExist", true)); } @Test @@ -31,5 +46,6 @@ public class PropertiesLoaderTest { System.setProperty("p1", "sys"); PropertiesLoader pl = new PropertiesLoader("classpath:/test1.properties", "classpath:/test2.properties"); assertEquals("sys", pl.getProperty("p1")); + System.clearProperty("p1"); } } diff --git a/modules/core/src/test/java/org/springside/modules/utils/ReflectionsTest.java b/modules/core/src/test/java/org/springside/modules/utils/ReflectionsTest.java index 2d41e1bf..37b79892 100644 --- a/modules/core/src/test/java/org/springside/modules/utils/ReflectionsTest.java +++ b/modules/core/src/test/java/org/springside/modules/utils/ReflectionsTest.java @@ -34,6 +34,10 @@ public class ReflectionsTest { bean = new TestBean(); Reflections.invokeSetter(bean, "publicField", 10, int.class); assertEquals(10 + 1, bean.inspectPublicField()); + + //非原始類型,可省略類型參數 + Reflections.invokeSetter(bean, "name", "foo"); + assertEquals("foo", bean.name); } @Test @@ -88,14 +92,22 @@ public class ReflectionsTest { /** 有getter/setter的field */ private int publicField = 1; + private String name; + + //通過getter函數會比屬性值+1 public int getPublicField() { return publicField + 1; } + //通過setter函數會被比輸入值加1 public void setPublicField(int publicField) { this.publicField = publicField + 1; } + public void setName(String name) { + this.name = name; + } + public int inspectPrivateField() { return privateField; } diff --git a/modules/core/src/test/resources/test1.properties b/modules/core/src/test/resources/test1.properties index fa2ab8d1..6708caa2 100644 --- a/modules/core/src/test/resources/test1.properties +++ b/modules/core/src/test/resources/test1.properties @@ -1,2 +1,3 @@ p1=1 -p2=2 \ No newline at end of file +p2=2 +p4=true \ No newline at end of file diff --git a/modules/extension/src/main/java/org/springside/modules/cache/memcached/SpyMemcachedClient.java b/modules/extension/src/main/java/org/springside/modules/cache/memcached/SpyMemcachedClient.java index 0c06367b..ea15cbdb 100644 --- a/modules/extension/src/main/java/org/springside/modules/cache/memcached/SpyMemcachedClient.java +++ b/modules/extension/src/main/java/org/springside/modules/cache/memcached/SpyMemcachedClient.java @@ -66,9 +66,9 @@ public class SpyMemcachedClient implements DisposableBean { } /** - * 安全的Set方法,在updateTimeout秒内返回结果, 否则返回false并取消操作. + * 安全的Set方法, 保证在updateTimeout秒内返回执行结果, 否则返回false并取消操作. */ - public boolean safeSet(String key, Object value, int expiration) { + public boolean safeSet(String key, int expiration, Object value) { Future future = memcachedClient.set(key, expiration, value); try { return future.get(updateTimeout, TimeUnit.MILLISECONDS); @@ -86,7 +86,7 @@ public class SpyMemcachedClient implements DisposableBean { } /** - * 安全的Delete方法,在updateTimeout秒内返回结果, 否则返回false并取消操作. + * 安全的Delete方法, 保证在updateTimeout秒内返回执行结果, 否则返回false并取消操作. */ public boolean safeDelete(String key) { Future future = memcachedClient.delete(key); diff --git a/modules/extension/src/test/java/org/springside/modules/memcached/SpyMemcachedClientTest.java b/modules/extension/src/test/java/org/springside/modules/memcached/SpyMemcachedClientTest.java index 4669b056..4e05497d 100644 --- a/modules/extension/src/test/java/org/springside/modules/memcached/SpyMemcachedClientTest.java +++ b/modules/extension/src/test/java/org/springside/modules/memcached/SpyMemcachedClientTest.java @@ -2,6 +2,8 @@ package org.springside.modules.memcached; import static org.junit.Assert.*; +import java.util.Map; + import org.junit.Test; import org.junit.experimental.categories.Category; import org.springframework.beans.factory.annotation.Autowired; @@ -11,12 +13,14 @@ import org.springside.modules.test.category.UnStable; import org.springside.modules.test.spring.SpringContextTestCase; import org.springside.modules.utils.Threads; +import com.google.common.collect.Lists; + @Category(UnStable.class) @ContextConfiguration(locations = { "/applicationContext-memcached.xml" }) public class SpyMemcachedClientTest extends SpringContextTestCase { @Autowired - private SpyMemcachedClient spyMemcachedClient; + private SpyMemcachedClient client; @Test public void normal() { @@ -24,15 +28,49 @@ public class SpyMemcachedClientTest extends SpringContextTestCase { String key = "consumer:1"; String value = "admin"; - spyMemcachedClient.set(key, 60 * 60 * 1, value); + String key2 = "consumer:2"; + String value2 = "user"; + + //get/set + client.set(key, 60 * 60 * 1, value); Threads.sleep(1000); - String result = spyMemcachedClient.get(key); + String result = client.get(key); assertEquals(value, result); - spyMemcachedClient.delete(key); + //safeSet + client.safeSet(key2, 60 * 60 * 1, value2); + result = client.get(key2); + assertEquals(value2, result); + + //bulk + Map bulkResult = client.getBulk(Lists.newArrayList(key, key2)); + assertEquals(2, bulkResult.size()); + assertEquals(value, bulkResult.get(key)); + + //delete + client.delete(key); Threads.sleep(1000); - result = spyMemcachedClient.get(key); + result = client.get(key); + assertNull(result); + + client.safeDelete(key); + result = client.get(key); assertNull(result); } + @Test + public void incr() { + String key = "counter"; + + assertEquals(1, client.incr(key, 1, 1)); + //注意counter的实际类型是String + assertEquals("1", client.get(key)); + + assertEquals(2, client.incr(key, 1, 1)); + assertEquals("2", client.get(key)); + + assertEquals(0, client.decr(key, 2, 1)); + assertEquals("0", client.get(key)); + + } } diff --git a/modules/test/src/main/java/org/springside/modules/test/data/DataFixtures.java b/modules/test/src/main/java/org/springside/modules/test/data/DataFixtures.java index 4f5b0ff4..e21e01ff 100644 --- a/modules/test/src/main/java/org/springside/modules/test/data/DataFixtures.java +++ b/modules/test/src/main/java/org/springside/modules/test/data/DataFixtures.java @@ -93,12 +93,12 @@ public class DataFixtures { protected static IDatabaseConnection getConnection(DataSource dataSource) throws DatabaseUnitException, SQLException { Connection connection = dataSource.getConnection(); - String dbName = connection.getMetaData().getURL(); - if (StringUtils.contains(dbName, ":h2:")) { + String jdbcUrl = connection.getMetaData().getURL(); + if (StringUtils.contains(jdbcUrl, ":h2:")) { return new H2Connection(connection, null); - } else if (StringUtils.contains(dbName, ":mysql:")) { + } else if (StringUtils.contains(jdbcUrl, ":mysql:")) { return new MySqlConnection(connection, null); - } else if (StringUtils.contains(dbName, ":oracle:")) { + } else if (StringUtils.contains(jdbcUrl, ":oracle:")) { return new OracleConnection(connection, null); } else { return new DatabaseConnection(connection); diff --git a/modules/test/src/main/java/org/springside/modules/test/data/DataInitializer.java b/modules/test/src/main/java/org/springside/modules/test/data/DataInitializer.java index a17e4811..1dbff7e9 100644 --- a/modules/test/src/main/java/org/springside/modules/test/data/DataInitializer.java +++ b/modules/test/src/main/java/org/springside/modules/test/data/DataInitializer.java @@ -4,6 +4,11 @@ import javax.sql.DataSource; import org.springframework.beans.factory.InitializingBean; +/** + * 在Spring Context启动时,使用DBUnit一次性初始化数据。 + * + * @author calvin + */ public class DataInitializer implements InitializingBean { private DataSource dataSource; diff --git a/modules/test/src/main/java/org/springside/modules/test/data/RandomData.java b/modules/test/src/main/java/org/springside/modules/test/data/RandomData.java index 6c3f5aab..daecff61 100644 --- a/modules/test/src/main/java/org/springside/modules/test/data/RandomData.java +++ b/modules/test/src/main/java/org/springside/modules/test/data/RandomData.java @@ -18,9 +18,6 @@ public class RandomData { private static Random random = new Random(); - private RandomData() { - } - /** * 返回随机ID. */ @@ -39,7 +36,8 @@ public class RandomData { * 从输入list中随机返回一个对象. */ public static T randomOne(List list) { - return randomSome(list, 1).get(0); + Collections.shuffle(list); + return list.get(0); } /** diff --git a/modules/test/src/main/java/org/springside/modules/test/functional/JettyFactory.java b/modules/test/src/main/java/org/springside/modules/test/functional/JettyFactory.java index 66241463..76b06500 100644 --- a/modules/test/src/main/java/org/springside/modules/test/functional/JettyFactory.java +++ b/modules/test/src/main/java/org/springside/modules/test/functional/JettyFactory.java @@ -19,9 +19,6 @@ public class JettyFactory { private static final String DEFAULT_WEBAPP_PATH = "src/main/webapp"; - private JettyFactory() { - } - /** * 创建用于开发运行调试的Jetty Server, 以src/main/webapp为Web应用目录. */ diff --git a/modules/test/src/main/java/org/springside/modules/test/functional/WebDriverFactory.java b/modules/test/src/main/java/org/springside/modules/test/functional/WebDriverFactory.java index c1129e45..b1cc4287 100644 --- a/modules/test/src/main/java/org/springside/modules/test/functional/WebDriverFactory.java +++ b/modules/test/src/main/java/org/springside/modules/test/functional/WebDriverFactory.java @@ -24,9 +24,6 @@ import org.springframework.util.Assert; */ public class WebDriverFactory { - private WebDriverFactory() { - } - /** * 根据driverName创建各种WebDriver的简便方法. * diff --git a/modules/test/src/main/java/org/springside/modules/test/log/Log4jMockAppender.java b/modules/test/src/main/java/org/springside/modules/test/log/Log4jMockAppender.java index 586b8b5e..7514652e 100644 --- a/modules/test/src/main/java/org/springside/modules/test/log/Log4jMockAppender.java +++ b/modules/test/src/main/java/org/springside/modules/test/log/Log4jMockAppender.java @@ -45,16 +45,6 @@ public class Log4jMockAppender extends AppenderSkeleton { return getFirstLog().getMessage().toString(); } - /** - * 返回之前append的第一个log的按layout pattern格式化的信息. - */ - public String getFirstRenderedMessage() { - if (logs.isEmpty()) { - return null; - } - return getLayout().format(getFirstLog()); - } - /** * 返回之前append的最后一个log. */ @@ -69,20 +59,10 @@ public class Log4jMockAppender extends AppenderSkeleton { * 返回之前append的最后一个log的信息. */ public String getLastMessage() { - if (getLastLog() == null) { - return null; - } - return getLastLog().getMessage().toString(); - } - - /** - * 返回之前append的最后一个log的按layout pattern格式化的信息. - */ - public String getLastRenderedMessage() { if (logs.isEmpty()) { return null; } - return getLayout().format(getLastLog()); + return getLastLog().getMessage().toString(); } /** diff --git a/modules/test/src/main/java/org/springside/modules/test/security/shiro/ShiroTestHelper.java b/modules/test/src/main/java/org/springside/modules/test/security/shiro/ShiroTestUtils.java similarity index 86% rename from modules/test/src/main/java/org/springside/modules/test/security/shiro/ShiroTestHelper.java rename to modules/test/src/main/java/org/springside/modules/test/security/shiro/ShiroTestUtils.java index 6b662171..fc44d1ea 100644 --- a/modules/test/src/main/java/org/springside/modules/test/security/shiro/ShiroTestHelper.java +++ b/modules/test/src/main/java/org/springside/modules/test/security/shiro/ShiroTestUtils.java @@ -10,22 +10,15 @@ import org.apache.shiro.subject.support.SubjectThreadState; import org.apache.shiro.util.ThreadState; import org.mockito.Mockito; -public class ShiroTestHelper { +/** + * 在单元测试中的Shiro工具类, + * + * @author calvin + */ +public class ShiroTestUtils { private static ThreadState threadState; - private ShiroTestHelper() { - } - - /** - * 綁定Subject到當前線程. - */ - public static void bindSubject(Subject subject) { - clearSubject(); - threadState = new SubjectThreadState(subject); - threadState.bind(); - } - /** * 用Mockito快速創建一個已認證的用户. */ @@ -37,6 +30,15 @@ public class ShiroTestHelper { bindSubject(subject); } + /** + * 綁定Subject到當前線程. + */ + protected static void bindSubject(Subject subject) { + clearSubject(); + threadState = new SubjectThreadState(subject); + threadState.bind(); + } + /** * 清除當前線程中的Subject. */ diff --git a/modules/test/src/main/java/org/springside/modules/test/spring/SpringContextHolder.java b/modules/test/src/main/java/org/springside/modules/test/spring/SpringContextHolder.java deleted file mode 100644 index 1cae6d25..00000000 --- a/modules/test/src/main/java/org/springside/modules/test/spring/SpringContextHolder.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) 2005-2012 springside.org.cn - * - * Licensed under the Apache License, Version 2.0 (the "License"); - */ -package org.springside.modules.test.spring; - -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -/** - * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. - * - * @author calvin - */ -public class SpringContextHolder implements ApplicationContextAware, DisposableBean { - - private static ApplicationContext applicationContext = null; - - private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); - - /** - * 取得存储在静态变量中的ApplicationContext. - */ - public static ApplicationContext getApplicationContext() { - assertContextInjected(); - return applicationContext; - } - - /** - * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. - */ - public static T getBean(String name) { - assertContextInjected(); - return (T) applicationContext.getBean(name); - } - - /** - * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. - */ - public static T getBean(Class requiredType) { - assertContextInjected(); - return applicationContext.getBean(requiredType); - } - - /** - * 清除SpringContextHolder中的ApplicationContext为Null. - */ - public static void clearHolder() { - logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext); - applicationContext = null; - } - - /** - * 实现ApplicationContextAware接口, 注入Context到静态变量中. - */ - @Override - public void setApplicationContext(ApplicationContext applicationContext) { - logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext); - - if (SpringContextHolder.applicationContext != null) { - logger.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" - + SpringContextHolder.applicationContext); - } - - SpringContextHolder.applicationContext = applicationContext; //NOSONAR - } - - /** - * 实现DisposableBean接口, 在Context关闭时清理静态变量. - */ - @Override - public void destroy() throws Exception { - SpringContextHolder.clearHolder(); - } - - /** - * 检查ApplicationContext不为空. - */ - private static void assertContextInjected() { - Validate.validState(applicationContext != null, - "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder."); - } -} diff --git a/modules/test/src/main/java/org/springside/modules/test/spring/SpringWebTestHelper.java b/modules/test/src/main/java/org/springside/modules/test/spring/SpringWebTestHelper.java deleted file mode 100644 index 659222ae..00000000 --- a/modules/test/src/main/java/org/springside/modules/test/spring/SpringWebTestHelper.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright (c) 2005-2012 springside.org.cn - * - * Licensed under the Apache License, Version 2.0 (the "License"); - */ -package org.springside.modules.test.spring; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.context.ApplicationContext; -import org.springframework.mock.web.MockServletContext; -import org.springframework.web.context.ConfigurableWebApplicationContext; -import org.springframework.web.context.ContextLoader; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.XmlWebApplicationContext; - -/** - * 将Spring WebApplicationContext初始化到ServletContext的集成测试工具类. - * - * @author calvin - */ -public class SpringWebTestHelper { - - private SpringWebTestHelper() { - } - - /** - * 在ServletContext里初始化Spring WebApplicationContext. - * - * @param configLocations application context文件路径列表. - */ - public static void initWebApplicationContext(MockServletContext servletContext, String... configLocations) { - String configLocationsString = StringUtils.join(configLocations, ","); - servletContext.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM, configLocationsString); - new ContextLoader().initWebApplicationContext(servletContext); - } - - /** - * 在ServletContext里初始化Spring WebApplicationContext. - * - * @param applicationContext 已创建的ApplicationContext. - */ - public static void initWebApplicationContext(MockServletContext servletContext, - ApplicationContext applicationContext) { - ConfigurableWebApplicationContext wac = new XmlWebApplicationContext(); - wac.setParent(applicationContext); - wac.setServletContext(servletContext); - wac.setConfigLocation(""); - servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); - wac.refresh(); - } - - /** - * 关闭ServletContext中的Spring WebApplicationContext. - */ - public static void closeWebApplicationContext(MockServletContext servletContext) { - new ContextLoader().closeWebApplicationContext(servletContext); - } -} diff --git a/modules/test/src/test/java/org/springside/modules/test/log/Log4jMockAppenderTest.java b/modules/test/src/test/java/org/springside/modules/test/log/Log4jMockAppenderTest.java index 69fb7076..cf6efbbf 100644 --- a/modules/test/src/test/java/org/springside/modules/test/log/Log4jMockAppenderTest.java +++ b/modules/test/src/test/java/org/springside/modules/test/log/Log4jMockAppenderTest.java @@ -15,15 +15,25 @@ public class Log4jMockAppenderTest { Log4jMockAppender appender = new Log4jMockAppender(); appender.addToLogger(Log4jMockAppenderTest.class); + //null + assertNull(appender.getFirstLog()); + assertNull(appender.getLastLog()); + assertNull(appender.getFirstMessage()); + assertNull(appender.getFirstMessage()); + Logger logger = LoggerFactory.getLogger(Log4jMockAppenderTest.class); logger.warn(testString1); logger.warn(testString2); //getFirstLog/getLastLog + assertEquals(testString1, appender.getFirstLog().getMessage()); + assertEquals(testString2, appender.getLastLog().getMessage()); + assertEquals(testString1, appender.getFirstMessage()); assertEquals(testString2, appender.getLastMessage()); //getAllLogs + assertEquals(2, appender.getLogsCount()); assertEquals(2, appender.getAllLogs().size()); assertEquals(testString2, appender.getAllLogs().get(1).getMessage()); @@ -31,7 +41,6 @@ public class Log4jMockAppenderTest { appender.clearLogs(); assertNull(appender.getFirstLog()); assertNull(appender.getLastLog()); - } @Test diff --git a/modules/test/src/test/java/org/springside/modules/test/mail/MailServerSimulatorTest.java b/modules/test/src/test/java/org/springside/modules/test/mail/MailServerSimulatorTest.java new file mode 100644 index 00000000..a4712909 --- /dev/null +++ b/modules/test/src/test/java/org/springside/modules/test/mail/MailServerSimulatorTest.java @@ -0,0 +1,22 @@ +package org.springside.modules.test.mail; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springside.modules.test.spring.SpringContextTestCase; + +import com.icegreen.greenmail.util.GreenMail; + +@ContextConfiguration(locations = { "/applicationContext-test.xml" }) +public class MailServerSimulatorTest extends SpringContextTestCase { + + @Autowired + private GreenMail greenMail; + + @Test + public void greenMail() { + assertEquals(3025, greenMail.getSmtp().getPort()); + } +} diff --git a/modules/test/src/test/java/org/springside/modules/test/shiro/ShiroTestUtilsTest.java b/modules/test/src/test/java/org/springside/modules/test/shiro/ShiroTestUtilsTest.java new file mode 100644 index 00000000..7b865536 --- /dev/null +++ b/modules/test/src/test/java/org/springside/modules/test/shiro/ShiroTestUtilsTest.java @@ -0,0 +1,25 @@ +package org.springside.modules.test.shiro; + +import static org.junit.Assert.*; + +import org.apache.shiro.SecurityUtils; +import org.junit.Test; +import org.springside.modules.test.security.shiro.ShiroTestUtils; + +public class ShiroTestUtilsTest { + + @Test + public void mockSubject() { + ShiroTestUtils.mockSubject("foo"); + assertTrue(SecurityUtils.getSubject().isAuthenticated()); + assertEquals("foo", SecurityUtils.getSubject().getPrincipal()); + + ShiroTestUtils.clearSubject(); + + ShiroTestUtils.mockSubject("bar"); + assertTrue(SecurityUtils.getSubject().isAuthenticated()); + assertEquals("bar", SecurityUtils.getSubject().getPrincipal()); + + } + +} diff --git a/modules/test/src/test/java/org/springside/modules/test/spring/SpringContextHolderTest.java b/modules/test/src/test/java/org/springside/modules/test/spring/SpringContextHolderTest.java deleted file mode 100644 index ceb72d76..00000000 --- a/modules/test/src/test/java/org/springside/modules/test/spring/SpringContextHolderTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.springside.modules.test.spring; - -import static org.junit.Assert.*; - -import org.junit.Test; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class SpringContextHolderTest { - - @Test - public void testGetBean() { - - SpringContextHolder.clearHolder(); - try { - SpringContextHolder.getBean("foo"); - fail("No exception throw for applicationContxt hadn't been init."); - } catch (IllegalStateException e) { - - } - - ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( - "classpath:/applicationContext-test.xml"); - assertNotNull(SpringContextHolder.getApplicationContext()); - - SpringContextHolder holder = SpringContextHolder.getBean("springContextHolder"); - assertEquals(SpringContextHolder.class, holder.getClass()); - - SpringContextHolder holderByClass = SpringContextHolder.getBean(SpringContextHolder.class); - assertEquals(SpringContextHolder.class, holderByClass.getClass()); - - context.close(); - - try { - holder.getApplicationContext(); - fail("No exception throw for applicationContxt had been close."); - } catch (IllegalStateException e) { - - } - } -} diff --git a/modules/test/src/test/java/org/springside/modules/test/spring/SpringWebTestUtilsTest.java b/modules/test/src/test/java/org/springside/modules/test/spring/SpringWebTestUtilsTest.java deleted file mode 100644 index 4d6bdd5d..00000000 --- a/modules/test/src/test/java/org/springside/modules/test/spring/SpringWebTestUtilsTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.springside.modules.test.spring; - -import static org.junit.Assert.*; - -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.mock.web.MockServletContext; -import org.springframework.web.context.support.WebApplicationContextUtils; - -public class SpringWebTestUtilsTest { - - @Test - public void initByPaths() { - MockServletContext servletContext = new MockServletContext(); - SpringWebTestHelper.initWebApplicationContext(servletContext, "classpath:/applicationContext-test.xml"); - ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); - assertNotNull(context); - assertNotNull(context.getBean("springContextHolder")); - } - - @Test - public void initByApplicationConetxt() { - ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:/applicationContext-test.xml"); - MockServletContext servletContext = new MockServletContext(); - SpringWebTestHelper.initWebApplicationContext(servletContext, ac); - ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); - assertNotNull(context); - assertNotNull(context.getBean("springContextHolder")); - } - - @Test - public void closeApplicationContext() { - MockServletContext servletContext = new MockServletContext(); - SpringWebTestHelper.initWebApplicationContext(servletContext, "classpath:/applicationContext-test.xml"); - - SpringWebTestHelper.closeWebApplicationContext(servletContext); - ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); - assertNull(context); - } -} diff --git a/modules/test/src/test/resources/applicationContext-test.xml b/modules/test/src/test/resources/applicationContext-test.xml index 6ad74238..88a87ff4 100644 --- a/modules/test/src/test/resources/applicationContext-test.xml +++ b/modules/test/src/test/resources/applicationContext-test.xml @@ -19,6 +19,11 @@ - - + + + + + + + \ No newline at end of file