Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从html字符串生成pdf时连接超时_Java_Pdf Generation_Flying Saucer - Fatal编程技术网

Java 从html字符串生成pdf时连接超时

Java 从html字符串生成pdf时连接超时,java,pdf-generation,flying-saucer,Java,Pdf Generation,Flying Saucer,我正在使用 org.xhtmlender 飞碟-pdf-itext5 9.0.4 将我的HTML字符串转换为PDF try { String table = getHtmlAsString();//returns html string which contains reference to external CSS DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDoc

我正在使用

org.xhtmlender
飞碟-pdf-itext5
9.0.4
将我的HTML字符串转换为PDF

    try {
        String table = getHtmlAsString();//returns html string which contains reference to external CSS
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = builder.parse(new ByteArrayInputStream(table.getBytes("UTF-8")));

        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(doc, null);

        ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
        renderer.layout();
        renderer.createPDF(byteArray);
        byte[] pdf = byteArray.toByteArray();
        byteArray.close();
        writeByteArrayToFile(pdf);
    } catch (Exception e) {
        e.printStackTrace();
    }
代码在本地运行良好。但在生产服务器上,它会引发连接超时异常。 这是完整的堆栈跟踪

java.net.ConnectException: Connection timed out: connect at
 java.net.DualStackPlainSocketImpl.connect0(Native Method) at
 java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at
 java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at
 java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at
 java.net.AbstractPlainSocketImpl.connect(Unknown Source) at
 java.net.PlainSocketImpl.connect(Unknown Source) at
 java.net.SocksSocketImpl.connect(Unknown Source) at
 java.net.Socket.connect(Unknown Source) at
 java.net.Socket.connect(Unknown Source) at
 sun.net.NetworkClient.doConnect(Unknown Source) at
 sun.net.www.http.HttpClient.openServer(Unknown Source) at
 sun.net.www.http.HttpClient.openServer(Unknown Source) at
 sun.net.www.http.HttpClient.<init>(Unknown Source) at
 sun.net.www.http.HttpClient.New(Unknown Source) at
 sun.net.www.http.HttpClient.New(Unknown Source) at
 sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at
 sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at
 sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at
 sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at
 org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at
 org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) at
 org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) at
 org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) at
 org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source) at
 org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at
 org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at
 org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at
 org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at
 org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at
 org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) at
 javax.xml.parsers.DocumentBuilder.parse(Unknown Source) at
 com.mypackage.PDFProcessor.getPdf(PDFProcessor.java:84)
java.net.ConnectException:连接超时:连接在
java.net.DualStackPlainSocketImpl.connect0(本机方法)位于
位于的java.net.DualStackPlainSocketImpl.socketConnect(未知源)
java.net.AbstractPlainSocketImpl.doConnect(未知源代码)位于
位于的java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
java.net.AbstractPlainSocketImpl.connect(未知源代码)位于
位于的java.net.PlainSocketImpl.connect(未知源)
位于的java.net.socksocketimpl.connect(未知源)
位于的java.net.Socket.connect(未知源)
位于的java.net.Socket.connect(未知源)
sun.net.NetworkClient.doConnect(未知源)位于
sun.net.www.http.HttpClient.openServer(未知源代码)位于
sun.net.www.http.HttpClient.openServer(未知源代码)位于
www.http.HttpClient.(未知来源)位于
sun.net.www.http.HttpClient.New(未知源代码)位于
sun.net.www.http.HttpClient.New(未知源代码)位于
sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(未知源)位于
sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知源)位于
sun.net.www.protocol.http.HttpURLConnection.connect(未知源)位于
sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知源)位于
org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(未知源)位于
org.apache.xerces.impl.XMLEntityManager.startenty(未知源代码)位于
org.apache.xerces.impl.XMLEntityManager.startdentity(未知源代码)位于
org.apache.xerces.impl.xmldtddscannerimpl.setInputSource(未知源)位于
org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(未知来源)位于
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源)位于
org.apache.xerces.parsers.XML11Configuration.parse(未知源代码)位于
org.apache.xerces.parsers.XML11Configuration.parse(未知源代码)位于
org.apache.xerces.parsers.XMLParser.parse(未知源代码)位于
org.apache.xerces.parsers.DOMParser.parse(未知源代码)位于
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(未知源代码)位于
javax.xml.parsers.DocumentBuilder.parse(未知源代码)位于
com.mypackage.PDFProcessor.getPdf(PDFProcessor.java:84)
代码中的第84行是
documentdoc=builder.parse(新的ByteArrayInputStream(table.getBytes(“UTF-8”))


起初我认为可能是服务器无法获取外部CSS。所以我把html字符串保存为html文件,我可以在浏览器上看到页面。这意味着服务器可以访问CSS。

您对CSS的看法可能仍然是正确的,因为主html已保存并不意味着CSS保存得很好(实际上,我们甚至不知道它是否试图保存CSS,您是否尝试通过类似Paros的代理来了解您尝试的每一次通信?)


顺便说一下,你的问题可能不同。您是否在生产环境中支持公司代理?您的“飞碟pdf库”是否需要任何可能卡在防火墙中并导致超时的外部资源(任何.xsd或类似的资源)?确保您控制了应用程序生成的所有通信,您将发现问题。

我在堆栈跟踪中看到
XMLDTDScannerImpl.setInputSource
。可能是在无法从生产服务器访问的URL中定义了某些DTD吗?