2011-09-19 20 views
8

Tôi đang cố gắng sử dụng api Blobstore cho appengine bằng GWT ... Tôi hứa với bạn! Tôi đã có nó làm việc trong nhiều tháng và đột nhiên tôi bắt đầu có được các lỗi sau .. arfter thực hiện dòng sau đây từ một servelet.Lỗi GWT Blobstore gọi hàm createUploadUrl()

public class ImageServiceImpl kéo dài RemoteServiceServlet thực hiện ImageService {

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

    // init the blog store service 
private BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService(); 
    //private static final Logger log = Logger.getLogger(ImageServiceImpl.class); 
    public static final String PATH_TO_DEFAULT_IMAGE = "images/no_photo.jpg"; 

. . . . . // bỏ qua cho ngắn gọn }

@Override 
    public String getUpLoadPath() { 
     String url = blobService.createUploadUrl("/n5/doimage"); 
     return url; 
    } 

}

Khởi tạo App Engine máy chủ 19 tháng 9 năm 2011 19:28:45 com.google.apphosting.utils.jetty.JettyLogger thông tin INFO: Đăng nhập vào JettyLogger (null) qua com.google.apphosting.utils.jetty.JettyLogger Ngày 19 tháng 9 năm 2011 7:28:45 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml THÔNG TIN: Đã xử lý thành công C: \ development \ n5 \ n5 \ war \ WEB-INF/appengine-web.xml Ngày 19 tháng 9 năm 2011 7:28:45 PM com.google.apph osting.utils.config.AbstractConfigXmlReader readConfigXml THÔNG TIN: Đã xử lý thành công C: \ development \ n5 \ n5 \ war \ WEB-INF/web.xml Ngày 19 tháng 9 năm 2011 3:28:47 PM com.google.appengine.tools. development.DevAppServerImpl bắt đầu THÔNG TIN: Máy chủ đang chạy tại http://localhost:8888/ Ngày 19 tháng 9 năm 2011 7:34:59 PM com.google.appengine.tools.development.ApiProxyLocalImpl log SEVERE: javax.servlet.ServletContext log: Ngoại lệ khi gửi đi RPC gọi com.google.gwt.user.server.rpc.UnexpectedException: Phương thức dịch vụ 'public abstract java.lang.String com.six.n5.client.service.ImageService.getUpLoadPath()' đã ném một ngoại lệ không mong muốn: java. lang.VerifyError: class com.google.appengine.api.blobstore.BlobstoreServicePb $ CreateUploadURLYêu cầu ghi đè cuối cùng phương thức isInitialized.() Z tại com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure (RPC.java:385) tại com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse (RPC.java WEBC88) tại com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall (RemoteServiceServlet.java:208) tại com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost (RemoteServiceServlet.java:248) at com. google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost (AbstractRemoteServiceServlet.java:62) tại javax.servlet.http.HttpServlet.service (HttpServlet.java:637) tại javax.servlet.http.HttpServlet.service (HttpServlet.java:717) tại com.google.inject.servlet.ServletDefinition.doService (ServletDefinition.java:216) tại com.google.inject.servlet.ServletDefinition.service (ServletDefinition.java:141) tại com.google.inject.servlet.ManagedServletPipeline.service (ManagedServletPipeline.java:93) tại com.google.inject.servlet.FilterChainInvocation.doFilter (FilterChainInvocation.java:63) at com. google.inject.servlet.ManagedFilterPipeline.dispatch (ManagedFilterPipeline.java:122) tại com.google.inject.servlet.GuiceFilter.doFilter (GuiceFilter.java:110) tại org.mortbay.jetty.servlet.ServletHandler $ CachedChain. doFilter (ServletHandler.java:1157) tại com.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:35) tại org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java: 1157) tại com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:58) tại org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) tại com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java: 43) tại org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) tại com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) tại tổ chức. mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) tại com.google.appengine.tools.development.BackendServersFilter.doFilter (BackendServersFilter.java:97) tại org.mortbay.jetty.servlet. ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) tại org.mortbay.jetty.servlet.Servl etHandler.handle (ServletHandler.java:388) tại org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) tại org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) tại org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) tại org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) tại com.google.apphosting.utils. jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) tại org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) tại com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:351) tại org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) tại org.mortbay.jetty.Server.handle (Server.java:326) tại org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java WEBC42) tại org.mortbay.jetty.HttpConnection $ RequestHandler.content (HttpConnection.java:938) tại org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:755) tại org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:218) tại org.mortbay.jetty. HttpConnection.handle (HttpConnection.java:404) tại org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:409) tại org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java WEBC82) Gây ra bởi: java.lang.VerifyError: class com.google.appengine.api.blobstore.BlobstoreServicePb $ CreateUploadURLYêu cầu ghi đè phương thức cuối cùng làIniti alized.() Z tại java.lang.ClassLoader.defineClass1 (Phương thức Gốc) tại java.lang.ClassLoader.defineClass (Nguồn không xác định) tại java.security.SecureClassLoader.defineClass (Nguồn không xác định) tại java.net. URLClassLoader.defineClass (Unknown Source) tại java.net.URLClassLoader.access $ 100 (Unknown Source) tại java.net.URLClassLoader $ 1.run (Unknown Source) tại java.net.URLClassLoader $ 1.run (Unknown Source) tại java.security.AccessController.doPrivileged (Phương thức Gốc) tại java.net.URLClassLoader.findClass (Nguồn không xác định) tại java.lang.ClassLoader.loadClass (Nguồn không xác định) tại com.google.appengine.tools.development. IsolatedAppClassLoader.loadClass (IsolatedA ppClassLoader.java:176) tại java.lang.ClassLoader.loadClass (Nguồn không xác định) tại com.google.appengine.api.blobstore.BlobstoreServiceImpl.createUploadUrl (BlobstoreServiceImpl.java:43) tại com.google.appengine.api .blobstore.BlobstoreServiceImpl.createUploadUrl (BlobstoreServiceImpl.java:34) tại com.six.n5.server.ImageServiceImpl.getUpLoadPath (ImageServiceImpl.java:153) tại sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) lúc mặt trời. reflect.NativeMethodAccessorImpl.invoke (Nguồn không rõ) tại sun.reflect.DelegatingMethodAccessorImpl.invoke (Nguồn không xác định) tại java.lang.reflect.Method.invoke (Nguồn không xác định) tại com.google.appengine.tools.development.agent .runtime.Runtime.invoke (Thời gian chạy.java: 100) tại com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse (RPC.java WEBC69) ... 39 khác

