在远程计算机

时间:2015-11-06 10:59:39

标签: java eclipse maven openshift

我正在使用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 okserver 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;
}

“完成”也没有写入日志。 任何人都可以帮我弄清楚这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:2)

确定。因此,在暂时更改异常处理以捕获所有Throwables之后(这样也捕获RuntimeErrors,不仅仅是异常),问题原来是java版本问题

在远程计算机上,您使用的是不同版本的java,可能比用于编译其中一个库的版本旧。

  • 简单的解决方案(如果可用)将远程服务器java版升级到本地计算机上使用的版本。

  • 如果这不是一个选项,那么您需要分析错误并查找并降级库,这与您过时的服务器java版本不兼容。