OK, so I write a REST server using Java and try to test it, but I keep getting the 500 error code. Please help. I went through the code and know that it reaches the bottom of this method with ArrayList DataClass objects that are formatted correctly (I tested them and ran successfully without successfully completing REST).
Here is the REST method that I call
@GET @Produces(MediaType.APPLICATION_XML) public List<DataClass> receiveXML( @DefaultValue("null") @QueryParam("artist") String artist, @DefaultValue("null") @QueryParam("title") String title, @DefaultValue("null") @QueryParam("album") String album, @DefaultValue("null") @QueryParam("genre") String genre, @DefaultValue("null") @QueryParam("type") String type, @DefaultValue("false") @QueryParam("open") Boolean open, @DefaultValue("false") @QueryParam("close") Boolean close, @DefaultValue("noPath") @QueryParam("path") String path, @DefaultValue("noKey") @QueryParam("key") String key, @DefaultValue("null") @QueryParam("show") String show, @DefaultValue("null") @QueryParam("season") String season, @DefaultValue("null") @QueryParam("format") String format) { if(!artist.equals("null")) this.artist = artist; if(!title.equals("null")) this.title = title; if(!album.equals("null")) this.album = album; if(!genre.equals("null")) this.genre = genre; if(!type.equals("null")) this.type = type; if(!open.equals("false")) this.open = open; if(!close.equals("false")) this.close = close; if(!path.equals("noPath")) this.path = path; if(!key.equals("noKey")) this.keyword = key; if(!show.equals("null")) this.show = show; if(!season.equals("null")) this.season = season; if(!format.equals("null")) this.format = format; MultivaluedMap<String,String> queryParams = buildMap(); List<DataClass> resp = receive(queryParams); return resp; }
Here is the DataClass
@XmlRootElement public class DataClass { public String pathname; ArrayList<String> parsedSet; ResultSet resultSet; public String id, path, type, category, size, update, idMeta, title, description; public String genre, album, artist, show, season; public DataClass(ResultSet resultSet){ this.resultSet = resultSet; parsedSet = new ArrayList<String>(); setStringVariables(); } public DataClass(String pathname){ this.pathname = pathname; } methods to set the fields... }
And this is how I call the server, I know that the server is being called correctly, because I have a testing method that simply returns a string.
public static void testXML() {
Here is my mistake
Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/TigrisRESTServer/rest/media?type=music returned a response status of 500 Internal Server Error at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503) at tigris.restserver.client.ourClient.testXML(ourClient.java:45) at tigris.restserver.client.ourClient.main(ourClient.java:28)
Sorry, I forgot to include some things
The class in which getXML is defined has this
@Path("/media") public class Server { }
and here is the web.xml file
<?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" id="WebApp_ID" version="2.5"> <display-name>RestServer</display-name> <servlet> <servlet-name>Tigris REST Server App</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>tigris.restserver.connection</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Tigris REST Server App</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
and this works fine (all it does is return a string)
Here is the client
public static void testTEST() { System.out.println(service.path("rest").path("media").accept( MediaType.TEXT_PLAIN).get(String.class)); }
Here is the server side
@GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "Hello Server"; }
Thanks. twain249