web-dev-qa-db-fra.com

Erreur de téléchargement de fichiers volumineux sur Wildfly

J'essaie de télécharger des fichiers volumineux (400 Mo +) vers wildfly 8.1 et j'obtiens une exception IOException mais je ne rencontre aucune exception avec les mêmes conditions lors de l'utilisation du serveur jboss 7:

Exception:

Blocking request failed HttpServerExchange{ POST /ehub/contentstore/categories/maincategory/file/create}: Java.lang.RuntimeException: Java.io.IOException: Broken pipe
    at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.Java:527)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.Java:287)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.Java:227)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.Java:73)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.Java:146)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.Java:177)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.Java:727)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145) [rt.jar:1.7.0_51]
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615) [rt.jar:1.7.0_51]
    at Java.lang.Thread.run(Thread.Java:744) [rt.jar:1.7.0_51]
Caused by: Java.io.IOException: Broken pipe
    at Sun.nio.ch.FileDispatcherImpl.write0(Native Method) [rt.jar:1.7.0_51]
    at Sun.nio.ch.SocketDispatcher.write(SocketDispatcher.Java:47) [rt.jar:1.7.0_51]
    at Sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.Java:93) [rt.jar:1.7.0_51]
    at Sun.nio.ch.IOUtil.write(IOUtil.Java:51) [rt.jar:1.7.0_51]
    at Sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.Java:487) [rt.jar:1.7.0_51]
    at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.Java:150) [xnio-nio-3.2.2.Final.jar:3.2.2.Final]
    at io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.Java:212)
    at io.undertow.server.protocol.http.HttpResponseConduit.flush(HttpResponseConduit.Java:629)
    at io.undertow.conduits.FinishableStreamSinkConduit.flush(FinishableStreamSinkConduit.Java:83)
    at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.Java:162) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
    at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.Java:100)
    at org.xnio.channels.Channels.flushBlocking(Channels.Java:63) [xnio-api-3.2.2.Final.jar:3.2.2.Final]
    at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.Java:625)
    at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.Java:451)
    at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.Java:525)

J'ai augmenté la taille max-post mais cela n'a pas fonctionné.

standalone.xml:

<subsystem xmlns="urn:jboss:domain:undertow:1.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" max-post-size="974247881"/>
            <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/>
        </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>
26
semudu

J'ai trouvé une solution à cela. J'ai eu ce même problème et je l'ai résolu. Cela peut aider les autres.

Pour autoriser plus de taille d'en-tête de demande http, vous devez modifier le fichier standalone.xml de jboss ou wildfly.

Ajoutez l'attribut max-header-size au serveur par défaut et redémarrez le serveur cela fonctionnera Standalone.conf

<subsystem xmlns="urn:jboss:domain:undertow:1.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" max-header-size="974247881"/>
            <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>
...
</subsystem>
31
kirti

Il ne se trouve pas dans le fichier "standalone.conf". Il s'agit du fichier "standalone.xml" qui se trouve dans le dossier "standalone/configuration". changer max-post-taille:

<http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="104857600"/>
            <Host name="default-Host" alias="localhost">
11
Ritesh Shah

voir ce lien dans jboss: https://issues.jboss.org/browse/UNDERTOW-185

max-post-size dans ../wildfly/stanadalone/configuration/standalone.xml sera défini.

2
M2E67

Si votre wildfly se tient derrière le serveur Web, e.q. nginx, vous devrez peut-être définir la limite. Cela m'a aidé.

0
fidel