我正在创建一些REST API。为此,我有一些应用程序级别的通用名称值对。为了配置这些名称值对,我只是在WebContent中创建了一个xml文件,并在类的静态块中访问xml中的值并使用静态变量进行初始化。因此,为xml中的每个名称指定的所有值都将从类的静态块分配给相应的静态变量。
我能够访问这些变量并在除REST API客户端之外的每个类中获取值。问题来了,当我创建一个REST API客户端来消费在同一个项目中创建的API时,FileNotFoundException会抛出我为我的xml文件(WebContent / myxml.xml)提供的路径。
我可以看到,它在我的eclipse路径中搜索相同的xml文件(/home/aneesh/eclipse/WebContent/myxml.xml)。和FileNotFoundException抛出。 我该如何解决这个问题?
1. class which accessing xml file
class Constants {
public static String name;
static {
initializeConstants();
}
public static void initializeConstants() {
try {
//initializing Constants
//"Reading file"
File xmlFile = new File("WebContent/myxml.xml");
.......
//file is getting read perfectly and "name" is initialized
}
}
2. class accepting static variable Constants.name
// accepting value of 'name' using Constants.name successfully
// writing a method which is accepting some parameters and using Constants.name.
// writing a "main" method and calling this class's methods will work perfectly.
// value of Constants.name will be accessible here.
3. REST API created which will call methods of second class with parameters.
4. Webscript client created for consuming above created API.
// Here the exception is coming.
// Eception is throwing from the class Constants
//Exception from Constants : FileNotFoundException
java.io.FileNotFoundException: /home/aneesh/eclipse/eclipse/WebContent/myxml.xml (No such file or directory)
那么,为什么在这种情况下它在eclipse的路径中查找文件呢?怎么解决? 通过放入src文件夹尝试,但无法正常工作。
答案 0 :(得分:0)
尝试将路径指定为WebContent // myxml.xml (注意双正斜杠//)
答案 1 :(得分:0)
您必须动态地找到XML文件的路径。
您可以使用ServletContext对象的getRealPath() - 您可以使用它:getRealPath(“/”),它返回部署的应用程序的路径。然后,您可以从那里导航到应用程序中所需的XML文件。
ServletContext context = session.getServletContext();
String path = context.getRealPath(“/”);
使用变量路径并导航到您的XML。
答案 2 :(得分:0)
因为我的班级不是Servlet课程;我跟着;
public String getAppPath() {
java.net.URL r = this.getClass().getClassLoader().getResource("myxml.xml");
String filePath = r.getFile();
String result = new File(new File(new File(filePath).getParent()).getParent()).getParent();
if (!filePath.contains("WEB-INF")) {
// Assume we need to add the "WebContent" folder if using Jetty.
result = FilenameUtils.concat(result, "WebContent");
}
return result;
}