gpt4 book ai didi

java - 如何访问 App Engine 应用程序存储的文件

转载 作者:行者123 更新时间:2023-12-01 10:22:18 25 4
gpt4 key购买 nike

我在将 countries.xml 文件包含到我的 GWT Web 应用程序中时遇到问题。

在应用程序服务器端,我使用 JAXB 从此文件收集数据。从 Eclipse 本地构建一切正常,但部署到测试环境后,Unmarshaller 找不到提到的文件。

我认为部署过程中根本没有包含该文件。

问题是:我应该将 xml 文件放置在哪里才能成功包含在应用程序部署中?

如果缺少某些信息,请在评论中告诉我。

编辑1:

enter image description here

加载文件:

    List<CountryDTO> list = new ArrayList<CountryDTO>();
CountryXML countryXML;
try {
JAXBContext context = JAXBContext.newInstance(CountryXML.class);
Unmarshaller un = context.createUnmarshaller();
countryXML = (CountryXML) un.unmarshal(new File("target/classes/server/xml/countries.xml"));
for (CountryXML country : countryXML.getCountries()) {
list.add(convertToDTO(country)); //Simple converting from XmlRootObject to DTO
}
}
catch (JAXBException e) {
e.printStackTrace();
}

JUnit 测试:

public class XMLDataManagerTest {

@Test
public void getCountries() {
XMLDataManager xmlDataManager = new XMLDataManager();
List<CountryDTO> coutries = xmlDataManager.getCountries();
System.out.println(coutries.toString());
}

}

这个测试的输出正是我想要的。

最佳答案

首先我相信文件已成功上传。无论如何,您可以通过从 App Engine 下载应用程序来检查它。

./appcfg.sh -A <your_app_id> -V <your_app_version> download_app <output-dir>

您可以找到更多详细信息here .

本地环境和云端的应用布局似乎不同。尝试通过ClassLoader加载您的文件。

getClass().getClassLoader().getResourceAsStream("/server/xml/countries.xml");

或者通过ServletContext

getServletContext().getResourceAsStream("/server/xml/countries.xml");

你也可以查看我之前的questionanswer .

看来 App Engine 的首选解决方案是通过 ServletContext

App Engine resource files are read using java.io.File or javax.servlet.ServletContext.getResource/getResourceAsStream. They are not accessible via Class.getResourceAsStream().

关于java - 如何访问 App Engine 应用程序存储的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com