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=100Simple 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)