Glassfish 泽西岛休憩税例外

Glassfish 泽西岛休憩税例外,glassfish,jersey,jax-rs,glassfish-3,Glassfish,Jersey,Jax Rs,Glassfish 3,我在glassfish 3.1.2生产服务器上遇到了一个问题。我部署了一个Jersey REST项目,当任何URL的路径参数中有一个空格时,它会抛出URISyntaxException。例如,如果我点击此URL:http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My%20Path%20param Jersey抛出根本原因为java.net.URISyntaxException的java.lang.IllegalArgumentE

我在glassfish 3.1.2生产服务器上遇到了一个问题。我部署了一个Jersey REST项目,当任何URL的路径参数中有一个空格时,它会抛出URISyntaxException。例如,如果我点击此URL:
http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My%20Path%20param
Jersey抛出根本原因为java.net.URISyntaxException的
java.lang.IllegalArgumentException
:索引155处路径中的非法字符:http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My 路径参数

查询参数不会出现错误。
该问题在测试环境下不可再现。在Jersey获取路径参数并抛出上述异常之前,glassfish是否有可能对路径参数进行解码?我通过了一个链接,该链接指定glassfish具有在到达我们的应用程序之前对请求参数进行解码的功能,但我没有得到明确的想法。请帮助我解决这个问题。

在URL(URI)上使用“空格”不是一个好策略-请参阅此处的更多讨论。它们被认为是“不安全的”():

空格字符是不安全的,因为当URL被转录、排版或接受字处理程序处理时,重要空格可能消失,而不重要空格可能被引入


不确定是否有一些“容器”允许在URI上(“查询参数”可以被允许编码),但即使有些允许您认真考虑不使用它们。不确定这是否适合您的场景,但您可以尝试

URLEncoder.encode()
,正如在其他问题中所建议的那样,也会出现类似的异常情况:(虽然在同一个问题中,关于使用“空格”存在争议……但这可能对您有用)。

Apache负载平衡器就是罪魁祸首!mod_jk正在解码URL,并将解码后的URL转发给glassfish服务器之一。因此jersey jax rs抛出了URISyntaxException。通过将mod_jk配置的属性JkOptions从+ForwardURICompat更改为+ForwardURICompatUnparsed

解决了此问题是的,我同意您的观点,即URL中应避免空格,但由于它在测试环境中工作良好,很难说服客户更改实现。您是否也在开发中使用glassfish?开发和生产设置的主要区别是什么?如果您将此添加到原始问题中,可能会有所帮助。是的,我使用Glassfish进行开发。这个问题在发展上也不会重现。不幸的是,我无法访问客户的glassfish!(测试和生产):(这确实是一个奇怪的情况……我用一些您可能想在设置中尝试的进一步材料更新了我的答案(即
urlcoder.encode()
)。HTH。最后,Apache负载平衡器是罪魁祸首!)mod_jk正在解码URL,并将解码后的URL转发给glassfish服务器之一。因此,这是一个例外。通过将属性JkOptions+ForwardURICompat更改为+ForwardURICompatUnparsed,问题得以解决