Есть ли способ смоделировать ответы HTTP Error 5xx и 4xx - PullRequest
3 голосов
/ 25 марта 2012

Я разрабатываю службу RESTful, в которой два сервера общаются друг с другом, которые могут быть названы как внешние и внутренние. Внутренние регистры запросов к внешним для дальнейшей обработки. Только внешний доступен для пользователей.

Для проверки надежности моей связи между внутренним и внешним сервером я хочу смоделировать ошибку HTTP, возвращаемую внешним к внутреннему. Есть ли какой-нибудь простой способ сделать это, или мне придется жестко закодировать ответ, отправляемый внешним на внутренний, для проверки в основном ошибок 5xx и 4xx.

Сервер, который я использую, - это JBoss, если вообще нужна эта информация.

При поиске в Google я нашел эти данные для iPlanet

1. отредактируйте obj.conf или специфичный для вашего виртуального сервера obj.conf

2. Добавьте следующую строку под

Код ошибки = "200" fn = "set-variable" error = "503"

это вернет 503 даже для успешной подачи (что приведет к 200 по умолчанию).

Я ищу что-то подобное для JBoss

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

Мне неизвестна конфигурация 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();
}
2 голосов
/ 27 марта 2012

По моему мнению, для тестирования этой интеграции было бы намного проще разработать простое веб-приложение-заглушку, которое будет возвращать код 5xx для любого URI.Чтобы сделать его более гибким, вы можете добавить несколько дескрипторов, чтобы иметь возможность настраивать поведение этого тестового приложения во время выполнения (например, на основе 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;
  }
}
1 голос
/ 25 марта 2012

Очень легко выдать ошибку 500. Просто добавьте исключение в метод веб-сервиса. JBoss сгенерирует код ответа 500.

Другой способ это использовать HTTP Resptonse API. Просто установите статус, как вы хотите. Если вы хотите, вы можете написать этот код в HTTP-фильтре, который может быть установлен только для целей тестирования. Таким образом, вы можете смоделировать любой статус HTTP (как 400, так и 500 серий)

...