2012-03-25 99 views
3

我正在開發一個RESTful服務,它有兩個服務器彼此交談,可以被命名爲外部和內部。 內部寄存器請求外部進一步處理。用戶只能訪問外部。有什麼辦法來模擬HTTP錯誤響應5xx和4xx

爲了測試內部和外部服務器之間的可靠性,我想模擬外部向內部返回的HTTP錯誤。有沒有簡單的方法可以這麼做,或者我必須硬編碼外部發送給內部的響應,以測試主要是5xx和4xx錯誤。

我正在使用的服務器是JBoss,如果在所有這些信息是必要的。

在谷歌搜索,我發現這個數據的iPlanet

1.編輯obj.conf中或虛擬服務器的特定的obj.conf

2.添加

下面的這行

錯誤代碼= 「200」 FN = 「設定變量」 誤差= 「503」

即使成功投放也會返回503(這會導致默認返回200)。

我尋找類似的JBoss的

回答

2

我不知道JBoss的配置,可以讓你在應用程序之外做到這一點。但它很容易的設置你的應用程序中的資源,它可以模擬這種行爲並刪除供應商特定的應用程序服務器上的依賴:

@GET @POST @PUT @DELETE 
@Path("/echostatus/{statusCode}") 
@Produces(MediaType.TEXT_PLAIN, MediaType.TEXT_HTML) 
public Response echoStatus(@PathParam("statusCode") final Integer statusCode) { 
    return Response.status(statusCode.intValue()).build(); 
} 
1

東西是很容易產生錯誤500只是拋出異常到Web服務方法。 JBoss將生成響應代碼500.

其他使用HTTP Resptonse API的方式。只需設置你想要的狀態。如果你想要的話,你可以在HTTP過濾器中編寫這個代碼,它只能用於測試目的。這樣你可以模擬任何HTTP狀態(400或500系列)

+1

感謝名單AlexR但對於這一切我不得不做出改變成Java代碼,並重新打包爲WAR文件。但我要的是簡單的方式在我的問題提到iPackage服務器,它可以讓我選擇了什麼樣的錯誤代碼返回,而不是200即使在成功響應。 – Harshdeep 2012-03-25 17:48:16

2

在我看來,以測試這種整合,這將是更容易開發簡單的存根web應用程序將返回任何URI的5xx代碼。爲了使其更加靈活,你可以添加一些把手,以便能夠調整在運行時該測試程序的行爲(例如,基於URI,對請求的各種參數,...)。

我不知道JBoss中有任何組件會重寫狀態代碼,但是很容易做到。只寫你自己的Tomcat閥門並把它放在server.xml

import java.io.IOException; 
import javax.servlet.ServletException; 
import org.apache.catalina.Lifecycle; 
import org.apache.catalina.connector.Request; 
import org.apache.catalina.connector.Response; 
import org.apache.catalina.valves.ValveBase; 

public class RequestThroughputLimitValve extends ValveBase implements Lifecycle { 

    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    // NOTE: THIS IS NOT COMPLETE IMPLEMENTATION 
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

    private int statusCode; 

    @Override 
    public void invoke(Request request, Response response) throws IOException, ServletException { 
    // Pass the request further, if necessary 
    getNext().invoke(request, response); 

    // Tweak the response 
    response.setContentType("text/plain"); 
    response.sendError(this.statusCode, "Forced error.");  
    } 

    // This will make the status code configurable in valve 
    public void setStatusCode(int statusCode) { 
    this.statusCode = statusCode 
    } 

    public int getStatusCode() { 
    return this.statusCode; 
    } 
} 
相關問題