https://bz.apache.org/bugzilla/show_bug.cgi?id=62182

            Bug ID: 62182
           Summary: Auto unboxing of Long value from a class not working
                    on Tomcat 8 and Java 8 Linux machine
           Product: Tomcat 8
           Version: 8.5.28
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: mahesha.puttasw...@gmail.com
  Target Milestone: ----

Hi Team,

Suppose an Java class object TestBean  having arrayList of Long using SOAP CALL
and let's  use reflection to inspect the each property of object. I noticed
Long value is converted to Object Type and not as Long even it has long value
in the server so the line having propertyElementValue.getClass().getName())
return java.lang.Object.

This strange behaviour is with Java 8 (any version) and Tomcat 8 (any version)
Linux version and it works fine in Windows version.

Combination of Java 8 and Tomcat 7 in linux machine works fine.

        public class TestBean {

                private static final long serialVersionUID = 1L;

                private List<Long> customerIDs;


                public List<Long> getCustomerIDs() {
                        return customerIDs;
                }

                public void setCustomerIDs(List<Long> customerIDs) {
                        this.customerIDs = customerIDs;
                }

        }





        private void inspectObjectProperties(final Object object) throws
Exception  {

                System.out.println("object class name: "+
object.getClass().getName());
                System.out.println("object class name: "+
object.getClass().getComponentType());

        BeanInfo infoAboutFoo = Introspector.getBeanInfo(object.getClass());
                final PropertyDescriptor[] propertyDescriptors =
infoAboutFoo.getPropertyDescriptors();
                 for (final PropertyDescriptor propertyDescriptor :
propertyDescriptors) {
                    final Object propertyValue =
propertyDescriptor.getReadMethod().invoke(object);
                        if ((propertyValue != null) &&
                                isArrayOrCollection(propertyValue.getClass())
&& !(propertyValue instanceof byte[])) {
                                for (final Object propertyElementValue :
((Collection<?>) propertyValue)) {
                                       
System.out.println("propertyElementValue: " +
propertyElementValue.getClass().getName());
                                }
                                }
                        }


        }





    private static boolean isArrayOrCollection(final Class clazz) {
        return (clazz.isArray() || clazz.isAssignableFrom(List.class) ||
        clazz.isAssignableFrom(ArrayList.class) ||
        clazz.isAssignableFrom(Set.class) ||
        clazz.isAssignableFrom(SortedSet.class) ||
        clazz.isAssignableFrom(AbstractCollection.class) ||
        clazz.isAssignableFrom(AbstractList.class) ||
        clazz.isAssignableFrom(AbstractSet.class) ||
        clazz.isAssignableFrom(HashSet.class) ||
        clazz.isAssignableFrom(LinkedHashSet.class) ||
        clazz.isAssignableFrom(LinkedList.class) ||
        clazz.isAssignableFrom(TreeSet.class) ||
        clazz.isAssignableFrom(Vector.class));
    }

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to