i'm trying to make a RESTful WS to upload a file with CXFRS camel component, i'm trying to retrive the uploaded file via getAttachment method, but it is always empty.
This is my code:
EndPoint class: ExposedApi.java
@Path("/test")
public class ExposedApi {
@POST
@Path("/resources/solver")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response upload(@Multipart(value = "file") Attachment attachments ){
return null;
}
}
Code that extends routebuolder: RouteConf.java
public class RouteConf extends RouteBuilder {
@Override
public void configure() throws Exception {
// TODO Auto-generated method stub
getContext().setTracing(true);
from("cxfrs://http://localhost:9090/test?resourceClasses=org.foo.ExposedApi")
.streamCaching()
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message inMessage = exchange.getIn();
String operationName = inMessage.getHeader(CxfConstants.OPERATION_NAME, String.class);
if (operationName=="upload"){
Map<String, DataHandler> names= inMessage.getAttachments();
exchange.getOut().setBody(inMessage.getAttachmentNames().toString()+ " TEST "+ names.keySet().toString());
}
}
});
}
}
Curl request:
curl -v -F "file=@/Users/Massimo/Desktop/ic_eb.png" http://localhost:9090/test/test/resources/solver
and this is the response
* Adding handle: conn: 0x7f92cb804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f92cb804000) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 9090 (#0)
* Trying ::1...
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9090 (#0)
> POST /test/test/resources/solver HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:9090
> Accept: */*
> Content-Length: 89280
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=----------------------------837830fae872
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Fri, 10 Oct 2014 14:54:51 GMT
< Content-Length: 10
* Server Jetty(7.6.9.v20130131) is not blacklisted
< Server: Jetty(7.6.9.v20130131)
<
* Connection #0 to host localhost left intact
[] TEST []
What am i doing wrong? how i can retrive the attached file?
after a bit of work i've find the solution.
the attachment is inside the body.
If you want retrive the attachment this line of code worked for me
Attachment att = (Attachment)inMessage.getBody(ArrayList.class).get(0);