You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "PandaMonkey (JIRA)" <ji...@apache.org> on 2018/02/12 05:43:00 UTC

[jira] [Created] (AMQ-6898) Dependency conflict problems in different JARs , which brings high risks of NoSuchMethodException

PandaMonkey created AMQ-6898:
--------------------------------

             Summary: Dependency conflict problems in different JARs <org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1:><org.apache.geronimo.specs:geronimo-jms_2.0_spec:1.0-alpha-2:>, which brings high risks of NoSuchMethodException 
                 Key: AMQ-6898
                 URL: https://issues.apache.org/jira/browse/AMQ-6898
             Project: ActiveMQ
          Issue Type: Bug
          Components: AMQP
    Affects Versions: 5.15.3
            Reporter: PandaMonkey


Hi, same classes exist in two different JARs: <*org.apache.geronimo.specs:geronimo-jms_1.1_spec:*1.1.1:> and <*org.apache.geronimo.specs:geronimo-jms_2.0_spec*:1.0-alpha-2:>.

The same problem also exist in JAR pair <*commons-beanutils:commons-beanutils-core*:1.8.0:> and <*commons-beanutils:commons-beanutils*:1.9.3:>.

 And after further analyzing the source code, we found that these duplicate classes have different implementations, which would leads to the *NoSuchMethodException*! If the classes with the same name on the classpath, then the only the first present one can be loaded. So it affects the program behaviors. The differences between are listed below:

1. Risk for jar-pair:<org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1:><org.apache.geronimo.specs:geronimo-jms_2.0_spec:1.0-alpha-2:>
 methods that only exist in org.apache.geronimo.specs:geronimo-jms_2.0_spec:1.0-alpha-2:: [org.apache.activemq:activemq-amqp:5.15.3:->org.apache.qpid:qpid-jms-client:0.29.0:->org.apache.geronimo.specs:geronimo-jms_2.0_spec:1.0-alpha-2:]
<javax.jms.Connection: javax.jms.ConnectionConsumer createSharedConnectionConsumer(javax.jms.Topic,java.lang.String,java.lang.String,javax.jms.ServerSessionPool,int)>
<javax.jms.Connection: javax.jms.Session createSession()>
<javax.jms.Connection: javax.jms.ConnectionConsumer createSharedDurableConnectionConsumer(javax.jms.Topic,java.lang.String,java.lang.String,javax.jms.ServerSessionPool,int)>
<javax.jms.Connection: javax.jms.Session createSession(int)>
<javax.jms.ConnectionFactory: javax.jms.JMSContext createContext(java.lang.String,java.lang.String)>
<javax.jms.ConnectionFactory: javax.jms.JMSContext createContext()>
<javax.jms.ConnectionFactory: javax.jms.JMSContext createContext(java.lang.String,java.lang.String,int)>
<javax.jms.ConnectionFactory: javax.jms.JMSContext createContext(int)>
<javax.jms.Message: long getJMSDeliveryTime()>
<javax.jms.Message: boolean isBodyAssignableTo(java.lang.Class)>
<javax.jms.Message: java.lang.Object getBody(java.lang.Class)>
<javax.jms.Message: void setJMSDeliveryTime(long)>
<javax.jms.MessageProducer: void send(javax.jms.Message,int,int,long,javax.jms.CompletionListener)>
<javax.jms.MessageProducer: void send(javax.jms.Destination,javax.jms.Message,javax.jms.CompletionListener)>
<javax.jms.MessageProducer: void send(javax.jms.Message,javax.jms.CompletionListener)>
<javax.jms.MessageProducer: void setDeliveryDelay(long)>
<javax.jms.MessageProducer: long getDeliveryDelay()>
<javax.jms.MessageProducer: void send(javax.jms.Destination,javax.jms.Message,int,int,long,javax.jms.CompletionListener)>
<javax.jms.Session: javax.jms.MessageConsumer createDurableConsumer(javax.jms.Topic,java.lang.String,java.lang.String,boolean)>
<javax.jms.Session: javax.jms.MessageConsumer createSharedDurableConsumer(javax.jms.Topic,java.lang.String)>
<javax.jms.Session: javax.jms.MessageConsumer createSharedConsumer(javax.jms.Topic,java.lang.String,java.lang.String)>
<javax.jms.Session: javax.jms.MessageConsumer createSharedDurableConsumer(javax.jms.Topic,java.lang.String,java.lang.String)>
<javax.jms.Session: javax.jms.MessageConsumer createSharedConsumer(javax.jms.Topic,java.lang.String)>
<javax.jms.Session: javax.jms.MessageConsumer createDurableConsumer(javax.jms.Topic,java.lang.String)>
<javax.jms.XAConnectionFactory: javax.jms.XAJMSContext createXAContext(java.lang.String,java.lang.String)>
<javax.jms.XAConnectionFactory: javax.jms.XAJMSContext createXAContext()>


