2015-11-06 95 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版本不兼容。

相關問題