【问题标题】:Jersey REST URISyntaxExceptionJersey REST URISyntaxException
【发布时间】:2013-10-09 19:03:47
【问题描述】:

我在 glassfish 3.1.2 生产服务器上遇到问题。我部署了一个 Jersey REST 项目,当任何 URL 的路径参数中存在 'space' 时,它会抛出 URISyntaxException。例如,如果我点击这个 URL:http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My%20Path%20param Jersey 抛出 java.lang.IllegalArgumentException 根本原因 java.net.URISyntaxException: Illegal character in path at index 155: http://MyDomain:8080/MyApp/MyVersion/MyService/MyPathParam/My Path param

查询参数不会发生错误。 此问题在测试环境中不可重现。生产 glassfish 是否有可能在 Jersey 获取路径参数并且 jersey 抛出上述异常之前解码它们?我浏览了this 链接,该链接指定 glassfish 可以在请求参数到达我们的应用程序之前对其进行解码,但我没有得到明确的想法。请帮我解决这个问题。

【问题讨论】:

    标签: glassfish jersey jax-rs glassfish-3


    【解决方案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"?(尽管在同一个问题中存在关于使用“空格”的辩论......但是也许这对你有用)。

    【讨论】:

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

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

    解决了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2017-04-08
      • 2011-11-19
      相关资源
      最近更新 更多