2016-07-20 9 views
1

私はスプリングブートWebサービス(プロバイダ)アプリケーションを作成しました。私は要望に応じてタイムアウトオプションを渡しています。 timewait = nの値であれば、応答時間をn秒/ミリ秒という長い時間だけ遅らせるようにプログラムする必要があります。私はそれができる方法はありますか? XSDは以下の通り:あなたはThread.sleep(n)を使用することができますスプリングブート - 表示するSOAP応答に遅延を追加します。

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

答えて

1

"n"の値は秒であると仮定します。

  Integer seconds = n; 

      try { 
       Thread.sleep(seconds*1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


//return your response here 

あなたがしたいなら、あなたは以下のようなDelayFilterを作成することができ、この「遅延」のコードを一元化。

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 

    } 

} 
+0

はい。私はこれを行うためにThread.sleep()の方法を使用しました。完璧に動作します。ありがとう。 – Anirban

+2

この手法の悪い面があります。誰かがあなたにたくさんのリクエストを送ることができます - > tomcat/jettyのスレッドプールのすべてのスレッドがスリープ状態になります - >サーバーがダウンしています。したがって、分離されたスレッドプールでスリープさせるのはおそらく良い考えです。 –

+0

@vadim_shb、良い考え –

関連する問題