Sorry for the spam. I read the javadoc for fileupload and noticed in
*bold* that the inputstream is closed between requests....doh.
Strange that it works for files under 10 kb though....
On 12/6/06, Mats Norén <[EMAIL PROTECTED]> wrote:
> I've been using wicket 1.2.1 in my application but decided to upgrade to
> 1.2.3.
> Basically everything works except my FileUpload to a Jackrabbit-repository.
> My testcases for my DAO:s working against the jackrabbit repo still
> works but in my application any file larger than 10kb gets an
> exception inside Jackrabbit:
> "Bad filedescriptor"
>
> The only thing I can think of is that the handling of the
> FileUpload.getInputStream() has changed somehow.
> The code looks like this (parts omitted for clarity):
>
> Button uploadButton;
> //document.
> add(uploadButton = new Button("upload") {
> protected void onSubmit() {
> final FileUpload upload =
> fileUploadField.getFileUpload();
> if (upload != null) {
> try {
> Document document = getDocument();
> document.setName(upload.getClientFileName());
>
> document.setFilename(upload.getClientFileName());
> document.setMimeType(upload.getContentType());
> document.setInputStream(upload.getInputStream());
> document.setSize(upload.getSize());
> System.out.println(document.getSize());
> document.setContentIsNew(true);
> setDocument(document);
> } catch (Exception e) {
> throw new IllegalStateException("Unable to
> upload file", e);
> }
> }
> }
> }.setDefaultFormProcessing(false));
>
> Button saveButton = new Button("save") {
>
> protected void onSubmit() {
> Document document = getDocument();
> ...
> documentDAO.save(document);
> ...
> }
> }
>
>
> Inside documentDAO.save:
> ...
> Node resNode = null;
>
> try {
> resNode = node.getNode("jcr:content");
> } catch (PathNotFoundException e) {
> resNode = node.addNode("jcr:content", "nt:resource");
> }
>
> if (document.isContentNew()) {
> resNode.setProperty("jcr:mimeType",
> document.getMimeType());
> resNode.setProperty("jcr:encoding",
> document.getEncoding());
> resNode.setProperty("jcr:data",
> document.getInputStream());
> // resNode.setProperty("jcr:size",
> document.getSize());
> resNode.setProperty("jcr:lastModified",
> document.getLastModified());
> }
> ....
>
> The code fails on the "jcr:data" when accessing document.getInputStream()
> with:
>
> dao.jcr.DocumentException: error saving document node model
> at xxx.plan.dao.jcr.DocumentDAO.save(DocumentDAO.java:442)
> at
> xxx.plan.dao.jcr.DocumentDAO$$FastClassByCGLIB$$339cce88.invoke(<generated>)
> at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
> at
> wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:282)
> at
> se.curalia.plan.dao.jcr.DocumentDAO$$EnhancerByCGLIB$$d394039b.save(<generated>)
> at
> se.curalia.plan.web.page.document.EditDocumentPage$EditDocumentForm$3.onSubmit(EditDocumentPage.java:334)
> at wicket.markup.html.form.Form.delegateSubmit(Form.java:568)
> at wicket.markup.html.form.Form.onFormSubmitted(Form.java:313)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at
> wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:163)
> at
> wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget.java:74)
> at
> wicket.request.compound.DefaultEventProcessorStrategy.processEvents(DefaultEventProcessorStrategy.java:65)
> at
> wicket.request.compound.AbstractCompoundRequestCycleProcessor.processEvents(AbstractCompoundRequestCycleProcessor.java:57)
> at
> wicket.RequestCycle.doProcessEventsAndRespond(RequestCycle.java:896)
> at wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:929)
> at wicket.RequestCycle.step(RequestCycle.java:1010)
> at wicket.RequestCycle.steps(RequestCycle.java:1084)
> at wicket.RequestCycle.request(RequestCycle.java:454)
> at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:219)
> at wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:262)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at
> se.curalia.plan.jbpm.SetActorFilter.doFilter(SetActorFilter.java:41)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at
> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
> at
> org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
> at
> org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
> at
> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
> at
> org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
> at
> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
> at
> org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:181)
> at
> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
> at
> org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:108)
> at
> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
> at
> org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:191)
> at
> org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
> at
> org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
> at
> org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:90)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
> at
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
> at
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
> at
> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
> at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.jcr.RepositoryException: failed to spool stream to
> internal storage: Bad file descriptor: Bad file descriptor
> at
> org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImpl.java:764)
> at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:2208)
> at se.curalia.plan.dao.jcr.DocumentDAO.save(DocumentDAO.java:383)
> ... 61 more
> Caused by: java.io.IOException: Bad file descriptor
> at java.io.FileInputStream.readBytes(Native Method)
> at java.io.FileInputStream.read(FileInputStream.java:177)
> at
> org.apache.jackrabbit.core.value.BLOBFileValue.<init>(BLOBFileValue.java:148)
> at
> org.apache.jackrabbit.core.value.BLOBFileValue.<init>(BLOBFileValue.java:120)
> at
> org.apache.jackrabbit.core.value.InternalValue.create(InternalValue.java:232)
> at
> org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImpl.java:759)
> ... 63 more
>
>
> /Mats
>
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user