2013-05-22 56 views
1

我是Restlet的新手,我遇到问题。我创建了一个完美的服务,但我的客户端应用程序没有。当我调用DELETE方法时失败。 GET,POST和PUT工作正常。Restlet:使用删除方法

这是我的代码(客户端):从服务

JSONObject object = new JSONObject(); 

    object.put("name", param); 

    Request request = new Request(Method.DELETE, new Reference("http://localhost:8181/Restlet_Service/")); 

    request.setEntity(new JsonRepresentation(object.toString())); 

    Client cliente = new Client(Protocol.HTTP); 
    Response response = client.handle(request); 
    String text = response.getEntity().getText(); 

代码。 GET,POST和PUT方法以相同的代码开始:

public class MyResource extends ServerResource { 

      @Delete 
      public Representation deleteUser(Representation entity) { 
        try { 
          String jsonString = (new JsonRepresentation(entity)).getJsonObject().toString(); 
          Map map = (Map) (new JSONParser()).parse(jsonString); 

          if(map.size() > 0) { 
            String message = dbc.deleteUser(map.get("name").toString()); 

            return new StringRepresentation(message, MediaType.TEXT_PLAIN); 
          } else { 

            return new StringRepresentation("Unable to delete user", MediaType.TEXT_PLAIN); 
          } 
        } catch (Exception ex) { 
          return new StringRepresentation("ERROR: " + ex.getMessage(), MediaType.TEXT_PLAIN); 
        } 
      } 
    ... } 

我在Chrome中使用Advanced Rest Client测试了每种方法,所有这些方法都很完美。它只会与我的客户端应用程序失败。这是例外:

java.lang.NullPointerException 
      at java.io.StringReader.<init>(Unknown Source) 
      at org.json.JSONTokener.<init>(JSONTokener.java:66) 
      at org.json.JSONObject.<init>(JSONObject.java:402) 
      at org.restlet.ext.json.JsonRepresentation.getJsonObject(JsonRepresentation.java:199) 
      at service.MyResource.borrarUsuario(MyResource.java:95) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
      at java.lang.reflect.Method.invoke(Unknown Source) 
      at org.restlet.resource.ServerResource.doHandle(ServerResource.java:503) 
      at org.restlet.resource.ServerResource.delete(ServerResource.java:208) 
      at org.restlet.resource.ServerResource.doHandle(ServerResource.java:594) 
      at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:649) 
      at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348) 
      at org.restlet.resource.ServerResource.handle(ServerResource.java:952) 
      at org.restlet.resource.Finder.handle(Finder.java:246) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.routing.Router.doHandle(Router.java:431) 
      at org.restlet.routing.Router.handle(Router.java:648) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211) 
      at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84) 
      at org.restlet.Application.handle(Application.java:381) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.routing.Router.doHandle(Router.java:431) 
      at org.restlet.routing.Router.handle(Router.java:648) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.routing.Router.doHandle(Router.java:431) 
      at org.restlet.routing.Router.handle(Router.java:648) 
      at org.restlet.routing.Filter.doHandle(Filter.java:159) 
      at org.restlet.routing.Filter.handle(Filter.java:206) 
      at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211) 
      at org.restlet.Component.handle(Component.java:392) 
      at org.restlet.Server.handle(Server.java:516) 
      at org.restlet.engine.ServerHelper.handle(ServerHelper.java:72) 
      at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152) 
      at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1089) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
      at java.lang.Thread.run(Unknown Source) 
    may 22, 2013 3:10:58 PM org.restlet.engine.log.LogFilter afterHandle 
    INFO: 2013-05-22 15:10:58 127.0.0.1 - 127.0.0.1 8181 DELETE /Restlet_Service/ - 200 11 17 20592 http://localhost:8181 Restlet-Framework/2.1.2 - 

这是由于请求为空,我不知道为什么。 欢迎任何帮助。谢谢!

+0

这是'MyResource.java'中的95行吗? – 2013-05-22 14:06:16

+0

对不起,我忘了它: String jsonString =(new JsonRepresentation(entity))。getJsonObject()。toString(); 请求为空。 – Sergi

+0

现在修改所有的代码后,它一切正常。感谢Restlet员工的帮助。下次我会使用Resteasy或泽西岛。 – Sergi

回答

0

我的猜测是您的客户端不会发送任何表示,因此实体为NULL,这反过来导致JsonTokenizer中的NPE。

+0

查看请求的跟踪有时会出现在正文中: '{“1”:“UserName”} DELETE/Servicio_Restlet/HTTP/1.1日期:2013年5月23日星期五14:58:39 GMT 内容-Length:21 Content-Type:application/json;字符集= UTF-8 接受:*/* 主机:本地主机:8181 的User-Agent:的Restlet框架/ 2.1.2' 有时这样的: 'DELETE/Servicio_Restlet/HTTP/1.1 日期:星期五,2013年5月24日06:28:59 GMT Content-Length:21 Content-Type:application/json; charset = UTF-8 Accept:*/* Host:localhost:8181 User-Agent:Restlet-Framework/2.1.2' 可能是api的问题吗? – Sergi