2017-08-10 27 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

對不起,傢伙,仍然在這裏學習繩索。非常感謝您的幫助! –