Anirban
Anirban

Reputation: 23

Spring Boot - Add delay to SOAP response to be displayed

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

Answers (1)

Sundararaj Govindasamy
Sundararaj Govindasamy

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

Related Questions