Hello Regis,

it seems that the entity has already been consumed. You may have already get the content of the entity (maybe a call like entity.write(...)).
If you don't see what happen, you may send us your code.

best regards,
Thierry Boileau

Sorry i mix to many functions :) I read a second time the javadoc and i discover you can't use both handlePut() == lowerlevel
and put() == high level.

So i have another issue if something can give me a clue:
When i try to get my data form from the handlePut() or the handlePost() with this code it works very well !:

@Override
    public void handlePut() {
        System.out.println(" handlePut()");
        Form form = getRequest().getEntityAsForm();
        String formId = form.getFirstValue("formId");
        System.out.println("=> formId = " + formId);
        super.handlePut();
    }
@Override
    public void handlePost() {
        System.out.println(" handlePost()");
        Form form = getRequest().getEntityAsForm();
        String formId = form.getFirstValue("formId");
        System.out.println("=> formId = " + formId);
        super.handlePut();
    }


But now when i try to use the default implementation with put() and post() method with this code it fails ! :

I get this from this post
http://article.gmane.org/gmane.comp.java.restlet/2420/match=form+post (i check the sample this is how it should work)

@Override
    public void post(Representation entity) {
        System.out.println(" post()");

        if (entity != null) {
            Form form = new Form(entity);  //throws error
            String id = form.getFirstValue("formId");
            System.out.println("=> formId = " + id);
        }
    }

@Override
    public void put(Representation entity) {
        System.out.println (" put()");
         if (entity != null) {
            Form form = new Form(entity);  //throws error
            String id = form.getFirstValue("formId");
            System.out.println("=> formId = " + id);
        }
    }

Aug 23, 2007 12:28:09 PM com.noelios.restlet.StatusFilter getStatus
SEVERE: Unhandled exception or error intercepted
java.lang.IllegalStateException: The Web form cannot be parsed as no fresh content is available. If this entity has been already read once, caching of the entity is required
    at com.noelios.restlet.util.FormUtils.parsePost(FormUtils.java:95)
    at com.noelios.restlet.Engine.parse(Engine.java:815)
    at org.restlet.data.Form.<init>(Form.java:73)
    at org.restlet.data.Form .<init>(Form.java:99)
    at com.webmd.restlet.rest.FormResource.post(FormResource.java:49)
    at org.restlet.resource.Resource.handlePost(Resource.java:479)


Somebody can explain in which case to use the handlePut() and the put(Representation entity) ?

Thanks a lot for the reply

