Question

I have a servlet code like this :

public class BackendServlet extends HttpServlet {
   private static final Logger LOG = Logger.getLogger(BackendServlet.class.getName());
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
      doPost(req, resp);
   }

   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
      LOG.info("just test backend");
   }
}

Then I have a web.xml that looks like following :

  <servlet>
     <servlet-name>update</servlet-name>
      <servlet-class>com.google.api.test.backend.BackendServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>update</servlet-name>
    <url-pattern>/updatebackend</url-pattern>
  </servlet-mapping>

  <security-constraint>
    <web-resource-collection>
        <web-resource-name>update</web-resource-name>
        <url-pattern>/updatebackend</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>any</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>*</role-name>
    </auth-constraint>
  </security-constraint>

Then I have the cron.xml and backend.xml that looks like following :

cron.xml

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/updatebackend</url>
    <description>Update on the backend</description>
    <schedule>every 5 minutes</schedule>
    <target>updatebackend</target>
  </cron>
</cronentries>

backend.xml

<?xml version="1.0" encoding="UTF-8"?>
<backends>
    <backend name="updatebackend">
        <class>B1</class>
        <options>
            <dynamic>true</dynamic>
        </options>
    </backend>
</backends>

But when I upload this to app engine server. it always gave me below error message :

/_ah/start java.lang.NullPointerException at com.google.api.client.extensions.appengine.auth.oauth2.AbstractAppEngineAuthorizationCodeServlet.getUserId(AbstractAppEngineAuthorizationCodeServlet.java:92)

How can I run the servlet using cron job on the app engine backend correctly? Is there any setup above that I do wrong?

Thanks.

Était-ce utile?

La solution

I know where my problem is, I should make servlet for /_ah/start first.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top