Hello,
Indul egy új projektem, amiben többek között fájlokat szeretnék feltölteni.
Szerver oldalon létrehoztam ez alapján egy service endpointot.
Forrás: http://pastebin.com/6TPzJaLr
A kliensem SWING-es lesz, így generáltam stub-ot a fenti service-ből majd a következőt követtem el:
A HUP-on zmb kolléga útmutatása alapján gyártottam egy teszt projektet, de nem sikerült sajnos 300Mb-nál nagyobb fájlt áttolni.
Ha nagyobb a fájl akkor a szokásos hibaüzenetet kapom.
Ha ránéznétek a kódra nagyon hálás lennék!
Szerver tomcat 7 illetve jetty 7, JDK 7.
Apache CXF 2.7.5
Köszönöm előre is!
Page
viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
6 Comments
Auth Gábor
Ha kliensen jön az OOM, akkor én megpróbálnám ugyanezt SoapUI-al, hogy egyáltalán jól működik-e a szerver oldal, aztán körülnézni, hogy mi okozza az OOM-et.
Fehér Sándor
Köszönöm, nézem..
Fehér Sándor
SoapUI-val 1.2Gb-ot is át tudok tolni akár minden gond nélkül. A szerver oldal tehát életképes szerintem. Kliensen viszont következetesen OOM-et kapok.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2271)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:78)
at javax.activation.DataHandler.writeTo(DataHandler.java:309)
at com.sun.xml.internal.ws.encoding.MtomCodec$ByteArrayBuffer.write(MtomCodec.java:191)
at com.sun.xml.internal.ws.encoding.MtomCodec.encode(MtomCodec.java:158)
at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:267)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:196)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:122)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:95)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:626)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:308)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:146)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:129)
at com.sun.proxy.$Proxy21.upload(Unknown Source)
at test.Main.main(Main.java:28)
Auth Gábor
Az a baj, hogy ebben a stacktrace-ben csak a Main.java:28 van benne... ahol ránézésre átadsz egy FileDataSource példányt:
Viszont felette ott van egy upload hívás, ami akkor a 29. sor lesz, így már érthető:
Én erre azt mondanám, hogy a kliens oldalon valami nagyon nem jó... este megnézem, hogy hasonló esetben miképp csináltam, mert most nincs itt nálam az a forrás, de mindenképpen fura... úgy tűnik, mintha a kliens nem stream-ként próbálná feltolni az adatokat, hanem egy ByteArrayOutputStream-be, amibe viszont nem fér el... a kérdés az, hogy miért tesz ilyet (a PosterOutputStream)... :/
Fehér Sándor
Én is arra jutottam, hogy nem stream-ként akarja áttolni. Köszönöm előre is!
Fehér Sándor
Sikerült találnod valamit ? Köszönöm!