@Endpoint
public class UserServiceEndpoint{
@PayloadRoot(localPart="UserRequest",namespace="http://xxx.xxx.xxx/ws")
public @ResponsePayload UserResponse getUsers(@RequestPayload UserRequest request){
int userCount=request.getUserCount();
String targetCompanyId=request.getTargetCompany();
UserResponse response=new UserResponse();
List<User> users=new ArrayList<User>();
for(int i=0;i<userCount;i++){
User user=new User();
user.setBirthday(new Date());
user.setCompanyId(targetCompanyId);
user.setGender(true);
user.setUsername("user"+i);
users.add(user);
}
response.setUsers(users);
return response;
}
}
Spring-WS提供的Annotation
@Endpoint
表示当前这个类将作为Spring-WS的一个Endpoint,它可以接收特定的用户请求,执行其中的业务方法。
@PayloadRoot(localPart="UserRequest",namespace="http://xxx.xxx.xxx/ws")
表明当前这个getUsers方法支持Webservice以SOAP消息的XML root节点名及namespace来匹配找到该方法。SOAP消息body部分XML节点名为UserRequest,同时采用http://xxx.xxx.xxx/ws作为namespace的SOAP消息,一旦我们的客户端发出的SOAP消息满足上述条件就会执行这里的getUsers方法。
@RequestPayload的Annotation,这就表示这个UserRequest值需要从客户端请求的SOAP消息的Body当中解析出来,解析后的Body部分的XML要反序列化成这里需要的UserRequest对象。最后在这个方法的返回值UserResponse前面我们还添加了一个名为@ResponsePayload的Annotation,表示这个返回值将作为响应的负载返回到Webservice调用客户端。
Endpoint编写完成之后,接下来我们就可以将上述编写XSD及Endpoint类配置到Spring环境当中。
<
context:component-scan
base-package
=
"ws"
></
context:component-scan
>
<
sws:annotation-driven
/>