From e92a688be34d85f48387ccfcea7e7aa234af4d4e Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 27 Feb 2015 17:40:41 +0100 Subject: [PATCH] using Jersey Multipart 1.17.0 which is now consistent with our Jersey version 1.17.0 coming from the Eclipse Orbit --- .../META-INF/MANIFEST.MF | 2 +- .../jaxrs/api/FileStorageResource.java | 31 +++++++++--------- .../features/target-base/feature.xml | 2 +- ...t-1.17.1.jar => jersey-multipart-1.17.jar} | Bin 52877 -> 52875 bytes .../adminconsole/URLFieldWithFileUpload.java | 7 +++- 5 files changed, 24 insertions(+), 18 deletions(-) rename java/com.sap.sailing.targetplatform.base/plugins/target-base/{jersey-multipart-1.17.1.jar => jersey-multipart-1.17.jar} (77%) mode change 100644 => 100755 diff --git a/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF b/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF index 12fe41895b9..7798dd00600 100644 --- a/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server.gateway/META-INF/MANIFEST.MF @@ -48,7 +48,7 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sailing.server.gateway.serialization.shared.android, com.sap.sse.shared.android, com.sap.sse.filestorage, - com.sun.jersey.contribs.jersey-multipart;bundle-version="1.17.1", + com.sun.jersey.contribs.jersey-multipart;bundle-version="1.17.0", com.sap.sse.security, org.apache.shiro.core;bundle-version="1.2.2", org.apache.shiro.web;bundle-version="1.2.2", diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/FileStorageResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/FileStorageResource.java index 40ceb741e09..0fa71f32ea4 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/FileStorageResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/FileStorageResource.java @@ -9,12 +9,12 @@ import java.util.logging.Logger; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; -import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; @@ -24,6 +24,8 @@ import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sse.common.NoCorrespondingServiceRegisteredException; import com.sap.sse.filestorage.InvalidPropertiesException; import com.sap.sse.filestorage.OperationFailedException; +import com.sun.jersey.multipart.FormDataBodyPart; +import com.sun.jersey.multipart.FormDataParam; @Path("/v1/file") public class FileStorageResource extends AbstractSailingServerResource { @@ -45,37 +47,36 @@ public class FileStorageResource extends AbstractSailingServerResource { // --data-binary @ \ // http://127.0.0.1:8888/sailingserver/api/v1/file @POST - @Consumes({ "image/jpeg", "image/png" }) - @Produces("application/json;charset=UTF-8") - public Response setTeamImage(InputStream uploadedInputStream, - @HeaderParam("Content-Type") String fileType, @HeaderParam("Content-Length") long sizeInBytes) { + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces("text/html;charset=UTF-8") + public String uploadFile(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataBodyPart filePart) { final JSONObject result = new JSONObject(); - Response response; String fileExtension = ""; - if (fileType.equals("image/jpeg")) { - fileExtension = ".jpg"; - } else if (fileType.equals("image/png")) { - fileExtension = ".png"; + MediaType fileType = filePart.getMediaType(); + if (fileType.getType().equals("image")) { + if (fileType.getSubtype().equals("jpeg")) { + fileExtension = ".jpg"; + } else if (fileType.getSubtype().equals("png")) { + fileExtension = ".png"; + } } URI fileUri; try { - if (sizeInBytes > 1024 * 1024 * MAX_SIZE_IN_MB) { + if (filePart.getContentDisposition().getSize() > 1024 * 1024 * MAX_SIZE_IN_MB) { throw new WebApplicationException(Response.status(Status.BAD_REQUEST) .entity("Image is larger than " + MAX_SIZE_IN_MB + "MB").build()); } fileUri = getService().getFileStorageManagementService().getActiveFileStorageService() - .storeFile(uploadedInputStream, fileExtension, sizeInBytes); + .storeFile(uploadedInputStream, fileExtension, filePart.getContentDisposition().getSize()); result.put(JSON_FILE_URI, fileUri.toString()); - response = Response.ok().entity(result.toJSONString()).build(); } catch (IOException | OperationFailedException | InvalidPropertiesException e) { final String errorMessage = "Could not store file: "+e.getMessage(); logger.log(Level.WARNING, "Could not store file", e); result.put("status", Status.INTERNAL_SERVER_ERROR.name()); result.put("message", errorMessage); - response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(result.toJSONString()).build(); } - return response; + return result.toJSONString(); } // Example test use: diff --git a/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml b/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml index a960807da65..cd5cd12d1b6 100755 --- a/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml +++ b/java/com.sap.sailing.targetplatform.base/features/target-base/feature.xml @@ -128,7 +128,7 @@ id="com.sun.jersey.contribs.jersey-multipart" download-size="0" install-size="0" - version="1.17.1" + version="1.17.0" unpack="false"/> QD~i+i zIwpl`)Sgqec%JdXj%PlPulI@03lZjgW=RaU)x{Xj@x1{d~Xg~CVSO)tX|)s zU1rny&&~c|K`~|-$?8!04-{#4x+8vEB4-s|z4M@)v7tT+% z1plh-Sp;WxN>KB&l^FrUf}F$Rfy>(fuHy0VLEBoTeC1R^2D)bqo_`iw7qh~AADhs> zvsGiIq~=IlE>*!l;>IhF>a6n)6zCB%%$s{wcCuY$gQ5hHOWWXoi^)($!_B_*!6t7} z^V2dZV>#qElv21?fhAn`>0_E3B^sK_&3Co=tK~4?ulIdQ5gFj4JY}Ne^-+!mjmt;M zh5Pj+KA>bA(XO^TMK;m5QOIPxy79$rZ?^B-Py02=oN|4~t}Z+LA#1gclI7IUUT(LIRF)O&$to*7+9~#Mdf|)LHJU<{x}Uy% zAfh2rcg@Ph`%C?26GTPJej2XVf(eIsFf;HhpMs}G`Z0Cl;a;Leb!cC%pxjH=8sP=8 z({@^m->lY;xzHr$73ZAgb@z;2mQQ=U^w!8jNO7X~aIh$EEBlc!a!{zHX2taP0L?hf|Q z;3C`otCwC5MRfKX2$Jh*ez_?kbi>#M+i@PnXO<#xTis@tugGwTQ|Mjd{y0^{n3e@hvH*2zMc{_?ZgU^;7WI zCQTF9sEbj}*4~S2H+J=+jTtZ`PgRHg(wON7N}r68m){OTyrOQMzJy4G=bWp2x=xj| zymC5jUL^}@rclQagAJXV)R66-y)>>gTUmMjSf2^P54)?KCmd+!f)VGLnPA7E3Z)|T zmPcrk)e!s0I&*IQG|f%9QFLL$u==MAIp(r~B+PedEO*nUO9zMSjbhAWZ}eMnMgO5nX9&u-`tE;9Otxf~vTVffi7T z;6#*_N&n( z<-83BIn{~(2?6;L6XRYsIU`WvW#!AfmC#rXHBCmLkM= zmA?e#RX}8_M!{@s z|F9EUCNsx06IDvF(}9kmyEk(!GBE0|jAwWW2G1W)x}`rW^2xMnJc?wdqfu1VzTm3! zQ7vnU%TrKZQ9*h$hyl-bU(0^(%Fq?EaJ@1N-&U3ohsjOWThvKZWlsa|DDv~azvb(F zt}jyP5$Y8AOR*GkU!0^6eo{5w!r^|Ty+M<=qnQKxN4jCv;Izh@82hK47xddg729|P z6?(;`l6___@yx0psw-!INeuCh_stG#XXHDsC2(K!8H#f8eV&oBOWAzpy{F$hAE~AR zF?U?&jMx?cxa6>gilZ-uW@=l3vC|I~ODpz)=bazISrxxeSk&XJJ3DX%F?p3ANLtDh z;>#bY+bxs$QHq)vy1I@?;gPG>E-sSu4B2{|kEn$$njVd3uoS6Aj289|ks8Rj11dwVyqv0CmfSmkz zs_Lf$mPG1wD5Lt1{tTgjOXU~4w(c{ei>z`iM;Z-2X4~7w@@#vps&M+=WPIO*iq*I> zh?XCe6m&GRB+&qHZMg2?Zf9g_LK)DUnO_BQLJmd=O@AF64bsd%~ofcLE{bQtBgH z>tPYJ7$S2!um6MY>}BUzYAP3ORL)*c?nWdWA>a299J#6wVy}QT2pPxQyD` zu%I=cb$E7BMFS@S%^@Mjj!W!u4g9UIQX0McA^L(PQRTNY~3 zsLJFDB(L1VTW;+X0cZMpCM9AbQfN$`3p2gI7MxI7&V50J^Ei1BMG`5O5vpXmi`PGk zxkF{$NE_zUy_UF!ik{Th5t`?(Z;(&0jobB(@s|J5H5js)<09*I?s44a#lTMdLAdhH z_vNi)JkpbS)~=>)=?kJeTH`CGvs;eT2&4BD6T?}J2W5x$%3(&XlK#51(sl_Uy>ToK zDDkSa@pCYC+|4nLcLH<*CQREp3Z$wuX85+y`)VxqbJB*ixxOk6ciwDB8Jw!DpKZJz zocB_yEpDfb`^TZ|E$1}LYMB?s8?;}4TH;U1%H}&oMiyD#d(ajtMr*abw3|dx4I5u@ z8%UkMr_R%d0%-d%oC(f;fWlbTS~zksLGG0~XRnLa1}>_cuE2b3$1_b#+oDMSl7*G0 zbbA0>bg_rSno{_!P$mPHEHU$Yv5pj@T=L${I9k6|YJ(cSQTjc%AF`R&@~O!JvFIh| zh*Xav(YO9Ws?6nl(YH#+8Cg?HDr?`-k;acyggEAkpKzN|1gs|kxKEdDShCqBRVaFB%@C#|!RlkmW>|I6md9@p0X zswG2bod3v~nL^*Xb+H4A!WGiBjD^5&#pXd_=Hu8NHuW?6d%51nbdnk7p=N5Wybxp%}H90)QQ%8e7F1!vD$k2#a6L4oR3#eQ{rOlMzqxM$5i8&UA zyPc|+OJmCQV1k9sGRc)>?QYYr}LR{l^J<%CGbk3#;NNEmqN=8bvhT4f6Im>hU(*JQxaSd9XjZCBZKlx+T>@ z<9iqP{6~#`&7pqq0&nibqSos5w>Q!nxf!*%&v^}fjCxk=F!WgIQfSY0q{jmOGKrn@&%#H-9-4%%<$TiYXR_Se4uiT5mvQ`s|L zIP)=2_A7VDuxm(<!qZd?@^2#`R-YKI(vnv+0M zCmYaYKMgT*uFMb?4h%#9qb@Q4PR0Q(ym3862!O&JONiFgvzg#VGT5@h(|3tr*(zX! zFp&)2AUHh{=|~VH#;lV-rbtv>@9 z!`EX-5`d|CHXg7UR{OmJ<^o&Ee?IL9U<$z_YNSg7XM+9xA`AJ1|6uq^l~RsiWle ziA?$dBu&B)9VV6u%33eWlY8LU5;*+VchX(H*Q)-Uo2h{$wq zqHY2t22#LaazwIzXXm;sSi$q*vi zS+D~(9mgR@?pv`FOkfRsNntQ0A~K%^L~iL2B^09r1Ak%#LDN<&M+JvqqfQLm#U6r_ zI{BgcWcMVj;=nzS1^pApo(v3kYW^Lzzblx@|KCl@wz<%)U?g(j?r0N5)Cxp&nM3mN zE)0Cz4KVIK52$pDLy&hj2Cm@=LB*b;KwU2(K6DQTj`W3KPhT$JT0dbA>kW2`w869s z!F{wRa-s|1d%U4MGUpP`+k^W5h-&zX7Ngk0jJTw)qi17Z>;fE@aByke6=BaEHB zIwe6Ds<(ix9<{ws{~c4CZnlB;cu>aZ=lp5saqIy95lR1rzJLPfse?8gu^?Tf^EJx0 z=GCui*uefc#~YMWB)1D>GB2DCu6^rnbH!W2VJgvK=mERE%KnX+)w~Vyk*2*)fP+$O zVQz%Yc{O6QFSecWy5HquM$-d1+Sz}wS3Y?gH=9J-UUQE4bpEtYJ%C0&wmRiSrDUce zUlmr9>Km7M;siQoQC}>GI;vN)A>c$`ZC}xPO7>C7)S<#R-1^-QjYzO$UDCwTy%op{ z2O019wX;albo{n*%j^Y3N`hbisAD*`x35Tj#@>)KKxuF(Rlk>)NG8?gfe&h(94keW zK5HmZ`M~C+-w1P}lbzBvNqUu!@7~SOs)wME`N1ZtS$E89FHtk^)>jK{IEP@yqc?X;wli~dD3Y=CGdFYx04e6)M9l64OOI6N9i8Xy7UESx%a2D3 zy2~vpgGgnFnE5ITrqtZfjm{S{E`KmPS0dPQC->lWx#)P}2ul#Mlst8vXRmF>=;S%{&9M#h7^;J=#Py z?YB3Eb9osD!E^epYfV8nf=Vo2ybH+GSU#!OX&!dbMJ>X<%Gar==U#*oW1lAPKh}ws zO&;1)uJ#7IsHKULarbv~#r3RA;_8s@hUY{IWtU**~m3N}MUQnvKoMME6Ke6?gM3YbaJICOBxA z&^&zQUedxCby{!Xvw3cEcmJEVfrg3x{@Pa^A}_vuQ#guBnQ4g{psCF#N-_4taKC@1 zfb0Hr>|@|)-G0#21-VrWM@oHW)1%$WXq?+jT~n6Iy}H}zOx!b!Tl$+P!VPb3&35d_ zqL5}clP8}~bEqctfLxo8O`!f$7lu|2Kr+H!GPL*5fKlo?$-+ z*hYR{2*aIooA8O)Og?8`T+e`7L%BChbV(q-iX9)DPo+u~zM%S}J#g!>cxr$n>6z8U zqJ6p`#YL~>yLYdgR*K}}l!|fE782TeTfp`8NZgusahk~tnfi3g>YnfxdTU{OF57ms z_dCmT`d#)*1>X};KfeBO^20`pRgI2+_`L9*Ua6&VcjMz?_qU{!JoZ~vNuQUu7TGv% z&u}DFb@}WS_OYZI-)H;6-~7R@y?r(kYgR>6?#f+{)<~73J3iz zJEs&~4}km0eR|A8YW=iu&qgZM(iC1w(NiT~Y4trSOY6<+Bs?Y!`##>avp zZk4`BeHtw{*xHmkxAvj0V)hIP#*QsIIzhEuc+EFrny&D&&b*9cP-5 zPm;iq_c->j1quz{wE@@lo7fz-G`p|n@m3hCaI{gIm)&_^`ppcJx{+D!u_$!OQ*)#4 z>nhzmCzS?7B~rZSE&}tI1B`mk$HZ$(3`+{zQ75%^6AdL2jCmMG9_bZ^j@tFh@)-O| zQjHKgNx|{5#|3@IgmN_e1VReb5-MVk&`pmIe_SnIZ-$xhwbC!-Q}9mf^!DusxZ*!>Ddce4n;$_50!Am&C3 zJLR6yRix1HHLgEB6T(rfJw_qlzxsKwh9rS9res#X(kZ}ng*xYinX4S=E9fM1T<|8# z67yWnaHzzC5idsuhR};x<0LX5n9_EkXOVrGiOKqVn6&HM^RQFgIbx?~DnZFEMF*D% z4B6yAGIcx8OcC~;_KaE^Lz&$Eg_GsJ!G;tD>4CKN+-cuWl3~^81@_-6+r{S0_aupH z^Q7GICAsBm^o$CJTuKf&=E==zL%HHpwtW9BY3Dlav`-Fwq>kAc>?y94KnIX+P>rY#^SK>+I}1Vr0L+nL{Ve3<0wa3iEu}OCil_Z{3baj zKGJ~jPyOb1))5N3Y<*br2gVU7#b~cWL5l!`c^_7hDtBI#X$^E!$- zwcg5#sF)^K7N}X$Hs{kTEx%yA9Kc7C>|m;CRAj0nC3>_+to$MN)#jo&E8y(*WJ0=? z>s@X6d}+t{+Yb3y>gVK0$XMC{ZD%cR2(jn8qk)fE=p(_n39g^&Ut^I%G%=p#8f4Cr z$nDXOtl9<`$2w#fHikz&wk|$0o=GP(l{TDC>-^dpXGXHloyLK4k)=7KR+z>ciHtP& zJcA$Q%_PfOY?*UycJKd0W9f#4x+@eOeqJa3r0hWY@|9mohA3H;n}!GNYK_d)fQh)g z%w$m?t>yLm{INm^`YGYOpuS%t~F>K-@DTc$Ua&BW<$cnbw zBD=o2mRi~&fR(t$1GA<>J1}HS|zQLM@87H^P)vDjap4nxo7mBbKcT#Sr$`h zF7U6#jEt6@4#pbylND#a0>l$nijy;b$r;vy$CmP&c5Sm2eu!Lqv{)Y6uD0OY`AuZK zqrCL$hdSRxMMlacV%SpeTRi> z`U7D(s!QSZqSqW)8ncM_G`-_&{<7u8#ham=$CcaE5z1dp!LMe5SQ@Q z>rkfvW;M8w~Gb_jK0&6*O^m{R8aRkNBDM@L%>fqWr1|4=W>QZ_jn&&-tOU2cy%(9b z>@RWbHPfp&u3z(s+K;NfCbjrYzB80w_adX?#&qL$Rc`9^mtRi{L9)6s6q7U46edIT(B8UN$zc75x5lY%p`opukW4U5sVy zfX1u&J{AQl^k!UUSnG)wEq01|rR@#XHJmn~_nq6_{VzXnTjW9S5q0kNl1k~T?MI9@ zO6}*n`+xBG`I@M~FLknA+HcuG7W2}Bjh4g8t-8gsq;E>m;aH+z@xl^(&k0XY#Mbeb{`$b4k4E5yLM@^pE-P_M9v#jvSKMP4_RyKOIZF zdlGwrzl7`g(Buam7PFtb#D+h8hX=8l2UiO#krmG0noJ&-jC~we6vP-Jb40vgJIyqsQrIZR=xk+3RCwHp_Dlq@-u(1Q!Rs<@rRVzPAqbJ7qk7cL?}a zCxBKR?vNU3d*Lw**$9uybh+>tLazoMqeuUq--O#DN(M=IRAZ2Z#{h=IwyBOmm)PNo z4Q`)dk^-K*VV6VTC*UsyA<(Xq5of}sNeWZ;8ANa${G=o>tWO}5;$MB11jysV4kEkA zacNQxWOx$pmqHrRzi@(h9Ii!)mk7qpD~FQ)3nK>m678V?r@Ej>fykV7;GFG!d-;Gd^9O2Y{CvJ)HhimhbQ7zH{c!Ns;qm+;H~A^i-QSIS-}?c zEG!_;ehyX(hPxQRhUYFahtkO0PQ%`DXFb~w!-xf4z`6UZAYh!8|I5RPSkO8-Y~c%c zI3(PR`bGj%Z7}8D+t4M4|u^i9?0OqO(!8zdTpsgJxFU@ec=IihI z-|PP)?QS4l$6?wfJ5Y#+3?L5|3KWJi1l?Cnv)kF*G0-y-$O-@_2{!c|599+S7|B5O zr_}Hb7>4*G?68@plNILcbAL<_AO(OB=!r~(fPaJw0*ZCL=Km6i>ic@_W=C-B}X0D4RDfja`Ucy(O(s@Qn~aw?MnKo%_k zNDzQ6LDMdExN;%^t`t=w03d}blu+)P0_;#!kqVsdIy{cgT_{AX5?H7t3_k3khWV$z zx`hiv+cl&H00Dv+ua!Y>4Sq1Hn*lz`yWJ>+r3Pe@_*aEH@hP76gEEi{Wk8C+#|%i{ zqXF-QN$u^Ew-6?P90249Fpoj+9vwKulO7b}n=zC#6#g5GAPoLw8T*H#Tp)TG9RL^; zxKIaqdN08T8s3XS@LT=I1=!Xr44Xeg=6lwE%+uD)e@ejkDGK3={=LKjPWK+>C8s}O z6$|BF779kF7qtK5XZ0!nAK?KmAki@QzpA5po0Gl^5-SItksg8Q9+&`zdGdnXu1CPW zXNQ5SGQ7QNp~H-Wg1Zn9e!1c!Km;N1vKvoo|KXW>_Ms5Ep1)Vl|Hq2#M{eiOJfvKA8b(NMmtjsk!a0gx}~H&7Z(4mt|O zgz;SA^c6#p<2gvV2LYZn{I?Qbuw#%K3=99G9zBRcV59z8)jAAqqgByI2>{>N0YHbq zm2doSFb_BqPln$Vd;-^oP>8BDXh|MCNF&E56RtW%X2#-qNRkb-4P^p9QmMoGFwSh~n<7m> R@UMgkE+gz@?oIfW{{u+7YWM&E diff --git a/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/URLFieldWithFileUpload.java b/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/URLFieldWithFileUpload.java index 319dacf98f4..180cf511eb6 100755 --- a/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/URLFieldWithFileUpload.java +++ b/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/URLFieldWithFileUpload.java @@ -53,17 +53,21 @@ public class URLFieldWithFileUpload extends HorizontalPanel { removePanel.submit(); } }); + removePanel.add(removeButton); urlTextBox = new TextBox(); add(urlTextBox); FormPanel formPanel = new FormPanel(); + HorizontalPanel formPanelContent = new HorizontalPanel(); + formPanel.add(formPanelContent); formPanel.setAction("/sailingserver/api/v1/file"); formPanel.setEncoding(FormPanel.ENCODING_MULTIPART); formPanel.setMethod(FormPanel.METHOD_POST); fileUploadField = new FileUpload(); + formPanelContent.add(fileUploadField); final InputElement inputElement = fileUploadField.getElement().cast(); inputElement.setName("file"); SubmitButton submitButton = new SubmitButton(stringMessages.upload()); - formPanel.add(submitButton); + formPanelContent.add(submitButton); add(formPanel); formPanel.addSubmitCompleteHandler(new SubmitCompleteHandler() { @Override @@ -77,6 +81,7 @@ public class URLFieldWithFileUpload extends HorizontalPanel { } } }); + add(removePanel); } private void enableDelete() {