Hi everybody!
I have some troubles with parsing simple plain-text form fields in Restlet v1.1

The form looks like
<form action="/restletServlet" method="post" enctype="multipart/form-data">
  <textarea name="simpleField" rows="10" cols="100">Simple text 
content</textarea>
  <input type="submit" value="post">
</form>

I've tried to parse multipart request from my resource as in the example at 
http://wiki.restlet.org/docs_1.1/13-restlet/28-restlet/64-restlet.html page 
(with some simplification):

----------------
// 1/ Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1000240);

// 2/ Create a new file upload handler
RestletFileUpload upload = new RestletFileUpload(factory);
try {
   upload.parseRequest(request);   // LINE X
} catch (FileUploadException e) {
   e.printStackTrace();
}
----------------
The following error occurs:

java.lang.NullPointerException
        at 
org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
        at 
org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
        at java.io.InputStream.read(Unknown Source)
        at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
        at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
        at 
org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592)
        at 
org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618)
        at 
org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637)
        at 
org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984)
        at 
org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
        at 
org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
        at 
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
        at 
org.restlet.ext.fileupload.RestletFileUpload.parseRequest(RestletFileUpload.java:104)
        at myPackage.MyResource.myPostRepresentation(MyResource.java:LINE X)

Also, when I've tried pure Apache code instead of code above:

----------------
// Create a factory for disk-based file items
FileItemFactory factory1 = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory1);

try {
        upload.parseRequest(ServletCall.getRequest(request));   // LINE X
} catch (FileUploadException e) {
        e.printStackTrace();
}
----------------

, I have following error:

org.apache.commons.fileupload.FileUploadException: Stream closed
        at 
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:385)
        at 
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
        at myPackage.MyResource.myPostRepresentation(MyResource.java:LINE X)
    ...
Caused by: java.io.IOException: Stream closed
        at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:325)
        at 
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
        at 
org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
        at 
org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
        at java.io.InputStream.read(Unknown Source)
        at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
        at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
        at 
org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592)
        at 
org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618)
        at 
org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637)
        at 
org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984)
        at 
org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
        at 
org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
        at 
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
        ... 54 more
Caused by:
java.io.IOException: Stream closed
        at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:325)
        at 
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
        at 
org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
        at 
org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
        at java.io.InputStream.read(Unknown Source)
        at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
        at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
        at 
org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592)
        at 
org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618)
        at 
org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637)
        at 
org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984)
        at 
org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
        at 
org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
        at 
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
        at 
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
        at myPackage.MyResource.myPostRepresentation(MyResource.java:LINE X)


At the same time, i have successfully parsed the same request with the help of 
the simpliest servlet without Restlet wrapper.

My question is - Does Restlet 1.1 supports parsing of simple text fields from 
forms encrypted as 'multipart/form-data'?
And if it does, any ideas what I have doing wrong?

Thanks!

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

Reply via email to