com.sun.jersey.api.MessageException

vector_ever

Mitglied
Hallo,

Ich versuchte heute meine erste Cleint REST Klasse erstellen, ich habe doch sehr einfache beispiel aber trotzdem bekomme ich komische Fehlermeldung.
Code:
public class Location {
	
	private int locationId;
	private String ort;
	private String PLZ;
	private String strasse;
	private String country;
//Setters und Getters
}
Code:
package inventory;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import beans.Location;
 
@Path("/location/plz")
public class LocationService {
 
	@GET
	@Path("/get")
	@Produces("text/html")
	public Location getLocationInHTML() {
		
		Location loc = new Location();
		
		loc.setCountry("Deutschland");
		loc.setLocationId(1);
		loc.setOrt("Berlin");
		loc.setPLZ("01019");
		loc.setStrasse("Augustusplatz 13");

		return loc; 
	} 
}
Code:
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
 
public class LocationClientGet {
 
	// http://localhost:8080/StammDaten/eumonis/location/plz/get
	
	public static void main(String[] args) {
		
		try {
			 
			Client client = Client.create();
	 
			WebResource webResource = client.resource("http://localhost:8080/StammDaten/eumonis/location/plz/get");
	 
			ClientResponse response = webResource.accept("text/html").get(ClientResponse.class);
	 
			if (response.getStatus() != 200) {
			   throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
			}
	 
			String output = response.getEntity(String.class);
	 
			System.out.println("Output from Server .... \n");
			System.out.println(output);
	 
		  } catch (Exception e) {
	 
			e.printStackTrace();
	 
		  }
	}
 
}

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>inventory;test</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
      <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/eumonis/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
</web-app>

Ich habe alle Bibliothek hinzugefügt, aber trotzdem bekomme ich jedes mal:
HTML:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class beans.Location, and Java type class beans.Location, and MIME media type text/html was not found

Was soll ich tun?
 
Hi,

es gibt standard-mäßig keinen Reader, der text/html lesen kann. Entweder, du schreibst dir selbst einen Reader, oder du liest es als XML ein. Da der Service anscheinend auch von dir zur Verfügung gestellt wird, wäre es doch ratsam, den Service XML ausgeben zu lassen.
 
Ok, ich versuchte meine Kode zu ändern, genau wie in dieser Tutorial http://www.vogella.com/articles/REST/article.html (5.5. Create a client)
Code:
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;


public class LocationClientGet {
 
	// http://localhost:8080/StammDaten/eumonis/location/plz/get
	
	public static void main(String[] args) {

		    ClientConfig config = new DefaultClientConfig();
		    Client client = Client.create(config);
		    WebResource service = client.resource(getBaseURI());

		    // The HTML
System.out.println(service.path("eumonis").path("location").path("plz").path("get").accept(MediaType.TEXT_HTML).get(String.class));

	}
	
	  private static URI getBaseURI() {
		    return UriBuilder.fromUri("http://localhost:8080/StammDaten").build();
		  }
}

Aber immer Klappt nicht, immer der gleiche Fehler!!
 
Ich habe den Grund für die Exception bereits geschrieben. Stell doch mal auf XML um. Mach aus MediaType.TEXT_HTML mal MediaType.TEXT_XML. Sowohl im Service als auch im Client.
 
OK, Danke, ich habe doch andere frage, und ich bitte dir um die Hilfe.

Sagen wir, die folgende Objekt (schon in Datenbank gespeichert):
Code:
Plz: 47055,  LocationId: 14, Bundesland: NRW, Ort: Duisburg, Strasse: Konigstr.15

Ich möchte einfache Web Seite machen wo man die erwünschte Daten schreiben, wie ein einfache Konsole wenn ich schreibe PLZ:47055 kriege die ganze Information von PLZ:47055 -->
HTML:
Plz: 47055,  LocationId: 14, Bundesland: NRW, Ort: Duisburg, Strasse: Konigstr.15
Ich möchte so machen via Jersey und die angerufne Date in die Seite sofort azeigen.

Wie kann ich so machen****
 
Jersey ist nicht dafür gedacht, Webseiten zu empfangen und darzustellen. Dafür gibt es Browser-Komponenten. Evtl. wäre es besser, sich eine andere Komponente anzuschauen, die für den Zweck des Downloads einer Website erstellt wurde. Z.B. die Apache-Commons-HttpClient-Library: http://hc.apache.org/httpclient-3.x/
 
Jersey ist eine Library, die für den speziellen Bereich RESTful Services geschrieben wurde. Das ist das Einsatzgebiet. Du würdest ja auch nicht eine Library für Grafik in 3D einsetzen, wenn du Sound ausgeben willst (sorry für die Platitüde).

Ich weiß nicht, ob es ein Tutorial für Apache HttpClient gibt, was deinen Vorstellungen eines Tutorials entspricht. Wenn du des Englischen mächtig bist, solltest du damit auch gute Ergebnisse erzielen können: http://hc.apache.org/httpclient-legacy/tutorial.html
 
Zurück