2. Risk for jar-pair:<commons-beanutils:commons-beanutils-core:1.8.0:><commons-beanutils:commons-beanutils:1.9.3:>
 methods that only exist in commons-beanutils:commons-beanutils-core:1.8.0:: [org.apache.activemq:activemq-amqp:5.15.3:->org.apache.activemq:activemq-leveldb-store:5.15.3:->org.apache.hadoop:hadoop-core:1.0.0:->commons-configuration:commons-configuration:1.6:->commons-beanutils:commons-beanutils-core:1.8.0:]
<org.apache.commons.beanutils.BasicDynaBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.BasicDynaClass: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.BeanUtilsBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.ConvertUtilsBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.ConvertUtilsBean2: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: org.apache.commons.beanutils.DynaProperty[] getDynaProperties()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.lang.String toString(java.lang.Object)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: boolean containsKey(java.lang.Object)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.util.Set keySet()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: boolean isEmpty()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: org.apache.commons.beanutils.DynaBean getDynaBean()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: int size()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: void putAll(java.util.Map)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.util.Collection values()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: void clear()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: boolean containsValue(java.lang.Object)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.lang.Object get(java.lang.Object)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.util.Set entrySet()>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.lang.Object remove(java.lang.Object)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.lang.Object put(java.lang.Object,java.lang.Object)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: boolean isReadOnly()>
<org.apache.commons.beanutils.DynaProperty: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.JDBCDynaClass: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.LazyDynaBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.LazyDynaClass: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.LazyDynaList: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.MappedPropertyDescriptor: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.MethodUtils: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.PropertyUtilsBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.WeakFastHashMap$CollectionView: org.apache.commons.beanutils.WeakFastHashMap access$500(org.apache.commons.beanutils.WeakFastHashMap$CollectionView)>
<org.apache.commons.beanutils.WrapDynaClass: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.WrapDynaClass: void <init>(java.lang.Class)>
<org.apache.commons.beanutils.converters.AbstractConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.AbstractConverter: java.lang.Class primitive(java.lang.Class)>
<org.apache.commons.beanutils.converters.ArrayConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.BigDecimalConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.BigIntegerConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.BooleanArrayConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.BooleanConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.ByteConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.CalendarConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.CharacterConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.ClassConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.DateConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.DateTimeConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.DoubleConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.FileConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.FloatConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.IntegerConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.LongConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.NumberConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.NumberConverter: java.lang.Number toNumber(java.lang.Class,java.lang.Class,java.lang.Number)>
<org.apache.commons.beanutils.converters.ShortConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.SqlDateConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.SqlTimeConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.SqlTimestampConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.StringConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.converters.URLConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.locale.BaseLocaleConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.locale.LocaleBeanUtilsBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.locale.LocaleConvertUtilsBean: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.locale.converters.DateLocaleConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.locale.converters.DecimalLocaleConverter: java.lang.Class class$(java.lang.String)>
<org.apache.commons.beanutils.locale.converters.StringLocaleConverter: java.lang.Class class$(java.lang.String)>
 methods that only exist in commons-beanutils:commons-beanutils:1.9.3:: [commons-beanutils:commons-beanutils:1.9.3:]
