我正在嘗試序列化Map <Enum,List <Model >> 。 一切都很好,我能夠檢索HTML和JSON表示形式,但是當我嘗試檢索XML表示形式時,JAXB抱怨說,盡管Jackson非常酷,但它無法在根目錄中處理Map實例。 像往常一樣,Googling透露JAXB希望在我的根目錄中創建一個Container類,而我不想創建它。 我也不想放棄。 因此,我使用XStreamMarshaller嘗試了運氣。 這次GAE抱怨XStream使用了受限制的API。 什么
出于好奇,我想檢查XStreamMarshaller在GAE之外使用時是否能按預期工作。 因此,我使用以下定義創建了Tomcat上下文文件“ myapp.xml”,并將其小心地放置在TOMCAT_HOME / conf / Catalina / localhost中 。 我本來可以從TOMCAT_HOME / bin / startup.bat啟動Tomcat來檢查它是否有效,但是由于是IDEA迷,我為IDEA Tomcat插件創建了運行配置,并從IDEA內部啟動了服務器。 但是該應用程序甚至拒絕被發現,更不用說部署了。 經過幾次失敗的嘗試后,我嘗試在IDEA外部直接啟動Tomcat。 幸運的是,該應用程序已成功部署,令我驚訝的是,XStreamMarshaller巧妙地流了序列化的XML。 問題解決了!
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_MY_APP"reloadable="true"path="/myapp">
</Context>
但是,當我從IDEA內部啟動Tomcat時,為什么沒有部署該應用程序? 畢竟,我已經將IDEA鏈接到本地??Tomcat安裝,并且它執行的腳本顯然在我的TOMCAT_HOME / bin文件夾中。 然后,為什么為什么在世界上為什么拒絕發現該應用程序? 解決方案以CATALINA_BASE的形式出現。 似乎IDEA將TOMCAT_HOME / conf文件夾的內容復制到其HOME文件夾中,其名稱類似于Unnamed_MyApp ,并將此文件夾設置為CATALINA_BASE 。 這就解釋了為什么Tomcat完全忽略了“ myapp.xml”。 然后,我導航到“ Tomcat運行配置->啟動/連接->環境變量”,并添加了CATALINA_BASE作為環境變量,并將其指向本地TOMCAT_HOME文件夾。 進行此配置更改后,IDEA按預期方式啟動了Tomcat,并且發現并部署了我的應用程序。 解決了另一個問題!
但是真正的問題-JAXB抱怨Map和GAE拒絕XStreamMarshaller受限制-是尚未解決。 也許我應該嘗試CastorMarshaller,XmlBeansMarshaller或JibxMarshaller中的一種。
有任何想法嗎?
參考: Tomcat和IntelliJ –從我們的JCG合作伙伴的 webapps文件夾之外部署war文件 ? Ganesh博客上的 Ganeshji Marwaha。
翻譯自: https://www.javacodegeeks.com/2012/02/tomcat-intellij-deploy-war-files.html