You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by manishpillai1540 <ma...@gmail.com> on 2016/07/14 11:56:41 UTC

Re: Reading Binary Files and Passing to HTTP Component

Hi All, 

I am facing a similar issue following is the code snippet to send form data
to a legacy web service :

public static void main(String[] args) throws  Exception{
        CamelContext camelContext =new DefaultCamelContext();
        try {
            camelContext.addRoutes(new RouteBuilder() {
                @Override
                public void configure() throws Exception {
                   
from("file:C:\\temp?delay=5000&move=processed&moveFailed=error&antExclude=**/processed/**,**/error/**")
                           
.setHeader(Exchange.HTTP_METHOD,constant("POST"))
                            .process(new Processor() {
                                public void process(Exchange exchange)
throws Exception {
                                   
exchange.getContext().getTypeConverterRegistry().addTypeConverter(HttpEntity.class,InputStream.class,new
InputStreamToHttpEntityConvertor());
                                   
exchange.getOut().setBody(exchange.getIn().getBody(),HttpEntity.class);
                                }
                            })
                           
.to("http4://localhost:8080/JAX_RS_Application/resource/restwb/upload");
                }
            });

            camelContext.getRestConfiguration();
            camelContext.start();
            Thread.sleep(5000);
            camelContext.stop();

        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    static class InputStreamToHttpEntityConvertor implements TypeConverter {

        public boolean allowNull() {
            return false;
        }

        public <T> T convertTo(Class<T> type, Object value) throws
TypeConversionException {
            Exchange exchange=(Exchange)value;

            StringBody username = new StringBody("USERNAME",
ContentType.MULTIPART_FORM_DATA);
            StringBody password = new StringBody("PASSWORD",
ContentType.MULTIPART_FORM_DATA);
            MultipartEntityBuilder
multipartEntityBuilder=MultipartEntityBuilder.create();
           
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            multipartEntityBuilder.addPart("upload", new
FileBody(exchange.getIn().getBody(File.class),
ContentType.MULTIPART_FORM_DATA, (String)
exchange.getIn().getHeader(Exchange.FILE_NAME)));
            multipartEntityBuilder.addPart("username",username);
            multipartEntityBuilder.addPart("password",password);
            return (T)multipartEntityBuilder.build();
        }

        public <T> T convertTo(Class<T> aClass, Exchange exchange, Object o)
throws TypeConversionException {
            return convertTo(aClass,o);
        }

        public <T> T mandatoryConvertTo(Class<T> type, Object value) throws
TypeConversionException, NoTypeConversionAvailableException {
            return convertTo(type,value);
        }

        public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange,
Object value) throws TypeConversionException,
NoTypeConversionAvailableException {
            return convertTo(type,value);
        }

        public <T> T tryConvertTo(Class<T> type, Object value) {
            return convertTo(type,value);
        }

        public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object
value) {
            return convertTo(type,value);
        }
    }


I am getting the following error :


Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                       
Elapsed (ms)
[route1            ] [route1            ]
[file://C:%5Ctemp?antExclude=**%2Fprocessed%2F**%2C**%2Ferror%2F**&delay=5000&m]
[       238]
[route1            ] [setHeader1        ] [setHeader[CamelHttpMethod]                                                   
] [         7]
[route1            ] [process1          ] [Processor@0x4e57449e                                                         
] [        15]
[route1            ] [to1               ]
[http4://localhost:8080/JAX_RS_Application/resource/restwb/upload             
] [       205]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.http.common.HttpOperationFailedException: HTTP operation
failed invoking
http://localhost:8080/JAX_RS_Application/resource/restwb/upload with
statusCode: 415
	at
org.apache.camel.component.http4.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:279)
	at
org.apache.camel.component.http4.HttpProducer.process(HttpProducer.java:187)
	at
org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
	at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
	at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
	at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
	at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
	at
org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:454)
	at
org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:226)
	at
org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:190)
	at
org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
	at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)



--
View this message in context: http://camel.465427.n5.nabble.com/Reading-Binary-Files-and-Passing-to-HTTP-Component-tp510207p5785109.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Reading Binary Files and Passing to HTTP Component

Posted by manishpillai1540 <ma...@gmail.com>.
Hi,

Thanks for the reply!!!!
Yes i have created a dummy web service to test it.

After apply few patches i have fixed the issue with the following code
snippet.

package com.camelinaction;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;

import java.io.File;
import java.util.logging.Logger;

/**
 * Created by Manish.Pillai on 7/15/2016.
 */
public class TestMain {

    public static void main(String[] args) throws Exception {
        CamelContext camelContext = new DefaultCamelContext();
        try {
            camelContext.addRoutes(new RouteBuilder() {
                @Override
                public void configure() throws Exception {
                   
from("file:C:\\temp?delay=5000&move=processed&moveFailed=error&antExclude=**/processed/**,**/error/**")
                            .process(new Processor() {
                                public void process(Exchange exchange)
throws Exception {
                                    StringBody username = new
StringBody("username", ContentType.MULTIPART_FORM_DATA);
                                    StringBody password = new
StringBody("password", ContentType.MULTIPART_FORM_DATA);

                                    MultipartEntityBuilder
multipartEntityBuilder = MultipartEntityBuilder.create();
                                   
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                                   
multipartEntityBuilder.addPart("username", username);
                                   
multipartEntityBuilder.addPart("password", password);

                                    String filename = (String)
exchange.getIn().getHeader(Exchange.FILE_NAME);
                                    File file =
exchange.getIn().getBody(File.class);
                                    multipartEntityBuilder.addPart("upload",
new FileBody(file, ContentType.MULTIPART_FORM_DATA, filename));

                                   
exchange.getIn().setBody(multipartEntityBuilder.build());
                                }
                            })
                           
.to("http4://localhost:8080/JAX_RS_Application/resource/restwb/upload");
                }
            });

            camelContext.getRestConfiguration();
            camelContext.start();
            Thread.sleep(5000);
            camelContext.stop();

        } catch (Exception e) {
            //logger.error(e.getMessage());
        }
    }

}





