【问题标题】:class.getResource(".") returns nullclass.getResource(".") 返回 null
【发布时间】:2012-01-13 23:48:27
【问题描述】:

我在 Web 服务客户端项目中使用 wsimport 来生成基于 wsdl 文件的工件类。我正在尝试通过使用 wsdlLocation 属性在本地引用 wsdl 文件。生成的服务将尝试根据服务类所在包的路径和 wsdlLocation 属性的值创建一个 URL。

问题是生成的服务类使用class.getResource(".") 来获取当前目录的路径(服务类所在的包/目录)。如果应用程序打包在 jar 中(如我的情况),则此代码返回 null。我注意到 class.getResource("") 实际上会返回正确的路径,但是更改生成的代码似乎是一个丑陋的解决方案。我想知道是否有某种方法可以设置类路径,以便前面的代码将路径返回到生成的服务类所在的包/目录(如预期的那样)?

谢谢

【问题讨论】:

  • 类不驻留在目录中。它位于一个包中。包可以通过目录或 jar 文件的条目“物化”。无论该类是否在 jar 中,您的代码都应该可以工作。如果你想要一个类的包名,只需使用 Service.class.getPackage().getName()
  • 抱歉 - 我已经更正了帖子。前面说了,指定的代码是wsimport生成的,不想改。还是谢谢。

标签: java web-services class getresource


【解决方案1】:

我建议您使用 QName 并将其作为您的财产在某处,它让您高枕无忧,因为您可以选择将 wsdl 更改为指向任何位置,以防您不想要默认的相对路径基于方法。

恕我直言,我看不出有任何理由不更改生成的代码,尽管它会导致每次重新生成代码时都要进行更改。

【讨论】:

    【解决方案2】:

    您无法获取 jar 文件中目录的 url 的原因是您在创建 jar 文件时忘记启用“添加目录条目”选项。

    如果您使用 eclipse 创建 jar 文件,只需启用“添加目录条目”选项。

    如果您使用 jdk jar 命令,我认为该选项默认启用。

    不要使用常规的 zip 创建程序,例如 WinZip、7zip 或 WinRar,因为我不相信有这个选项。

    【讨论】:

      【解决方案3】:

      您只需使用正斜杠“/”代替句点或点“。” . 这是早期版本中的错误,但现在已解决。检查以下链接以了解该错误。如果使用正斜杠无济于事,请告诉我。 Bug

      【讨论】:

        猜你喜欢
        • 2013-03-12
        • 2016-03-08
        • 2018-06-05
        • 2020-03-27
        • 1970-01-01
        相关资源
        最近更新 更多