2013-03-01 276 views
1

我想使用XSLT转换xml。我的xml在xml doctype中有“https”的dtd文件的url。如果我删除这个文档类型,我可以转换文件,但与文档类型我得到以下错误。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) 

我无法删除这种在实际场景中的文档类型。请帮忙。

回答

2

您正在收到错误,因为解析器正在Web上解析DOCTYPE中URL处的DTD。此提取失败。

您需要在本地存储DTD,并使用EntityResolver来使用本地副本。

看到这个问题和顶部的答案,看看如何做到这一点。 Prevent DTD download when using XSLT i.e. XML Transformer

+0

感谢@Alohci,它正在工作,但无论如何,我们可以忽略dtd下载和验证?在我的活动场景中,我可以接收多种XML,并且无法在本地保留并跟踪所有xml的dtd。 – 2013-03-04 14:46:05

+0

如果您在entityResolver与该URL匹配时返回空字符串,那么实际上不会进行验证,您也不必在本地保留DTD的副本。如果在DTD中定义了任何实体,显然你会失去这些信息。 – Alohci 2013-03-04 15:35:18

+0

它的工作原理,感谢@Alohci的帮助 – 2013-03-06 06:22:29