繁体   English   中英

XSLT文档功能在迁移后引发“连接超时”异常

[英]XSLT document function throws “Connection timed out” exception after migration

有一个Java Cocoon应用程序使用Saxon 8.7执行XSLT转换。 一种这样的xslt使用文档功能来注入远程xml资源的内容。 因此,调用如下所示: <xsl:apply-templates select="document(@href)/p-topic" mode="static-topic"/>

可以访问远程文档(已使用wget测试),该远程主机未使用任何代理。 但是,我得到以下异常堆栈跟踪:

Caused by: org.apache.commons.lang.exception.NestableRuntimeException: net.sf.saxon.trans.DynamicError: net.sf.saxon.trans.DynamicError: java.net.ConnectException: Connection timed out
        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)
        at java.net.Socket.connect(Socket.java:519)
        at java.net.Socket.connect(Socket.java:469)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)

超时发生在大约20秒后。

最终,在将应用程序移至另一台服务器后出现了问题。 在初始服务器上,相同的代码可以正常工作。 因此,这取决于环境。

我也分析了netstat的输出。 下列连接出现在正在运行的XSLT转换上:

Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name
tcp        0      1 ::ffff:134.27.100.67:37600  ::ffff:134.27.97.142:8510   SYN_SENT    22484/java
tcp     8559      0 ::ffff:134.27.100.67:55835  ::ffff:134.27.97.143:80     ESTABLISHED  22484/java

134.27.97.143:80是目标远程xml资源位置。 我不知道为什么SYN_SENT连接出现在另一台服务器上。

大约5秒钟后,第二个连接更改为以下内容:

tcp     8560      0 ::ffff:134.27.100.67:55835  ::ffff:134.27.97.143:80     CLOSE_WAIT  22484/java

再过15秒(浏览器现在超时)后,第一个连接消失,第二个连接变为以下内容:

tcp     0      0 ::ffff:134.27.100.67:55835  ::ffff:134.27.97.143:80     CLOSE_WAIT  22484/java

再过大约5秒钟后,第二个连接也会消失。 我不是netstat专家,但是Recv-Q值在发生超时之前一直保持非零值似乎令人怀疑。 因此,看起来应用程序在从TCP套接字队列读取数据时挂起。 我尝试了不同的雄猫(5和6)。 有任何想法吗?

最终,我设法找到了根本原因。 看来那些远程文档具有DTD文件的DOCTYPE声明。 这些DTD文件不能从新服务器访问,而可以从旧服务器访问。 因此,似乎Saxon尝试下载DTD进行验证,但未成功执行“连接超时”异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM