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

Reply via email to