当前位置: 首页 > 知识库问答 >
问题:

Wildfly 8.2/下拖读取超时

杭英杰
2023-03-14

我最近用java1将我的项目从jboss4迁移到了wildfly 8.2。8.我有一个使用SAAJ的webservice调用,它在命令行中运行良好。但当它从wildfly8内部运行时。2.60秒后超时。我在jboss论坛上读到,读取请求的默认超时时间为60秒。所以我在单机版中更改了配置。xml到

            <ajp-listener name="ajp" socket-binding="ajp" max-parameters="10000"/>
            **<http-listener name="default" socket-binding="http" max-parameters="10000" read-timeout="120000"/>**
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>

但60秒后仍会超时,并出现以下错误。

Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking http://test-server/test/v2.0.0/TestService?wsdl: Read timed out
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.8.0_25]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [rt.jar:1.8.0_25]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.8.0_25]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) [rt.jar:1.8.0_25]
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1347)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1331)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)
    at org.jboss.wsf.stack.cxf.saaj.SOAPConnectionImpl.call(SOAPConnectionImpl.java:120)
    ... 38 more
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method) [rt.jar:1.8.0_25]
    at java.net.SocketInputStream.read(SocketInputStream.java:150) [rt.jar:1.8.0_25]
    at java.net.SocketInputStream.read(SocketInputStream.java:121) [rt.jar:1.8.0_25]
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) [rt.jar:1.8.0_25]
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) [rt.jar:1.8.0_25]
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345) [rt.jar:1.8.0_25]
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:703) [rt.jar:1.8.0_25]
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) [rt.jar:1.8.0_25]
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534) [rt.jar:1.8.0_25]
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439) [rt.jar:1.8.0_25]
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) [rt.jar:1.8.0_25]
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.getResponseCode(URLConnectionHTTPConduit.java:266)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1545)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1515)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1318)

我在这里读到,我可以设置超时,但我不必这样做,因为程序运行正常,没有从命令行超时,所以它不是saaj超时问题。我很确定野蝇/undertow出于某种原因正在计时套接字读出。

感谢任何帮助。

---更多细节---

目前我正在使用wildfly8附带的undertow 1.1决赛。2.我试着将undertow升级到1.2测试版,结果仍然一样。

失败的电话:

        responseMsg = soapConn.call(soapMessage, wsdlLoc);

wildfly8中的下拖配置。2 :

    <subsystem xmlns="urn:jboss:domain:undertow:1.2">
        <buffer-cache name="default"/>
        <server name="default-server">
            <ajp-listener name="ajp" socket-binding="ajp" max-parameters="10000"/>
            <http-listener name="default" socket-binding="http" max-parameters="10000" read-timeout="120000"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
        </filters>
    </subsystem>

更多细节:

我在wildfly9下试过这个。0BETA2和相同的结果。如果有帮助的话,我想分享更多细节。SAAJ webservice调用是从运行在wildfly8中的servlet发出的。2,目标WSDL位于另一台jboss服务器上。所以基本上,来自wildlfy的客户端webservice调用会在60秒内超时,但如果我从独立java客户端运行相同的调用,并且相同的代码也可以正常工作。我甚至在jboss社区上打开了一个帖子,但还没有听到任何消息

共有3个答案

经国安
2023-03-14

足以将以下代码添加到您的webservice消费者:

//import javax.xml.ws.BindingProvider;

//Set timeout until a connection is established
((BindingProvider)this.myService).getRequestContext().put("javax.xml.ws.client.connectionTimeout", "60000"); //one minute

//Set timeout until the response is received
        ((BindingProvider)this.myService).getRequestContext().put("javax.xml.ws.client.receiveTimeout", "600000"); //ten minutes
郑和泰
2023-03-14

或者,这个问题已经在wildfly 9中解决。开发人员可以通过设置系统属性来覆盖默认的CXF HTTP导管值。更多详情请访问https://docs.jboss.org/author/display/WFLY9/ApacheCXF集成#ApacheCxFin集成ApacheCXFinterceptors

石苏燕
2023-03-14

我可以通过在apache cxf源代码中更改接收超时并为wildfly8重建它来解决这个问题。2.

简要说明:(版本必须完全相同,否则编译失败)。

  1. 下载CXF2。7.15来自apache的src
  2. 下载jdk1。6最新版本
  3. 下载3.0.4
  4. 导出JAVA_HOME=path-to-jdk1。6
  5. 添加jdk1。6/bin和maven/bin到路径
  6. export MAVEN_OPTS=-Xmx512m修复permgen错误
  7. 开门/rt/transports/http/src/main/resources/schemas/wsdl/http-conf.xsd并将ReceiveTimeout从60000更改为所需的任何值,例如600000(10分钟)
  8. 运行mvn-Pfastinstall

具有HttpConductor套接字超时的文件是HTTPClientPolicy。java,它在/rt/transports/http/target/cxf-rt-transports-http-2.7.15。罐子把这个罐子复制到Wildfly 8中。apache/cxf/impl/main文件夹下有两个模块。还有,编辑模块。xml来使用这个罐子。

我还必须在standalone中更改下拖读取超时设置。将xml转换为更高的值,以阻止其重新尝试请求。

希望这有帮助。

 类似资料:
  • 问题内容: 这是一个基于客户端/服务器的简单ping / pong程序。不幸的是,IT无法正常工作并显示以下错误消息: 它停止在CLIENT TASK 30行,实际上,客户端不读取服务器已发送的内容。这里的代码: 服务器 服务器任务 客户 客户任务 问题答案: 问题出在循环内部的使用与从连接另一端处理套接字的方式之间的交互。 仅当从其读取的流结束时才返回-1,这在本质上将意味着套接字已关闭。在关闭

  • 我需要知道如何读取(同步或异步不重要)与超时。我想检查一个设备是否与串行端口连接。 为此,我使用,然后等待设备的响应。 如果连接了设备工作正常,但如果没有设备,程序就会停止,这就是我需要超时的原因

  • 我有一段代码可以下载谷歌电子表格 连接超时默认为20秒。我试图将其设置为不同的值,但它不起作用。我不断得到 原因:java.net.SocketTimeoutException:java.net.SocketInputStream.socketRead0(本机方法)的读取超时~[na:1.7.060]在java.net.SocketInputStream.Read(SocketInputStrea

  • 问题内容: 我有一个RESTful服务器,该服务器从客户端接收http POST输入以投票表决服务器上的歌曲。我已经使用Apache HTTPClient作为客户端。 当我连续点击投票按钮时,经过几次投票(例如7-8),我得到了例外。当我搜索原因时,我发现这是因为客户端在超时期间没有得到服务器响应。但是问题是,当我使用其他应用程序(例如Chrome REST Console或JMeter)时,可以

  • 我正在尝试使用Spring Data Redis绝地组合连接到AWS ElastiCache Redis。[Redis Cluster enabled,因此它有Cluster Config endpoint,有3个碎片-每个碎片有1个主节点和2个副本节点] 读取超时错误。 AWS Redis服务器版本:5.0.3/群集模式:已启用/SSL:已启用/Auth:已启用(通过密码) 库——Spring数

  • 这是来自.properties得my DB配置: 这是config.xml: 实际上,我可以很容易地访问我们的本地web应用程序,并且可以在日志中看到到DB的连接跟踪,但对于批处理来说,情况并非如此。 在我有了这个之后: 有人帮忙吗?