2012-02-29 124 views
4

好吧,我正在使用Java编写一个REST服务器并尝试测试它,但我一直得到错误代码500请帮助。我已经介绍了代码,并且知道它使用正确格式化的DataClass对象的ArrayList(我检查过它们并在没有REST前端的情况下成功运行)达到了此方法的底部。REST + Java +状态500内部错误

这里是REST方法我打电话

@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;  
    } 

这里是数据类

@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... 

} 

,这里是我如何调用服务器,我知道服务器被正确的,因为调用我有一个测试方法,只是返回一个字符串。

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)); 
} 

这里是我的错误

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) 

对不起,我忘了,包括一些东西

其中receiveXML定义有这个

@Path("/media") 
public class Server { 
} 

类,这里是网络.xml文件

<?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> 

,这工作正常(它是所有返回一个字符串)

这里的客户

public static void testTEST() { 
    System.out.println(service.path("rest").path("media").accept(
      MediaType.TEXT_PLAIN).get(String.class)); 
} 

这里的服务器端

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String sayPlainTextHello() { 
    return "Hello Server"; 
} 

谢谢 twain249

+1

500是指在服务器端错误,所以你需要检查从你的服务器日志/输出,以找出问题。 – willcodejavaforfood 2012-02-29 17:12:59

回答

1

似乎你忘了包括它应该映射的路径。

@Path("/rest/") 

GET http://localhost:8080/TigrisRESTServer/rest/media?type=music 

如果你想映射URL /休息/是。

例如,看到这个链接Jersey Documentation

+0

@Path(“/ media”)位于服务器文件的顶部 – twain249 2012-02-29 06:42:09

+0

是否有任何可用的堆栈跟踪不仅仅是您发布的堆栈跟踪? – 2012-02-29 06:55:45

+0

这是完整的错误跟踪 – twain249 2012-02-29 07:33:21

相关问题