我正在尝试序列化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