Ant: ¿Cómo arreglo una WrappedRuntimeException cuando uso la tarea <xslt>?

votos
0

Traté de usar la xslttarea en Ant para modificar un archivo de mapeo de Hibernate ( *.hbm.xml) usando XSLT. Sin embargo, seguí recibiendo un com.sun.org.apache.xml.internal.utils.WrappedRuntimeException.

Si elimino la !DOCTYPEdeclaración en el archivo xml fuente, el siguiente objetivo se ejecuta sin ningún error. ¿Podría alguien decirme qué estoy haciendo mal? ¡Gracias!

Aquí está mi objetivo 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>

Aquí está mi salida de registro:

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

[Editar] Aquí está el DOCTYPE que eliminé para que funcione

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

[Editar2]: Encontré una solución, pero no sé si es la manera correcta o no. Descargué el archivo DTD y lo coloqué en mi directorio de proyecto. Hice referencia al archivo (como se muestra a continuación) en lugar de la URL, y parece estar funcionando ahora.

<xmlcatalog>
  <dtd publicId=-//Hibernate/Hibernate Mapping DTD//EN
       location=${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd/>
</xmlcatalog> 
Publicado el 04/03/2009 a las 22:25
por usuario
En otros idiomas...                            


1 respuestas

votos
2

Ah, creo que sé el problema. En su xslttarea, usted especificó un xmlcatalog:

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

Se xmlcatalogusa para ayudar a la xslttarea a encontrar DTD y otros elementos necesarios para el análisis y la validación de XML. Si vas a la URL que especificaste location, obtendrás una DTD. (Que Firefox muestra una página vacía, pero viendo "fuente de página" ves el contenido de la DTD.) Dado que la DTD está de hecho presente en esa URL, no sé exactamente por qué la compilación tuvo un problema al leer esa DTD: tal vez haya una diferencia en la codificación o quizás el sitio no haya respondido correctamente. Si ejecuta ANT con la -verboseopción, verá más de un volcado de pila alrededor del error si realmente desea depurarlo. Vería el original Exceptionque quedó envuelto en el Exceptionque vio.

De todos modos, si se descarga el DTD en cuestión y luego apuntar su locationen el dtdelemento en el archivo local, como lo hizo:

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

entonces el analizador puede encontrar la DTD que necesita, garantizada, y funciona bien.

Entonces sí, tu solución es la solución correcta. De esta forma, sus compilaciones no dependen de que se pueda acceder a un sitio web externo y de tener un archivo disponible.

Respondida el 04/03/2009 a las 23:55
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more