Rest Java status 500 internal error
OK, so I'm writing a rest server in Java and trying to test it, but I've been receiving error code 500. Please help I've stepped through the code and know that it uses the ArrayList of the correctly formatted dataclass object to reach the bottom of this method (I've checked them and haven't successfully run the rest front end)
This is the rest method I'm calling
@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; }
This is a 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(); } /** * Sets the pathname variable of the local file to be returned * @param pathname */ public DataClass(String pathname){ this.pathname = pathname; } methods to set the fields... }
Here's how I call the server. I know the server is being called correctly because I have a test method that returns only strings
public static void testXML() { //a map that adds parameters that will then be added to the the WebService MultivaluedMap<String,String> queryParams = new MultivaluedMapImpl(); queryParams.add("type","music"); //retrieve info for an artist in XML format System.out.println(service.path("rest").path("media").queryParams(queryParams).accept( MediaType.APPLICATION_XML).get(String.class)); }
This 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 something
The class that defines receivexml has this capability
@Path("/media") public class Server { }
This 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>
This works (it just returns a string)
This is the customer
public static void testtest() { System.out.println(service.path("rest").path("media").accept( MediaType.TEXT_PLAIN).get(String.class)); }
This is the server side
@GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "Hello Server"; }
Thank you Twain 249
Solution
It seems that you forgot to include the path it should map
@Path("/rest/") GET http://localhost:8080/TigrisRESTServer/rest/media?type=music
If you want to map URL / rest / that is
For example, see this link Jersey documentation