【问题标题】:Google AppEngine TaskQueue throws Caused by: java.lang.IllegalArgumentException: Invalid URL : nullGoogle AppEngine TaskQueue 抛出原因:java.lang.IllegalArgumentException:无效 URL:null
【发布时间】:2026-01-19 15:10:01
【问题描述】:

当我尝试添加到队列时,它给出了这个异常。它适用于开发,但不适用于生产。

Caused by: java.lang.IllegalArgumentException: Invalid URL : null
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:116)
    at com.google.appengine.api.taskqueue.QueueImpl$2.wrap(QueueImpl.java:549)
    at com.google.appengine.api.taskqueue.QueueImpl$2.wrap(QueueImpl.java:521)
    at com.google.appengine.api.utils.FutureWrapper.wrapAndCache(FutureWrapper.java:53)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:86)
    at com.google.appengine.api.taskqueue.QueueApiHelper.getInternal(QueueApiHelper.java:72)
    at com.google.appengine.api.taskqueue.QueueImpl.add(QueueImpl.java:413)
    at com.onixnet.sdm.server.SDMServiceImpl.sendEmails(SDMServiceImpl.java:155)

代码

    queue.add(withUrl("/worker").param("userId", Utils.getUserId()).param("storeType", storeType)
            .param("associate", String.valueOf(associate)).param("fsm", String.valueOf(fsm)).param("sa", String.valueOf(sa))
            .param("other1", String.valueOf(other1)).param("other1Str", other1Str).param("other2", String.valueOf(other2)).param("other2", other2Str)
            .param("folder", folder).param("folderId", folderId)
            .param("from", getUserEmail()).param("subject", subject).param("body", body)
            .method(Method.GET));

web.xml

<servlet>
    <servlet-name>Worker</servlet-name>
    <servlet-class>com.onixnet.sdm.server.WorkerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Worker</servlet-name>
    <url-pattern>/worker</url-pattern>
</servlet-mapping>

queue.xml

<queue-entries>
    <queue>
        <name>default</name>
        <rate>1/s</rate>
    </queue> 
</queue-entries>

参考

https://developers.google.com/appengine/docs/java/taskqueue/overview-push

【问题讨论】:

  • 将复杂的链式级联方法调用分解为对中间变量的简单赋值序列。然后测试每一个是否为空。
  • null 不是来自任何参数。如果您注意到异常,它是一个 IllegalArgumentException,它来自 Google TaskQueue 包中。 withUrl() 显然不为空。
  • 对不起,像这样复杂的代码不适合我的小脑袋。我无法调试它而不伤害我的大脑。当然,不是参数,而是 16 个链接方法调用之一的返回值,这些方法调用接收到包含错误值的非空参数。让我换一种说法,请重构代码以便于维护。
  • 作为另一种故障排除方法,在工作开发服务器上,如果将“folderId”(字符串)更改为“folderOMG”会发生什么?这一切仍然有效吗?

标签: java google-app-engine task-queue


【解决方案1】:

我必须使用Method.POST 而不是GET,并且在工作任务servlet 中使用doPost()。我相信请求对于 GET 来说太大了。问题是 Google 没有提供有用的错误消息,而是使用了一个神秘的错误消息。

【讨论】:

    最近更新 更多