2017-12-20 7 views
0

Ich baue eine grundlegende WebServices mit JAX-RSJAX-RS kann nicht XML-Antworttyp von GET-Methode

hier sind die GET-Methoden erhalten:

/** 
* Returns all songs 
* @return all songs 
*/ 
@GET 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public Collection<Song> getAllSongs() { 
    return SongsRXStore.getInstance().getAllSongs(); 
} 

/** 
* Returns song with id: "id" 
* @param id the "id" 
* @return song with id: "id" 
*/ 
@GET 
@Path("/{id}") 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public Response getSong(@PathParam("id") Integer id) { 
    Song song = SongsRXStore.getInstance().getSongById(id); 
    if (song != null) 
     return Response.ok(song).build(); 
    else 
     return Response.status(Response.Status.NOT_FOUND) 
       .entity(Response.Status.NOT_FOUND + ": No Song found with id " + id).build(); 
} 

Es scheint ganz gut, wie es ist, aber ich kann den XML-Typ nicht zurückbekommen.

Hier werden alle Songs (erste Methode oben) als json und xml angefordert. Wie Sie sehen können, wird nur der JSON korrekt zurückgegeben, aber nicht das XML. enter image description here

gleiche mit nur einem bestimmten Song (zweite Methode Formular oben) anfordert: enter image description here

Wie kann ich es funktioniert bitte?

EDIT: @XmlRootElemnt Tag ist natürlich allready hinzugefügt mein POJO_Bean Song.java:

@XmlRootElement(name = "song") 
public class Song { 
+0

Bitte Code als Text und ** nicht als ** Bild einfügen. Danke. – zx485

+0

ok fertig, hast du irgendeine Lösung für mein Problem? –

Antwort

1

Mehr als ein Medientyp in der gleichen @Produces Erklärung erklärt werden kann.

Das folgende Codebeispiel zeigt, wie dies geschehen ist:

@Produces({"application/xml", "application/json"}) 
public String doGetAsXmlOrJson() { 
    ... 
} 

Die doGetAsXmlOrJson Methode aufgerufen wird erhalten, wenn eine der beiden Medientypen application/xml und application/json akzeptabel ist. Wenn beide gleichermaßen akzeptabel sind, wird ersteres gewählt, weil es zuerst auftritt.

Weitere Informationen finden Sie unter link.

+0

danke für deine antwort. leider ist das was ich schon mache und es funktioniert nicht ... beide emthods produzieren schon xml und json. ABER es macht nur JSON-Antwort, während XML-Antworten leer sind childs (siehe Screenshots von Konsolenausgabe) –

+0

versuchen, '@ XmlRootElement' Annotation in Ihrer Song-Klasse hinzuzufügen. –

+0

bereits getan tut mir leid für nicht in Frage zu stellen.Ich werde es jetzt hinzufügen –

0

Ich weiß nicht, ob ich die Antwort bekommen habe, aber irgendwie fing es an, die IDs anstelle von leeren XML-Kindern auszugeben. Ich habe die getId-Methode aus privaten prior jsut für die Öffentlichkeit, um zu sehen, ob es tut etwas tut und es tat (!!!!)

Also setze ich alle emthods in meiner Song-Klasse zu veröffentlichen und es funktioniert jetzt .

Macht es Sinn? Wenn ja pls ausgearbeitet, wie ich jetzt verwirrt bin, warum es jetzt funktioniert ...

Verwandte Themen