You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by lost_in <re...@gmail.com> on 2013/04/23 17:33:14 UTC

when two Pojo class annotated with @CsvRecord in same package, camel goes wrong

i follow  <<camel in action>>'s chapter3/order demo, i confused with
following situation:


1) i  create simple Pojo class in same package with PurchaseOrder.java

//content as follows:

@CsvRecord(separator = ",", crlf = "UNIX")
public class Person {
	@DataField(pos = 1)  //because this field's pos ==1, it make
PurchaseOrder.name ==null 
	private String name2;

	public String getName2() {
		return name2;
	}

	public void setName(String name2) {
		this.name2 = name2;
	}

	@Override
	public String toString() {
		return String.format("%s", name2);
	}

}

2)this is my RouteBuilder defination:

public class MainEntry extends CamelTestSupport {

	public static class MyBean {
		public void convert(Exchange exchange) {
			Object object = exchange.getIn().getBody();
			//at this point,Object isInstanceOf PurchaseOrder but object.name ==null  
			System.out.println("===============");
		}
	}

	@EndpointInject(uri = "mock:end")
	protected MockEndpoint toEndpoint;

	@Produce(uri = "direct:start")
	protected ProducerTemplate template;

	@Test
	public void test_marshal() throws Exception {
		// must set expect before call template.sendBody()
		toEndpoint.expectedMessageCount(1);
		template.sendBody("Camel in Action,39.95,1");
		toEndpoint.assertIsSatisfied();
	}

	@Override
	protected RouteBuilder createRouteBuilder() throws Exception {
		// return super.createRouteBuilder();
		return new RouteBuilder() {

			@Override
			public void configure() throws Exception {
				from("direct:start").unmarshal()
				.bindy(BindyType.Csv, PurchaseOrder.class)  //use class instead of
package name
				.bean(new MyBean())
				.to("mock:end");
			}
		};
	}
}

my question is in MyBean.convert method, object.name ==null ?????
3)attachment is my test project.

is it a bug or there is some thing wrong with my code?
how to workaround it?
any answer is appreciate camelbug.zip
<http://camel.465427.n5.nabble.com/file/n5731369/camelbug.zip>  



--
View this message in context: http://camel.465427.n5.nabble.com/when-two-Pojo-class-annotated-with-CsvRecord-in-same-package-camel-goes-wrong-tp5731369.html
Sent from the Camel Development mailing list archive at Nabble.com.

Re: when two Pojo class annotated with @CsvRecord in same package, camel goes wrong

Posted by Christian Müller <ch...@gmail.com>.
I think we fixed this in Camel 2.11.0...

Best,
Christian


On Wed, Apr 24, 2013 at 7:51 AM, Charles Moulliard <ch...@gmail.com> wrote:

> I have tested the example project that you provide and it works (test
> passed) ;-)
>
>
> On Tue, Apr 23, 2013 at 5:33 PM, lost_in <re...@gmail.com> wrote:
>
> > i follow  <<camel in action>>'s chapter3/order demo, i confused with
> > following situation:
> >
> >
> > 1) i  create simple Pojo class in same package with PurchaseOrder.java
> >
> > //content as follows:
> >
> > @CsvRecord(separator = ",", crlf = "UNIX")
> > public class Person {
> >         @DataField(pos = 1)  //because this field's pos ==1, it make
> > PurchaseOrder.name ==null
> >         private String name2;
> >
> >         public String getName2() {
> >                 return name2;
> >         }
> >
> >         public void setName(String name2) {
> >                 this.name2 = name2;
> >         }
> >
> >         @Override
> >         public String toString() {
> >                 return String.format("%s", name2);
> >         }
> >
> > }
> >
> > 2)this is my RouteBuilder defination:
> >
> > public class MainEntry extends CamelTestSupport {
> >
> >         public static class MyBean {
> >                 public void convert(Exchange exchange) {
> >                         Object object = exchange.getIn().getBody();
> >                         //at this point,Object isInstanceOf PurchaseOrder
> > but object.name ==null
> >                         System.out.println("===============");
> >                 }
> >         }
> >
> >         @EndpointInject(uri = "mock:end")
> >         protected MockEndpoint toEndpoint;
> >
> >         @Produce(uri = "direct:start")
> >         protected ProducerTemplate template;
> >
> >         @Test
> >         public void test_marshal() throws Exception {
> >                 // must set expect before call template.sendBody()
> >                 toEndpoint.expectedMessageCount(1);
> >                 template.sendBody("Camel in Action,39.95,1");
> >                 toEndpoint.assertIsSatisfied();
> >         }
> >
> >         @Override
> >         protected RouteBuilder createRouteBuilder() throws Exception {
> >                 // return super.createRouteBuilder();
> >                 return new RouteBuilder() {
> >
> >                         @Override
> >                         public void configure() throws Exception {
> >                                 from("direct:start").unmarshal()
> >                                 .bindy(BindyType.Csv,
> PurchaseOrder.class)
> >  //use class instead of
> > package name
> >                                 .bean(new MyBean())
> >                                 .to("mock:end");
> >                         }
> >                 };
> >         }
> > }
> >
> > my question is in MyBean.convert method, object.name ==null ?????
> > 3)attachment is my test project.
> >
> > is it a bug or there is some thing wrong with my code?
> > how to workaround it?
> > any answer is appreciate camelbug.zip
> > <http://camel.465427.n5.nabble.com/file/n5731369/camelbug.zip>
> >
> >
> >
> > --
> > View this message in context:
> >
> http://camel.465427.n5.nabble.com/when-two-Pojo-class-annotated-with-CsvRecord-in-same-package-camel-goes-wrong-tp5731369.html
> > Sent from the Camel Development mailing list archive at Nabble.com.
> >
>
>
>
> --
> Charles Moulliard
> Apache Committer / Sr. Enterprise Architect (RedHat)
> Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com
>

