النمل: كيف يمكنني إصلاح WrappedRuntimeException عند استخدام المهمة؟

StackOverflow https://stackoverflow.com/questions/612965

  •  03-07-2019
  •  | 
  •  

سؤال

وحاولت استخدام المهمة 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 التي يحتاج إليها، مضمونة، وأنه يعمل بشكل جيد.

ولذا نعم، الحل هو الحل الصحيح. بهذه الطريقة، ويبني الخاص بك لا تعتمد على موقع خارجي التي يمكن الوصول إليها وجود ملف المتاحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top