目标是使用Vaadin upload-component上传文件。在localhost上它工作正常,而在服务器上我收到以下错误信息。
我在Glassfish 3.1.2(build 23)上运行应用程序并使用Vaadin 7.4.1。还尝试过除Glassfish 4之外的其他Glassfish版本,因为我还没有为Glassfish 4做好准备。
尝试或检查过的事情:
未检查的事项:
上传组件的代码如下所示,可能会在尝试修复错误时修改过一段时间。
上传组分:
ImageUploader receiver = new ImageUploader();
upload = new Upload("", receiver);
upload.addSucceededListener(receiver);
addComponent(upload);
ImageUploader(取自Book of Vaadin):
class ImageUploader implements Upload.Receiver, Upload.SucceededListener {
public OutputStream receiveUpload(String filename, String mimeType) {
// Create upload stream
FileOutputStream fos = null; // Stream to write to
File file = new File(filename);
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
... database stuff ...
// Return the output stream to write to, necessary for framework
return fos;
}
public void uploadSucceeded(Upload.SucceededEvent event) {
... UI-Stuff ...
}
}
在localhost实例上使用它可以正常工作。但是将它部署到服务器会使其在按下上传按钮后立即返回以下错误。但是没有显示UI错误消息。
[#|2015-03-17T15:42:14.153+0000|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=515;_ThreadName=Thread-2;|StandardWrapper$
java.io.IOException: The multipart stream ended unexpectedly
at com.vaadin.server.communication.FileUploadHandler.readLine(FileUploadHandler.java:302)
at com.vaadin.server.communication.FileUploadHandler.doHandleSimpleMultipartFileUpload(FileUploadHandler.java:360)
at com.vaadin.server.communication.FileUploadHandler.handleRequest(FileUploadHandler.java:285)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:745)
|#]
还有一个Vaadin [addon] [3]应该使这个过程更容易,但是localhost / server的结果相同。
如果有助于在整体架构中使用这些技术:
使用过的服务器主机是Amazon AWS和DigitalOcean。
现在我不再知道什么可以解决这个错误。有什么建议?我可以提供进一步的细节吗?
- JVM版本的更新 -
关于JVM,我注意到本地我最近在本地机器上安装了1.8。使用1.7 JVM不会重现错误。
- JVM补丁级别的更新 -
在开发环境中使用相同的补丁级别(1.7.0_75)不会重现错误。
答案 0 :(得分:0)
升级到Glassfish 4.1解决了这个问题。上传和数据库流程现在可以顺利运行。但是我无法确定这个问题背后的原因。
更多信息: