gpt4 book ai didi

java - 迁移后 XSLT 文档函数抛出 "Connection timed out"异常

转载 作者:行者123 更新时间:2023-11-29 08:57:20 24 4
gpt4 key购买 nike

有一个 Java Cocoon 应用程序使用 Saxon 8.7 执行 XSLT 转换。其中一个 xslt 使用文档函数来注入(inject)远程 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 nametcp        0      1 ::ffff:134.27.100.67:37600  ::ffff:134.27.97.142:8510   SYN_SENT    22484/javatcp     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 套接字队列读取数据时挂起。我尝试过不同的 tomcat(5 和 6)。有什么想法吗?

最佳答案

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

关于java - 迁移后 XSLT 文档函数抛出 "Connection timed out"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com