我正在使用Jersey
开发RESTful网络服务。我使用maven
来管理我的依赖项,使用eclipse
导出方法来创建jar
。
在我的Ubuntu
个电脑上运行jar时,一切正常,但是当我在远程Openshift
服务器上执行相同的jar时,我遇到了这个奇怪的事情:
GET
请求将返回预期答案。POST
方法返回500 server error
,在本地计算机上返回预期结果。潜入这个问题我已经意识到以下事实:
程序正在打印的最后一行是validate.fullmessage: ...
以及String
的正确JSONObject
消息表示。 “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;
}
“完成”也没有写入日志。 任何人都可以帮我弄清楚这种奇怪的行为吗?
答案 0 :(得分:2)
确定。因此,在暂时更改异常处理以捕获所有Throwables之后(这样也捕获RuntimeErrors,不仅仅是异常),问题原来是java版本问题。
在远程计算机上,您使用的是不同版本的java,可能比用于编译其中一个库的版本旧。
简单的解决方案(如果可用)将远程服务器java版升级到本地计算机上使用的版本。
如果这不是一个选项,那么您需要分析错误并查找并降级库,这与您过时的服务器java版本不兼容。