<org.apache.commons.beanutils.BeanUtilsBean$1: org.apache.commons.beanutils.BeanUtilsBean initialValue()>
<org.apache.commons.beanutils.BeanUtilsBean: java.lang.Class dynaPropertyType(org.apache.commons.beanutils.DynaProperty,java.lang.Object)>
<org.apache.commons.beanutils.BeanUtilsBean: java.lang.Object convertForCopy(java.lang.Object,java.lang.Class)>
<org.apache.commons.beanutils.ConstructorUtils: java.lang.Object[] toArray(java.lang.Object)>
<org.apache.commons.beanutils.ConvertUtils: java.lang.Class primitiveToWrapper(java.lang.Class)>
<org.apache.commons.beanutils.DynaBeanMapDecorator: java.lang.Object convertKey(java.lang.String)>
<org.apache.commons.beanutils.JDBCDynaClass: void setUseColumnLabel(boolean)>
<org.apache.commons.beanutils.LazyDynaList: org.apache.commons.beanutils.LazyDynaMap createDynaBeanForMapProperty(java.lang.Object)>
<org.apache.commons.beanutils.LazyDynaList: org.apache.commons.beanutils.DynaClass getDynaClass()>
<org.apache.commons.beanutils.MappedPropertyDescriptor$MappedMethodReference: java.lang.Class reLoadClass(java.lang.String)>
<org.apache.commons.beanutils.MethodUtils: java.lang.Object[] toArray(java.lang.Object)>
<org.apache.commons.beanutils.PropertyUtils: void addBeanIntrospector(org.apache.commons.beanutils.BeanIntrospector)>
<org.apache.commons.beanutils.PropertyUtils: boolean removeBeanIntrospector(org.apache.commons.beanutils.BeanIntrospector)>
<org.apache.commons.beanutils.PropertyUtils: void resetBeanIntrospectors()>
<org.apache.commons.beanutils.PropertyUtilsBean: org.apache.commons.beanutils.BeanIntrospectionData fetchIntrospectionData(java.lang.Class)>
<org.apache.commons.beanutils.PropertyUtilsBean: java.util.List toObjectList(java.lang.Object)>
<org.apache.commons.beanutils.PropertyUtilsBean: void addBeanIntrospector(org.apache.commons.beanutils.BeanIntrospector)>
<org.apache.commons.beanutils.PropertyUtilsBean: void resetBeanIntrospectors()>
<org.apache.commons.beanutils.PropertyUtilsBean: java.util.Map toPropertyMap(java.lang.Object)>
<org.apache.commons.beanutils.PropertyUtilsBean: org.apache.commons.beanutils.BeanIntrospectionData getIntrospectionData(java.lang.Class)>
<org.apache.commons.beanutils.PropertyUtilsBean: boolean removeBeanIntrospector(org.apache.commons.beanutils.BeanIntrospector)>
<org.apache.commons.beanutils.ResultSetDynaClass: org.apache.commons.beanutils.DynaProperty[] getDynaProperties()>
<org.apache.commons.beanutils.ResultSetDynaClass: org.apache.commons.beanutils.DynaProperty getDynaProperty(java.lang.String)>
<org.apache.commons.beanutils.ResultSetDynaClass: void <init>(java.sql.ResultSet,boolean,boolean)>
<org.apache.commons.beanutils.ResultSetDynaClass: org.apache.commons.beanutils.DynaBean newInstance()>
<org.apache.commons.beanutils.ResultSetDynaClass: void setUseColumnLabel(boolean)>
<org.apache.commons.beanutils.ResultSetDynaClass: java.lang.String getName()>
<org.apache.commons.beanutils.ResultSetIterator: org.apache.commons.beanutils.DynaBean next()>
<org.apache.commons.beanutils.RowSetDynaClass: void <init>(java.sql.ResultSet,boolean,boolean)>
<org.apache.commons.beanutils.RowSetDynaClass: org.apache.commons.beanutils.DynaProperty getDynaProperty(java.lang.String)>
<org.apache.commons.beanutils.RowSetDynaClass: org.apache.commons.beanutils.DynaProperty[] getDynaProperties()>
<org.apache.commons.beanutils.RowSetDynaClass: void setUseColumnLabel(boolean)>
<org.apache.commons.beanutils.RowSetDynaClass: void <init>(java.sql.ResultSet,boolean,int,boolean)>
<org.apache.commons.beanutils.RowSetDynaClass: org.apache.commons.beanutils.DynaBean newInstance()>
<org.apache.commons.beanutils.RowSetDynaClass: java.lang.String getName()>
<org.apache.commons.beanutils.WeakFastHashMap$EntrySet: java.util.Map$Entry iteratorNext(java.util.Map$Entry)>
<org.apache.commons.beanutils.WrapDynaBean: void <init>(java.lang.Object,org.apache.commons.beanutils.WrapDynaClass)>
<org.apache.commons.beanutils.WrapDynaBean: org.apache.commons.beanutils.PropertyUtilsBean getPropertyUtils()>
<org.apache.commons.beanutils.WrapDynaClass$1: java.util.Map initialValue()>
<org.apache.commons.beanutils.WrapDynaClass: org.apache.commons.beanutils.PropertyUtilsBean getPropertyUtilsBean()>
<org.apache.commons.beanutils.WrapDynaClass: void <init>(java.lang.Class,org.apache.commons.beanutils.PropertyUtilsBean)>
<org.apache.commons.beanutils.WrapDynaClass: java.util.Map getClassesCache()>
<org.apache.commons.beanutils.WrapDynaClass: org.apache.commons.beanutils.WrapDynaClass createDynaClass(java.lang.Class,org.apache.commons.beanutils.PropertyUtilsBean)>
<org.apache.commons.beanutils.WrapDynaClass: java.util.Map access$100()>
<org.apache.commons.beanutils.converters.AbstractConverter: java.lang.Object convertToDefaultType(java.lang.Class,java.lang.Object)>
<org.apache.commons.beanutils.converters.AbstractConverter: org.apache.commons.beanutils.ConversionException conversionException(java.lang.Class,java.lang.Object)>
<org.apache.commons.beanutils.converters.NumberConverter: java.lang.Object toNumber(java.lang.Class,java.lang.Class,java.lang.Number)>
<org.apache.commons.beanutils.locale.BaseLocaleConverter: java.lang.Object getDefaultAs(java.lang.Class)>
<org.apache.commons.beanutils.locale.BaseLocaleConverter: java.lang.Object checkConversionResult(java.lang.Class,java.lang.Object)>
<org.apache.commons.beanutils.locale.LocaleBeanUtilsBean$1: org.apache.commons.beanutils.locale.LocaleBeanUtilsBean initialValue()>



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)