Hi, in some product we are using Spring by the Karaf provided features. We tried to bump from Spring 5.0 to 5.1 (both provided by the Karaf Spring feature repository).
The current feature repo (https://repo1.maven.org/maven2/org/apache/karaf/features/spring/4.2.6/spring-4.2.6-features.xml) provided the Spring versions 5.0.14.RELEASE and 5.1.7.RELEASE. With respect to the error I would like to report, let's have a look at the changed of a specific class of "spring-messaging": git diff v5.0.14.RELEASE...v5.1.7.RELEASE -- spring-messaging/src/main/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolver.java ``` * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -22,11 +22,11 @@ import java.util.HashSet; import java.util.Set; import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.simp.SimpLogging; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.messaging.simp.SimpMessageType; import org.springframework.util.Assert; @@ -52,7 +52,7 @@ import org.springframework.util.StringUtils; */ public class DefaultUserDestinationResolver implements UserDestinationResolver { - private static final Log logger = LogFactory.getLog(DefaultUserDestinationResolver.class); + private static final Log logger = SimpLogging.forLogName(DefaultUserDestinationResolver.class); private final SimpUserRegistry userRegistry; ``` Instead of "org.apache.commons.logging.LogFactory" the newly introduced class "org.springframework.messaging.simp.SimpLogging" is used. That class is using the class "org.springframework.core.log.LogDelegateFactory". The package "org.springframework.core.log" is not added to the "Package-Imports". This leads to the following error: ``` Caused by: java.lang.ClassNotFoundException: org.springframework.core.log.LogDelegateFactory not found by org.apache.servicemix.bundles.spring-messaging [119] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1639) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?] at org.springframework.messaging.simp.SimpLogging.forLog(SimpLogging.java:67) ~[?:?] at org.springframework.messaging.simp.SimpLogging.forLogName(SimpLogging.java:56) ~[?:?] at org.springframework.messaging.simp.user.DefaultUserDestinationResolver.<clinit>(DefaultUserDestinationResolver.java:55) ~[?:?] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:?] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:?] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172) ~[?:?] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117) ~[?:?] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:300) ~[?:?] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285) ~[?:?] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1325) ~[?:?] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1171) ~[?:?] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[?:?] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[?:?] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[?:?] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[?:?] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[?:?] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[?:?] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849) ~[?:?] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[?:?] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[?:?] at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:701) ~[?:?] at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:667) ~[?:?] at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:715) ~[?:?] at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:590) ~[?:?] at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:529) ~[?:?] at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:169) ~[?:?] at javax.servlet.GenericServlet.init(GenericServlet.java:244) ~[?:?] at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:670) ~[?:?] ... 34 more ``` After adding "org.springframework.core.log" to the "Import-Package" manifest entry of "org.apache.servicemix.bundles.spring-messaging" the error is gone and spring-messaging 5.1 works as expected (similar to 5.0) in OSGi.
