是否有任何方法可以模拟HTTP错误响应5xx和4xx



我正在开发一个RESTful服务,它有两个服务器相互通信,可以命名为外部和内部。内部寄存器向外部寄存器请求进一步处理。用户只能访问外部。

为了测试内部和外部服务器之间的链接的可靠性,我想模拟从外部到内部返回的HTTP错误。有什么简单的方法可以做到这一点吗?否则我将不得不对从外部发送到内部的响应进行硬编码,以测试主要是5xx和4xx错误。

如果需要这些信息,我使用的服务器是JBoss。

在谷歌上搜索时,我发现了iPlanet 的数据

1.编辑obj.conf或您的虚拟服务器特定的obj.conf

2.在下添加以下行

错误代码="200"fn="设置变量"错误="503"

即使服务成功,也会返回503(默认情况下会返回200)

我正在为JBoss

寻找类似的东西

我不知道JBoss配置允许您在应用程序之外执行此操作。但是,在应用程序中设置一个Resource就足够容易了,它可以模拟这种行为,并消除对供应商特定应用程序服务器的依赖:

@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();
}

在我看来,为了测试这种集成,开发一个简单的存根web应用程序会更容易,它会为任何URI返回5xx代码。为了使其更加灵活,您可以添加一些句柄,以便能够在运行时调整此测试应用程序的行为(例如,基于URI、请求的各种参数…)

我不知道JBoss中有任何组件会重写状态代码,但自己做很简单。只需编写自己的Tomcat Valve并将其放入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;
  }
}

很容易产生错误500。只需向web服务方法中抛出异常。JBoss将生成响应代码500。

另一种方式是使用HTTP响应API。只需根据需要设置状态即可。如果您愿意,您可以在HTTP过滤器中编写此代码,该过滤器只能用于测试目的。通过这种方式,您可以模拟任何HTTP状态(400或500系列)

最新更新