I'm +1 for both. 1) This make sense and it's an easy migration path for our users. 2) I share your opinion that this code looks clumsy. And this change can also be easily adopted by our users.
But I didn't want see this change back ported into the camel-2.7.x or camel-2.8.x branch, because it breaks backwards compatibility. But I think this is clear for all of us... Best, Christian On Mon, Nov 14, 2011 at 4:10 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi > > There are two pain issues I see we have with camel-bindy that I would > like to address. However as at least 1 of them is non backwards > compatible, we have previously targeted that for Camel 3.0. But that > was back in the start of the year when Camel 3.0 was more around the > corner. > > Now that Camel 2.9 is a sort of big release I would suggest to move > the following two improvements forward to be fixed for Camel 2.9.0. > > 1) > The bindy data format, requires you to define a package name, where > bindy will then scan recursively in the package for any bindy model > classes (eg annotated with eg @CsvRecord etc.). > > The problem is that this doesn't work well as you cannot have 2+ model > classes in the same package + sub packages. > As you cannot explicit define that you marshal to XXX class. > > So I suggest to remove the package name, and mandate the end user to > specify a class type > > For example to marshal to a Car class > .marshal().bindy(Car.class) > > Then you can have 2+ model in the same package, > .marshal().bindy(Train.class) > .marshal().bindy(Plane.class) > > > 2) > The output of the unmarshal operation is also confusing, as its a > List<Map<String, Object>> > The List is okay as that would be an entry for each entry. However the > Map represents a row. > > So I suggest to make it simpler and what end users would expect > List<T> > Where T is the class type, such as List<Car>, List<Train> etc. > > For example from an unit test where my T is WheatherModel I need this ugly > code > > > Map map = (Map) > mock.getReceivedExchanges().get(0).getIn().getBody(List.class).get(0); > WeatherModel model = (WeatherModel) map.values().iterator().next(); > > assertEquals(123, model.getId()); > assertEquals("Wednesday November 9 2011", model.getDate()); > assertEquals("Central California", model.getPlace()); > > Instead of just > > WeatherModel model = (WeatherModel) > mock.getReceivedExchanges().get(0).getIn().getBody(List.class).get(0); > > > We have a number of JIRA tickets and end users mailings on the @user > about issues with Bindy. > I think if we address these 1+2 here we solve the two major pain > points people have when getting started with Bindy. > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > Twitter: davsclaus, fusenews > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ >