REST + Java + State 500 Internal Error

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(); } /** * 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 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() { //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 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

+4
source share
1 answer

It looks like you forgot to indicate which path it should map.

 @Path("/rest/") GET http://localhost:8080/TigrisRESTServer/rest/media?type=music 

if you want to match url / rest /.

For example, see the Jersey Documentation link.

+1
source

Source: https://habr.com/ru/post/1398958/


All Articles