我尝试使用Ant中的 xslt 任务来使用XSLT修改Hibernate映射文件( * .hbm.xml )。但是我继续得到 com.sun.org.apache.xml.internal.utils.WrappedRuntimeException

如果我在源xml文件中取出!DOCTYPE 声明,则以下目标运行时没有任何错误。有人可以告诉我我做错了什么吗?谢谢!

这是我的Ant目标:

<target name="generatePermHbmXml">
  <xslt in="${base.configuration.hibernate.dir}\Test.hbm.xml" 
        out="${base.configuration.hibernate.dir}\TestPerm.hbm.xml"
        style="${base.configuration.hibernate.dir}\perm.xsl">
    <xmlcatalog>
      <dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
           location="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"/>
    </xmlcatalog>
  </xslt>       
</target>

这是我的日志输出:

[xslt] : Error! hibernate.sourceforge.net
[xslt] : Error! com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: hibernate.sourceforge.net

[编辑]这是我删除的DOCTYPE以使其正常工作

<!DOCTYPE hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

[Edit2]:我发现了一个修复程序,但我不知道它是否是“正确的”修复程序。方式与否。我下载了DTD文件并将其放在我的项目目录中。我引用了该文件(如下所示)而不是URL,现在它似乎正在运行。

<xmlcatalog>
  <dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
       location="${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd"/>
</xmlcatalog> 
有帮助吗?

解决方案

啊,我想我知道这个问题。在 xslt 任务中,您指定了 xmlcatalog

<xmlcatalog>
  <dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
       location="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>

xmlcatalog 用于帮助 xslt 任务查找XML解析和验证所需的DTD和其他项目。如果您转到指定为 location 的URL,则会获得DTD。 (哪个Firefox显示一个空页面,但查看“页面源”,您会看到DTD内容。)由于DTD实际上存在于该URL,我不确切地知道为什么构建在读取该DTD时出现问题 - - 也许编码有所不同,或者网站没有正确响应。如果您使用 -verbose 选项运行ANT,如果您真的想要调试它,您会看到更多的堆栈转储。您会看到原始的 Exception 包含在您看到的 Exception 中。

无论如何,如果您下载有问题的DTD,然后将 location 指向本地文件中的 dtd 元素,就像您一样:

<xmlcatalog>
  <dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
       location="${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd"/>
</xmlcatalog>

然后解析器可以找到它需要的DTD,保证,并且它工作正常。

是的,您的解决方案是正确的解决方案。这样,您的构建不依赖于可访问的外部网站并且可以使用文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top