【问题标题】:Executing jar fails on a remote machine在远程机器上执行 jar 失败
【发布时间】: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 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;
}

“完成”也不会写入日志。 谁能帮我弄清楚这种奇怪的行为?

【问题讨论】:

  • 能否提供 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


【解决方案1】:

好的。因此,在临时更改异常处理以捕获所有 Throwables(这种方式也捕获 RuntimeErrors,而不仅仅是异常)后,问题原来是 java 版本问题

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2023-03-13
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    相关资源
    最近更新 更多