Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
后端镜像
java镜像
Springside4
提交
1dff3fcb
S
Springside4
项目概览
后端镜像
/
java镜像
/
Springside4
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Springside4
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1dff3fcb
编写于
7月 29, 2012
作者:
C
Calvin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#57 将mini-service中的SOAP WebService部分移入showcase,虽然很少用了,但删掉也太可惜了。
上级
ec22beaa
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
774 addition
and
4 deletion
+774
-4
examples/quickstart/pom.xml
examples/quickstart/pom.xml
+1
-1
examples/showcase/pom.xml
examples/showcase/pom.xml
+25
-0
examples/showcase/src/main/java/org/springside/examples/showcase/dao/UserMybatisDao.java
.../org/springside/examples/showcase/dao/UserMybatisDao.java
+19
-0
examples/showcase/src/main/java/org/springside/examples/showcase/dao/UserMybatisDaoImpl.java
.../springside/examples/showcase/dao/UserMybatisDaoImpl.java
+37
-0
examples/showcase/src/main/java/org/springside/examples/showcase/entity/Project.java
...java/org/springside/examples/showcase/entity/Project.java
+41
-0
examples/showcase/src/main/java/org/springside/examples/showcase/entity/User.java
...in/java/org/springside/examples/showcase/entity/User.java
+2
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/AccountWebService.java
.../examples/showcase/webservice/soap/AccountWebService.java
+37
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/AccountWebServiceImpl.java
...mples/showcase/webservice/soap/AccountWebServiceImpl.java
+131
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/WsConstants.java
...ngside/examples/showcase/webservice/soap/WsConstants.java
+12
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/GetProjectDetailResponse.java
...se/webservice/soap/response/GetProjectDetailResponse.java
+28
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/SearchUserResponse.java
...showcase/webservice/soap/response/SearchUserResponse.java
+34
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/base/IdResponse.java
...es/showcase/webservice/soap/response/base/IdResponse.java
+32
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/base/WSResponse.java
...es/showcase/webservice/soap/response/base/WSResponse.java
+58
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/dto/ProjectDTO.java
...les/showcase/webservice/soap/response/dto/ProjectDTO.java
+57
-0
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/dto/UserDTO.java
...amples/showcase/webservice/soap/response/dto/UserDTO.java
+73
-0
examples/showcase/src/main/resources/applicationContext-showcases.xml
...wcase/src/main/resources/applicationContext-showcases.xml
+1
-0
examples/showcase/src/main/resources/applicationContext.xml
examples/showcase/src/main/resources/applicationContext.xml
+2
-1
examples/showcase/src/main/resources/webservice/applicationContext-soap-server.xml
...n/resources/webservice/applicationContext-soap-server.xml
+16
-0
examples/showcase/src/main/webapp/WEB-INF/views/story/webservice.jsp
...owcase/src/main/webapp/WEB-INF/views/story/webservice.jsp
+4
-1
examples/showcase/src/main/webapp/WEB-INF/web.xml
examples/showcase/src/main/webapp/WEB-INF/web.xml
+9
-0
examples/showcase/src/test/functional/org/springside/examples/showcase/functional/soap/AccountWebServiceWithDynamicCreateClientFT.java
...onal/soap/AccountWebServiceWithDynamicCreateClientFT.java
+63
-0
examples/showcase/src/test/functional/org/springside/examples/showcase/functional/soap/AccountWebServiceWithPredefineClientFT.java
...nctional/soap/AccountWebServiceWithPredefineClientFT.java
+70
-0
examples/showcase/src/test/resources/applicationContext-soap-client.xml
...ase/src/test/resources/applicationContext-soap-client.xml
+16
-0
modules/core/pom.xml
modules/core/pom.xml
+5
-0
modules/parent/pom.xml
modules/parent/pom.xml
+1
-1
未找到文件。
examples/quickstart/pom.xml
浏览文件 @
1dff3fcb
...
...
@@ -14,7 +14,7 @@
<spring.version>
3.1.2.RELEASE
</spring.version>
<aspectj.version>
1.7.0
</aspectj.version>
<hibernate.version>
4.1.5.SP1
</hibernate.version>
<spring-data-jpa.version>
1.1.
1
.RELEASE
</spring-data-jpa.version>
<spring-data-jpa.version>
1.1.
0
.RELEASE
</spring-data-jpa.version>
<commons-dbcp.version>
1.4
</commons-dbcp.version>
<sitemesh.version>
2.4.2
</sitemesh.version>
<hibernate-validator.version>
4.3.0.Final
</hibernate-validator.version>
...
...
examples/showcase/pom.xml
浏览文件 @
1dff3fcb
...
...
@@ -70,6 +70,16 @@
<groupId>
org.hibernate
</groupId>
<artifactId>
hibernate-entitymanager
</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>
org.mybatis
</groupId>
<artifactId>
mybatis
</artifactId>
</dependency>
<dependency>
<groupId>
org.mybatis
</groupId>
<artifactId>
mybatis-spring
</artifactId>
</dependency>
<!-- spring data access -->
<dependency>
...
...
@@ -139,6 +149,21 @@
<artifactId>
shiro-ehcache
</artifactId>
</dependency>
<!-- SECURITY end -->
<!-- SOAP begin -->
<dependency>
<groupId>
org.apache.cxf
</groupId>
<artifactId>
cxf-rt-frontend-jaxws
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.cxf
</groupId>
<artifactId>
cxf-rt-transports-http
</artifactId>
</dependency>
<dependency>
<groupId>
javax.activation
</groupId>
<artifactId>
activation
</artifactId>
</dependency>
<!-- SOAP end -->
<!-- JMS begin -->
<dependency>
...
...
examples/showcase/src/main/java/org/springside/examples/showcase/dao/UserMybatisDao.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.dao
;
import
java.util.List
;
import
java.util.Map
;
import
org.springside.examples.showcase.entity.Project
;
import
org.springside.examples.showcase.entity.User
;
public
interface
UserMybatisDao
{
public
Project
getProjectDetail
(
Long
id
);
public
List
<
User
>
searchUser
(
Map
<
String
,
Object
>
parameters
);
public
Long
saveUser
(
User
user
);
public
void
deleteUser
(
Long
id
);
}
examples/showcase/src/main/java/org/springside/examples/showcase/dao/UserMybatisDaoImpl.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.dao
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.stereotype.Component
;
import
org.springside.examples.showcase.entity.Project
;
import
org.springside.examples.showcase.entity.User
;
@Component
public
class
UserMybatisDaoImpl
implements
UserMybatisDao
{
@Override
public
Project
getProjectDetail
(
Long
id
)
{
// TODO Auto-generated method stub
return
null
;
}
@Override
public
List
<
User
>
searchUser
(
Map
<
String
,
Object
>
parameters
)
{
// TODO Auto-generated method stub
return
null
;
}
@Override
public
Long
saveUser
(
User
user
)
{
// TODO Auto-generated method stub
return
null
;
}
@Override
public
void
deleteUser
(
Long
id
)
{
// TODO Auto-generated method stub
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/entity/Project.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.entity
;
import
java.util.List
;
import
com.google.common.collect.Lists
;
/**
* 项目.
*
* @author calvin
*/
public
class
Project
extends
IdEntity
{
private
String
name
;
private
User
manager
;
private
List
<
User
>
userList
=
Lists
.
newArrayList
();
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
User
getManager
()
{
return
manager
;
}
public
void
setManager
(
User
manager
)
{
this
.
manager
=
manager
;
}
public
List
<
User
>
getUserList
()
{
return
userList
;
}
public
void
setUserList
(
List
<
User
>
userList
)
{
this
.
userList
=
userList
;
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/entity/User.java
浏览文件 @
1dff3fcb
...
...
@@ -13,6 +13,7 @@ import javax.persistence.Transient;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
org.hibernate.annotations.Fetch
;
import
org.hibernate.annotations.FetchMode
;
import
org.hibernate.validator.constraints.Email
;
import
org.hibernate.validator.constraints.NotBlank
;
import
org.springside.modules.utils.Collections3
;
...
...
@@ -80,6 +81,7 @@ public class User extends IdEntity {
this
.
name
=
name
;
}
@Email
public
String
getEmail
()
{
return
email
;
}
...
...
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/AccountWebService.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap
;
import
javax.jws.WebParam
;
import
javax.jws.WebService
;
import
org.springside.examples.showcase.webservice.soap.response.GetProjectDetailResponse
;
import
org.springside.examples.showcase.webservice.soap.response.SearchUserResponse
;
import
org.springside.examples.showcase.webservice.soap.response.base.IdResponse
;
import
org.springside.examples.showcase.webservice.soap.response.dto.UserDTO
;
/**
* JAX-WS2.0的WebService接口定义类.
*
* 使用JAX-WS2.0 annotation设置WSDL中的定义.
* 使用WSResult及其子类类包裹返回结果.
* 使用DTO传输对象隔绝系统内部领域对象的修改对外系统的影响.
*
* @author calvin
*/
@WebService
(
name
=
"AccountService"
,
targetNamespace
=
WsConstants
.
NS
)
public
interface
AccountWebService
{
/**
* 获取部门的详细信息.
*/
GetProjectDetailResponse
getDepartmentDetail
(
@WebParam
(
name
=
"id"
)
Long
id
);
/**
* 搜索用户信息.
*/
SearchUserResponse
searchUser
(
@WebParam
(
name
=
"loginName"
)
String
loginName
,
@WebParam
(
name
=
"name"
)
String
name
);
/**
* 新建用户.
*/
IdResponse
createUser
(
@WebParam
(
name
=
"user"
)
UserDTO
user
);
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/AccountWebServiceImpl.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.jws.WebService
;
import
javax.validation.ConstraintViolationException
;
import
javax.validation.Validator
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.Validate
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.dao.DataIntegrityViolationException
;
import
org.springside.examples.showcase.dao.UserMybatisDao
;
import
org.springside.examples.showcase.entity.Project
;
import
org.springside.examples.showcase.entity.User
;
import
org.springside.examples.showcase.webservice.soap.response.GetProjectDetailResponse
;
import
org.springside.examples.showcase.webservice.soap.response.SearchUserResponse
;
import
org.springside.examples.showcase.webservice.soap.response.base.IdResponse
;
import
org.springside.examples.showcase.webservice.soap.response.base.WSResponse
;
import
org.springside.examples.showcase.webservice.soap.response.dto.ProjectDTO
;
import
org.springside.examples.showcase.webservice.soap.response.dto.UserDTO
;
import
org.springside.modules.beanvalidator.BeanValidators
;
import
org.springside.modules.mapper.BeanMapper
;
import
com.google.common.collect.Maps
;
/**
* WebService服务端实现类.
*
* 客户端实现见功能测试用例.
*
* @author calvin
*/
//serviceName指明WSDL中的名称, endpointInterface属性指向Interface定义类.
@WebService
(
serviceName
=
"AccountService"
,
endpointInterface
=
"org.springside.examples.showcase.webservice.soap.AccountWebService"
,
targetNamespace
=
WsConstants
.
NS
)
public
class
AccountWebServiceImpl
implements
AccountWebService
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
AccountWebServiceImpl
.
class
);
@Autowired
private
UserMybatisDao
userDao
;
@Autowired
private
final
Validator
validator
=
null
;
/**
* @see AccountWebService#getDepartmentDetail()
*/
@Override
public
GetProjectDetailResponse
getDepartmentDetail
(
Long
id
)
{
GetProjectDetailResponse
response
=
new
GetProjectDetailResponse
();
try
{
Validate
.
notNull
(
id
,
"id参数为空"
);
Project
project
=
userDao
.
getProjectDetail
(
id
);
Validate
.
notNull
(
project
,
"项目不存在(id:"
+
id
+
")"
);
ProjectDTO
dto
=
BeanMapper
.
map
(
project
,
ProjectDTO
.
class
);
response
.
setDepartment
(
dto
);
return
response
;
}
catch
(
IllegalArgumentException
e
)
{
return
handleParameterError
(
response
,
e
);
}
catch
(
RuntimeException
e
)
{
return
handleGeneralError
(
response
,
e
);
}
}
/**
* @see AccountWebService#searchUser()
*/
@Override
public
SearchUserResponse
searchUser
(
String
loginName
,
String
name
)
{
SearchUserResponse
response
=
new
SearchUserResponse
();
try
{
Map
<
String
,
Object
>
parameters
=
Maps
.
newHashMap
();
parameters
.
put
(
"loginName"
,
loginName
);
parameters
.
put
(
"name"
,
name
);
List
<
User
>
userList
=
userDao
.
searchUser
(
parameters
);
List
<
UserDTO
>
dtoList
=
BeanMapper
.
mapList
(
userList
,
UserDTO
.
class
);
response
.
setUserList
(
dtoList
);
return
response
;
}
catch
(
RuntimeException
e
)
{
return
handleGeneralError
(
response
,
e
);
}
}
/**
* @see AccountWebService#createUser()
*/
@Override
public
IdResponse
createUser
(
UserDTO
user
)
{
IdResponse
response
=
new
IdResponse
();
try
{
Validate
.
notNull
(
user
,
"用户参数为空"
);
User
userEntity
=
BeanMapper
.
map
(
user
,
User
.
class
);
BeanValidators
.
validateWithException
(
validator
,
userEntity
);
Long
userId
=
userDao
.
saveUser
(
userEntity
);
return
new
IdResponse
(
userId
);
}
catch
(
ConstraintViolationException
e
)
{
String
message
=
StringUtils
.
join
(
BeanValidators
.
extractPropertyAndMessageAsList
(
e
,
" "
),
"\n"
);
logger
.
error
(
message
,
e
);
return
response
.
setError
(
WSResponse
.
PARAMETER_ERROR
,
message
);
}
catch
(
DataIntegrityViolationException
e
)
{
String
message
=
"新建用户参数存在唯一性冲突(用户:"
+
user
+
")"
;
logger
.
error
(
message
,
e
);
return
response
.
setError
(
WSResponse
.
PARAMETER_ERROR
,
message
);
}
catch
(
RuntimeException
e
)
{
return
handleGeneralError
(
response
,
e
);
}
}
private
<
T
extends
WSResponse
>
T
handleParameterError
(
T
response
,
IllegalArgumentException
e
)
{
logger
.
error
(
e
.
getMessage
());
return
response
.
setError
(
WSResponse
.
PARAMETER_ERROR
,
e
.
getMessage
());
}
private
<
T
extends
WSResponse
>
T
handleGeneralError
(
T
response
,
Exception
e
)
{
logger
.
error
(
e
.
getMessage
());
return
response
.
setDefaultError
();
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/WsConstants.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap
;
/**
* WebService常量定义.
*
* @author calvin
*/
public
class
WsConstants
{
/**项目内统一的NameSpace定义.**/
public
static
final
String
NS
=
"http://shwocase.examples.springside.org"
;
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/GetProjectDetailResponse.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap.response
;
import
javax.xml.bind.annotation.XmlType
;
import
org.springside.examples.showcase.webservice.soap.WsConstants
;
import
org.springside.examples.showcase.webservice.soap.response.base.WSResponse
;
import
org.springside.examples.showcase.webservice.soap.response.dto.ProjectDTO
;
@XmlType
(
name
=
"GetProjectDetailResponse"
,
namespace
=
WsConstants
.
NS
)
public
class
GetProjectDetailResponse
extends
WSResponse
{
private
ProjectDTO
department
;
public
GetProjectDetailResponse
()
{
}
public
GetProjectDetailResponse
(
ProjectDTO
department
)
{
this
.
department
=
department
;
}
public
ProjectDTO
getDepartment
()
{
return
department
;
}
public
void
setDepartment
(
ProjectDTO
department
)
{
this
.
department
=
department
;
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/SearchUserResponse.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap.response
;
import
java.util.List
;
import
javax.xml.bind.annotation.XmlElement
;
import
javax.xml.bind.annotation.XmlElementWrapper
;
import
javax.xml.bind.annotation.XmlType
;
import
org.springside.examples.showcase.webservice.soap.WsConstants
;
import
org.springside.examples.showcase.webservice.soap.response.base.WSResponse
;
import
org.springside.examples.showcase.webservice.soap.response.dto.UserDTO
;
@XmlType
(
name
=
"UserListResponse"
,
namespace
=
WsConstants
.
NS
)
public
class
SearchUserResponse
extends
WSResponse
{
private
List
<
UserDTO
>
userList
;
public
SearchUserResponse
()
{
}
public
SearchUserResponse
(
List
<
UserDTO
>
userList
)
{
this
.
userList
=
userList
;
}
@XmlElementWrapper
(
name
=
"userList"
)
@XmlElement
(
name
=
"user"
)
public
List
<
UserDTO
>
getUserList
()
{
return
userList
;
}
public
void
setUserList
(
List
<
UserDTO
>
userList
)
{
this
.
userList
=
userList
;
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/base/IdResponse.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap.response.base
;
import
javax.xml.bind.annotation.XmlType
;
import
org.springside.examples.showcase.webservice.soap.WsConstants
;
/**
* 创建某个对象返回的 通用IdResult
*
* @author badqiu
*
*/
@XmlType
(
name
=
"IdResponse"
,
namespace
=
WsConstants
.
NS
)
public
class
IdResponse
extends
WSResponse
{
private
Long
id
;
public
IdResponse
()
{
}
public
IdResponse
(
Long
id
)
{
super
();
this
.
id
=
id
;
}
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/base/WSResponse.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap.response.base
;
import
javax.xml.bind.annotation.XmlType
;
import
org.springside.examples.showcase.webservice.soap.WsConstants
;
/**
* WebService返回结果基类,定义所有返回码.
*
* @author calvin
*/
@XmlType
(
name
=
"WSResponse"
,
namespace
=
WsConstants
.
NS
)
public
class
WSResponse
{
//-- 返回代码定义 --//
// 按项目的规则进行定义, 比如4xx代表客户端参数错误,5xx代表服务端业务错误等.
public
static
final
String
SUCESS
=
"0"
;
public
static
final
String
PARAMETER_ERROR
=
"400"
;
public
static
final
String
SYSTEM_ERROR
=
"500"
;
public
static
final
String
SYSTEM_ERROR_MESSAGE
=
"Runtime unknown internal error."
;
//-- WSResult基本属性 --//
private
String
code
=
SUCESS
;
private
String
message
;
/**
* 创建结果.
*/
public
<
T
extends
WSResponse
>
T
setError
(
String
resultCode
,
String
resultMessage
)
{
code
=
resultCode
;
message
=
resultMessage
;
return
(
T
)
this
;
}
/**
* 创建默认异常结果.
*/
public
<
T
extends
WSResponse
>
T
setDefaultError
()
{
return
(
T
)
setError
(
SYSTEM_ERROR
,
SYSTEM_ERROR_MESSAGE
);
}
public
String
getCode
()
{
return
code
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/dto/ProjectDTO.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap.response.dto
;
import
java.util.List
;
import
javax.xml.bind.annotation.XmlElement
;
import
javax.xml.bind.annotation.XmlElementWrapper
;
import
javax.xml.bind.annotation.XmlRootElement
;
import
javax.xml.bind.annotation.XmlType
;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
org.springside.examples.showcase.webservice.soap.WsConstants
;
import
com.google.common.collect.Lists
;
@XmlRootElement
@XmlType
(
name
=
"Project"
,
namespace
=
WsConstants
.
NS
)
public
class
ProjectDTO
{
private
String
name
;
private
UserDTO
manager
;
private
List
<
UserDTO
>
userList
=
Lists
.
newArrayList
();
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
UserDTO
getManager
()
{
return
manager
;
}
public
void
setManager
(
UserDTO
manager
)
{
this
.
manager
=
manager
;
}
//配置输出xml为<userList><User><id>1</id></User></userList>
@XmlElementWrapper
(
name
=
"userList"
)
@XmlElement
(
name
=
"User"
)
public
List
<
UserDTO
>
getUserList
()
{
return
userList
;
}
public
void
setUserList
(
List
<
UserDTO
>
userList
)
{
this
.
userList
=
userList
;
}
/**
* 重新实现toString()函数方便在日志中打印DTO信息.
*/
@Override
public
String
toString
()
{
return
ToStringBuilder
.
reflectionToString
(
this
);
}
}
examples/showcase/src/main/java/org/springside/examples/showcase/webservice/soap/response/dto/UserDTO.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.webservice.soap.response.dto
;
import
javax.xml.bind.annotation.XmlRootElement
;
import
javax.xml.bind.annotation.XmlType
;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
org.springside.examples.showcase.webservice.soap.WsConstants
;
/**
* Web Service传输User信息的DTO.
*
* 只传输外部接口需要的属性.使用JAXB 2.0的annotation标注JAVA-XML映射,尽量使用默认约定.
*
* @author calvin
*/
@XmlRootElement
@XmlType
(
name
=
"User"
,
namespace
=
WsConstants
.
NS
)
public
class
UserDTO
{
private
Long
id
;
private
String
loginName
;
private
String
name
;
private
String
email
;
private
ProjectDTO
department
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
value
)
{
id
=
value
;
}
public
String
getLoginName
()
{
return
loginName
;
}
public
void
setLoginName
(
String
value
)
{
loginName
=
value
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
value
)
{
name
=
value
;
}
public
String
getEmail
()
{
return
email
;
}
public
void
setEmail
(
String
value
)
{
email
=
value
;
}
public
ProjectDTO
getDepartment
()
{
return
department
;
}
public
void
setDepartment
(
ProjectDTO
department
)
{
this
.
department
=
department
;
}
/**
* 重新实现toString()函数方便在日志中打印DTO信息.
*/
@Override
public
String
toString
()
{
return
ToStringBuilder
.
reflectionToString
(
this
);
}
}
examples/showcase/src/main/resources/applicationContext-showcases.xml
浏览文件 @
1dff3fcb
...
...
@@ -15,5 +15,6 @@
<import
resource=
"schedule/applicationContext-quartz-cron-local.xml"
/>
<import
resource=
"schedule/applicationContext-quartz-timer-cluster.xml"
/>
<import
resource=
"security/applicationContext-shiro.xml"
/>
<import
resource=
"webservice/applicationContext-soap-server.xml"
/>
</beans>
\ No newline at end of file
examples/showcase/src/main/resources/applicationContext.xml
浏览文件 @
1dff3fcb
...
...
@@ -55,9 +55,10 @@
<!-- 使用annotation定义事务 -->
<tx:annotation-driven
transaction-manager=
"defaultTransactionManager"
proxy-target-class=
"true"
/>
<!-- 定义aspectj -->
<aop:aspectj-autoproxy
proxy-target-class=
"true"
/>
<!-- hibernat validator -->
<!-- hibernat
e
validator -->
<bean
id=
"validator"
class=
"org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"
/>
<!-- production/local development环境 -->
...
...
examples/showcase/src/main/resources/webservice/applicationContext-soap-server.xml
0 → 100644
浏览文件 @
1dff3fcb
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws=
"http://cxf.apache.org/jaxws"
xsi:schemaLocation=
"http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
default-lazy-init=
"true"
>
<description>
Apache CXF的Web Service配置
</description>
<!-- jax-ws endpoint定义 -->
<jaxws:endpoint
address=
"/accountservice"
>
<jaxws:implementor
ref=
"accountWebService"
/>
</jaxws:endpoint>
<!-- WebService的实现Bean定义 -->
<bean
id=
"accountWebService"
class=
"org.springside.examples.showcase.webservice.soap.AccountWebServiceImpl"
/>
</beans>
examples/showcase/src/main/webapp/WEB-INF/views/story/webservice.jsp
浏览文件 @
1dff3fcb
<%@ page
contentType=
"text/html;charset=UTF-8"
%>
<%@ taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%>
<c:set
var=
"ctx"
value=
"
${
pageContext
.
request
.
contextPath
}
"
/>
<html>
<head>
<title>
Restful Service高级演示
</title>
...
...
@@ -14,7 +16,8 @@
<h2>
传统SOAP Web Service演示
</h2>
<ul>
<li>
基于JAX-WS.
</li>
<li>
服务端是基于CXF的JAX-WS演示. 详见由CXF自动生成的
<a
href=
"${ctx}/soap"
>
服务信息及wsdl文件
</a>
.
</li>
<li>
客户端见Functional Test用例.
</li>
</ul>
</body>
</html>
\ No newline at end of file
examples/showcase/src/main/webapp/WEB-INF/web.xml
浏览文件 @
1dff3fcb
...
...
@@ -39,6 +39,15 @@
<servlet-name>
springServlet
</servlet-name>
<url-pattern>
/
</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>
CXFServlet
</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
CXFServlet
</servlet-name>
<url-pattern>
/soap/*
</url-pattern>
</servlet-mapping>
<!-- JMX JSON Agent servlet-->
<servlet>
...
...
examples/showcase/src/test/functional/org/springside/examples/showcase/functional/soap/AccountWebServiceWithDynamicCreateClientFT.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.functional.soap
;
import
static
org
.
junit
.
Assert
.*;
import
javax.xml.ws.BindingProvider
;
import
org.apache.cxf.endpoint.Client
;
import
org.apache.cxf.frontend.ClientProxy
;
import
org.apache.cxf.jaxws.JaxWsProxyFactoryBean
;
import
org.apache.cxf.transport.http.HTTPConduit
;
import
org.apache.cxf.transports.http.configuration.HTTPClientPolicy
;
import
org.junit.Test
;
import
org.junit.experimental.categories.Category
;
import
org.springside.examples.showcase.functional.BaseFunctionalTestCase
;
import
org.springside.examples.showcase.webservice.soap.AccountWebService
;
import
org.springside.examples.showcase.webservice.soap.response.SearchUserResponse
;
import
org.springside.modules.test.category.Smoke
;
/**
* UserService Web服务的功能测试, 测试主要的接口调用.
*
* 以用JAXWS的API, 根据AccountWebService接口自行创建.
*
* @author calvin
*/
public
class
AccountWebServiceWithDynamicCreateClientFT
extends
BaseFunctionalTestCase
{
public
AccountWebService
creatClient
()
{
String
address
=
baseUrl
+
"/soap/accountservice"
;
JaxWsProxyFactoryBean
proxyFactory
=
new
JaxWsProxyFactoryBean
();
proxyFactory
.
setAddress
(
address
);
proxyFactory
.
setServiceClass
(
AccountWebService
.
class
);
AccountWebService
accountWebServiceProxy
=
(
AccountWebService
)
proxyFactory
.
create
();
//(可选)演示重新设定endpoint address.
((
BindingProvider
)
accountWebServiceProxy
).
getRequestContext
().
put
(
BindingProvider
.
ENDPOINT_ADDRESS_PROPERTY
,
address
);
//(可选)演示重新设定Timeout时间
Client
client
=
ClientProxy
.
getClient
(
accountWebServiceProxy
);
HTTPConduit
conduit
=
(
HTTPConduit
)
client
.
getConduit
();
HTTPClientPolicy
policy
=
conduit
.
getClient
();
policy
.
setReceiveTimeout
(
600000
);
return
accountWebServiceProxy
;
}
/**
* 测试搜索用户
*/
@Test
@Category
(
Smoke
.
class
)
public
void
searchUser
()
{
AccountWebService
accountWebService
=
creatClient
();
SearchUserResponse
result
=
accountWebService
.
searchUser
(
null
,
null
);
assertTrue
(
result
.
getUserList
().
size
()
>=
4
);
assertEquals
(
"Jack"
,
result
.
getUserList
().
get
(
0
).
getName
());
}
}
examples/showcase/src/test/functional/org/springside/examples/showcase/functional/soap/AccountWebServiceWithPredefineClientFT.java
0 → 100644
浏览文件 @
1dff3fcb
package
org.springside.examples.showcase.functional.soap
;
import
static
org
.
junit
.
Assert
.*;
import
org.dozer.DozerBeanMapper
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.TestExecutionListeners
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.support.DependencyInjectionTestExecutionListener
;
import
org.springside.examples.showcase.data.UserData
;
import
org.springside.examples.showcase.entity.User
;
import
org.springside.examples.showcase.functional.BaseFunctionalTestCase
;
import
org.springside.examples.showcase.webservice.soap.AccountWebService
;
import
org.springside.examples.showcase.webservice.soap.response.base.IdResponse
;
import
org.springside.examples.showcase.webservice.soap.response.base.WSResponse
;
import
org.springside.examples.showcase.webservice.soap.response.dto.UserDTO
;
/**
* UserService Web服务的功能测试, 测试主要的接口调用.
*
* 使用在Spring applicaitonContext.xml中用<jaxws:client/>,根据AccountWebService接口创建的Client.
*
* @author calvin
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@TestExecutionListeners
({
DependencyInjectionTestExecutionListener
.
class
})
@ContextConfiguration
(
locations
=
{
"/applicationContext-soap-client.xml"
})
public
class
AccountWebServiceWithPredefineClientFT
extends
BaseFunctionalTestCase
{
@Autowired
private
AccountWebService
accountWebServiceClient
;
/**
* 测试创建用户,在Spring applicaitonContext.xml中用<jaxws:client/>创建Client.
*/
@Test
public
void
createUser
()
{
User
user
=
UserData
.
randomUser
();
UserDTO
userDTO
=
new
UserDTO
();
userDTO
.
setLoginName
(
user
.
getLoginName
());
userDTO
.
setName
(
user
.
getName
());
userDTO
.
setEmail
(
user
.
getEmail
());
IdResponse
result
=
accountWebServiceClient
.
createUser
(
userDTO
);
assertNotNull
(
result
.
getId
());
}
/**
* 测试创建用户,使用错误的登录名, 在Spring applicaitonContext.xml中用<jaxws:client/>创建Client.
*/
@Test
public
void
createUserWithInvalidLoginName
()
{
User
user
=
UserData
.
randomUser
();
UserDTO
userDTO
=
new
DozerBeanMapper
().
map
(
user
,
UserDTO
.
class
);
//登录名为空
userDTO
.
setLoginName
(
null
);
IdResponse
result
=
accountWebServiceClient
.
createUser
(
userDTO
);
assertEquals
(
result
.
getCode
(),
WSResponse
.
PARAMETER_ERROR
);
//登录名重复
userDTO
.
setLoginName
(
"user1"
);
result
=
accountWebServiceClient
.
createUser
(
userDTO
);
assertEquals
(
result
.
getCode
(),
WSResponse
.
PARAMETER_ERROR
);
}
}
examples/showcase/src/test/resources/applicationContext-soap-client.xml
0 → 100644
浏览文件 @
1dff3fcb
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws=
"http://cxf.apache.org/jaxws"
xmlns:cxf=
"http://cxf.apache.org/core"
xmlns:context=
"http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"
default-lazy-init=
"true"
>
<description>
Apache CXF Web Service Client端配置
</description>
<context:property-placeholder
ignore-resource-not-found=
"true"
location=
"classpath*:/application.functional.properties,
classpath*:/application.functional-local.properties"
/>
<jaxws:client
id=
"accountWebServiceClient"
serviceClass=
"org.springside.examples.showcase.webservice.soap.AccountWebService"
address=
"${baseUrl}/soap/accountservice"
/>
</beans>
modules/core/pom.xml
浏览文件 @
1dff3fcb
...
...
@@ -56,6 +56,11 @@
<artifactId>
commons-io
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
commons-beanutils
</groupId>
<artifactId>
commons-beanutils
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-databind
</artifactId>
...
...
modules/parent/pom.xml
浏览文件 @
1dff3fcb
...
...
@@ -15,7 +15,7 @@
<aspectj.version>
1.7.0
</aspectj.version>
<hibernate.version>
4.1.5.SP1
</hibernate.version>
<mybatis.version>
3.1.1
</mybatis.version>
<spring-data-jpa.version>
1.1.
1
.RELEASE
</spring-data-jpa.version>
<spring-data-jpa.version>
1.1.
0
.RELEASE
</spring-data-jpa.version>
<commons-dbcp.version>
1.4
</commons-dbcp.version>
<sitemesh.version>
2.4.2
</sitemesh.version>
<shiro.version>
1.2.0
</shiro.version>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录