我正在开发一个RESTful服务,它有两个服务器相互通信,可以命名为external和internal。 内部寄存器向外部请求进一步处理。用户只能访问外部。
为了测试内部和外部服务器之间的可靠性,我想模拟外部返回内部的HTTP错误。有没有简单的方法可以这样做,或者我必须硬编码外部发送到内部的响应,主要测试5xx和4xx错误。
我正在使用的服务器是JBoss,如果需要这些信息的话。
在搜索Google时,我发现了iPlanet的这些数据
1。编辑obj.conf或特定于虚拟服务器的obj.conf
2。在
下添加以下行错误代码=“200”fn =“set-variable”error =“503”
即使成功投放也会返回503(默认情况下会返回200)。
我正在为 JBoss
寻找类似的东西答案 0 :(得分: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 :(得分:2)
在我看来,为了测试这种集成,开发简单的存根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;
}
}
答案 2 :(得分:1)
很容易产生错误500.只需将异常抛出到Web服务方法中。 JBoss将生成响应代码500。
使用HTTP Resptonse API的其他方式。只需根据需要设置状态即可。如果需要,可以在HTTP过滤器中编写此代码,该过滤器只能用于测试目的。这样您就可以模拟任何HTTP状态(400或500系列)