You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by KARTHIK PRABHU N <ka...@gmail.com> on 2025/05/14 05:58:06 UTC
Attachment from REST Call Not Found
Hello Team,
Good morning !
I have a route exposed as REST endpoint with method POST which should
extract attachment file from the request but somehow, it’s not working. But
the same route - of course with different logic – able to extract
attachment from the body. Could you please explain this behavior.? You can
find more information below.
Camel version : 4.8.03
curl --location 'http://0.0.0.0:8888/camel/upload' \
--header 'Content-Type: multipart/form-data' \
--form 'filename=@"/C:/Users/karthik/Downloads/agv_2025032716202293.xml"'
*Endpoints are exposed using REST DSL with Servlet component. *
restConfiguration()
.component("servlet") // Use Servlet (important for Spring Boot)
.bindingMode(RestBindingMode.*off*) // Ensures JSON response
.contextPath("/") // Base API Path
.apiContextPath("/api-doc") // OpenAPI spec available at /api-doc
.apiProperty ("api.title" *,*"example project")
.apiProperty ("api.version" *,*gitCommitId)
.componentProperty("responseBufferSize"*,*
"100000").endpointProperty("attachmentMultipartBinding"*, *"true")*;*
*Route *
From(rest:post:floorplan/upload?consumes=multipart/form-data)
.process(exchange -> {
Message message = exchange.getMessage();
AttachmentMessage in =
exchange.getIn(AttachmentMessage.class);
System.out.println("has attachments" +
in.getAttachments().size());
})
*But the below logic works, here I am not sure how attachment is read from
the message body which is ideal should be present in the message
attachment. *
try( InputStream bis = new
BufferedInputStream(exchange.getMessage().getMandatoryBody(InputStream.class));
BufferedOutputStream bos = new BufferedOutputStream(new
FileOutputStream("upload/abc.bin"));){
int bytesRead = bis.read();
while (bytesRead != -1){
bos.write(bytesRead);
bytesRead = bis.read();
}
Best regards,
*Karthik Prabhu N*
Re: Attachment from REST Call Not Found
Posted by KARTHIK PRABHU N <ka...@gmail.com>.
Hello Federico,
Go below error when platform http component used.
Thank
Karthik
On Wed, 14 May 2025, 2:49 pm Federico Mariani, <
federico.mariani.1990@gmail.com> wrote:
> Hello,
>
> Lately, we did a lot of improvements to the platform-http component. Can
> you try using the latest Camel 4.10.x release and platform-http instead of
> servlet? IIRC, in platform-http component the attachments are handled in
> the body (if only one attachment is present) and the message attachments.
>
> Il giorno mer 14 mag 2025 alle ore 07:59 KARTHIK PRABHU N <
> karthikprabhu77@gmail.com> ha scritto:
>
> > Hello Team,
> >
> > Good morning !
> >
> > I have a route exposed as REST endpoint with method POST which should
> > extract attachment file from the request but somehow, it’s not working.
> But
> > the same route - of course with different logic – able to extract
> > attachment from the body. Could you please explain this behavior.? You
> can
> > find more information below.
> >
> > Camel version : 4.8.03
> >
> >
> >
> > curl --location 'http://0.0.0.0:8888/camel/upload' \
> >
> > --header 'Content-Type: multipart/form-data' \
> >
> > --form 'filename=@"/C:/Users/karthik/Downloads/agv_2025032716202293.xml"'
> >
> >
> >
> >
> >
> > *Endpoints are exposed using REST DSL with Servlet component. *
> >
> >
> >
> > restConfiguration()
> > .component("servlet") // Use Servlet (important for Spring Boot)
> > .bindingMode(RestBindingMode.*off*) // Ensures JSON response
> > .contextPath("/") // Base API Path
> > .apiContextPath("/api-doc") // OpenAPI spec available at
> /api-doc
> > .apiProperty ("api.title" *,*"example project")
> > .apiProperty ("api.version" *,*gitCommitId)
> > .componentProperty("responseBufferSize"*,*
> > "100000").endpointProperty("attachmentMultipartBinding"*, *"true")*;*
> >
> >
> >
> > *Route *
> >
> >
> >
> > From(rest:post:floorplan/upload?consumes=multipart/form-data)
> >
> > .process(exchange -> {
> > Message message = exchange.getMessage();
> >
> > AttachmentMessage in =
> > exchange.getIn(AttachmentMessage.class);
> >
> > System.out.println("has attachments" +
> > in.getAttachments().size());
> >
> >
> >
> > })
> >
> >
> >
> >
> >
> > *But the below logic works, here I am not sure how attachment is read
> from
> > the message body which is ideal should be present in the message
> > attachment. *
> >
> >
> >
> > try( InputStream bis = new
> >
> >
> BufferedInputStream(exchange.getMessage().getMandatoryBody(InputStream.class));
> > BufferedOutputStream bos = new BufferedOutputStream(new
> > FileOutputStream("upload/abc.bin"));){
> > int bytesRead = bis.read();
> > while (bytesRead != -1){
> > bos.write(bytesRead);
> > bytesRead = bis.read();
> >
> > }
> >
> >
> >
> > Best regards,
> >
> > *Karthik Prabhu N*
> >
> >
>
Re: Attachment from REST Call Not Found
Posted by Federico Mariani <fe...@gmail.com>.
Hello,
Lately, we did a lot of improvements to the platform-http component. Can
you try using the latest Camel 4.10.x release and platform-http instead of
servlet? IIRC, in platform-http component the attachments are handled in
the body (if only one attachment is present) and the message attachments.
Il giorno mer 14 mag 2025 alle ore 07:59 KARTHIK PRABHU N <
karthikprabhu77@gmail.com> ha scritto:
> Hello Team,
>
> Good morning !
>
> I have a route exposed as REST endpoint with method POST which should
> extract attachment file from the request but somehow, it’s not working. But
> the same route - of course with different logic – able to extract
> attachment from the body. Could you please explain this behavior.? You can
> find more information below.
>
> Camel version : 4.8.03
>
>
>
> curl --location 'http://0.0.0.0:8888/camel/upload' \
>
> --header 'Content-Type: multipart/form-data' \
>
> --form 'filename=@"/C:/Users/karthik/Downloads/agv_2025032716202293.xml"'
>
>
>
>
>
> *Endpoints are exposed using REST DSL with Servlet component. *
>
>
>
> restConfiguration()
> .component("servlet") // Use Servlet (important for Spring Boot)
> .bindingMode(RestBindingMode.*off*) // Ensures JSON response
> .contextPath("/") // Base API Path
> .apiContextPath("/api-doc") // OpenAPI spec available at /api-doc
> .apiProperty ("api.title" *,*"example project")
> .apiProperty ("api.version" *,*gitCommitId)
> .componentProperty("responseBufferSize"*,*
> "100000").endpointProperty("attachmentMultipartBinding"*, *"true")*;*
>
>
>
> *Route *
>
>
>
> From(rest:post:floorplan/upload?consumes=multipart/form-data)
>
> .process(exchange -> {
> Message message = exchange.getMessage();
>
> AttachmentMessage in =
> exchange.getIn(AttachmentMessage.class);
>
> System.out.println("has attachments" +
> in.getAttachments().size());
>
>
>
> })
>
>
>
>
>
> *But the below logic works, here I am not sure how attachment is read from
> the message body which is ideal should be present in the message
> attachment. *
>
>
>
> try( InputStream bis = new
>
> BufferedInputStream(exchange.getMessage().getMandatoryBody(InputStream.class));
> BufferedOutputStream bos = new BufferedOutputStream(new
> FileOutputStream("upload/abc.bin"));){
> int bytesRead = bis.read();
> while (bytesRead != -1){
> bos.write(bytesRead);
> bytesRead = bis.read();
>
> }
>
>
>
> Best regards,
>
> *Karthik Prabhu N*
>
>