2013-03-01 2 views
1

XSLT를 사용하여 xml을 변환하려고합니다. 내 xml은 doctype에서 dtd 파일의 "https"url을가집니다. 이 doctype을 제거하면 파일을 변형 할 수 있지만 doctype을 사용하면 오류가 발생합니다.javax.xml.transform.TransformerException : com.sun.org.apache.xml.internal.utils.WrappedRuntimeException : 연결 시간 초과 : 연결

ERROR: 'Connection timed out: connect' 
ERROR: 'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect' 
javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:719) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
    at Example.main(Example.java:59) 
Caused by: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.java:546) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) 
    ... 2 more 
Caused by: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect 
    at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:446) 
    at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:234) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.java:524) 
    ... 3 more 
--------- 
javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.java:546) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
    at Example.main(Example.java:59) 
Caused by: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect 
    at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:446) 
    at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:234) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.java:524) 
    ... 3 more 
--------- 
com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Connection timed out: connect 
    at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:446) 
    at com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:234) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.java:524) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
    at Example.main(Example.java:59) 
--------- 
java.net.ConnectException: Connection timed out: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 

실시간 시나리오에서이 doctype을 제거 할 수 없습니다. 도와주세요.

답변

2

구문 분석기가 DOCTYPE의 URL에서 DTD를 해결하기 위해 웹으로 나가기 때문에 오류가 발생합니다. 가져 오기가 실패했습니다.

로컬로 DTD를 저장하고 EntityResolver를 사용하여 로컬 복사본을 사용해야합니다.

이 질문과 대답은 어떻게 표시되는지 확인하십시오. Prevent DTD download when using XSLT i.e. XML Transformer

+0

감사합니다. @Alohci, 작동하지만 어쨌든 우리는 dtd 다운로드 및 검증을 무시할 수 있습니까? 실재 시나리오에서는 여러 종류의 XML을 수신 할 수 있으며 모든 XML에 대해 로컬로 dtd를 유지하고 추적 할 수 없었습니다. –

+0

해당 URL과 일치 할 때 빈 문자열을 반환하도록 entityResolver를 얻으면 효과적으로 유효성 검사가 수행되지 않고 DTD 복사본을 로컬에 보관할 필요가 없습니다. DTD에 정의 된 엔티티가있는 경우 분명히 해당 정보를 잃게됩니다. – Alohci

+0

작동합니다. 도움에 감사드립니다. @Alohci –