Re: when two Pojo class annotated with @CsvRecord in same package, camel goes wrong

Posted by Charles Moulliard <ch...@gmail.com>.
I have tested the example project that you provide and it works (test
passed) ;-)


On Tue, Apr 23, 2013 at 5:33 PM, lost_in <re...@gmail.com> wrote:

> i follow  <<camel in action>>'s chapter3/order demo, i confused with
> following situation:
>
>
> 1) i  create simple Pojo class in same package with PurchaseOrder.java
>
> //content as follows:
>
> @CsvRecord(separator = ",", crlf = "UNIX")
> public class Person {
>         @DataField(pos = 1)  //because this field's pos ==1, it make
> PurchaseOrder.name ==null
>         private String name2;
>
>         public String getName2() {
>                 return name2;
>         }
>
>         public void setName(String name2) {
>                 this.name2 = name2;
>         }
>
>         @Override
>         public String toString() {
>                 return String.format("%s", name2);
>         }
>
> }
>
> 2)this is my RouteBuilder defination:
>
> public class MainEntry extends CamelTestSupport {
>
>         public static class MyBean {
>                 public void convert(Exchange exchange) {
>                         Object object = exchange.getIn().getBody();
>                         //at this point,Object isInstanceOf PurchaseOrder
> but object.name ==null
>                         System.out.println("===============");
>                 }
>         }
>
>         @EndpointInject(uri = "mock:end")
>         protected MockEndpoint toEndpoint;
>
>         @Produce(uri = "direct:start")
>         protected ProducerTemplate template;
>
>         @Test
>         public void test_marshal() throws Exception {
>                 // must set expect before call template.sendBody()
>                 toEndpoint.expectedMessageCount(1);
>                 template.sendBody("Camel in Action,39.95,1");
>                 toEndpoint.assertIsSatisfied();
>         }
>
>         @Override
>         protected RouteBuilder createRouteBuilder() throws Exception {
>                 // return super.createRouteBuilder();
>                 return new RouteBuilder() {
>
>                         @Override
>                         public void configure() throws Exception {
>                                 from("direct:start").unmarshal()
>                                 .bindy(BindyType.Csv, PurchaseOrder.class)
>  //use class instead of
> package name
>                                 .bean(new MyBean())
>                                 .to("mock:end");
>                         }
>                 };
>         }
> }
>
> my question is in MyBean.convert method, object.name ==null ?????
> 3)attachment is my test project.
>
> is it a bug or there is some thing wrong with my code?
> how to workaround it?
> any answer is appreciate camelbug.zip
> <http://camel.465427.n5.nabble.com/file/n5731369/camelbug.zip>
>
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/when-two-Pojo-class-annotated-with-CsvRecord-in-same-package-camel-goes-wrong-tp5731369.html
> Sent from the Camel Development mailing list archive at Nabble.com.
>



-- 
Charles Moulliard
Apache Committer / Sr. Enterprise Architect (RedHat)
Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com