放置DTD和模式文件的位置

时间:2009-04-20 19:02:09

标签: java java-ee jboss schema dtd

我有一个相当典型的JavaEE应用程序,使用EJB3,seam组件,spring bean和JSF组成,所有这些应用程序都打包到ear文件中的几个jar和war文件中。当然,对于JavaEE,我们有许多XML文件作为应用程序的一部分。其中一些XML文件使用DTD(seam)验证,一些使用模式验证。

由于大多数文件来自示例和其他项目,所有DTD和模式都引用项目的站点,默认DTD或架构所在的站点。问题出现了:由于某种原因,JBoss网站今天错过了接缝DTD(检查http://www.jboss.com/products/seam/components-1.1.dtdhttp://www.jboss.com/products/seam/components-1.2.dtdhttp://www.jboss.com/products/seam/components-2.0.dtd)。由于JBoss服务器使用此位置在引导程序中验证XML,因此应用程序部署失败。

我的问题是:鉴于这种情况,我应该在哪里放置DTD和定义文件?我看到三个选项:

  1. 使用默认位置,就像我之前做的那样。因为这意味着我现在将JBoss,Sun,Spring和任何其他供应商的稳定性添加到我的系统中以防我需要重新部署应用程序,我不想这样做。
  2. 将所有DTD和架构文件复制到我的服务器,使URLS指向我控制下的服务器。
  3. 将所有DTD和架构文件复制到我的应用程序或应用程序服务器,并在本地使用它们。
  4. 我倾向于使用选项#3,因为它提供了对文件的完全控制,没有网络依赖性。在我们已经完成的测试中,它甚至显着缩短了服务器的引导时间 - 显然XML解析器不会缓存定义。走这条路是不是我想念?

2 个答案:

答案 0 :(得分:0)

不,这是正确的做法。第一个应该只用于乱码或玩代码而不是用于任何严重的事情,第二个没有优势,而第三个没有优势,同时也更复杂。

答案 1 :(得分:0)

真正的问题是:真的需要验证xml文件吗? 在大多数情况下,验证不是在生产代码中完成的 - 大多数时候它都太慢了。

如果您确实想要验证,请转到选项#3。