Child pages
  • File feltöltés webservice-szel (SWING + Apache CXF)
Skip to end of metadata
Go to start of metadata

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:

http://pastebin.com/PZVbLaSx


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))
  • No labels

6 Comments

  1. 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.

    1. Köszönöm, nézem..

  2. 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)

     

    1. 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:

                      data.setData(new DataHandler(ds));

      Viszont felette ott van egy upload hívás, ami akkor a 29. sor lesz, így már érthető:

                      client.upload(data);

      É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)... :/

      1. Én is arra jutottam, hogy nem stream-ként akarja áttolni. Köszönöm előre is!

         

      2. Sikerült találnod valamit ? Köszönöm!