[jira] [Updated] (FELIX-4455) Missing default constructor creates invalid class instances

2014-03-11 Thread Benjamin Debeerst (JIRA)

 [ 
https://issues.apache.org/jira/browse/FELIX-4455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benjamin Debeerst updated FELIX-4455:
-

Description: 
Consider the following component definition: 

@Component
@Instantiate
public class ComponentWithoutDefaultConstructor
{
private Object internal = new Object();

@Property
private String property;

/* Constructor for unit tests */
public ComponentWithoutDefaultConstructor(String property)
{
System.out.println("Non-default constructor call!");
this.property = property;
}

@Validate
public void activate()
{
System.out.println("ComponentWithoutDefaultConstructor: activating!");
System.out.println(this.internal);
}

}


As per definition, I would expect every instance of this class to have a 
non-null member {{internal}} at class creation. This is all fine for my unit 
tests in a non-OSGi environment.

However, having this processes by iPOJO and putting this in an OSGi container, 
the component outputs 

ComponentWithoutDefaultConstructor: activating!
null

The existing non-default constructor is not called, while it seems that a 
separate constructor has been created that does non instantiate the member 
variable.

If I extend the code by an empty default constructor, that one is called and 
all works perfectly fine.

I have no idea how iPOJO creates the object instance anyways, as it should not 
be possible to create such an invalid object instance. I don't know much about 
the reflection APIs or byte code manipulation though.

I have put a sample maven project on GitHub[1], which can be built and droppped 
into a fresh Karaf container + iPOJO, which shows the problem.

If there is no constructor iPOJO can use, I would expect iPOJO to either A) 
throw a warning/error (and build or runtime) and fail to instantiate the 
component or B) synthesize the default constructor properly, including the 
implicit instantiation of member variables.

I encountered this problem both with iPOJO 1.10.1 and 1.11.1.


[1] https://github.com/BenjaminDebeerst/ipojo-component-constructor-sample

  was:
Consider the following component definition: 
{code}
@Component
@Instantiate
public class ComponentWithoutDefaultConstructor
{
private Object internal = new Object();

@Property
private String property;

/* Constructor for unit tests */
public ComponentWithoutDefaultConstructor(String property)
{
System.out.println("Non-default constructor call!");
this.property = property;
}

@Validate
public void activate()
{
System.out.println("ComponentWithoutDefaultConstructor: activating!");
System.out.println(this.internal);
}

}
{code}

As per definition, I would expect every instance of this class to have a 
non-null member {{internal}} at class creation. This is all fine for my unit 
tests in a non-OSGi environment.

However, having this processes by iPOJO and putting this in an OSGi container, 
the component outputs 
{code}
ComponentWithoutDefaultConstructor: activating!
null
{code}
The existing non-default constructor is not called, while it seems that a 
separate constructor has been created that does non instantiate the member 
variable.

If I extend the code by an empty default constructor, that one is called and 
all works perfectly fine.

I have no idea how iPOJO creates the object instance anyways, as it should not 
be possible to create such an invalid object instance. I don't know much about 
the reflection APIs or byte code manipulation though.

I have put [a sample maven project on 
GitHub|https://github.com/BenjaminDebeerst/ipojo-component-constructor-sample], 
which can be built and droppped into a fresh Karaf container + iPOJO, which 
shows the problem.

If there is no constructor iPOJO can use, I would expect iPOJO to either A) 
throw a warning/error (and build or runtime) and fail to instantiate the 
component or B) synthesize the default constructor properly, including the 
implicit instantiation of member variables.

I encountered this problem both with iPOJO 1.10.1 and 1.11.1


