2012-03-25 6 views
3

zu simulieren Ich entwickle einen RESTful-Dienst, der zwei Server miteinander sprechen, die als extern und intern benannt werden können. Intern meldet Anfragen zur Weiterverarbeitung an extern an. Nur extern ist für Benutzer zugänglich.Gibt es eine Möglichkeit, HTTP-Fehler Antworten 5xx und 4xx

Zum Testen der Zuverlässigkeit meiner Verbindung zwischen internen und externen Server, ich möchte HTTP-Fehler als extern von intern zurückgegeben werden. Gibt es einen einfachen Weg dazu oder muss ich die Antwort, die von extern an intern gesendet wird, hart codieren, um hauptsächlich 5xx und 4xx Fehler zu testen.

Server, den ich benutze, ist JBoss, wenn überhaupt diese Information benötigt wird.

Google-Suche, fand ich diese Daten für iPlanet

1. Bearbeiten Sie die obj.conf oder virtuellen bestimmten Server obj.conf

2. die folgende Zeile

unter hinzufügen

Fehlercode = "200" fn = "set-Variable" error = "503"

würde dies 503 ergeben, sogar für den erfolgreichen Serving (was dazu führen würde, dass 200 standardmäßig zurückgegeben werden).

Ich suche etwas ähnliches für JBoss

Antwort

2

Mir ist keine JBoss-Konfiguration bekannt, die es Ihnen ermöglicht, dies außerhalb der Anwendung zu tun. Aber es ist leicht genug, um Setup für eine Ressource in Ihrer Anwendung, die dieses Verhalten simulieren würde, und entfernen Sie die Abhängigkeit von herstellerspezifischen Anwendungsserver:

@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

Es ist sehr leicht Fehler 500. Nur throw Ausnahme in Web-Service-Methode zu produzieren. JBoss generiert den Antwortcode 500.

Andere Möglichkeit zur Verwendung der HTTP-Response-API. Setzen Sie den Status einfach so, wie Sie möchten. Wenn Sie möchten, können Sie diesen Code in einen HTTP-Filter schreiben, der nur zu Testzwecken installiert werden kann. Auf diese Weise können Sie jeden HTTP-Status (sowohl 400- als auch 500er-Serie) simulieren.

+1

Thanx Alexr aber für all das werde ich auf Änderungen in Java-Code machen und sie als Krieg Datei neu verpacken. Aber ich will, ist die einfache Art und Weise wie in iPackage Server, wie ich in Frage gestellt habe, die mir erlaubt zu wählen, welche Fehlercode statt 200 sogar bei erfolgreicher Antwort zurückgeben. – Harshdeep

2

Meiner Meinung nach ist diese Integration zu testen, wäre es viel einfacher sein, einfach Stummel zu entwickeln Web App, die 5xx Code für einen URI zurückgibt. Um es flexibler zu machen, können Sie einige Handles hinzufügen, um das Verhalten dieser Testanwendung in der Laufzeit optimieren zu können (z. B. basierend auf URI, auf verschiedenen Parametern der Anfrage, ...).

Mir ist keine Komponente in JBoss bekannt, die die Sache mit dem Umschreiben des Statuscodes erledigt, aber es ist einfach, es selbst zu machen. Nur Ihr eigene Tomcat Ventil schreiben und sie in 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; 
    } 
}