Java 有没有办法模拟HTTP错误响应5xx和4xx
我正在开发一个RESTful服务,它有两个服务器相互通信,可以命名为外部服务器和内部服务器。 内部向外部注册请求,以便进一步处理。只有外部用户可以访问 为了测试内部和外部服务器之间的链接的可靠性,我想模拟外部到内部服务器返回的HTTP错误。有什么简单的方法可以做到这一点,否则我将不得不硬编码外部发送到内部的响应,主要用于测试5xx和4xx错误 如果需要这些信息,我使用的服务器是JBoss 在搜索谷歌时,我找到了iPlanet的这些数据 一,。编辑obj.conf或特定于虚拟服务器的obj.conf 二,。在下面添加以下行 错误代码=“200”fn=“设置变量”错误=“503” 即使服务成功,也会返回503(默认情况下会返回200)Java 有没有办法模拟HTTP错误响应5xx和4xx,java,http,rest,jboss,http-error,Java,Http,Rest,Jboss,Http Error,我正在开发一个RESTful服务,它有两个服务器相互通信,可以命名为外部服务器和内部服务器。 内部向外部注册请求,以便进一步处理。只有外部用户可以访问 为了测试内部和外部服务器之间的链接的可靠性,我想模拟外部到内部服务器返回的HTTP错误。有什么简单的方法可以做到这一点,否则我将不得不硬编码外部发送到内部的响应,主要用于测试5xx和4xx错误 如果需要这些信息,我使用的服务器是JBoss 在搜索谷歌时,我找到了iPlanet的这些数据 一,。编辑obj.conf或特定于虚拟服务器的obj.con
我正在为JBoss寻找类似的东西,它很容易产生错误500。只需将异常抛出到web服务方法中。JBoss将生成响应代码500
另一种方法是使用HTTP响应API。只要设置你想要的状态。如果需要,您可以在HTTP筛选器中编写此代码,该筛选器只能安装用于测试目的。通过这种方式,您可以模拟任何HTTP状态(400或500系列)我不知道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();
}
在我看来,为了测试这种集成,开发简单的存根web应用程序将更容易,它将返回
5xx
任何URI的代码。为了使其更灵活,您可以添加一些句柄,以便能够在运行时调整此测试应用程序的行为(例如,基于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;
}
}
但对于所有这些,我必须对java代码进行更改,并将其重新打包为war文件。但我想要的是我在前面提到的iPackage服务器中的简单方法,它允许我选择返回什么错误代码,而不是在成功响应时返回200。