2015-11-06 62 views
0

我正在使用Jersey开发RESTful web服务。我正在使用maven管理我的依赖关系,使用eclipse导出方法创建jar。 当运行在我的电脑Ubuntu罐子,一切工作正常,但是当我在执行远程Openshift服务器上的同一个jar我遇到这个奇怪的事情:在远程计算机上执行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; 
} 

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

+0

请问您可以提供Openshift服务器控制台日志吗?不同的服务器有时会给出不同的输 –

+0

如果GET在Openshift中可用,那么在任何测试GET处理程序方法中尝试验证方法,以了解在Openshift服务器中POST请求处理是否不同。请看看这个:https://developers.openshift.com/en/managing-environment-variables.html –

+1

你可能会在该行中得到一些RuntimeError。 _只是暂时地改变你的异常处理来捕捉'Throwable',除了'Exception',并且看看你是否得到任何错误记录。 –

回答

2

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

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

  • 简单的解决方法(如果可用)是升级远程服务器的Java版本到您的计算机上本地使用的一个。

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

相关问题