On 22 oct, 19:37, Alex Rice <[EMAIL PROTECTED]> wrote:
> My cms server (Alfresco) requires form POSTs to have the tag
> enctype="multipart/form-data" (even if no files or uploads are in the
> form).

Extensively working with Alfresco, I can assure you Web Scripts can
actually accept application/x-www-form-urlencoded data. You'll just
get them into args and argsM instead of formdata. Note that this is a
side-effect of running the Web Script within a servlet context (and
probably constrained to running within Tomcat) as it depends on the
implementation of ServletRequest.getParameterMap(), which (at least in
Tomcat) decodes application/x-www-urlencoded request bodies.
I was with Michael Uzquiano (Director of Alfresco WCM Products) and
David Caruana (Alfresco Chief Architect) last week and we talked about
it. I asked them if they could at least document it, or even better
guarantee this behavior even in non-servlet environments (such as the
unit-testing standalone Web Script runtime).

But this is all going to change with Alfresco 3 though...
(if you can read French, I wrote some notes about the new Alfresco
Surf platform on my company's blog, and some of this is available on
the Web Script side: http://blog.atolcd.com/?p=26 )

> Since GWT doesn't provide any methods for constructing the body/
> payload of post requests, I am trying to roll my own but so far my
> server isn't recognizing the data.

I wrote one too for GWT-in-the-AIR (it outputs to a ByteArray, which
is specific to Adobe AIR, but you could easily change it to append to
a StringBuilder):
http://code.google.com/p/gwt-in-the-air/source/browse/trunk/src/net/ltgt/gwt/air/user/client/ui/impl/MultipartFormDataGenerator.java

> This is not an SOP issue; I am
> hitting the server successfully.  Can anyone spot any errors in the
> following? I have GWT.Logged the requestData and it looks correct
> AFAIK based on the RFC and web articles I've read about this.
>
> In a subclass of RequestBuilder I have:
>
>     // post body delimiters and headers:
>         public static final String BOUNDARY = "c0ff33";
>         public static final String CONTENT_DISP_LINE = "Content-disposition:
> form-data; filename=\"\" name=\"";

If you don't send files, don't output filename=""

>         public static final String TEXT_PLAIN  = "Content-type: text/plain;
> charset=utf-8";
>
>         // http headers:
>         public static final String CONTENT_TYPE_HEADER = "Content-type";
>         public static final String CONTENT_LENGTH_HEADER = "Content-
> length";
>         public static final String CONTENT_TYPE  = "multipart/form-data;
> boundary="+BOUNDARY;
>
>        // builds the body of the request, and sets appropriate
> headers
>         public void setMultipartFormData(final String key, final String
> value)
>         {
>                 StringBuffer body = new StringBuffer();
>                 body.append("--" + BOUNDARY+"\n");

Line separator should be CRLF (\r\n)

>                 body.append(CONTENT_DISP_LINE+ key+"\"\n");
>                 body.append(TEXT_PLAIN+"\n\n");
>                 body.append(value);
>                 body.append("\n--" + BOUNDARY+"--\n");
>                 setHeader(CONTENT_TYPE_HEADER, CONTENT_TYPE);
>                 setHeader(CONTENT_LENGTH_HEADER, 
> String.valueOf(body.length()));

Content-Length is expressed in bytes, while body.length() is a
character count; you shouldn't set the Content-Length (the browser
will do it for you eventually)

>                 setRequestData(body.toString());
>         }
>
> // in another class:
> MyRequestBuilder rb = new MyRequestBuilder(RequestBuilder.POST, url);
> rb.setMultipartFormData("json", jsonStr);
> rb.setCallback(new RequestCallback() ...);
> rb.send();
>
> An alternate idea would be to have a hidden FormPanel that I setup and
> let the browser do the Posting  for me. However, a drawback there
> would be that the FormHandler is less useful than the
> RequestCallback.
>
> Any suggestions appreciated. Thanks

The best advice I could give you is to use application/x-www-form-
urlencoded with your Alfresco Web Script ;-)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to