【问题标题】:getResource not loading resource in webappgetResource没有在webapp中加载资源
【发布时间】:2011-01-05 10:40:28
【问题描述】:

我创建了一个用于解组 XML 的 jar,我正在使用以下代码来搜索 xsd

Thread.currentThread().getContextClassLoader().getResource(DEFAULT_XSD_NAME)

在哪里 DEFAULT_XSD_NAME="destination.xsd"

我的 xsd 文件位于相同的包结构中,并且与具有上述代码的类所在的级别相同。 这在我的独立应用程序中运行良好,但是当我将 jar 放在 lib 目录下的 web 应用程序中时,以下代码

Thread.currentThread().getContextClassLoader().getResource(DEFAULT_XSD_NAME).getFile()

下面给我的空指针异常是堆栈跟踪

java.lang.NullPointerException

    com.raisonne.tr.impex.xmlprocessor.impl.XMLUnmarshallerImpl.validateXML(XMLUnmarshallerImpl.java:194)
    com.raisonne.tr.impex.xmlprocessor.impl.XMLUnmarshallerImpl.unmarshal(XMLUnmarshallerImpl.java:85)
    com.raisonne.tr.service.impex.impl.DestinationImportServiceImpl.parseXMLToObject(DestinationImportServiceImpl.java:95)
    com.raisonne.tr.service.impex.impl.DestinationImportServiceImpl.startDestinationImport(DestinationImportServiceImpl.java:82)
    com.raisonne.tr.backoffice.actions.impex.DestinationImportAction.destinationImport(DestinationImportAction.java:118)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)

我在 tomcat 6.0.29 上运行应用程序。

任何帮助/指针在这方面都很受重视。另外,如果我有一些独立于容器的解决方案会很好。

【问题讨论】:

    标签: java jakarta-ee tomcat6


    【解决方案1】:

    把它放在default package它应该可以工作

    Thread.currentThread().getContextClassLoader().getResource("/com/your/package/"+DEFAULT_XSD_NAME)
    

    【讨论】:

    • 你的意思是我应该从 jar 中取出 XSD 并将其放在我正在使用 jar 功能的包中的某个位置??
    • 我希望你上面的代码和 xsd 都在同一个 jar 中然后按照答案进行操作
    • 是的,代码和 XSD 都在同一个 jar 中,在同一个目录结构中。我仍然不清楚你提到的包名称。它是否与 Web 应用程序容器行为有关因为应用程序的独立版本(转换为 jar)运行良好
    • Thread.currentThread().getContextClassLoader().getResource("/com/your/package/"+DEFAULT_XSD_NAME) 会为您工作。是的,当捆绑包被提取时,它将遵循这种方式
    • @org.life.java:它有效,但最好问这到底是什么意思而不是遵循它。所以你能告诉我我到底做错了什么,它将帮助我避免未来错误:)
    【解决方案2】:

    因为,在容器中,如果您只是将其命名为destination.xsd,它会尝试从 URI 路径开始查找。将/ 放在前面,如/destination.xsd,将使其看起来在servlet 容器根目录中。

    【讨论】:

    • 感谢 Adeel :) 我希望我的 cmets 能很好地回答解释,如果有任何遗漏请告诉我,谢谢 btw +1 :)
    猜你喜欢
    • 2020-06-13
    • 2014-07-31
    • 2014-10-15
    • 1970-01-01
    • 2011-02-05
    • 2019-10-23
    相关资源
    最近更新 更多