Resolution: Won't Fix
Affects Version/s: ipojo-manipulator-1.10.1, ipojo-manipulator-1.11.1
Fix Version/s: None
Consider the following component definition:
public class ComponentWithoutDefaultConstructor
private Object internal = new Object();
private String property;
/* Constructor for unit tests */
public ComponentWithoutDefaultConstructor(String property)
public void activate()
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
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, 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.