Trả lời

12

Tôi đã tìm thấy lỗi của riêng mình! vì nó bật ra lý do điều này đột nhiên thất bại là vì bài đăng MẪU nghĩ rằng đó là đăng qua miền. Tôi đã kiểm tra trang web bằng cách gọi 127.0.0.1:8888..etc nhưng khi RPC hình ảnh của tôi được gọi để thiết lập đường dẫn tải lên, nó quay trở lại biểu mẫu setAction tên máy của tôi là kmoore-PC: 8888..etc thay vào đó của 127.0.0.1:8888 ... và do đó nó trả về null bởi vì nó nghĩ rằng nó đã vượt qua các tên miền.

Để khắc phục, click vào google hộp trên thanh url và thêm tên máy tính của bạn và sau đó kiểm tra bạn ứng dụng bằng cách sử dụng tên máy tính thay vì 127

0

tôi đã cố gắng thay thế máy chủ địa phương với tên máy nó không giúp đỡ, nhưng nó là một vấn đề java-script miền chéo vì vậy tôi đã thử chỉ bằng cách sử dụng mẫu URL được gán trong xml web và tôi nhận được một kết quả String. Kết quả là câu trả lời của tôi được bao bọc bởi XML và tôi dự định phân tích nó. nếu có ai có một cái gì đó thanh lịch hơn xin vui lòng cho tôi biết.

đây là chuỗi phản ứng [nó trông hơi khác một chút vì nó ảnh hưởng đến trang tràn stack]:

pre style="word-wrap: break-word; white-space: pre-wrap;">my response id

Đây là mã máy chủ có liên quan

public void doPost(HttpServletRequest request, HttpServletResponse response) throws >ServletException, IOException { //Redirect recursively to this servlet (calls doGet) response.sendRedirect("/blobstoreexample/uploadservice?id=" + >item_image_blob_key); } }

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException 
{ 
    System.out.println("shonka"); 
    //Send the meta-data id back to the client in the HttpServletResponse response 
    String id = req.getParameter("id"); 

    response.getWriter().write(id); 
    return; 

} 

Đây là mã khách hàng có liên quan , không cần phân tích cú pháp ở đây là mã phía máy chủ:

uploadForm.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { 
     @Override 
     public void onSubmitComplete(SubmitCompleteEvent event) { 

     //The submit complete Event Results will contain the unique 
     //identifier for the picture's meta-data. Trim it to remove 
     //trailing spaces and line breaks 
      System.out.println("uploadForm onSubmitComplete() results are: " + event.getResults()); 

      Window.alert(event.getResults()); 
      if(event.getResults() != null) 
      { 
      // getPicture(event.getResults().trim()); 
      } 
      else 
      { 
       Window.alert(event.getResults()); 
      } 

     } 

    }); 

Chỉnh sửa Tôi đã tìm thấy cách thanh lịch hơn để cung cấp một id dài

//Redirect recursively to this servlet (calls doGet) 
     response.sendRedirect("/itemmanager/receive?id=" + item.getKey().getId()); 
     } 

     @Override 
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
     { 
      System.out.println("entered do post"); 
     //Send the meta-data id back to the client in the HttpServletResponse response 
     String id = req.getParameter("id"); 
     System.out.println("entered do post id is: " + id); 
     resp.setHeader("Content-Type", "text/html"); 
     resp.getWriter().println(id); 

     } 
0

Thay vì sử dụng tên máy tính, tôi chỉ đơn giản là thay thế nó với địa chỉ 127 khi ở chế độ dev, như vậy:

String url = blobstoreService.createUploadUrl("/project/uploadservice"); 

// change the computer name to standard localhost ip address, if in dev mode 
if(SystemProperty.environment.value() == SystemProperty.Environment.Value.Development) 
{ 
    url = url.replace("Your-PC-Name", "127.0.0.1"); 
} 
Các vấn đề liên quan