Author Message
ClausSuffel
Joined: Nov 12, 2013
Messages: 12
Offline
Hello,

After upgrading DMCC Java SDK from V7.0 to V8.1, our DMCC application runs into an exception when trying to get a ServiceProvider instance:

serviceProvider = ServiceProvider.getServiceProvider(serviceProviderProperties);

throws:

Exception in thread "TaskExecutor" java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.avaya.mvap.svcproxy.prov.BaseServiceProvider.<clinit>(BaseServiceProvider.java:69)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.avaya.mvap.svcproxy.prov.ServiceProviderBuilder.getCmapiServiceProvider(ServiceProviderBuilder.java:192)
at com.avaya.mvap.svcproxy.prov.ServiceProviderBuilder.getServiceProviderType(ServiceProviderBuilder.java:180)
at com.avaya.mvap.svcproxy.prov.ServiceProviderBuilder.getServiceProviderImpl(ServiceProviderBuilder.java:112)
at com.avaya.cmapi.ServiceProvider.getCmapiServiceProvider(ServiceProvider.java:404)
at com.avaya.cmapi.ServiceProvider.getServiceProvider(ServiceProvider.java:390)

According to the debugger output, it looks like class "com.avaya.common.logging.FallbackErrorHandler" cannot be loaded correctly.

Is this a known issue and are there any hints how to avoid this failure?

Regards,
Claus

MartinFlynn
Joined: Nov 30, 2009
Messages: 1922
Online
The DMCC SDK version 8.1 has a library file, avaya-common-logging-0.0.4.jar, which contains com.avaya.common.logging.FallbackErrorHandler. This jar file was not in the 7.0 SDK so your Classpath may not include it. Update your Classpath to make sure it includes avaya-common-logging-0.0.4.jar.

Martin
ClausSuffel
Joined: Nov 12, 2013
Messages: 12
Offline
Hi Martin,

The library file avaya-common-logging-0.0.4.jar is already included in the Classpath.
We have removed it from the path in order to cross-check. The exception then changed to:

Exception in thread "TaskExecutor" java.lang.NoClassDefFoundError: com/avaya/common/logging/Logger
at com.avaya.mvap.svcproxy.prov.BaseServiceProvider.<clinit>(BaseServiceProvider.java:69)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.avaya.mvap.svcproxy.prov.ServiceProviderBuilder.getCmapiServiceProvider(ServiceProviderBuilder.java:192)
at com.avaya.mvap.svcproxy.prov.ServiceProviderBuilder.getServiceProviderType(ServiceProviderBuilder.java:180)
at com.avaya.mvap.svcproxy.prov.ServiceProviderBuilder.getServiceProviderImpl(ServiceProviderBuilder.java:112)
at com.avaya.cmapi.ServiceProvider.getCmapiServiceProvider(ServiceProvider.java:404)
at com.avaya.cmapi.ServiceProvider.getServiceProvider(ServiceProvider.java:390)
at com.asc.cti.avaya.avayainterface.connect.aes.AESConnector.establishAesConnection(AESConnector.java:378)
at com.asc.cti.avaya.avayainterface.connect.aes.AESConnector.connectToAes(AESConnector.java:303)
at com.asc.cti.avaya.avayainterface.connect.aes.AESConnector.access$600(AESConnector.java:73)
at com.asc.cti.avaya.avayainterface.connect.aes.AESConnector$TaskExecutor.run(AESConnector.java:1432)
Caused by: java.lang.ClassNotFoundException: com.avaya.common.logging.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more

Is there anything else we can check?
Are there any known version incompatiblities with logging stuff like SLF4J or Log4j?

Regards,
Claus
MartinFlynn
Joined: Nov 30, 2009
Messages: 1922
Online
I am not aware of any problems with compatibility.

IncompatibleClassChangeError implies that a class inherited from a parent class/interface when it was compiled but is being executed with a library which has a different version of the parent class.

Unfortunately, I am not able to reproduce your problem using the latest version of the DMCC SDK (cmapijava-sdk-8.1.0.0.0.9).

Do you have any extra tracing enabled that might trigger this?

Martin
ClausSuffel
Joined: Nov 12, 2013
Messages: 12
Offline
Hi Martin,

It looks like SDK version 8.1 is not compatible with SLF4J anymore.
With version 7.0, we had no issues using SLF4J (together with log4j-over-slf4j) for logging of Avaya DMCC SDK and JTAPI SDK.

We now managed to avoid the IncompatibleClassChangeError issue described here by adding log4j.jar to our Classpath.
But this is not, what we really want, since we now have to deal with two different log files and configuration is required for two loggers.

The incompatibility with SLF4J / log4j-over-slf4j seems to be caused by the newly added avaya-commong-logging-0.0.4.jar.
These traces are showing the usage of some log4j classes that are not implemented by log4j-over-slf4j (or :

Without log4j.jar in Classpath:
[Loaded com.avaya.mvap.svcproxy.prov.BaseServiceProvider from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/proxy.jar]
[Loaded com.avaya.mvap.svcproxy.prov.RemoteServiceProvider from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/proxy.jar]
[Loaded com.avaya.proxy.binding.Resolver from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/avaya-common.jar]
[Loaded com.avaya.router.Router from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/proxy.jar]
[Loaded com.avaya.common.logging.Logger from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/avaya-common-logging-0.0.4.jar]
[Loaded org.apache.log4j.Priority from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-over-slf4j-1.7.30.jar]
[Loaded org.apache.log4j.Level from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-over-slf4j-1.7.30.jar]
[Loaded com.avaya.common.logging.Level from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/avaya-common-logging-0.0.4.jar]
[Loaded org.apache.log4j.spi.ErrorHandler from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-over-slf4j-1.7.30.jar]
Exception in thread "main" [Loaded java.lang.Throwable$PrintStreamOrWriter from C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar]
[Loaded java.lang.Throwable$WrappedPrintStream from C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar]
[Loaded java.util.IdentityHashMap$KeySet from C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar]
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

Same section after adding log4j.jar to Classpath:
[Loaded com.avaya.mvap.svcproxy.prov.BaseServiceProvider from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/proxy.jar]
[Loaded com.avaya.mvap.svcproxy.prov.RemoteServiceProvider from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/proxy.jar]
[Loaded com.avaya.proxy.binding.Resolver from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/avaya-common.jar]
[Loaded com.avaya.router.Router from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/proxy.jar]
[Loaded com.avaya.common.logging.Logger from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/avaya-common-logging-0.0.4.jar]
[Loaded org.apache.log4j.Priority from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded org.apache.log4j.Level from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded com.avaya.common.logging.Level from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/avaya-common-logging-0.0.4.jar]
[Loaded org.apache.log4j.spi.OptionHandler from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded org.apache.log4j.spi.ErrorHandler from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded org.apache.log4j.spi.AppenderAttachable from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded org.apache.log4j.Category from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded org.apache.log4j.Logger from file:/C:/Eclipse%20Workspaces/NEO_60/avayatest/lib_8.1/log4j-1.2.17.jar]
[Loaded java.lang.management.ManagementFactory from C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar]

Is there a chance to make Avaya DMCC SDK compatible with SLF4J / log4j-over-slf4j again?
SLF4J is a widely used logging abstraction layer that usually seamlessly replaces log4j, as long as no special features are used.

Regards,
Claus
MartinFlynn
Joined: Nov 30, 2009
Messages: 1922
Online
Sorry Claus,

I don't see that there is anything I can do for you here.

Martin
Go to:   
Mobile view