Http-204 Fehler in REST web Services (Jersey)
Ich bin mit Jersey/Java zu entwickeln, meine REST-services. Ich muss return eine XML-Repräsentation für meine CarStore :
@XmlRootElement
public class CarStore {
private List<Car> cars;
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
Hier ist mein Auto-Objekt :
@XmlRootElement
> public class Car {
private String carName;
private Specs carSpecs;
private Category carCategory;
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public Specs getCarSpecs() {
return carSpecs;
}
public void setCarSpecs(Specs carSpecs) {
this.carSpecs = carSpecs;
}
public Category getCarCategory() {
return carCategory;
}
public void setCarCategory(Category carCategory) {
this.carCategory = carCategory;
}
}
Spezifikationen und Kategorie sind enums wie diese :
@XmlRootElement
> public enum Category {
SEDANS, COMPACTS, WAGONS, HATCH_HYBRIDS, SUVS, CONVERTIBLES, COMPARABLE;
}
Meine Ressource-Klasse :
@GET
@Produces({MediaType.APPLICATION_XML})
public CarStore getCars()
{
return CarStoreModel.instance.getAllCars();
}
Mein Trikot client :
WebResource service = client.resource(getBaseURI());
System.out.println(service.path("rest").path("cars").accept(
MediaType.APPLICATION_XML).get(String.class));
Bin ich immer der Http-204-Fehler bei Zugriff alongwith client Ausnahme :
com.Sonne.jersey.api.client.UniformInterfaceException
Irgendwelche Ideen ? Danke !
EDIT : ich habe noch nicht entwickelt, die model-Klasse...ich habe gerade initialisiert einige Auto-Objekte als dummy-Daten und setzen Sie Sie in carstore. Zeigt alle Klassen, die hier wäre sehr ungeschickt.
BTW, sorry für das schreiben von 204 Fehler..es ist nur, dass ich immer eine Ausnahme, die mich dazu gebracht so zu denken.
- Aber HTTP-204 weist nicht auf Fehler hin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie sind immer ein
UniformInterfaceException
weil IhregetCars()
Funktion ist nicht Rückgabe eines HTTP-response-body. Das Grundproblem ist, dass Ihre Auto-Liste wird nicht konvertiert in XML durch JAXB weil es fehlt, ist die@XmlElement
annotation.Ihre getCars () - Funktion sollte sein:
und Ihr Auto Liste in CarStore definiert werden sollte:
Ich vermute, dass die exception nicht an die Antwort-code (204) weil 204 wird ein Erfolg, Zustand, der angibt, "Kein Inhalt".
Ist, was, die Sie zurückgeben im xml-format? Ich bin mir nicht sicher, was getAllCars tut, aber Sie können etwas wie Fiddler zu helfen, Sie sehen den Verkehr und sehen, was wird an den client zurückgegeben wird und ob es im richtigen format etc.
In Ihrem client-code, ist die Ressource Pfad korrekt? Stellen Sie sicher, dass
getBaseURI
ist gibt einen Wert zurück.Vielleicht versuchen:
Nicht fehlt dir eine @Path annotation an deine Ressource-Klasse?
Überprüfen, ob die URL ein, unter der Sie Ihr REST-WS montiert ist, die Sie erwarten, indem Sie einen Haltepunkt in Ihrem getCars () - Methode (oder in ein System einbinden.aus.println) um sicherzustellen, dass es tatsächlich aufgerufen wird.
Es scheint, es ist ein hard-coded check-in Jersey zu werfen UniformInterfaceException, wenn ein HTTP-204 zurückgegeben.
Die beste Lösung sein wird, Sie zu 'beheben' der rest-server, so wird es nie eine null zurück. z.B. eine Leere Liste zurück, oder eine Klasse mit nicht gesetzten Werten.
Sonst müssen Sie zu fangen UniformInterfaceException, die ist wirklich hässlich
Weitere Infos hier :
http://grepcode.com/file/repo1.maven.org/maven2/com.sun.jersey/jersey-client/1.17.1/com/sun/jersey/api/client/ClientResponse.java#ClientResponse.getEntity%28java.lang.Class%2Cjava.lang.reflect.Type%29