On 8/22/07, *regis regis* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Thanks a lot for the quick reply now it works very well.
    It was not clear.
    I hope it will help.


    But know i have a second problem , when i try to access to my data
    in the request object in a handlePut() or in handlePost() like this

    Form form = getRequest().getEntityAsForm();
    String value = form.getFirstValue("text");
    String method = form.getFirstValue ("method");

    if i doing getRequest().getEntityAsObject()  it returns a null ....

    I get this error, what does it mean ?

    java.lang.IllegalStateException : The Web form cannot be parsed as
    no fresh content is available. If this entity has been already
    read once, caching of the entity is required
        at com.noelios.restlet.util.FormUtils.parsePost(FormUtils.java:95)
        at com.noelios.restlet.Engine.parse(Engine.java:815)
        at org.restlet.data.Form.<init>(Form.java:73)
        at org.restlet.data.Form .<init>(Form.java:99)


    There is something i forgot.

    Thks a lot


    On 8/22/07, *Jerome Louvel * < [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>> wrote:


        Hi Regis,

        There is a built-in service for that, based on a query
        parameter. See:
        http://www.restlet.org/documentation/1.0/faq#19

        You have to put the parameter into the query string of the
        action's URI.
        <form action="api/form?method=put" method="post"
        enctype="text/plain">

        Best regards,
        Jerome

        > -----Message d'origine-----
        > De : regis regis [mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>]
        > Envoyé : mercredi 22 août 2007 21:41
        > À : discuss@restlet.tigris.org
        <mailto:discuss@restlet.tigris.org>
        > Objet : tunnelFilter in tomcat container - how ???
        >
        > Hi i try to implement in a tomcat container the
        >
        > => How can I make PUT or DELETE calls from browsers? i read
        > the faq/mailing list but there is not a lot informations
        about that.
        >
        > So my goal it is pretty simple, a html page with a <form>
        > which contain a <input type="hidden"> with the name="method"
        > and value="put" (or "delete"), and call the associate method
        > in a resource ( handlePut() or handleDelete() ).
        >
        > My problem it is i never go to the handlePut() ! But always
        > to the handlePost().
        > When i debug the application in the request object, in the
        > method attribute it is always POST !!!
        >
        >
        > So here my code :
        >
        > XHTML Page:
        >
        > <?xml version=" 1.0" encoding="UTF-8"?>
        > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        > " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
        > <html xmlns="http://www.w3.org/1999/xhtml
        <http://www.w3.org/1999/xhtml>" xml:lang="en" lang="en">
        >     <head>
        >         <title>form.xhtml</title>
        >         <meta http-equiv="keywords"
        > content="enter,your,keywords,here" />
        >         <meta http-equiv="description" content="A short
        > description of this page." />
        >         <meta http-equiv="content-type" content="text/html;
        > />
        >
        >         <base href=" http://localhost:8080/restlet/ "/>
        >     </head>
        >     <body>
        >         <form action="api/form" method="post"
        enctype="text/plain">
        >             <input type="text" name="text" />
        >
        >             <input  type="hidden" name="method" value="PUT"/>
        >             <input  type="submit" name="ok" value="ok"/>
        >         </form>
        >
        >     </body>
        > </html>
        >
        >
        > web.xml
        >
        > <web-app>
        >
        >   <!-- Your application class name -->
        >   <context-param>
        >      <param-name> org.restlet.application</param-name>
        >      <param-value>com.webmd.restlet.app.RestApplication
        </param-value>
        >   </context-param>
        >
        >   <servlet>
        >      <servlet-name>RestServlet</servlet-name>
        >
        > <servlet-class>com.noelios.restlet.ext.servlet.ServerServlet</
        > servlet-class>
        >   </servlet>
        >
        >   <servlet-mapping>
        >      <servlet-name>RestServlet</servlet-name>
        >      <url-pattern>/api/*</url-pattern>
        >   </servlet-mapping>
        >
        > </web-app>
        >
        >
        > com/webmd/restlet/app/RestApplication.java
        >
        >
        > public class RestApplication extends Application {
        >
        >     public RestApplication(Context context) {
        >         //enable the tunnel service
        >         TunnelService tunnelService = new TunnelService(true,
        > true, true);
        >         tunnelService.setMethodParameter ("method");
        >         this.setTunnelService(tunnelService);
        >
        >     }
        >
        >     @Override
        >     public Restlet createRoot() {
        >         Router router = new Router(getContext());
        >         router.attach(/form, FormResource.getClass());
        >
        >         TunnelFilter tunnelFilter = new TunnelFilter(this);
        >         tunnelFilter.setContext(getContext());
        >         tunnelFilter.setNext (router);
        >
        >         return tunnelFilter;
        >     }
        >
        >     public void handle(Request request, Response response) {
        >         try {
        >             start();
        >         } catch (Exception ee) {
        >             ee.printStackTrace();
        >         }
        >         super.handle(request, response);
        >     }
        >
        > }
        >
        > com/webmd/restlet/rest/FormResource .java;
        >
        > public class FormResource extends Resource {
        >
        >
        >     @Override
        >     public void init(Context context, Request request,
        > Response response) {
        >
        >         System.out.println(" init()");
        >         Form form = request.getEntityAsForm();
        >
        >         String value = form.getFirstValue("text");
        >         String method = form.getFirstValue("method");
        >
        >         super.init (context, request, response);
        >     }
        >
        > @Override
        >     public boolean allowDelete() {
        >         return true;
        >     }
        >
        >     @Override
        >     public boolean allowGet() {
        >         return true;
        >     }
        >
        >
        >     @Override
        >     public boolean allowPost() {
        >         return true;
        >     }
        >
        >
        >     @Override
        >     public boolean allowPut() {
        >         return true;
        >     }
        >
        >
        >     @Override
        >     public void handleDelete() {
        >         System.out.println(" handleDelete()");
        >         super.handleDelete();
        >     }
        >
        >
        >     @Override
        >     public void handleGet() {
        >         System.out.println(" handleGet()");
        >         super.handleGet();
        >     }
        >
        >
        >     @Override
        >     public void handlePost() {
        >         System.out.println(" handlePost()");
        >         super.handlePost();
        >     }
        >
        >
        >     @Override
        >     public void handlePut() {
        >         System.out.println (" handlePut()");
        >         super.handlePut();
        >     }
        >
        >     @Override
        >     public Representation getRepresentation(Variant arg0) {
        >         System.out.println("=> getRepresentation()");
        >         return super.getRepresentation(arg0);
        >     }
        >
        >
        >     @Override
        >     public void delete() {
        >         System.out.println(" delete()");
        >         super.delete ();
        >     }
        >
        >
        >
        >     @Override
        >     public void post(Representation arg0) {
        >         System.out.println(" post()");
        >         super.post(arg0);
        >     }
        >
        >
        >
        >     @Override
        >     public void put(Representation arg0) {
        >         System.out.println(" put()");
        >         super.put(arg0);
        >     }
        >
        > }
        >
        > Thanks for the reply
        >
        >
        >



Reply via email to