Thierry:

Thanks so much for your help.  The short version is that the latest Restlet
JS code (plus one change in my code) fixes my problem with post().  There
is one "strangeness" that I will describe below, but it isn't a big problem
for me at this point, but I will describe it below in case you think it
matters.  Again, thank you!!  And, please let me know if there is any
testing that I can do for you.

Details...
I installed the new scripts.  Only part that confused me was that I
initially took restlet-browser.js from:
* modules\org.restlet.js\src\dist\restlet-browser.js
But that was the wrong file, I had to use:
* tests\org.restlet.js.tests\src\browser\static\restlet\restlet-browser.js
if that is what was intended, all is fine.

Once I put in the right restlet-browser.js, I ran my test and got a 415
error.  So I ran the test through tcpmon - and when going through tcpmon -
it worked!  But the mystery was that when going through tcpmon, the server
side method "acceptJava()" was being called, not "acceptJson()".  I changed
the ordering as per your email, but that still didn't fix my problem (but I
did discover that the re-ordering is indeed necessary, but that is getting
ahead of the story).

At this point I had:
public interface CommitmentsResource {
  @Post("json")
  public String acceptJson(String value);  // For JSON
  @Post("form")
  public Representation accept(Form form);  // For HTML form
  @Post()
  public Representation acceptJava(Commitment commitment); // For Java post
}

