Nevermind, figured it out:

                if (results.size() == 1) {
                        exchange.getIn().setBody(results.get(0), String.class);
                } else {
                        
exchange.getIn().setBody(StringUtils.collectionToDelimitedString(results, 
"\n"), String.class);
                }

On Sep 10, 2014, at 5:44 PM, Matt Raible <m...@raibledesigns.com> wrote:

> I have a String that's delimited by ~. This string is returned from a 
> database query. I'm able to parse it with the following code in my route:
> 
>       @Override
>       public void configure() throws Exception {
>               CsvDataFormat csv = new CsvDataFormat();
>               csv.setDelimiter("~");
>                 ...
> .to("bean:myStoredProcedure")
> .process(myJdbcProcessor)
> .unmarshal(csv)
> .process(mySearchCsvProcessor)
> 
> Today, I encountered a use case where not one string would be returned, but 
> multiple strings. To handle this, I've changed myJdbcProcessor to have the 
> following:
> 
>               List<String> results = jdbcTemplate.queryForList("...", 
> String.class);
> 
>               if (results.size() == 1) {
>                       exchange.getIn().setBody(results.get(0), String.class);
>               } else {
>                       exchange.getIn().setBody(results, List.class);
>               }
> 
> When the result size is 1, everything works as expected. However, when there 
> are multiple results, the csv unmarshal blows up with the following error:
> 
> org.apache.camel.InvalidPayloadException: No body available of type: 
> java.io.InputStream
> 
> Is it possible to parse multiple lines with unmarshal(csv)?
> 
> I tried the following, but that didn't work b/c it only gets the first line:
> 
>               
> exchange.getIn().setBody(StringUtils.collectionToCommaDelimitedString(results),
>  String.class);
> 
> 
> Thanks,
> 
> Matt

Reply via email to