基本上我有一个需要动态行为的客户端.jar。它需要从其父应用程序的类路径加载资源。主应用程序是Spring Boot应用程序,客户端.jar是该项目的maven依赖项。
我发现将test.xml存储在Spring Boot父项目的src / main / resources的子文件夹中,然后在依赖项中使用此代码:
InputStream fis = SSLSocketFactoryGenerator.class.getResourceAsStream("/subFolder/etc/test.xml");
将导致空指针,因为它找不到该文件。任何人都知道这是为什么以及如何解决这个问题?
答案 0 :(得分:0)
您可能有两种可能的情况来获得NPE:
1(最有可能)。你错误地组装了你的罐子,/subFolder/etc/test.xml
根本不在类路径中。看看ClassLoader::getResource(String name)
public URL getResource(String name) {
URL url;
if (parent != null) {
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
if (url == null) { //not found in ClassPath, falling back to findResource.
url = findResource(name);
}
return url;
}
但是findResource的“默认”实现是:
protected URL findResource(String name) {
return null;
}
所以我建议你检查一下装配好的jar文件。
2(非常不可能)。类SSLSocketFactoryGenerator
由ClassLoader
加载,其中包含用于查找上面列出的资源的重写方法。实际上我无法想象我们会覆盖类路径中加载资源的行为,因此我们无法加载它们。所以1.
很可能就是你的情况