java.lang.NoClassDefFoundError:java.rmi.server.UID是一个受限制的类 [英] java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class

查看:127
本文介绍了java.lang.NoClassDefFoundError:java.rmi.server.UID是一个受限制的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用GWT开发一个Web应用程序,我试图上传一个文件。我的servlet工作的很好。



但是当我使用DiskFileItemFactory()时,它给了我错误。



一个可以纠正我的代码,或者告诉代码中缺少什么。

  protected void doPost(HttpServletRequest请求,
HttpServletResponse响应)
throws ServletException,IOException {

response.setContentType(text / plain);
FileItem uploadItem = getFileItem(request);
if(uploadItem == null){
response.getWriter()。write(NO-SCRIPT-DATA);
return;
}
byte [] fileContents = uploadItem.get();
// TODO:在这里添加代码来处理文件内容。我们将打印

response.getWriter()。write(new String(fileContents));

$ b $ private FileItem getFileItem(HttpServletRequest request){
// TODO自动生成的方法存根
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
尝试{
List items = upload.parseRequest(request);
Iterator it = items.iterator(); (it.hasNext()){
FileItem item =(FileItem)it.next();
if(!item.isFormField()
&&uploadForm.equals(item.getFieldName())){
return item;
}
}
} catch(FileUploadException e){
return null;
}
返回null;

错误

  java.lang.NoClassDefFoundError:java.rmi.server.UID是一个受限制的类。有关更多详细信息,请参阅Google App Engine开发人员指南。 
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at org.apache.commons.fileupload.disk.DiskFileItem。< clinit> (DiskFileItem.java:109)
at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase .java:361)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.server.FileUpload.getFileItem(FileUpload.java:101)
at com.server.FileUpload.doPost(FileUpload.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)



编辑:工作代码

 尝试{
ServletFileUpload upload = new ServletFileUpload();
response.setContentType(text / plain);


FileItemIterator iterator = upload.getItemIterator(request);

while(iterator.hasNext()){
FileItemStream item = iterator.next();

InputStream stream = item.openStream(); (item.isFormField()){
log.warning(Got a form field:+ item.getFieldName()++ item);

if


$ b} else {
log.warning(有上传的文件:+ item.getFieldName()+
,name = + item.getName());
int len;
byte [] buffer = new byte [8192]; (缓冲区,0,len)
while((len = stream.read(buffer,0,buffer.length))!= -1){

response.getOutputStream ;




$ b catch(FileUploadException e){
// TODO自动生成的catch块
e.printStackTrace();


解决方案

在GAE中不能使用RMI - 如果您需要类似的内容,请查看此问题



但是从你的代码看来你并不需要使用RMI - 你为什么要使用它?你不是只是要处理和存储它的地方?

如果您要存储大型文件(最多32MB),请使用 Blobstore API



如果您知道只有<1MB的文件,您可以存储他们使用JDO / JPA和普通的实体,其中包含 Blob - 这个选项还可以让你轻松预处理数据。


I developing a web application using GWT where i am trying to upload a file . My servlet is working fine.

but when i use DiskFileItemFactory() it gives me error.

if some one can correct my code or tell what is missing in code.

 protected void doPost(HttpServletRequest request, 
            HttpServletResponse response) 
                    throws ServletException, IOException { 

         response.setContentType("text/plain"); 
        FileItem uploadItem = getFileItem(request); 
        if (uploadItem == null) { 
          response.getWriter().write("NO-SCRIPT-DATA"); 
          return; 
        } 
        byte[] fileContents = uploadItem.get(); 
        //TODO: add code to process file contents here. We will just print 

                    response.getWriter().write(new String(fileContents)); 
}

private FileItem getFileItem(HttpServletRequest request) {
    // TODO Auto-generated method stub
    FileItemFactory factory = new DiskFileItemFactory(); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    try { 
      List items = upload.parseRequest(request); 
      Iterator it = items.iterator(); 
      while (it.hasNext()) { 
        FileItem item = (FileItem) it.next(); 
        if (!item.isFormField() 
            && "uploadForm".equals(item.getFieldName())) { 
          return item; 
        } 
      } 
    } catch (FileUploadException e) { 
      return null; 
    } 
    return null;
} 

ERROR

 java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class. Please see the Google  App Engine developer's guide for more details.
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at org.apache.commons.fileupload.disk.DiskFileItem.<clinit>(DiskFileItem.java:109)
at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.server.FileUpload.getFileItem(FileUpload.java:101)
at com.server.FileUpload.doPost(FileUpload.java:48)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

Edited: Working Code

    try {
            ServletFileUpload upload = new ServletFileUpload();
            response.setContentType("text/plain"); 


            FileItemIterator iterator = upload.getItemIterator(request);

            while (iterator.hasNext()) {
                FileItemStream item = iterator.next();

                InputStream stream = item.openStream();

                if (item.isFormField()) {
                    log.warning("Got a form field: " + item.getFieldName()  + " " +item);



                } else{
                    log.warning("Got an uploaded file: " + item.getFieldName() +
                              ", name = " + item.getName());
                    int len;
                    byte[] buffer = new byte[8192];
                    while ((len = stream.read(buffer, 0, buffer.length)) != -1) {

                      response.getOutputStream().write(buffer, 0, len);

                    }

                }

            }
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

解决方案

You cannot use RMI in GAE - if you want something similar, take a look at this question.

But from your code it doesn't seem you need to use RMI at all - why are you using it? Ain't you just going to process and store it somewhere?

If you are going to store large files (up to 32MB), use the Blobstore API.

If you know you'll only have files <1MB, you can store them using JDO/JPA and a normal Entity that contains a Blob - this option will also allow you to easily pre-process the data.

这篇关于java.lang.NoClassDefFoundError:java.rmi.server.UID是一个受限制的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