And...
public class CommitmentsServerResource extends WadlServerResource
implements CommitmentsResource {
@Post
public Representation acceptJava(Commitment commitment) {
 }
@Override
public String acceptJson(String value) {
 }
@Override
// This is the code that actually handles posts that come from forms and
http posts
 public Representation accept(Form form) {
}
I had the thought that acceptJava was the one being called since it was the
only one with the @Post annotation.  I changed the @Override annotations to
@Post.  And then the Javascript post was handled by the acceptJson method
(which I then fleshed out and changed to return a Represenation).

Everything would be perfect at this point, except for the "strangeness".
 Now when I run the test through tcpmon, I get a 415 error there.  The call
does make it to the server, since I get an error in the console along the
lines of:
Feb 22, 2012 3:07:33 PM org.restlet.ext.jackson.JacksonRepresentation
getObject
WARNING: Unable to parse the object with Jackson.
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance
of org.restlet.data.Form out of START_OBJECT token
 at [Source: org.restlet.engine.io.UnclosableInputStream@41c7d56b; line: 1,
column: 1]
 at
org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
  .....

And then to try and break my "non-tcpmon" client, I changed the ordering of
the @Post methods, and that did indeed break things as you had predicted.

Thanks again!!
RB

On Wed, Feb 22, 2012 at 1:07 AM, Thierry Templier [via Restlet Discuss] <
ml-node+s1400322n730770...@n2.nabble.com> wrote:

> Hello Richard,
>
> Regarding the post HTTP method and the annotated methods server
> resources, I updated the header management in the JavaScript edition.
> The routing to such methods is based on the Content-Type header. I
> committed all my updates in GitHub, so feel free to make some tests and
> give me a feedback.
>
> Be aware that there is a bug in Restlet 2.1 regarding the routing to the
> right methods. If a media isn't specified for the first method, this
> method will be used and it's not correct...
>
> @Put
> (...)
>
> @Put("json")
> (...)
>
> It works with the following:
>
> @Put("json")
> (...)
>
> @Put
> (...)
>
> This problem is about to be fixed in the Java version of Restlet.
>
> Thierry
>
> > Thanks again for your help.  I downloaded tcpmon and made the
> > suggested changes to my Java client.  I then did a post through Java
> > and below are the Request and the Response.
> >
> > Request....
> > POST /commitments/ HTTP/1.1
> > Date: Wed, 15 Feb 2012 22:19:58 GMT
> > Content-Length: 109
> > Content-Type: application/json; charset=UTF-8
> > Accept: */*
> > Host: localhost:8880
> > User-Agent: Restlet-Framework/2.1rc2
> > Cache-Control: no-cache
> > Pragma: no-cache
> > Connection: keep-alive
> >
> > {"id":0,"title":"Added through post - Java client","description":"This
> > is a description of post Java client"}
> >
> > Response...
> > HTTP/1.1 200 OK
> > Content-Type: application/json; charset=UTF-8
> > Date: Wed, 15 Feb 2012 22:19:59 GMT
> > Accept-Ranges: bytes
> > Server: Restlet-Framework/2.1rc2
> > Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
> > Content-Length: 1
> >
> > 4
> >
> > Then I moved to the Javascript side.  I didn't install Firebug, but
> > instead I just changed the ClientResource creation from:
> >   var clientResource = new ClientResource("/commitments/");  /
> > To:
> >   var clientResource = new
> > ClientResource("http://localhost:8880/commitments/";);
> > where TCPmon was running on 8880 and forwarding to 8888, which is
> > where my server was listening.
> >
> > Below are the Request and Response - and they are definitely different
> > than the Java version...
> >
> > Request...
> > OPTIONS /commitments/ HTTP/1.1
> > Host: localhost:8880
> > Connection: keep-alive
> > Access-Control-Request-Method: POST
> > Origin: http://localhost:8888
> > User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11
> > (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11
> > Access-Control-Request-Headers: Origin, Content-Type, accept
> > Accept: */*
> > Referer: http://localhost:8888/oldTest.html
> > Accept-Encoding: gzip,deflate,sdch
> > Accept-Language: en-US,en;q=0.8
> > Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
> >
> > Response...
> > HTTP/1.1 200 OK
> > Content-Type: application/vnd.sun.wadl+xml; charset=UTF-8
> > Date: Wed, 15 Feb 2012 22:22:22 GMT
> > Accept-Ranges: bytes
> > Allow: POST, GET
> > Server: Restlet-Framework/2.1rc2
> > Transfer-Encoding: chunked
> >
> > 5D2
> > <?xml version="1.0" standalone="yes"?>
> > <?xml-stylesheet type="text/xsl" href="wadl2html.xslt"?>
> > <application xmlns="http://wadl.dev.java.net/2009/02";>
> > <doc title="Commitments resource"/>
> > <representation id="commitment" mediaType="text/plain">
> > <doc title="Commitment">Simple string containing the commitment ID</doc>
> > </representation>
> > <resources>
> > <resource path="commitments/">
> > <doc title="Commitments resource">The resource that contains the list
> > of commitments in the system</doc>
> > <method name="GET">
> > <response>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/></response>
> > </method>
> > <method name="POST">
> > <request>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/></request>
> > <response>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/>
> > <representation href="#commitment"/></response>
> > </method>
> > </resource>
> > </resources>
> > </application>
> >
> > One small typo on the
> >
> http://templth.wordpress.com/2011/05/17/activating-tracing-mode-in-restlet/
>
> > article, in the ClientResource section the line:
> > Context context = clientResource.getContext();
> > should be
> > context = clientResource.getContext();
> > (but this is minor - the ease of getting the trace using Restlet
> > tracing was awesome).
> >
> > Thanks again for all your assistance!  (And my apologies in advance if
> > the problem turns out to be some silly mistake in my code - always a
> > real possibility).
> >
> > RB
>
> ------------------------------------------------------
>
> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2925370
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://restlet-discuss.1400322.n2.nabble.com/Post-problems-when-using-Restlet-Javascript-Edition-tp7270413p7307702.html
>  To unsubscribe from Post problems when using Restlet Javascript
> Edition..., click 
> here<http://restlet-discuss.1400322.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=7270413&code=cmljaGFyZEBsYW5kaXNmYW1pbHkub3JnfDcyNzA0MTN8LTYxMDE0ODc2>
> .
> NAML<http://restlet-discuss.1400322.n2.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>


--
View this message in context: 
http://restlet-discuss.1400322.n2.nabble.com/Post-problems-when-using-Restlet-Javascript-Edition-tp7270413p7310215.html
Sent from the Restlet Discuss mailing list archive at Nabble.com.

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2925595

Reply via email to