Reputation: 23
I have created a spring boot webservice(provider) application. I am passing a timewait option in request. If the value of timewait=n, I have to program the response to be delayed by that much time ie n secs/millisecs. Is there a way I can do that. XSD given below:
<xs:element name="asyncServerRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="header" type="xs:string"/>
<xs:element name="BSID" type="xs:string"></xs:element>
<xs:element name="encodedString" type="xs:string"></xs:element>
<xs:element name="timewait" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="asyncServerResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="responsecode" type="xs:int"/>
<xs:element name="reponsemessage" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Upvotes: 1
Views: 5320
Reputation: 8495
You can use Thread.sleep(n)
.
I assume "n" value is in seconds.
Integer seconds = n;
try {
Thread.sleep(seconds*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return your response here
If you want to centralize this "delay" code, then you can create a DelayFilter like below.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DelayFilter implements Filter {
private static final String DELAY_PARAMETER = "n";
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
//get delay value (DELAY_PARAMETER or n) from your request
String delay = request.getParameter(DELAY_PARAMETER);
if (delay!=null && !"".equals(delay)) {
Integer seconds = Integer.valueOf(delay);
try {
Thread.sleep(seconds*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
HttpServletResponse response = (HttpServletResponse) resp;
response.setHeader("Cache-Control", "no-cache, must-revalidate");
chain.doFilter(req, resp);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
Upvotes: 2