Hi, Your application design is not restful. You don't have to use the representation data to identify your business object. You identify your business object only with the URL.
The representation contains only the business object, not the information to locate it. For that reason a delete request has on entity. But this does not allow a NullPointerException :-). An IllegalArgumentException would be better. Best regards Stephan -- Urspr. Mitt. -- Betreff: Problem with delete method in my client application Von: Sergio <[email protected]> Datum: 25.05.2013 02:08 Hi all! I'm a newbie with Restlet and I have a problem. I created a service that works perfectly but my client application does not. It fails when I invoke the DELETE method. GET, POST and PUT works fine. This is the code from my client application: JSONObject object = new JSONObject(); object.put("name", "a name"); Request request = new Request(Method.DELETE, reference); request.setEntity(new JsonRepresentation(object.toString())); Client client = new Client(Protocol.HTTP); Response response = client.handle(request); String text = response.getEntity().getText(); The code from the ServerResource class: 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); } } ... } POST and PUT methods start with the same code. I tested each method using Advanced Rest Client in Chrome and all of them works perfectly. It only fails in my client application. This is the exception: 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 - The line 95 is "String jsonString = (new JsonRepresentation(entity)).getJsonObject().toString();". I'm stuck and need help with this. Thanks in advance. ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3056251 ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3056425

