النمل: كيف يمكنني إصلاح WrappedRuntimeException عند استخدام المهمة؟
سؤال
وحاولت استخدام المهمة xslt
في النملة لتعديل ملف تعيين السبات (*.hbm.xml
) باستخدام XSLT. ومع ذلك ظللت على الحصول على com.sun.org.apache.xml.internal.utils.WrappedRuntimeException
.
إذا كنت تأخذ من إعلان !DOCTYPE
في ملف xml المصدر، يعمل الهدف التالي دون أي خطأ. هل يمكن لشخص من فضلك قل لي ما أفعله خطأ؟ شكرا!
إليك هدفي النمل:
<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 وضعت ذلك في بلدي دير المشروع. I المشار الملف (كما هو موضح أدناه) بدلا من 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 والتحقق من الصحة. إذا ذهبت إلى URL الذي حددته كما location
كنت لا تحصل على DTD. (أي فايرفوكس يدل على صفحة فارغة، ولكن عرض "مصدر الصفحة" ترى محتويات DTD) منذ DTD هو في الواقع حاضرا في ذلك URL، وأنا لا أعرف بالضبط لماذا كان بناء مشكلة في قراءة هذا DTD - ربما هناك اختلاف في ترميز أو ربما الموقع لا يستجيب بشكل صحيح. إذا قمت بتشغيل ANT مع خيار -verbose
، وكنت أرى أكثر من تفريغ مكدس حول الفشل إذا كنت تريد حقا لتصحيح ذلك. سوف ترى 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 التي يحتاج إليها، مضمونة، وأنه يعمل بشكل جيد.
ولذا نعم، الحل هو الحل الصحيح. بهذه الطريقة، ويبني الخاص بك لا تعتمد على موقع خارجي التي يمكن الوصول إليها وجود ملف المتاحة.