【发布时间】:2016-02-07 12:16:17
【问题描述】:
我正在使用 Jersey 开发一个 RESTful Web 服务。我正在使用maven 来管理我的依赖项,并使用eclipse 导出方法来创建jar。
在我的 Ubuntu 电脑上运行 jar 时,一切正常,但是当我在远程 Openshift 服务器上执行同一个 jar 时,我遇到了这个奇怪的事情:
- 服务器启动并运行,执行
GET请求返回预期的答案。 - 执行
POST方法返回500 server error,当在我的本地机器上返回预期结果。
深入研究这个问题,我意识到以下事实:
程序打印的最后一行是validate.fullmessage: ... 和JSONObject 的正确String 消息表示。 “1”行不会打印到日志中。也不会抛出异常或将异常写入日志!
public static boolean validate(String fullMessage) {
...
try {
System.out.println("validate.fullmessage: " + fullMessage);
JSONObject jsonMessage = new JSONObject(fullMessage);
System.out.println("1");
...
} catch (Exception e) {
System.out.println("validation exception");
e.printStackTrace();
}
...
}
此外,每当我返回200 ok 或server error 时,我都会将其写入日志,但不会将错误写入日志。似乎服务器无缘无故返回500 server error,而不是来自我的代码......
RESTHandler:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/createPlayer")
public Response createUser(String strPlayer) {
System.out.println("createPlayer. strPlayer: " + strPlayer);
Response r;
System.out.println("validating");
if (!ValidateHandler.validate(strPlayer)) {
System.out.println("validation failed!");
r = Response.serverError().build();
}
...
System.out.println("finished");
return r;
}
“完成”也不会写入日志。 谁能帮我弄清楚这种奇怪的行为?
【问题讨论】:
-
能否提供 Openshift 服务器控制台日志?不同的服务器有时会给出不同的输出。
-
如果 Openshift 中的 GET 正常,则尝试任何测试 GET 处理程序方法中的 validate 方法,以了解 Openshift 服务器中的 POST 请求处理是否不同。请看这个:developers.openshift.com/en/managing-environment-variables.html
-
您可能会在该行中遇到一些 RuntimeError。 只是暂时更改您的异常处理以捕获除
Exception之外的Throwable,并查看是否记录了任何错误。 -
那里没有什么有趣的,因为我正在开发一个自己动手做的实例,我正在用 git 推送我的 jar,登录到服务器并使用
java -jar my-app.jar运行 jar。 -
@GergelyBacso 你是对的!我将其更改为
Throwable,现在我看到了错误,它是major minor之一。为什么Exception没有发现错误?
标签: java eclipse maven openshift