2011-09-19 11 views
8

Próbuję użyć api Blobstore do aplikacji, używając GWT ... Obiecuję! Miałem to działa przez miesiące i nagle zacząłem uzyskać następujące błędy .. po wykonaniu poniższej linii z servelet.Wywołanie błędu GWT Blobstore wywołanie createUploadUrl()

public class ImageServiceImpl rozciąga RemoteServiceServlet realizuje 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"; 

. . . . . // pominięte dla zwięzłości }

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

}

Inicjowanie App serwer Silnik 19 września 2011 19:28:45 com.google.apphosting.utils.jetty.JettyLogger informacji INFO: Logowanie do JettyLogger (null) przez com.google.apphosting.utils.jetty.JettyLogger 19 września 2011 7:28:45 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml INFO: Pomyślnie przetworzone C: \ development \ n5 \ n5 \ wojna \ WEB-INF/appengine-web.xml 19 września 2011 7:28:45 PM com.google.apph osting.utils.config.AbstractConfigXmlReader readConfigXml INFO: Pomyślnie przetworzono C: \ development \ n5 \ n5 \ war \ WEB-INF/web.xml 19 września 2011 3:28:47 PM com.google.appengine.tools. development.DevAppServerImpl rozpocząć INFO: serwer działa na http://localhost:8888/ wrz 19, 2011 7:34:59 PM com.google.appengine.tools.development.ApiProxyLocalImpl zalogować ciężkie: javax.servlet.ServletContext log: wyjątek podczas wysyłania dochodzące Wywołanie RPC: com.google.gwt.user.server.rpc.UnexpectedException: Metoda serwisowa "public abstract java.lang.String com.six.n5.client.service.ImageService.getUpLoadPath()" rzucił nieoczekiwany wyjątek: java. lang.VerifyError: class com.google.appengine.api.blobstore.BlobstoreServicePb $ CreateUploadURLRequest przesłonięcia metody ostatecznej isInitialized.() Z at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure (RPC.java:385) na com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse (RPC.java:588) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall (RemoteServiceServlet.java:208) na com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost (RemoteServiceServlet.java:248) na com. google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost (AbstractRemoteServiceServlet.java:62) na javax.servlet.http.HttpServlet.service (HttpServlet.java:637) na javax.servlet.http.HttpServlet.service (HttpServlet.java:717) na com.google.inject.servlet.ServletDefinition.doService (ServletDefinition.java:216) na com.google.inject.servlet.ServletDefinition.service (ServletDefinition.java:141) na com.google.inject.servlet.ManagedServletPipeline.service (ManagedServletPipeline.java:93) na com.google.inject.servlet.FilterChainInvocation.doFilter (FilterChainInvocation.java:63) na com. google.inject.servlet.ManagedFilterPipeline.dispatch (ManagedFilterPipeline.java:122) na com.google.inject.servlet.GuiceFilter.doFilter (GuiceFilter.java:110) na org.mortbay.jetty.servlet.ServletHandler $ CachedChain. doFilter (ServletHandler.java:1157) na com.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:35) na org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java: 1157) na com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:58) na org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) na com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java: 43) w org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) at org. mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) na com.google.appengine.tools.development.BackendServersFilter.doFilter (BackendServersFilter.java:97) na stronie org.mortbay.jetty.servlet. ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) at org.mortbay.jetty.servlet.Servl etHandler.handle (ServletHandler.java:388) na org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) na org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) na org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:765) na org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) na com.google.apphosting.utils. jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:70) na org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) na com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:351) na org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle (Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) na org.mortbay.jetty.HttpConnection $ RequestHandler.content (HttpConnection.java:938) na org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:755) na org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:218) na org.mortbay.jetty. HttpConnection.handle (HttpConnection.java:404) w org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:409) w org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582) Powodowane przez: java.lang.VerifyError: class com.google.appengine.api.blobstore.BlobstoreServicePb $ CreateUploadURLRequest zastępuje ostateczną metodę isIniti alized.() Z na java.lang.ClassLoader.defineClass1 (metoda podstawowa) w java.lang.ClassLoader.defineClass (Unknown Source) w java.security.SecureClassLoader.defineClass (Unknown Source) na java.net. URLClassLoader.defineClass (Unknown Source) na 100 java.net.URLClassLoader.access $ (Unknown Source) na java.net.URLClassLoader $ 1.run (Unknown Source) na java.net.URLClassLoader $ 1.run (Unknown Source) w java.security.AccessController.doPrivileged (metoda macierzysta) w java.net.URLClassLoader.findClass (nieznane źródło) w java.lang.ClassLoader.loadClass (nieznane źródło) na com.google.appengine.tools.development. IsolatedAppClassLoader.loadClass (IsolatedA ppClassLoader.java:176) na java.lang.ClassLoader.loadClass (Unknown Source) na com.google.appengine.api.blobstore.BlobstoreServiceImpl.createUploadUrl (BlobstoreServiceImpl.java:43) w com.google.appengine.api .blobstore.BlobstoreServiceImpl.createUploadUrl (BlobstoreServiceImpl.java:34) na com.six.n5.server.ImageServiceImpl.getUpLoadPath (ImageServiceImpl.java:153) na sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) na słońcu. reflect.NativeMethodAccessorImpl.invoke (Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) na java.lang.reflect.Method.invoke (Nieznane źródło) at com.google.appengine.tools.development.agent .runtime.Runtime.invoke (Runtime.Java: 100) na com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse (RPC.java:569) ... 39 więcej

Odpowiedz

12

znalazłem mój własny błąd! ponieważ okazało się, że to się nagle nie powiodło, było spowodowane tym, że FORMULARZ postulował, że jest to wysyłanie między domenami. Testowałem stronę internetową, wywołując 127.0.0.1:8888..etc, ale kiedy zadzwonił mój Image RPC w celu ustalenia ścieżki wysyłania, powrócił do formy setAction, moja nazwa komputera kmoore-PC: 8888..etc zamiast tego z 127.0.0.1:8888 ... i dlatego zwrócono wartość zerową, ponieważ wydawało się, że przechodzi przez domeny.

Aby rozwiązać, należy kliknąć na pole Google w pasku adresu i dodać nazwę komputera, a następnie przetestować ty aplikacja przy użyciu nazwy komputera zamiast 127

0

próbowałem zastąpienie lokalnego hosta z nazwą urządzenia nie pomogło, ale jest to problem z skryptem java w wielu domenach, więc próbowałem po prostu użyć wzorca adresu URL przypisanego w webowym xml i otrzymałem wynik String. Rezultatem jest moja odpowiedź opatrzona XML i planuję ją przetworzyć. jeśli ktoś ma coś bardziej eleganckiego, proszę powiedz mi.

oto String odpowiedź [wygląda nieco inaczej, ponieważ wpływa on na stronę przepełnienia stosu]:

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

Oto odpowiedni kod serwera

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; 

} 

Oto odpowiedni kod klienta , nie trzeba tu parsować kodu po stronie serwera:

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()); 
      } 

     } 

    }); 

Edytuj Znalazłem bardziej elegancki sposób, aby zapewnić długą id

//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

Zamiast nazwy komputera, po prostu zastąpić go z adresem 127 w trybie dev, tak:

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"); 
} 
Powiązane problemy