8

Ecco il mio web.xmlcombinando servlet blob con endpoint API

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <servlet> 
    <servlet-name>Upload</servlet-name> 
    <servlet-class>Upload</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Upload</servlet-name> 
    <url-pattern>/upload</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>SystemServiceServlet</servlet-name> 
     <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class> 
     <init-param> 
      <param-name>services</param-name> 
      <param-value>com.company.game.GameApi</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>SystemServiceServlet</servlet-name> 
     <url-pattern>/_ah/spi/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

Ho un API di Google Cloud Endpoint, GameApi, che aveva lavorato bene, tranne per il carico di blob che stava prendendo troppo a lungo. Quindi decido di usare lo Upload servlet on the google website to upload my blobs from user. Fondamentalmente ho aggiunto il codice xml per il file blob al mio codice xml esistente per l'API dell'endpoint, risultando nell'xml mostrato sopra. Ma poi il servlet di Upload non viene mai chiamato. Sto testando localhost e posso vedere nella tabella _BlobUploadSession_ che il front-end (app Android) ha inviato correttamente l'immagine al blobstore con l'url di callback corretto. So che il servlet non viene chiamato perché ho una dichiarazione di stampa proprio all'ingresso.

Devo cambiare il mio web.xml? Sono autorizzato a combinare endpoint con servlet come sto facendo nel mio web.xml?

+0

@DanHolevoet voi o il vostro team avete qualche input su come farlo funzionare? Il mio approccio preferito sarebbe semplicemente utilizzare gli endpoint (http://stackoverflow.com/questions/16257895/convert-servlet-schema-to-app-engine-endpoint-schema), ma poiché non so come farlo , Ho creato una classe servlet come descritto. Ma il mio servlet non viene mai chiamato. – learner

+0

@bossylobster, posso aiutarmi per favore con questo? – learner

+0

@Tom qualche idea? – learner

risposta

1

Partenza https://cloud.google.com/developers/articles/how-to-build-mobile-app-with-app-engine-backend-tutorial

<servlet> 
    <display-name>Remote API Servlet</display-name> 
    <servlet-name>RemoteApiServlet</servlet-name> 
    <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>RemoteApiServlet</servlet-name> 
    <url-pattern>/remote_api</url-pattern> 
</servlet-mapping> 
0

Anche se i miei Android Studio cloud Endpoint Gradle sincronizzati con successo, durante il caricamento di GAE, il seguente formato (che si sta utilizzando) tradotte in errori e di upload senza successo:

<servlet> 
    <servlet-name>Upload</servlet-name> 
    <servlet-class>Upload</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Upload</servlet-name> 
    <url-pattern>/upload</url-pattern> 
    </servlet-mapping> 

Quello che dovevo fare era elencare il percorso completo della classe servlet. Nel tuo caso:

<servlet> 
    <servlet-name>Upload</servlet-name> 
    <servlet-class>com.company.game.Upload</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Upload</servlet-name> 
    <url-pattern>/upload</url-pattern> 
    </servlet-mapping> 

Spero che questo aiuti qualcuno.