我是Web服务开发人员的初学者。 我们正在使用Spring 3在Java中构建REST Web应用程序。将异步Web服务调用为Java中的同步
我们正在使用的Web服务具有异步登录方法。我们为他们提供了一个回调监听器URL,在这些URL中他们的服务回发响应。
因此,当我们发送登录请求时,我们收到一个空白答复作为确认。并且服务在侦听器URL上发送实际数据的响应。
请帮助,我应该如何设计/实现调用登录服务作为同步调用? 谢谢。
编辑: 下面是回发信息的侦听器/控制器,它提取令牌并设置为一个对象。
@Controller
public class PostbackController {
@Autowried
public LoginResponse loginRS;
@RequestMapping(value = "/callbacklistener", method = RequestMethod.POST)
@ResponseBody
public String postbackHandler(@RequestParam("postback") String requestMessage) {
//We extract the token value from requestMessage.
String token = requestMessage;
loginRS.setToken(token);
return "<Confirm/>";
}
}
以下是调用登录服务的线程,并等待10秒。每2秒检查一次物体的状态。
public class LoginService extends Thread {
@Autowried
public LoginResponse loginRS;
public LoginService() {
this.start();
}
@Override
public void run() {
try {
System.out.println("Thread Start.");
this.login();
System.out.println("Thread Complete.");
} catch (InterruptedException e) {}
}
public LoginResponse login() {
String loginXML = "";
String response = "";//by calling REST web service using RESTtemplate we get blank response.
for(i=0; i < 6; i++) {
if(loginRS.getToken().length > 0)) {
//Got the response exit from thread
break;
}
else {
//Wait for 2 second
Thread.sleep(2000)
}
}
return loginRS;
}
}
如果您需要更多信息,请让我知道。由于
哦相同的实例。虽然我不知道这是否直接违反了REST的“规则”,但它肯定违反了原则的精神。 (它还要求客户端在某个地方托管Web服务,这只是令人讨厌的。) –