2013-10-03 87 views
0

我在我們的glassfish 3.1.2生產服務器上遇到了一個問題。我部署了一個Jersey REST項目,並且在任何URL的路徑參數中有''空間'時拋出URISyntaxException。例如,如果我打這個網址:http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My%20Path%20param 新澤西拋出java.lang.IllegalArgumentException與根源java.net.URISyntaxException: Illegal character in path at index 155: http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My Path paramJersey REST URISyntaxException

錯誤仍發生的查詢參數。 此問題在測試環境中不可重現。在澤西島獲得它們之前,生產玻璃魚是否有可能對路徑參數進行解碼,球衣會拋出上述異常?我通過了this鏈接,該鏈接指定glassfish在到達我們的應用程序之前有解碼請求參數的功能,但我沒有得到明確的想法。請幫我擺脫這個問題。

回答

0

Apache Load Balancer是罪魁禍首! mod_jk正在對URL進行解碼,並將解碼後的URL轉發給其中一個glassfish服務器。因此球衣jax rs拋出了URISyntaxException。問題通過更改屬性JkOptions mod_jk的配置從+ ForwardURICompat到解析+ ForwardURICompatUnparsed

1

在URL(URI)上使用「空格」不是一個好策略 - 請參閱Is a URL allowed to contain a space?的更多討論。他們被認爲是「不安全」(http://www.ietf.org/rfc/rfc1738.txt):

空格字符是不安全的,因爲顯著的空間可能會消失,當URL被轉錄或排版或遭受的文字處理程序處理,可以引入顯着的空間。

不確定某些「容器」是否允許在URI上使用此功能(即可以在編碼時允許使用「查詢參數」),但即使有些功能允許您認真考慮不使用它們。不知道這是否適合您的方案,但您可以嘗試URLEncoder.encode(),如其他問題中提出的類似的例外情況:What I have to do to solve "java.lang.IllegalArgumentException"?(儘管在同一問題中存在關於使用「空格」的爭論......但也許這是有用的爲你)。

+0

是的,我跟你的觀點,空格應該在URL被避免,但因爲它是在測試環境中工作的罰款,這將是同意很難說服客戶改變實施。 – user1120946

+0

你是否也在開發中使用glassfish?開發和生產設置上的主要區別是什麼 - 如果您將其添加到原始問題中,可能會有所幫助。 – emgsilva

+0

是的,我使用Glassfish進行開發。問題也不會在開發中重現。不幸的是,我無法訪問客戶的玻璃魚! (測試以及生產):( – user1120946