0

我正在创建一些 REST API。为此,我有一些应用程序级别的通用名称值对。为了配置这些名称值对,我刚刚在 WebContent 中创建了一个 xml 文件,并在类的静态块中从 xml 访问值并使用静态变量进行初始化。因此,在 xml 中为每个名称提供的所有值都将分配给类的静态块中的相应静态变量。

除了从 REST API 客户端之外,我还能够访问这些变量并获取每个类中的值。问题来了,当我创建一个 REST API 客户端来使用在同一个项目中创建的 API 时,FileNotFoundException 正在抛出我为我的 xml 文件 (WebContent/myxml.xml) 提供的路径。

我可以看到,它在我的 Eclipse 路径(/home/aneesh/eclipse/WebContent/myxml.xml)中搜索相同的 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 文件夹,但无法正常工作。

4

3 回答 3

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;
    }
于 2013-07-31T05:46:55.890 回答
0

尝试将路径作为 WebContent//myxml.xml (注意双斜杠 //)

于 2013-07-30T12:01:51.303 回答
0

您必须动态查找 XML 文件的路径。

您可以使用 ServletContext 对象的 getRealPath() - 您可以像这样使用它:getRealPath("/"),它会返回您部署的应用程序的路径。然后,您可以从那里导航到应用程序中所需的 XML 文件。

ServletContext 上下文 = session.getServletContext();

字符串路径 = context.getRealPath("/");

使用变量路径并导航到您的 XML。

于 2013-07-30T17:12:21.970 回答