2017-08-10 19 views
1

我在我的头上撞墙...我有一个(迄今相当简单)谷歌应用程序引擎项目。在运行期间,我想读取一些XML文件(资源文件,而不是servable-static文件)进行处理。在做了一些研究之后,我决定通过servlet上下文来读取资源文件(类似于以下内容)。在开发服务器上工作得很好。部署应用程序跳过资源文件

final InputStream inputStream1 = servletContext.getResourceAsStream(“/”+ pathToXmlFile);

问题:在云中不起作用。首先,我想如何加载资源的方式是错误的,但我注意到有问题的XML文件根本没有上传。它目前位于:

的src /主/ web应用/数据/ stuff.xml和 的src /主/ web应用/ WEB-APP /数据/ stuff.xml

(我没”确保将XML文件放置在何处,以便将它复制到两个位置。)部署日志显示文件如何被跳过:

2017-08-10 13:13:42,451 DEBUG root跳过[data/stuff.xml]

2017-08-10 13:13:42,461调试root跳过上传o f [WEB-INF/data/stuff.xml]

我尝试了很多事情,但都没有成功,以部署文件。事情我想:

  • 清除出临时临时目录
  • 手动清洁构建
  • 重命名的目录/文件
  • 包括classes目录
  • 与资源的文件播放周围内的文件(删除它,使用各种语法)
  • 从云中删除旧版本的应用程序
  • 重启Eclipse

仅供参考,AppEngine上-web.xml中的当前内容

<resource-files> 
    <include path="/data/*.xml" /> 
    <include path="data/*.xml" /> 
</resource-files> 

(不知道是否斜线需要....)

注意,部署,但这工作改变/新的.class文件,所以我对Java类的更改上传得很好。不知何故,部署机制无法识别XML文件也必须上传。

仅供参考 - 视窗时,Eclipse 4.7,Java的8,云工具1.2.0.201706082053

任何帮助表示赞赏,特别是如果有人知道的部署机制如何决定哪些文件来部署!

回答

1

试试这个:

<resource-files> 
    <include path="/data/**.xml" /> 
</resource-files> 

这应该包括在data/及其子目录下的所有XML文件。

他们documentation on include and exclude syntax,我敢肯定,你知道,是相当轻薄。我很确定你想要那里的双星号,并且更确定你想要的是前导斜线。我现在试图找到更多的信息,并会发布一个链接,如果我这样做。

+1

在引用的部分结尾处:'注意:如果路径字符串不是以斜杠开头,那么HTTP标头(如果有)在App Engine上工作,但在开发服务器上不起作用。“ –

+0

按照建议使用/data/**.xml。最初它没有什么区别,但是我“接触”了XML文件(添加了一些空白区域),现在似乎已经上传了。日志中显示“正在上传......分段\ __静态__/data/stuff.xml” - “静态”让我担心一些,但我会试一试,看看它是否适用于云。 –

0

感谢Brendan,**做到了诀窍。仅供参考,安装程序现在如下:

<resource-files> 
    <include path="/data/**.xml" /> 
</resource-files> 

<static-files> 
    <exclude path="/data/**.xml" /> 
</static-files> 
只使用一个单一的*

不够好为“任何XML文件”,它必须是**。作为资源文件条目的副作用,XML文件现在突然也可作为静态文件提供,可通过浏览器访问。因此,静态文件内的排除部分可以防止这种暴露。不知道这是否过于优雅或最简单/最干净的方式来做到这一点,但它的工作原理...

仅供参考,“数据”目录直接包含在“webapp”之下,并访问代码是:servletContext.getResourceAsStream(“/ data/stuff.xml”);

注意我还必须手动“触摸”XML文件才能上传。

再次感谢。

+1

FWIW,在StackOverflow(和所有StackExchange站点)上习惯性地提升帮助你的帖子(谢谢你的笔记实际上被认为是不必要的噪音),并且如果帖子是对你的问题的回答,你也应该将它标记为已接受(投票箭头/分数下的复选标记)。 –

+0

@Mark Hollmann您可以随时对我的回答发表评论或编辑您的问题本身,以便在结尾处包含后续行动或解决方案,以说明我的答案是否解决了问题,以及您希望添加的额外信息。当然,请将我的答案标记为接受,如果它对你有用:) –

+0

对不起,家伙,仍然在这里学习绳索。非常感谢您的帮助! –