문제

나는 그것을 사용하려고했다 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 파일을 다운로드하여 프로젝트 DIR에 배치했습니다. URL 대신 파일을 참조했으며 현재 작동하는 것 같습니다.

<xmlcatalog>
  <dtd publicId="-//Hibernate/Hibernate Mapping DTD//EN"
       location="${base.configuration.hibernate.dir}/hibernate-mapping-3.0.dtd"/>
</xmlcatalog> 
도움이 되었습니까?

해결책

아, 문제를 알고 있다고 생각합니다. 당신의 xslt 과제, 당신은 an을 지정했습니다 xmlcatalog:

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

그만큼 xmlcatalog 돕는 데 사용됩니다 xslt 작업 XML 구문 분석 및 유효성 검사에 필요한 DTD 및 기타 항목을 찾습니다. 지정된 URL로 이동하면 location 당신은 DTD를 얻습니다. (Firefox는 빈 페이지를 보여 주지만 "페이지 소스"를 보는 DTD 컨텐츠가 표시됩니다.) DTD가 실제로 해당 URL에 존재하기 때문에 빌드에 DTD를 읽는 데 문제가있는 이유를 정확히 알 수 없습니다. 인코딩에 차이가 있거나 사이트가 제대로 응답하지 않았을 수도 있습니다. 당신이 개미를 달렸다면 -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