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