felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benjamin Debeerst (JIRA)" <j...@apache.org>
Subject [jira] [Created] (FELIX-4455) Missing default constructor creates invalid class instances
Date Tue, 11 Mar 2014 09:00:56 GMT
Benjamin Debeerst created FELIX-4455:

             Summary: 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.11.1, ipojo-manipulator-1.10.1
            Reporter: Benjamin Debeerst

Consider the following component definition: 
public class ComponentWithoutDefaultConstructor
    private Object internal = new Object();

    private String property;

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

    public void activate()
        System.out.println("ComponentWithoutDefaultConstructor: activating!");


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
ComponentWithoutDefaultConstructor: activating!
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

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.

This message was sent by Atlassian JIRA

View raw message