8

Oto moja web.xmlłącząc blob aplet z końcowym 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> 

mam API Google Cloud Endpoint, GameApi, który pracował w porządku z wyjątkiem załadunku bąble, który trwa zbyt długo. Dlatego zdecydowałem się użyć Upload servlet on the google website to upload my blobs from user. Zasadniczo dodałem kod xml dla pliku blob do mojego istniejącego kodu XML dla api punktu końcowego, co skutkuje powyższym xml. Ale serwlet przesyłania nigdy nie jest wywoływany. Testuję na localhost i widzę w tabeli _BlobUploadSession_, że front-end (tj. Aplikacja dla systemu Android) pomyślnie wysłał obraz do blobstore z poprawnym adresem URL wywołania zwrotnego. Wiem, że aplet nie jest wywoływany, ponieważ mam przykazanie println tuż przy wejściu.

Czy muszę zmienić mój web.xml? Czy mogę łączyć punkt końcowy z serwletem, tak jak robię to w moim web.xml?

+0

@DanHolevoet czy Ty lub Twój zespół macie jakieś wskazówki, jak to uruchomić? Moim preferowanym podejściem byłoby po prostu używać punktów końcowych (http://stackoverflow.com/questions/16257895/convert-servlet-schema-to-app-engine-endpoint-schema), ale ponieważ nie wiem jak to zrobić , Stworzyłem klasę serwletu zgodnie z opisem. Ale mój servlet nigdy nie jest wywoływany. – learner

+0

@bossylobster Czy mogę prosić o pomoc w tej sprawie? – learner

+0

@ Masz jakieś pomysły? – learner

Odpowiedz

1

Wyjazd 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

Chociaż moi Android Studio Cloud Endpoints Gradle synchronizowane z powodzeniem, po przesłaniu do GAE, w następującym formacie (którego używasz) doprowadziły do ​​błędów i nieudanych Dodano:

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

To, co musiałem zrobić, to podać pełną ścieżkę klasy serwletu. W twoim przypadku:

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

Mam nadzieję, że to komuś pomaga.