Java 8 Wildfly 8.2/下拖读取超时

Java 8 Wildfly 8.2/下拖读取超时,java-8,wildfly,wildfly-8,saaj,undertow,Java 8,Wildfly,Wildfly 8,Saaj,Undertow,我最近用java1.8将我的项目从jboss4迁移到了wildfly 8.2。我有一个使用SAAJ的webservice调用,它在命令行中运行良好。但当它从wildfly8.2内运行时,会在60秒后超时。我从jboss论坛上读到,读取请求的默认超时时间为60秒。因此,我将standalone.xml中的配置更改为 <ajp-listener name="ajp" socket-binding="ajp" max-parameters="10000"/>

我最近用java1.8将我的项目从jboss4迁移到了wildfly 8.2。我有一个使用SAAJ的webservice调用,它在命令行中运行良好。但当它从wildfly8.2内运行时,会在60秒后超时。我从jboss论坛上读到,读取请求的默认超时时间为60秒。因此,我将standalone.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>
我读到我可以设置超时,但我不必设置,因为程序运行正常,没有从命令行超时,所以这不是saaj超时问题。我很确定wildfly/undertow出于某种原因正在计时插座读数

感谢您的帮助

---更多细节---

目前我正在使用wildfly8.2附带的undertow 1.1决赛。我试着将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>


我还没有听到任何消息

我能够通过在ApacheCXF源代码中更改接收超时并为wildfly8.2重建它来解决这个问题

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

  • 从apache下载CXF2.7.15 src
  • 下载jdk1.6最新版本
  • 下载3.0.4
  • 导出JAVA_HOME=path-to-jdk1.6
  • 将jdk1.6/bin和maven/bin添加到路径
  • 导出MAVEN_OPTS=-Xmx512m以修复permgen错误
  • 打开./rt/transports/http/src/main/resources/schemas/wsdl/http-conf.xsd并将ReceiveTimeout从60000更改为600000(10分钟)所需的任何值
  • 运行mvn-Pfastinstall
  • 具有httpconductor套接字超时的文件是HTTPClientPolicy.java,位于./rt/transports/http/target/cxf-rt-transports-http-2.7.15.jar中。将此jar复制到apache/cxf/impl/main文件夹下的wildfly8.2模块中。另外,编辑module.xml以使用此jar

    我还必须将standalone.xml中的undertow read timeout设置更改为更高的值,以阻止它重新尝试请求


    希望这有帮助。

    或者,这个问题已经在wildfly 9中解决。开发人员可以通过设置系统属性来覆盖默认的CXF HTTP导管值。有关更多详细信息,请访问

    ,以便向您的Web服务使用者添加以下代码:

    //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
    

    对于wildfly8.2,通过JBoss Wildfly 8.2.1将此jar复制到位于“\modules\system\layers\base\org\apache\cxf\impl\main”文件夹的wildfly8.2模块中。最终OP使用的是SAAJ API,而不是JAX-WS。
    //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