没有互联网连接如何根据DTD验证hibernate配置文件

时间:2018-05-07 02:26:42

标签: java xml hibernate xsd dtd

要验证xml,我们需要dtd或xsd。如果我们想要针对dtd验证xml,那么我们需要在Hibernate中编写这个。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">

此处PUBLIC表示 hibernate-configuration-3.0.dtd 文件在网络中可用。当我们执行Hibernate程序时,Hibernate应该转到这个URL http://hibernate.org/dtd/hibernate-configuration-3.0.dtd并验证hibernate-configuration.dtd文件。

但我的问题是没有互联网连接,hibernate如何验证配置文件?

我知道hibernate jar中也有 hibernate-configuration-3.0.dtd 文件。但是如果它在我们的文件系统中可用,那么我们需要wtite而不是PUBLIC,我们需要提供文件系统的完整绝对路径,其中 hibernate-configuration-3.0.dtd 文件可用。< / p>

2 个答案:

答案 0 :(得分:0)

我也面临同样的问题。我通过编写下面的xml语句来尝试更好的东西

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "hibernate-configuration-3.0.dtd">

用于映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "hibernate-mapping-3.0.dtd">

并将这两个文件 hibernate-configuration-3.0.dtd hibernate-mapping-3.0.dtd 放在tomcat服务器的bin目录中。 (我使用的是apache tomcat服务器)。服务器在其当前目录(bin目录)中搜索这些dtd文件。通过这种方式,它解决了我离线运行应用程序的问题。如果有更好的方式,我们总是欢迎。感谢

答案 1 :(得分:0)

如果您指定的URL与Hibernate期望的URL匹配,则不需要Internet连接。

如果URL匹配,则Hibernate使用EntityResolver从Hibernate jar中加载dtd。

例如在Hibernate 3.5中,org.hibernate.util.DTDEntityResolver类:

  

...尝试将各种systemId URL解析为本地类路径查找

     
      
  1. 在装入Hibernate类的类加载器中,搜索以http://hibernate.sourceforge.net/开头的任何systemId URL作为类路径资源。

  2.   
  3. 使用classpath作为方案的任何systemId URL(即,首先使用当前线程上下文类加载器,然后使用加载了Hibernate类的类加载器来搜索以classpath://开头的类路径资源。

  4.   
     

与上述规则有关的任何无法解析的实体引用都将返回null,这将强制SAX阅读器以其默认方式处理实体引用。

在Hibernate 3.6中,URL前缀已更改为http://www.hibernate.org/dtd/,如更新的DTDEntityResolver

所示

在您的情况下,如果您使用的是3.6之前的Hibernate jar,则您的规范将使用外部DTD。您可以更新Hibernate,或为您的Hibernate版本使用正确的URL。

如果要确保您在Hibernate jar中使用DTD,可以使用:

<!DOCTYPE hibernate-configuration SYSTEM  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">