Reputation: 5706
OK so I'm writing a REST server using Java and trying to test it but I keep getting Error Code 500 Please help. I've stepped through the code and know it reaches the bottom of this method with an ArrayList of DataClass objects that are correctly formatted (I've inspected them and run without the REST front end successfully).
Here 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;
}
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();
}
/**
* 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...
}
And Here is how I call the Server, I know that the server is being invoked correctly because I have a test method that just returns a string.
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));
}
Here is my error
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 stuff
The class where the receiveXML 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's the client
public static void testTEST() {
System.out.println(service.path("rest").path("media").accept(
MediaType.TEXT_PLAIN).get(String.class));
}
Here's the server side
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Server";
}
Thank you twain249
Upvotes: 4
Views: 17609
Reputation: 47172
Seems like you forgot to include what path it's supposed to map against.
@Path("/rest/")
GET http://localhost:8080/TigrisRESTServer/rest/media?type=music
if you want to map against the URL /rest/ that is.
For example, see this link Jersey Documentation
Upvotes: 1