Uploaded image for project: 'Magnolia'
  1. Magnolia
  2. MAGNOLIA-4858

info.magnolia.objectfactory.ObjectManufacturer: wrong constructor resolving

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Neutral
    • 4.5.x
    • None
    • core
    • None

    Description

      Due to changes in Oracle java 7 bug was exposed in process of providing components by MockComponentProvider. Possible constructor are checked in order provided by JVM but should check for exact match instead.

      Test case - info.magnolia.test.mock.MockComponentProviderTest.testThrowsExceptionWhenEncounteringConstructorTakingStringArgument()
      With Oracle JDK 1.6.0_39 - test passes
      Constructors order for String type:

      [public java.lang.String(), public java.lang.String(java.lang.String), public java.lang.String(char[]), public java.lang.String(char[],int,int), public java.lang.String(int[],int,int), public java.lang.String(byte[],int,int,int), public java.lang.String(byte[],int), public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException, public java.lang.String(byte[],int,int,java.nio.charset.Charset), public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException, public java.lang.String(byte[],java.nio.charset.Charset), public java.lang.String(byte[],int,int), public java.lang.String(byte[]), public java.lang.String(java.lang.StringBuffer), public java.lang.String(java.lang.StringBuilder), java.lang.String(int,int,char[])]
      

      With Oracle JDK 1.7.0_13 - test fails
      Constructors order for String type:

      [public java.lang.String(byte[]), public java.lang.String(byte[],int,int), public java.lang.String(byte[],java.nio.charset.Charset), public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException, public java.lang.String(byte[],int,int,java.nio.charset.Charset), java.lang.String(int,int,char[]), java.lang.String(char[],boolean), public java.lang.String(java.lang.StringBuilder), public java.lang.String(java.lang.StringBuffer), public java.lang.String(int[],int,int), public java.lang.String(char[],int,int), public java.lang.String(char[]), public java.lang.String(java.lang.String), public java.lang.String(), public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException, public java.lang.String(byte[],int), public java.lang.String(byte[],int,int,int)]
      

      Point of this test case is to catch CircularDependencyException (re-thrown as MgnlInstantiationException) thrown when certain type is checked for more times but with new order of possible constructors exception with message "No suitable constructor found for class" is thrown when wrong constructor is used to instantiate the object.

      Checklists

        Acceptance criteria

        Attachments

          Activity

            People

              ochytil Ondrej Chytil
              ochytil Ondrej Chytil
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Checklists

                  Bug DoR
                  Task DoD