> Missing default constructor creates invalid class instances
> ---
>
> Key: FELIX-4455
> URL: https://issues.apache.org/jira/browse/FELIX-4455
> Project: Felix
>  Issue Type: Bug
>  Components: iPOJO
>Affects Versions: ipojo-manipulator-1.10.1, ipojo-manipulator-1.11.1
>Reporter: Benjamin Debeerst
>
> Consider the following component definition: 
> @Component
> @Instantiate
> public class ComponentWithoutDefaultConstructor
> {
> private Object internal = new Object();
> @Property
> private String property;
> /* Constructor for unit tests */
> public ComponentWithoutDefaultConstructor(String property)
> {
> System.ou

[jira] [Updated] (FELIX-4455) Missing default constructor creates invalid class instances

2014-03-11 Thread Benjamin Debeerst (JIRA)

 [ 
https://issues.apache.org/jira/browse/FELIX-4455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benjamin Debeerst updated FELIX-4455:
-

Description: 
Consider the following component definition: 
{code}
@Component
@Instantiate
public class ComponentWithoutDefaultConstructor
{
private Object internal = new Object();

@Property
private String property;

/* Constructor for unit tests */
public ComponentWithoutDefaultConstructor(String property)
{
System.out.println("Non-default constructor call!");
this.property = property;
}

@Validate
public void activate()
{
System.out.println("ComponentWithoutDefaultConstructor: activating!");
System.out.println(this.internal);
}

}
{code}

As per definition, I would expect every instance of this class to have a 
non-null member {{internal}} at class creation. This is all fine for my unit 
tests in a non-OSGi environment.

However, having this processes by iPOJO and putting this in an OSGi container, 
the component outputs 
{code}
ComponentWithoutDefaultConstructor: activating!
null
{code}
The existing non-default constructor is not called, while it seems that a 
separate constructor has been created that does non instantiate the member 
variable.

If I extend the code by an empty default constructor, that one is called and 
all works perfectly fine.

I have no idea how iPOJO creates the object instance anyways, as it should not 
be possible to create such an invalid object instance. I don't know much about 
the reflection APIs or byte code manipulation though.

I have put [a sample maven project on 
GitHub|https://github.com/BenjaminDebeerst/ipojo-component-constructor-sample], 
which can be built and droppped into a fresh Karaf container + iPOJO, which 
shows the problem.

If there is no constructor iPOJO can use, I would expect iPOJO to either A) 
throw a warning/error (and build or runtime) and fail to instantiate the 
component or B) synthesize the default constructor properly, including the 
implicit instantiation of member variables.

I encountered this problem both with iPOJO 1.10.1 and 1.11.1

  was:
Consider the following component definition: 
{code}
@Component
@Instantiate
public class ComponentWithoutDefaultConstructor
{
private Object internal = new Object();

@Property
private String property;

/* Constructor for unit tests */
public ComponentWithoutDefaultConstructor(String property)
{
System.out.println("Non-default constructor call!");
this.property = property;
}

@Validate
public void activate()
{
System.out.println("ComponentWithoutDefaultConstructor: activating!");
System.out.println(this.internal);
}

}
{code}

As per definition, I would expect every instance of this class to have a 
non-null member {{internal}} at class creation. This is all fine for my unit 
tests in a non-OSGi environment.

However, having this processes by iPOJO and putting this in an OSGi container, 
the component outputs 
{code}
ComponentWithoutDefaultConstructor: activating!
null
{code}
The existing non-default constructor is not called, while it seems that a 
separate constructor has been created that does non instantiate the member 
variable.

If I extend the code by an empty default constructor, that one is called and 
all works perfectly fine.

I have no idea how iPOJO creates the object instance anyways, as it should not 
be possible to create such an invalid object instance. I don't know much about 
the reflection APIs or byte code manipulation though.

I have put [a sample maven project on 
GitHub|https://github.com/BenjaminDebeerst/ipojo-component-constructor-sample], 
which can be built and droppped into a fresh Karaf container + iPOJO, which 
shows the problem.

If there is no constructor iPOJO can use, I would expect iPOJO to either A) 
throw a warning/error (and build or runtime) and fail to instantiate the 
component or B) synthesize the default constructor properly, including the 
implicit instantiation of member variables.


> Missing default constructor creates invalid class instances
> ---
>
> Key: FELIX-4455
> URL: https://issues.apache.org/jira/browse/FELIX-4455
> Project: Felix
>  Issue Type: Bug
>  Components: iPOJO
>Affects Versions: ipojo-manipulator-1.10.1, ipojo-manipulator-1.11.1
>Reporter: Benjamin Debeerst
>
> Consider the following component definition: 
> {code}
> @Component
> @Instantiate
> public class ComponentWithoutDefaultConstructor
> {
> private Object internal = new Object();
> @Property
> private String property;
> /* Constructor for unit tests */
> public ComponentWithoutDefaultConstructor(String property)
> {
> System.out.println("Non-default constructor