2

我的java web應用程序使用Spring和Manve並部署到tomcat8中。它使用spring 4.1.1與gcm xmpp集成。我的依賴條件是:Spring和GCM XMPP集成錯誤

<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>  

我創建了一個豆的XMPP Connectio:

在Tomcat中
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; 
    } 
} 

開始後的應用程序,一個錯誤的CONTEX春天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[email protected]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 

任何人都可以幫助我,pealse?謝謝!

+0

1.使用Spring Integration 4.2,你應該使用Spring 4.2。 2.請分享更多StackTrace。達一看起來很奇怪。從其他讓我與Spring的集成與Smack的'4.1.3'。我們仍然在'4.0.6' –

+0

那麼,我剛剛升級到了Smack 4.1.4,它不適用於Spring Integration,甚至沒有編譯!所以,我們需要升級和修復。但是我們只能通過Spring Integration * 4.3 *來實現這一點:重大更改,主要版本。順便說一句你的問題看起來像'XmppConnectionFactoryBean.java:103:錯誤:不兼容的類型:ConnectionConfiguration無法轉換爲XMPPTCPConnectionConfiguration' –

回答

0

請在這個問題上找到JIRA

這裏是我的評論這是可行的答案,以及:

  1. 使用Spring集成4.2,你應該使用Spring 4.2。

  2. 請分享更多StackTrace。達一看起來很奇怪。從其他讓我Spring與Smack 4.1.3集成。我們仍然在4.0.6

那麼,我剛剛升級到Smack 4.1.4,它不適用於Spring集成,甚至沒有編譯!所以,我們需要升級和修復。但是我們只能通過Spring Integration 4.3來做到這一點:重大變更,主要版本。順便說一句你的問題是這樣的:

XmppConnectionFactoryBean.java:103: error: incompatible types: ConnectionConfiguration cannot be converted to XMPPTCPConnectionConfiguration 
+0

我只是升級到4.2.0和降級smack版本到4.0.6,它工作正常。謝謝!! – araraujo

+0

@araraujo:你可以在這裏更新你最新的maven配置嗎?我正在努力使這項工作,但沒有得到任何好運。 – shkhssn