Hello Richard, I answer in the message content. > 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. You're welcome! Thanks very much for your proposal! > 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. The restlet-browser.js in the modules/org.restlet.js/src/dist folder is the assembly file that selects which files to include in the Restlet JS edition for browser. After having run Ant with build.browser task, the js file for the edition can be found in the modules/org.restlet.js/target/browser directory. > 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). Do you know if tcpmon updates the request by adding or removing some HTTP headers? > > 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. I discussed this issue with Restlet team and the problem comes from the Jackson extension. In fact, there is a problem when computing scores to route to the right method. They're working on this issue... > > Thanks again!! > RB Thierry
------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2925813