@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
/>