--
View this message in context: http://camel.465427.n5.nabble.com/Reading-Binary-Files-and-Passing-to-HTTP-Component-tp510207p5785116.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Reading Binary Files and Passing to HTTP Component

Posted by Eduardo Raupp <ra...@gmail.com>.
are you the owner of the rest endpoint?

If yes, could you show how is it? Configs and what it expects.

2016-07-14 8:56 GMT-03:00 manishpillai1540 <ma...@gmail.com>:

> Hi All,
>
> I am facing a similar issue following is the code snippet to send form data
> to a legacy web service :
>
> public static void main(String[] args) throws  Exception{
>         CamelContext camelContext =new DefaultCamelContext();
>         try {
>             camelContext.addRoutes(new RouteBuilder() {
>                 @Override
>                 public void configure() throws Exception {
>
>
> from("file:C:\\temp?delay=5000&move=processed&moveFailed=error&antExclude=**/processed/**,**/error/**")
>
> .setHeader(Exchange.HTTP_METHOD,constant("POST"))
>                             .process(new Processor() {
>                                 public void process(Exchange exchange)
> throws Exception {
>
>
> exchange.getContext().getTypeConverterRegistry().addTypeConverter(HttpEntity.class,InputStream.class,new
> InputStreamToHttpEntityConvertor());
>
> exchange.getOut().setBody(exchange.getIn().getBody(),HttpEntity.class);
>                                 }
>                             })
>
> .to("http4://localhost:8080/JAX_RS_Application/resource/restwb/upload");
>                 }
>             });
>
>             camelContext.getRestConfiguration();
>             camelContext.start();
>             Thread.sleep(5000);
>             camelContext.stop();
>
>         } catch (Exception e) {
>             logger.error(e.getMessage());
>         }
>     }
>
>     static class InputStreamToHttpEntityConvertor implements TypeConverter
> {
>
>         public boolean allowNull() {
>             return false;
>         }
>
>         public <T> T convertTo(Class<T> type, Object value) throws
> TypeConversionException {
>             Exchange exchange=(Exchange)value;
>
>             StringBody username = new StringBody("USERNAME",
> ContentType.MULTIPART_FORM_DATA);
>             StringBody password = new StringBody("PASSWORD",
> ContentType.MULTIPART_FORM_DATA);
>             MultipartEntityBuilder
> multipartEntityBuilder=MultipartEntityBuilder.create();
>
> multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
>             multipartEntityBuilder.addPart("upload", new
> FileBody(exchange.getIn().getBody(File.class),
> ContentType.MULTIPART_FORM_DATA, (String)
> exchange.getIn().getHeader(Exchange.FILE_NAME)));
>             multipartEntityBuilder.addPart("username",username);
>             multipartEntityBuilder.addPart("password",password);
>             return (T)multipartEntityBuilder.build();
>         }
>
>         public <T> T convertTo(Class<T> aClass, Exchange exchange, Object
> o)
> throws TypeConversionException {
>             return convertTo(aClass,o);
>         }
>
>         public <T> T mandatoryConvertTo(Class<T> type, Object value) throws
> TypeConversionException, NoTypeConversionAvailableException {
>             return convertTo(type,value);
>         }
>
>         public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange,
> Object value) throws TypeConversionException,
> NoTypeConversionAvailableException {
>             return convertTo(type,value);
>         }
>
>         public <T> T tryConvertTo(Class<T> type, Object value) {
>             return convertTo(type,value);
>         }
>
>         public <T> T tryConvertTo(Class<T> type, Exchange exchange, Object
> value) {
>             return convertTo(type,value);
>         }
>     }
>
>
> I am getting the following error :
>
>
> Message History
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId              ProcessorId          Processor
> Elapsed (ms)
> [route1            ] [route1            ]
>
> [file://C:%5Ctemp?antExclude=**%2Fprocessed%2F**%2C**%2Ferror%2F**&delay=5000&m]
> [       238]
> [route1            ] [setHeader1        ] [setHeader[CamelHttpMethod]
> ] [         7]
> [route1            ] [process1          ] [Processor@0x4e57449e
> ] [        15]
> [route1            ] [to1               ]
> [http4://localhost:8080/JAX_RS_Application/resource/restwb/upload
> ] [       205]
>
> Stacktrace
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> org.apache.camel.http.common.HttpOperationFailedException: HTTP operation
> failed invoking
> http://localhost:8080/JAX_RS_Application/resource/restwb/upload with
> statusCode: 415
>         at
>
> org.apache.camel.component.http4.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:279)
>         at
>
> org.apache.camel.component.http4.HttpProducer.process(HttpProducer.java:187)
>         at
>
> org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
>         at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
>         at
>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
>         at
>
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
>         at
>
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
>         at
>
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
>         at
>
> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:454)
>         at
>
> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:226)
>         at
>
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:190)
>         at
>
> org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
>         at
>
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
>         at
>
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
>         at
>
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>         at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
>
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/Reading-Binary-Files-and-Passing-to-HTTP-Component-tp510207p5785109.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>