combining blob servlet with endpoint api
Asked Answered
T

2

7

Here is my web.xml

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

I have a Google Cloud Endpoint api, GameApi, which had been working fine except for the loading of blobs which was taking too long. So I decide to use the Upload servlet on the google website to upload my blobs from user. I basically added the xml code for the blob file to my existing xml code for the endpoint api, resulting in the xml shown above. But then the Upload servlet is never called. I am testing on localhost and I can see in the _BlobUploadSession_ table that the front-end (i.e. android app) has successfully sent the image to the blobstore with the correct callback url. I know that the servlet is not being called because I have a println statement right at the entrance.

Do I need to change my web.xml? Am I allowed to combine endpoint with servlet as I am doing in my web.xml?

Torietorii answered 29/4, 2013 at 10:49 Comment(4)
@DanHolevoet do you or your team have any input on how to get this to work? My preferred approach would be to just use endpoints (#16258395), but since I don't know how to do that, I have created a servlet class as described. But my servlet is never called.Torietorii
@bossylobster may I please have some help with this one?Torietorii
tagging @dragonx : can you help with this?Torietorii
Sorry, missed this previous question (SO didn't seem to notify me of your comment). See my answer here: https://mcmap.net/q/1629002/-convert-servlet-schema-to-app-engine-endpoint-schema which pertains to the general case of using blobs with Endpoints.Panayiotis
T
1

Check out 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>
Tautonym answered 19/5, 2014 at 9:49 Comment(0)
M
0

Although my Android Studio Cloud Endpoints gradle synced successfully, when uploading to GAE, the following format (which you are using) resulted in errors and unsuccessful upload:

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

What I needed to do was list out the full servlet-class path. In your case:

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

Hope this helps someone.

Metalware answered 7/4, 2016 at 15:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.