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