2012-03-25 103 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; 
    } 
} 
相关问题