2

My java web application uses Spring and Manve and is deployed into tomcat8. It uses spring 4.1.1 for integraion with gcm xmpp. My dependecies are:

<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-core</artifactId>
    <version>4.1.3</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-tcp</artifactId>
    <version>4.1.3</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-extensions</artifactId>
    <version>4.1.3</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-java7</artifactId>
    <version>4.1.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-xmpp</artifactId>
    <version>4.2.0.RELEASE</version>
</dependency>    

I created a bean for XMPP Connectio:

import javax.net.ssl.SSLSocketFactory;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.xmpp.config.XmppConnectionFactoryBean;

@Configuration
public class GcmXmppConnection {

    private static final String GCM_SERVER = "gcm.googleapis.com";

    @Value("${sender.id}@gcm.googleapis.com")
    private String username;

    @Value("${server.api.key}")
    private String password;

    @Value("${gcm.xmpp.host}")
    private String host;

    @Value("${gcm.xmpp.port}")
    private int port;

    @Value("${gcm.xmpp.debuggable}")
    private boolean debuggable;

    @Bean(name = "xmppConnection")
    public XmppConnectionFactoryBean xmppConnectionFactoryBean() {

        XMPPTCPConnectionConfiguration configuration
                = XMPPTCPConnectionConfiguration.builder()
                .setServiceName(host)
                .setHost(host)
                .setCompressionEnabled(false)
                .setPort(port)
                .setConnectTimeout(30000)
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .setSendPresence(false)
                .setDebuggerEnabled(debuggable)
                .setSocketFactory(SSLSocketFactory.getDefault())
                .build();

        XmppConnectionFactoryBean connectionFactoryBean = new XmppConnectionFactoryBean(configuration);
        connectionFactoryBean.setUser(username);
        connectionFactoryBean.setPassword(password);

        return connectionFactoryBean;
    }
}

After start application in tomcat, a error happens on contex spring inicialization.

    25-Sep-2015 09:36:07.916 INFO [http-nio-8080-exec-6] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
25-Sep-2015 09:36:20.385 INFO [http-nio-8080-exec-9] org.apache.catalina.core.ApplicationContext.log Spring WebApplicationInitializers detected on classpath: [org.glassfish.jersey.server.spring.SpringWebApplicationInitializer@5be86624]
25-Sep-2015 09:36:20.411 INFO [http-nio-8080-exec-9] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
25-Sep-2015 09:36:22.401 SEVERE [http-nio-8080-exec-9] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xmppConnection' defined in class path resource [br/com/soma/service/gcm/xmpp/GcmXmppConnection.class]: Invocation of init method failed; nested exception is java.lang.IllegalAccessError: tried to access method org.jivesoftware.smack.AbstractXMPPConnection.<init>(Lorg/jivesoftware/smack/ConnectionConfiguration;)V from class org.springframework.integration.xmpp.config.XmppConnectionFactoryBean
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4772)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:455)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1493)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1432)
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:884)
    at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:335)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:613)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalAccessError: tried to access method org.jivesoftware.smack.AbstractXMPPConnection.<init>(Lorg/jivesoftware/smack/ConnectionConfiguration;)V from class org.springframework.integration.xmpp.config.XmppConnectionFactoryBean
    at org.springframework.integration.xmpp.config.XmppConnectionFactoryBean.createInstance(XmppConnectionFactoryBean.java:103)
    at org.springframework.integration.xmpp.config.XmppConnectionFactoryBean.createInstance(XmppConnectionFactoryBean.java:43)
    at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
    ... 58 more

Can anyone help me, pealse ? Thanks!

araraujo
  • 613
  • 2
  • 8
  • 17
  • 1. With Spring Integration 4.2 you should use Spring 4.2. 2. Please, share more StackTrace. Tat one looks strange. From other let me Spring Integration with Smack `4.1.3`. We are still on the `4.0.6` – Artem Bilan Sep 25 '15 at 14:41
  • Well, I've just upgraded to the Smack 4.1.4 and it doesn't work with Spring Integration and even isn't compiled! So, we need upgrade and fix. But we can do that only with the Spring Integration *4.3* already: major change, major version. BTW your issue looks like `XmppConnectionFactoryBean.java:103: error: incompatible types: ConnectionConfiguration cannot be converted to XMPPTCPConnectionConfiguration` – Artem Bilan Sep 25 '15 at 14:47

1 Answers1

0

Please, find this JIRA on the matter.

And here are my comment which are feasible for the answer as well:

  1. With Spring Integration 4.2 you should use Spring 4.2.

  2. Please, share more StackTrace. Tat one looks strange. From other let me Spring Integration with Smack 4.1.3. We are still on the 4.0.6

Well, I've just upgraded to the Smack 4.1.4 and it doesn't work with Spring Integration and even isn't compiled! So, we need upgrade and fix. But we can do that only with the Spring Integration 4.3 already: major change, major version. BTW your issue looks like:

XmppConnectionFactoryBean.java:103: error: incompatible types: ConnectionConfiguration cannot be converted to XMPPTCPConnectionConfiguration
Artem Bilan
  • 113,505
  • 11
  • 91
  • 118
  • I just upgrade spring to 4.2.0 and downgrade smack version to 4.0.6 and it works fine. Thanks!! – araraujo Sep 28 '15 at 11:19
  • @araraujo : can you update your latest maven configuration here? I'm trying to make this work as well but didn't get any luck yet. – shkhssn Apr 02 '17 at 05:49