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