diff --git a/build.gradle b/build.gradle index 6139090eb2..e95e796101 100644 --- a/build.gradle +++ b/build.gradle @@ -129,7 +129,7 @@ subprojects { subproject -> slf4jVersion = "1.7.8" tomcatVersion = "8.0.18" smack3Version = '3.2.1' - smackVersion = '4.0.6' + smackVersion = '4.1.5' springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '1.5.2.RELEASE' // springCloudClusterVersion = '1.0.0.BUILD-SNAPSHOT' springDataJpaVersion = '1.8.2.RELEASE' @@ -689,11 +689,10 @@ project('spring-integration-xmpp') { description = 'Spring Integration XMPP Support' dependencies { compile project(":spring-integration-core") - compile("javax.activation:activation:$javaxActivationVersion", optional) compile "org.igniterealtime.smack:smack-tcp:$smackVersion" - compile "org.igniterealtime.smack:smack-resolver-javax:$smackVersion" + compile "org.igniterealtime.smack:smack-java7:$smackVersion" compile "org.igniterealtime.smack:smack-extensions:$smackVersion" - compile "org.springframework:spring-context-support:$springVersion" + testCompile project(":spring-integration-stream") } } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppInboundChannelAdapterParser.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppInboundChannelAdapterParser.java index 373fc51e9d..4c76fbaadc 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppInboundChannelAdapterParser.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppInboundChannelAdapterParser.java @@ -48,6 +48,7 @@ public abstract class AbstractXmppInboundChannelAdapterParser extends AbstractCh protected abstract String getBeanClassName(Element element); + @Override protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(getBeanClassName(element)); diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppOutboundChannelAdapterParser.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppOutboundChannelAdapterParser.java index 7ff0b2a73d..19a176a488 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppOutboundChannelAdapterParser.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/AbstractXmppOutboundChannelAdapterParser.java @@ -16,6 +16,8 @@ package org.springframework.integration.xmpp.config; +import org.w3c.dom.Element; + import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -25,22 +27,20 @@ import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.springframework.integration.xmpp.support.DefaultXmppHeaderMapper; import org.springframework.util.StringUtils; -import org.w3c.dom.Element; - /** * Base class of XMPP outbound parsers - * + * * @author Oleg Zhurakousky * @since 2.0.1 */ public abstract class AbstractXmppOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser { - + @Override protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(this.getHandlerClassName()); - + IntegrationNamespaceUtils.configureHeaderMapper(element, builder, parserContext, DefaultXmppHeaderMapper.class, null); - + String connectionName = element.getAttribute("xmpp-connection"); if (StringUtils.hasText(connectionName)){ builder.addConstructorArgReference(connectionName); @@ -53,9 +53,9 @@ public abstract class AbstractXmppOutboundChannelAdapterParser extends AbstractO "'xmpp-connection' attribute or have default XMPP connection bean registered under the name 'xmppConnection'" + "(e.g., ). If 'id' is not provided the default will be 'xmppConnection'."); } - + return builder.getBeanDefinition(); } - + protected abstract String getHandlerClassName(); } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParser.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParser.java index bd59b37b15..d0c2f14117 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParser.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParser.java @@ -24,7 +24,7 @@ import org.springframework.integration.config.xml.IntegrationNamespaceUtils; /** * Parser for the XMPP 'inbound-channel-adapter' element. - * + * * @author Josh Long * @author Oleg Zhurakousky * @since 2.0 diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParser.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParser.java index c69a8c1fbe..774e392b65 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParser.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParser.java @@ -19,7 +19,7 @@ package org.springframework.integration.xmpp.config; /** * Parser for the XMPP 'outbound-channel-adapter' element - * + * * @author Oleg Zhurakousky * @since 2.0 */ diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParser.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParser.java index 9b21702677..3c9643e03f 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParser.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParser.java @@ -20,7 +20,7 @@ import org.w3c.dom.Element; /** * Parser for 'xmpp:presence-inbound-channel-adapter' element. - * + * * @author Josh Long * @author Oleg Zhurakousky * @since 2.0 @@ -31,4 +31,5 @@ public class PresenceInboundChannelAdapterParser extends AbstractXmppInboundChan protected String getBeanClassName(Element element) { return "org.springframework.integration.xmpp.inbound.PresenceListeningEndpoint"; } + } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParser.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParser.java index aff8727702..6a085a7053 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParser.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParser.java @@ -19,7 +19,7 @@ package org.springframework.integration.xmpp.config; /** * Parser for 'xmpp:presence-outbound-channel-adapter' element - * + * * @author Oleg Zhurakousky * @since 2.0 */ diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java index 07ff32d15c..feb5706c4e 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,12 +16,13 @@ package org.springframework.integration.xmpp.config; -import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.ConnectionListener; -import org.jivesoftware.smack.Roster; -import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.roster.Roster; import org.jivesoftware.smack.tcp.XMPPTCPConnection; +import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; +import org.jxmpp.util.XmppStringUtils; + import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.config.AbstractFactoryBean; import org.springframework.context.SmartLifecycle; @@ -29,46 +30,56 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * This class configures an {@link org.jivesoftware.smack.XMPPConnection} object. + * This class configures an {@link XMPPTCPConnection} object. * This object is used for all scenarios to talk to a Smack server. * * @author Josh Long * @author Mark Fisher * @author Oleg Zhurakousky * @author Florian Schmaus + * @author Artem Bilan * - * @see org.jivesoftware.smack.XMPPConnection + * @see XMPPTCPConnection * @since 2.0 */ -public class XmppConnectionFactoryBean extends AbstractFactoryBean implements SmartLifecycle{ +public class XmppConnectionFactoryBean extends AbstractFactoryBean implements SmartLifecycle { - private final ConnectionConfiguration connectionConfiguration; + private final XMPPTCPConnectionConfiguration connectionConfiguration; - private volatile String resource = null; // server will generate resource if not provided + private final Object lifecycleMonitor = new Object(); + + private volatile String resource; // server will generate resource if not provided private volatile String user; private volatile String password; - private volatile String subscriptionMode = "accept_all"; + private volatile String serviceName; - private volatile XMPPConnection connection; + private volatile String host; + + private volatile int port = 5222; + + private volatile Roster.SubscriptionMode subscriptionMode = Roster.getDefaultSubscriptionMode(); private volatile boolean autoStartup = true; private volatile int phase = Integer.MIN_VALUE; - private final Object lifecycleMonitor = new Object(); - private volatile boolean running; + private volatile XMPPTCPConnection connection; - public XmppConnectionFactoryBean(ConnectionConfiguration connectionConfiguration) { + + public XmppConnectionFactoryBean() { + this.connectionConfiguration = null; + } + + public XmppConnectionFactoryBean(XMPPTCPConnectionConfiguration connectionConfiguration) { Assert.notNull(connectionConfiguration, "'connectionConfiguration' must not be null"); this.connectionConfiguration = connectionConfiguration; } - public void setAutoStartup(boolean autoStartup) { this.autoStartup = autoStartup; } @@ -77,10 +88,6 @@ public class XmppConnectionFactoryBean extends AbstractFactoryBean getObjectType() { return XMPPConnection.class; @@ -100,7 +123,24 @@ public class XmppConnectionFactoryBean extends AbstractFactoryBean getBeanClass(Element element) { + return XmppConnectionFactoryBean.class; } @Override @@ -49,27 +45,18 @@ public class XmppConnectionParser extends AbstractSingleBeanDefinitionParser { @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String serviceName = element.getAttribute("service-name"); - String host = element.getAttribute("host"); - String port = element.getAttribute("port"); - BeanDefinitionBuilder connectionConfigurationBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.jivesoftware.smack.ConnectionConfiguration"); - if (StringUtils.hasText(host)) { - Assert.hasLength(port, "Port must be provided if 'host' is specified"); - connectionConfigurationBuilder.addConstructorArgValue(host); - connectionConfigurationBuilder.addConstructorArgValue(port); + String user = element.getAttribute("user"); + + if (!StringUtils.hasText(serviceName) && !StringUtils.hasText(user)) { + parserContext.getReaderContext().error("One of 'service-name' or 'user' attributes is required", element); } - else { - Assert.hasText(serviceName, "'serviceName' is requuired if 'host' is not provided"); - } - if (StringUtils.hasText(serviceName)){ - connectionConfigurationBuilder.addConstructorArgValue(serviceName); - } - for (String attribute : connectionFactoryAttributes) { + + String[] attributes = {"user", "password", "resource", "subscription-mode", "host", "port", "service-name", + IntegrationNamespaceUtils.AUTO_STARTUP, IntegrationNamespaceUtils.PHASE}; + + for (String attribute : attributes) { IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, attribute); } - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, IntegrationNamespaceUtils.AUTO_STARTUP); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, IntegrationNamespaceUtils.PHASE); - builder.addConstructorArgValue(connectionConfigurationBuilder.getBeanDefinition()); } } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java index 8b3eaab265..882ee2b766 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java @@ -27,9 +27,10 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport; * @since 2.0 */ public class XmppNamespaceHandler extends NamespaceHandlerSupport { - + public final static String XMPP_CONNECTION_BEAN_NAME = "xmppConnection"; + @Override public void init() { // connection registerBeanDefinitionParser("xmpp-connection", new XmppConnectionParser()); @@ -44,4 +45,5 @@ public class XmppNamespaceHandler extends NamespaceHandlerSupport { registerBeanDefinitionParser("header-enricher", new XmppHeaderEnricherParser()); } + } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareEndpoint.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareEndpoint.java index b4d20e37fa..5f5bfb258a 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareEndpoint.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import org.springframework.util.Assert; /** * @author Oleg Zhurakousky * @author Mark Fisher + * @author Artem Bilan * @since 2.0 */ public abstract class AbstractXmppConnectionAwareEndpoint extends MessageProducerSupport { @@ -49,8 +50,9 @@ public abstract class AbstractXmppConnectionAwareEndpoint extends MessageProduce if (this.xmppConnection == null && beanFactory != null) { this.xmppConnection = beanFactory.getBean(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, XMPPConnection.class); } - Assert.notNull(this.xmppConnection, "Failed to resolve XMPPConnection. XMPPConnection must either be set expicitly " + - "via the 'xmpp-connection' attribute or implicitly by registering a bean with the name 'xmppConnection' and of type " + + Assert.notNull(this.xmppConnection, "Failed to resolve XMPPConnection. " + + "XMPPConnection must either be set explicitly via constructor argument " + + "or implicitly by registering a bean with the name 'xmppConnection' and of type " + "'org.jivesoftware.smack.XMPPConnection' in the Application Context."); this.initialized = true; } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareMessageHandler.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareMessageHandler.java index 8e997e9827..4491df504c 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareMessageHandler.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/core/AbstractXmppConnectionAwareMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,12 +17,14 @@ package org.springframework.integration.xmpp.core; import org.jivesoftware.smack.XMPPConnection; + import org.springframework.beans.factory.BeanFactory; import org.springframework.integration.handler.AbstractMessageHandler; import org.springframework.util.Assert; /** * @author Oleg Zhurakousky + * @author Artem Bilan * @since 2.0 */ public abstract class AbstractXmppConnectionAwareMessageHandler extends AbstractMessageHandler { @@ -44,10 +46,12 @@ public abstract class AbstractXmppConnectionAwareMessageHandler extends Abstract protected void onInit() throws Exception { BeanFactory beanFactory = this.getBeanFactory(); if (this.xmppConnection == null && beanFactory != null) { - this.xmppConnection = beanFactory.getBean(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, XMPPConnection.class); + this.xmppConnection = + beanFactory.getBean(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, XMPPConnection.class); } - Assert.notNull(this.xmppConnection, "Failed to resolve XMPPConnection. XMPPConnection must either be set explicitly " + - "via 'xmpp-connection' attribute or implicitly by registering a bean with the name 'xmppConnection' and of type " + + Assert.notNull(this.xmppConnection, "Failed to resolve XMPPConnection. " + + "XMPPConnection must either be set explicitly via constructor argument " + + "or implicitly by registering a bean with the name 'xmppConnection' and of type " + "'org.jivesoftware.smack.XMPPConnection' in the Application Context."); this.initialized = true; } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpoint.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpoint.java index 829b5eed1e..0ac0a054e1 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpoint.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,9 +18,9 @@ package org.springframework.integration.xmpp.inbound; import java.util.Map; -import org.jivesoftware.smack.PacketListener; +import org.jivesoftware.smack.StanzaListener; import org.jivesoftware.smack.XMPPConnection; -import org.jivesoftware.smack.packet.Packet; +import org.jivesoftware.smack.packet.Stanza; import org.springframework.integration.support.AbstractIntegrationMessageBuilder; import org.springframework.integration.xmpp.core.AbstractXmppConnectionAwareEndpoint; @@ -36,13 +36,14 @@ import org.springframework.util.StringUtils; * @author Josh Long * @author Mark Fisher * @author Oleg Zhurakousky + * @author Artem Bilan * @since 2.0 */ public class ChatMessageListeningEndpoint extends AbstractXmppConnectionAwareEndpoint { private volatile boolean extractPayload = true; - private final PacketListener packetListener = new ChatMessagePublishingPacketListener(); + private final StanzaListener stanzaListener = new ChatMessagePublishingStanzaListener(); private volatile XmppHeaderMapper headerMapper = new DefaultXmppHeaderMapper(); @@ -78,21 +79,21 @@ public class ChatMessageListeningEndpoint extends AbstractXmppConnectionAwareEnd @Override protected void doStart() { Assert.isTrue(this.initialized, this.getComponentName() + " [" + this.getComponentType() + "] must be initialized"); - this.xmppConnection.addPacketListener(this.packetListener, null); + this.xmppConnection.addAsyncStanzaListener(this.stanzaListener, null); } @Override protected void doStop() { if (this.xmppConnection != null) { - this.xmppConnection.removePacketListener(this.packetListener); + this.xmppConnection.removeAsyncStanzaListener(this.stanzaListener); } } - private class ChatMessagePublishingPacketListener implements PacketListener { + private class ChatMessagePublishingStanzaListener implements StanzaListener { @Override - public void processPacket(final Packet packet) { + public void processPacket(final Stanza packet) { if (packet instanceof org.jivesoftware.smack.packet.Message) { org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) packet; Map mappedHeaders = headerMapper.toHeadersFromRequest(xmppMessage); @@ -117,6 +118,7 @@ public class ChatMessageListeningEndpoint extends AbstractXmppConnectionAwareEnd } } } + } } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpoint.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpoint.java index 0f1877a535..80dcef06e5 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpoint.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,8 @@ import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jivesoftware.smack.Roster; -import org.jivesoftware.smack.RosterListener; +import org.jivesoftware.smack.roster.Roster; +import org.jivesoftware.smack.roster.RosterListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Presence; @@ -38,6 +38,7 @@ import org.springframework.util.StringUtils; * @author Josh Long * @author Oleg Zhurakousky * @author Mark Fisher + * @author Artem Bilan * @since 2.0 */ public class PresenceListeningEndpoint extends AbstractXmppConnectionAwareEndpoint { @@ -65,14 +66,14 @@ public class PresenceListeningEndpoint extends AbstractXmppConnectionAwareEndpoi @Override protected void doStart() { Assert.isTrue(this.initialized, this.getComponentName() + " [" + this.getComponentType() + "] must be initialized"); - Roster roster = this.xmppConnection.getRoster(); + Roster roster = Roster.getInstanceFor(this.xmppConnection); roster.addRosterListener(this.rosterListener); } @Override protected void doStop() { if (this.xmppConnection != null) { - this.xmppConnection.getRoster().removeRosterListener(this.rosterListener); + Roster.getInstanceFor(this.xmppConnection).removeRosterListener(this.rosterListener); } } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/package-info.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/package-info.java index 4bbf074ecd..d1e669f40a 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/package-info.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/inbound/package-info.java @@ -1,6 +1,5 @@ /** - * Provides XMPP inbound Endpoint implementations that extend + * Provides XMPP inbound Endpoint implementations that extend * {@link org.springframework.integration.xmpp.core.AbstractXmppConnectionAwareEndpoint}. */ package org.springframework.integration.xmpp.inbound; - diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandler.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandler.java index 73eca80c00..78d9674f1d 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandler.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.integration.xmpp.outbound; +import org.jivesoftware.smack.AbstractXMPPConnection; import org.jivesoftware.smack.XMPPConnection; import org.springframework.integration.xmpp.XmppHeaders; @@ -34,6 +35,7 @@ import org.springframework.util.StringUtils; * @author Josh Long * @author Mario Gray * @author Oleg Zhurakousky + * @author Artem Bilan * @since 2.0 */ public class ChatMessageSendingMessageHandler extends AbstractXmppConnectionAwareMessageHandler { @@ -61,7 +63,7 @@ public class ChatMessageSendingMessageHandler extends AbstractXmppConnectionAwar @Override protected void handleMessageInternal(Message message) throws Exception { - Assert.isTrue(this.initialized, this.getComponentName() + "#" + this.getComponentType() + " must be initialized"); + Assert.isTrue(this.initialized, getComponentName() + "#" + this.getComponentType() + " must be initialized"); Object messageBody = message.getPayload(); org.jivesoftware.smack.packet.Message xmppMessage = null; if (messageBody instanceof org.jivesoftware.smack.packet.Message) { @@ -77,14 +79,15 @@ public class ChatMessageSendingMessageHandler extends AbstractXmppConnectionAwar xmppMessage.setBody((String) messageBody); } else { - throw new MessageHandlingException(message, "Only payloads of type java.lang.String or org.jivesoftware.smack.packet.Message " + + throw new MessageHandlingException(message, + "Only payloads of type java.lang.String or org.jivesoftware.smack.packet.Message " + "are supported. Received [" + messageBody.getClass().getName() + "]. Consider adding a Transformer prior to this adapter."); } - if (!this.xmppConnection.isConnected()) { - this.xmppConnection.connect(); + if (!this.xmppConnection.isConnected() && this.xmppConnection instanceof AbstractXMPPConnection) { + ((AbstractXMPPConnection) this.xmppConnection).connect(); } - this.xmppConnection.sendPacket(xmppMessage); + this.xmppConnection.sendStanza(xmppMessage); } } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandler.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandler.java index ecbc99b11a..f2e8334e38 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandler.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.integration.xmpp.outbound; +import org.jivesoftware.smack.AbstractXMPPConnection; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Presence; @@ -28,6 +29,7 @@ import org.springframework.util.Assert; * * @author Josh Long * @author Oleg Zhurakousky + * @author Artem Bilan * @since 2.0 */ public class PresenceSendingMessageHandler extends AbstractXmppConnectionAwareMessageHandler { @@ -47,14 +49,14 @@ public class PresenceSendingMessageHandler extends AbstractXmppConnectionAwareMe @Override protected void handleMessageInternal(Message message) throws Exception { - Assert.isTrue(this.initialized, this.getComponentName() + " must be initialized"); + Assert.state(this.initialized, this.getComponentName() + " must be initialized"); Object payload = message.getPayload(); - Assert.isTrue(payload instanceof Presence, + Assert.state(payload instanceof Presence, "Payload must be of type 'org.jivesoftware.smack.packet.Presence', was: " + payload.getClass().getName()); - if (!this.xmppConnection.isConnected()) { - this.xmppConnection.connect(); + if (!this.xmppConnection.isConnected() && this.xmppConnection instanceof AbstractXMPPConnection) { + ((AbstractXMPPConnection) this.xmppConnection).connect(); } - this.xmppConnection.sendPacket((Presence) payload); + this.xmppConnection.sendStanza((Presence) payload); } } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/package-info.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/package-info.java index 9db47c03d5..c3ca0b00ee 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/package-info.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/outbound/package-info.java @@ -1,6 +1,6 @@ /** - * Provides XMPP outbound Messagehandler implementations.These components extend + * Provides XMPP outbound MessageHandler implementations. + * These components extend * {@link org.springframework.integration.xmpp.core.AbstractXmppConnectionAwareMessageHandler} */ package org.springframework.integration.xmpp.outbound; - diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/support/package-info.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/support/package-info.java index 2b3d60edc0..e2871e10f8 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/support/package-info.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/support/package-info.java @@ -1,5 +1,5 @@ /** - * Provides XMPP specific support classes. Right now you will find a + * Provides XMPP specific support classes. Right now you will find a * {@link org.springframework.integration.xmpp.support.XmppHeaderMapper} implementation * in this package. */ diff --git a/spring-integration-xmpp/src/main/resources/org/springframework/integration/xmpp/config/spring-integration-xmpp-4.3.xsd b/spring-integration-xmpp/src/main/resources/org/springframework/integration/xmpp/config/spring-integration-xmpp-4.3.xsd index 69ea971e9d..e60e4c9d4b 100644 --- a/spring-integration-xmpp/src/main/resources/org/springframework/integration/xmpp/config/spring-integration-xmpp-4.3.xsd +++ b/spring-integration-xmpp/src/main/resources/org/springframework/integration/xmpp/config/spring-integration-xmpp-4.3.xsd @@ -21,21 +21,21 @@ - + The user name (e.g., someuser@gmail.com) that will be used by this connection object - + The user's password - + The host name to connect TO diff --git a/spring-integration-xmpp/src/test/java/log4j.properties b/spring-integration-xmpp/src/test/java/log4j.properties new file mode 100644 index 0000000000..a223448028 --- /dev/null +++ b/spring-integration-xmpp/src/test/java/log4j.properties @@ -0,0 +1,8 @@ +log4j.rootCategory=WARN, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} %-5p [%t][%c] %m%n + +log4j.category.org.springframework.integration=WARN +log4j.category.org.springframework.integration.xmpp=INFO diff --git a/spring-integration-xmpp/src/test/java/log4j.xml b/spring-integration-xmpp/src/test/java/log4j.xml deleted file mode 100644 index 1cdfc45657..0000000000 --- a/spring-integration-xmpp/src/test/java/log4j.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests-context.xml index 9ea6995ef4..5e92f61f8d 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests-context.xml @@ -3,20 +3,11 @@ xmlns="http://www.springframework.org/schema/integration" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:p="http://www.springframework.org/schema/p" - xmlns:context="http://www.springframework.org/schema/context" - xmlns:util="http://www.springframework.org/schema/util" xmlns:xmpp="http://www.springframework.org/schema/integration/xmpp" - xmlns:tool="http://www.springframework.org/schema/tool" - xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/integration/xmpp - http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd - http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd - http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd - http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> + http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd"> diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests.java index 0ca4593afd..e925bd86e6 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageInboundChannelAdapterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,14 +22,15 @@ import static org.junit.Assert.assertSame; import java.lang.reflect.Field; -import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.SmackException.NotConnectedException; +import org.jivesoftware.smack.StanzaListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smackx.jiveproperties.JivePropertiesManager; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; @@ -51,7 +52,7 @@ import org.springframework.util.ReflectionUtils; */ @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) -@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD) +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class ChatMessageInboundChannelAdapterParserTests { @Autowired @@ -63,18 +64,19 @@ public class ChatMessageInboundChannelAdapterParserTests { @Autowired private MessageChannel autoChannel; - @Autowired @Qualifier("autoChannel.adapter") + @Autowired + @Qualifier("autoChannel.adapter") private ChatMessageListeningEndpoint autoChannelAdapter; @Test - public void testInboundAdapter(){ + public void testInboundAdapter() { ChatMessageListeningEndpoint adapter = context.getBean("xmppInboundAdapter", ChatMessageListeningEndpoint.class); MessageChannel errorChannel = (MessageChannel) TestUtils.getPropertyValue(adapter, "errorChannel"); assertEquals(context.getBean("errorChannel"), errorChannel); assertFalse(adapter.isAutoStartup()); QueueChannel channel = (QueueChannel) TestUtils.getPropertyValue(adapter, "outputChannel"); assertEquals("xmppInbound", channel.getComponentName()); - XMPPConnection connection = (XMPPConnection)TestUtils.getPropertyValue(adapter, "xmppConnection"); + XMPPConnection connection = (XMPPConnection) TestUtils.getPropertyValue(adapter, "xmppConnection"); assertEquals(connection, context.getBean("testConnection")); } @@ -88,14 +90,14 @@ public class ChatMessageInboundChannelAdapterParserTests { xmppConnectionField.setAccessible(true); ReflectionUtils.setField(xmppConnectionField, adapter, xmppConnection); - PacketListener packetListener = TestUtils.getPropertyValue(adapter, "packetListener", PacketListener.class); + StanzaListener stanzaListener = TestUtils.getPropertyValue(adapter, "stanzaListener", StanzaListener.class); Message message = new Message(); message.setBody("hello"); message.setTo("oleg"); JivePropertiesManager.addProperty(message, "foo", "foo"); JivePropertiesManager.addProperty(message, "bar", "bar"); - packetListener.processPacket(message); + stanzaListener.processPacket(message); org.springframework.messaging.Message siMessage = xmppInbound.receive(0); assertEquals("foo", siMessage.getHeaders().get("foo")); assertEquals("oleg", siMessage.getHeaders().get("xmpp_to")); @@ -105,4 +107,5 @@ public class ChatMessageInboundChannelAdapterParserTests { public void testAutoChannel() { assertSame(autoChannel, TestUtils.getPropertyValue(autoChannelAdapter, "outputChannel")); } + } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests-context.xml index 6c05125532..0f991cb123 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests-context.xml @@ -6,40 +6,40 @@ http://www.springframework.org/schema/integration/xmpp http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp"> - + - + - - - + - - - - - + - - diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java index 8f9798a533..f5eb727e84 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.integration.mapping.AbstractHeaderMapper; @@ -110,7 +111,7 @@ public class ChatMessageOutboundChannelAdapterParserTests { @SuppressWarnings("rawtypes") @Test - public void withHeaderMapper() throws Exception{ + public void withHeaderMapper() throws Exception { Object pollingConsumer = context.getBean("withHeaderMapper"); assertTrue(pollingConsumer instanceof PollingConsumer); assertEquals(headerMapper, TestUtils.getPropertyValue(pollingConsumer, "handler.headerMapper")); @@ -120,40 +121,44 @@ public class ChatMessageOutboundChannelAdapterParserTests { XMPPConnection connection = context.getBean("testConnection", XMPPConnection.class); Mockito.doAnswer(new Answer() { - public Object answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; - assertEquals("oleg", xmppMessage.getTo()); - assertEquals("foobar", JivePropertiesManager.getProperty(xmppMessage, "foobar")); - return null; - }}) - .when(connection).sendPacket(Mockito.any(org.jivesoftware.smack.packet.Message.class)); + + public Object answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; + assertEquals("oleg", xmppMessage.getTo()); + assertEquals("foobar", JivePropertiesManager.getProperty(xmppMessage, "foobar")); + return null; + } + }) + .when(connection).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); channel.send(message); - verify(connection, times(1)).sendPacket(Mockito.any(org.jivesoftware.smack.packet.Message.class)); + verify(connection, times(1)).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); Mockito.reset(connection); } @SuppressWarnings("rawtypes") @Test //INT-2275 - public void testOutboundChannelAdapterInsideChain() throws Exception{ + public void testOutboundChannelAdapterInsideChain() throws Exception { MessageChannel channel = context.getBean("outboundChainChannel", MessageChannel.class); Message message = MessageBuilder.withPayload("hello").setHeader(XmppHeaders.TO, "artem").build(); XMPPConnection connection = context.getBean("testConnection", XMPPConnection.class); Mockito.doAnswer(new Answer() { + public Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; assertEquals("artem", xmppMessage.getTo()); assertEquals("hello", xmppMessage.getBody()); return null; - }}) - .when(connection).sendPacket(Mockito.any(org.jivesoftware.smack.packet.Message.class)); + } + + }).when(connection).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); channel.send(message); - verify(connection, times(1)).sendPacket(Mockito.any(org.jivesoftware.smack.packet.Message.class)); + verify(connection, times(1)).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); Mockito.reset(connection); } @@ -166,4 +171,5 @@ public class ChatMessageOutboundChannelAdapterParserTests { } } + } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests-context.xml index f3bfc6213a..2abc8d6aa2 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests-context.xml @@ -6,14 +6,14 @@ http://www.springframework.org/schema/integration/xmpp http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp"> - + - - - + - + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests.java index 964d59ec31..abf2c42910 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceInboundChannelAdapterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,8 +28,8 @@ public class PresenceInboundChannelAdapterParserTests { @Test public void testPresenceInboundChannelAdapterParser() { - new ClassPathXmlApplicationContext("PresenceInboundChannelAdapterParserTests-context.xml", this.getClass()); - // no assertion needed. THe fact that no exception was thrown satisfies this test + new ClassPathXmlApplicationContext("PresenceInboundChannelAdapterParserTests-context.xml", this.getClass()).close(); + // no assertion needed. The fact that no exception was thrown satisfies this test } } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests-context.xml index 63be35a8fa..043985bc40 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests-context.xml @@ -6,43 +6,43 @@ http://www.springframework.org/schema/integration/xmpp http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp"> - + - + - - - - + + - - - - - - - - + + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests.java index b946738f2d..681064d353 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/PresenceOutboundChannelAdapterParserTests.java @@ -101,4 +101,5 @@ public class PresenceOutboundChannelAdapterParserTests { } } + } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests-context.xml index bcf0cdfa1a..ace1106250 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests-context.xml @@ -1,24 +1,27 @@ - + xmlns:int="http://www.springframework.org/schema/integration" + xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp"> + + + + + - - - + - + - - + + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests.java index 00b0efdea5..6fff0a3499 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,11 +19,11 @@ package org.springframework.integration.xmpp.config; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; -import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; import org.junit.Test; + import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.xmpp.config.XmppConnectionFactoryBean; /** * @author Oleg Zhurakousky @@ -33,14 +33,15 @@ public class XmppConnectionFactoryBeanTests { @Test public void testXmppConnectionFactoryBean() throws Exception { - XmppConnectionFactoryBean xmppConnectionFactoryBean = new XmppConnectionFactoryBean(mock(ConnectionConfiguration.class)); + XmppConnectionFactoryBean xmppConnectionFactoryBean = + new XmppConnectionFactoryBean(mock(XMPPTCPConnectionConfiguration.class)); XMPPConnection connection = xmppConnectionFactoryBean.createInstance(); assertNotNull(connection); } @Test public void testXmppConnectionFactoryBeanViaConfig() throws Exception { - new ClassPathXmlApplicationContext("XmppConnectionFactoryBeanTests-context.xml", this.getClass()); + new ClassPathXmlApplicationContext("XmppConnectionFactoryBeanTests-context.xml", this.getClass()).close(); // the fact that no exception was thrown satisfies this test } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests-complete.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests-complete.xml index 6c73fc714d..3803a7d742 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests-complete.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests-complete.xml @@ -1,12 +1,10 @@ @@ -17,10 +15,10 @@ reject_all - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/integration/xmpp http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd"> - - - - + - + + + + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests.java index 6a9f9bd2f3..5b76c2749a 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppConnectionParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,13 @@ package org.springframework.integration.xmpp.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import org.jivesoftware.smack.XMPPConnection; import org.junit.Test; -import org.springframework.context.ApplicationContext; + +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.test.util.TestUtils; @@ -32,36 +33,39 @@ import org.springframework.integration.test.util.TestUtils; * @author Gary Russell * @author Gunnar Hillert * @author Florian Schmaus + * @author Artem Bilan */ public class XmppConnectionParserTests { @Test public void testSimpleConfiguration() { - ApplicationContext ac = + ConfigurableApplicationContext ac = new ClassPathXmlApplicationContext("XmppConnectionParserTests-simple.xml", this.getClass()); XMPPConnection connection = ac.getBean("connection", XMPPConnection.class); - assertEquals("localhost", connection.getServiceName()); + assertEquals("my.domain", connection.getServiceName()); assertFalse(connection.isConnected()); XmppConnectionFactoryBean xmppFb = ac.getBean("&connection", XmppConnectionFactoryBean.class); - assertEquals("happy.user", TestUtils.getPropertyValue(xmppFb, "user")); + assertEquals("happy.user@my.domain", TestUtils.getPropertyValue(xmppFb, "user")); assertEquals("blah", TestUtils.getPropertyValue(xmppFb, "password")); assertNull(TestUtils.getPropertyValue(xmppFb, "resource")); - assertEquals("accept_all", TestUtils.getPropertyValue(xmppFb, "subscriptionMode")); + assertEquals("accept_all", TestUtils.getPropertyValue(xmppFb, "subscriptionMode").toString()); xmppFb = ac.getBean("&connectionWithResource", XmppConnectionFactoryBean.class); assertEquals("Smack", TestUtils.getPropertyValue(xmppFb, "resource")); + ac.close(); } @Test public void testDefaultConnectionName() { - ApplicationContext ac = + ConfigurableApplicationContext ac = new ClassPathXmlApplicationContext("XmppConnectionParserTests-simple.xml", this.getClass()); assertTrue(ac.containsBean("xmppConnection")); + ac.close(); } @Test public void testCompleteConfiguration() { - ApplicationContext ac = + ConfigurableApplicationContext ac = new ClassPathXmlApplicationContext("XmppConnectionParserTests-complete.xml", this.getClass()); XMPPConnection connection = ac.getBean("connection", XMPPConnection.class); assertEquals("foogle.com", connection.getServiceName()); @@ -70,7 +74,8 @@ public class XmppConnectionParserTests { assertEquals("happy.user", TestUtils.getPropertyValue(xmppFb, "user")); assertEquals("blah", TestUtils.getPropertyValue(xmppFb, "password")); assertEquals("SpringSource", TestUtils.getPropertyValue(xmppFb, "resource")); - assertEquals("reject_all", TestUtils.getPropertyValue(xmppFb, "subscriptionMode")); + assertEquals("reject_all", TestUtils.getPropertyValue(xmppFb, "subscriptionMode").toString()); + ac.close(); } } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests-context.xml index 1d3671f321..b992444cb1 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests-context.xml @@ -1,23 +1,18 @@ - - + - + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests-context.xml index 5f4b043959..c7add9dead 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests-context.xml @@ -21,16 +21,14 @@ + password="${user.1.password}"/> - + - + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests.java index b75b958da2..5591892658 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/ConsoleChatTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,17 +19,24 @@ package org.springframework.integration.xmpp.ignore; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; + +import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Mark Fisher + * @author Artem Bilan * @since 2.0 */ @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) public class ConsoleChatTests { + public static void main(String[] args) { + new ClassPathXmlApplicationContext("ConsoleChatTests-context.xml", ConsoleChatTests.class); + } + @Test @Ignore public void run() throws Exception { diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundChatTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundChatTests-context.xml index d81a5ab67b..d6f57cfb95 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundChatTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundChatTests-context.xml @@ -10,11 +10,11 @@ xmlns:tool="http://www.springframework.org/schema/tool" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/integration/xmpp - http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd - http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundPresenceTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundPresenceTests-context.xml index 9011cb4664..3a359f565c 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundPresenceTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/InboundPresenceTests-context.xml @@ -26,14 +26,14 @@ service-name="${user.1.service}"/> - + - - + - + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundChatTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundChatTests-context.xml index a6e911f172..58cfddd3e4 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundChatTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundChatTests-context.xml @@ -5,10 +5,10 @@ xmlns:util="http://www.springframework.org/schema/util" xmlns:xmpp="http://www.springframework.org/schema/integration/xmpp" xmlns:tool="http://www.springframework.org/schema/tool" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/integration/xmpp http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd - http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundPresenceTests-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundPresenceTests-context.xml index fa7b00ff07..fbcebc12fc 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundPresenceTests-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/OutboundPresenceTests-context.xml @@ -24,7 +24,7 @@ password="${user.1.password}" host="${user.1.host}" service-name="${user.1.service}"/> - + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTest-context.xml b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTest-context.xml index 9b2f958957..eec01ccc6f 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTest-context.xml +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTest-context.xml @@ -16,9 +16,9 @@ password="${user.1.password}" host="${user.1.host}" service-name="${user.1.service}"/> - + - + diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTests.java index 92515dc1f7..1f8f4b8681 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/SmackMessageSampleTests.java @@ -35,14 +35,14 @@ public class SmackMessageSampleTests { public void validateSmackMessageSent(){ ApplicationContext ac = new ClassPathXmlApplicationContext("SmackMessageSampleTest-context.xml", this.getClass()); MessageChannel xmppInput = ac.getBean("xmppInput", MessageChannel.class); - - + + org.jivesoftware.smack.packet.Message smackMessage = new org.jivesoftware.smack.packet.Message("springintegration@gmail.com"); smackMessage.setBody("Message sent as Smack Message"); - - Message message = + + Message message = new GenericMessage(smackMessage); - + xmppInput.send(message); } } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java index 705f431c1f..633d9507a8 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,13 +24,12 @@ import static org.mockito.Mockito.mock; import java.util.HashSet; import java.util.Set; -import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.SmackException.NotConnectedException; +import org.jivesoftware.smack.StanzaListener; import org.jivesoftware.smack.XMPPConnection; -import org.jivesoftware.smack.filter.PacketFilter; +import org.jivesoftware.smack.filter.StanzaFilter; import org.jivesoftware.smack.packet.Message; import org.junit.Test; - import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -50,35 +49,39 @@ import org.springframework.messaging.support.ErrorMessage; * @author Oleg Zhurakousky * @author Gunnar Hillert * @author Florian Schmaus - * + * @author Artem Bilan */ public class ChatMessageListeningEndpointTests { @Test /** - * Should add/remove PacketListener when endpoint started/stopped + * Should add/remove StanzaListener when endpoint started/stopped */ - public void testLifecycle(){ - final Set packetListSet = new HashSet(); + public void testLifecycle() { + final Set packetListSet = new HashSet(); XMPPConnection connection = mock(XMPPConnection.class); ChatMessageListeningEndpoint endpoint = new ChatMessageListeningEndpoint(connection); doAnswer(new Answer() { + @Override public Object answer(InvocationOnMock invocation) throws Throwable { - packetListSet.add((PacketListener) invocation.getArguments()[0]); + packetListSet.add((StanzaListener) invocation.getArguments()[0]); return null; } - }).when(connection).addPacketListener(Mockito.any(PacketListener.class), (PacketFilter) Mockito.any()); + + }).when(connection).addAsyncStanzaListener(Mockito.any(StanzaListener.class), Mockito.any(StanzaFilter.class)); doAnswer(new Answer() { + @Override public Object answer(InvocationOnMock invocation) throws Throwable { - packetListSet.remove(invocation.getArguments()[0]); + packetListSet.remove((StanzaListener) invocation.getArguments()[0]); return null; } - }).when(connection).removePacketListener(Mockito.any(PacketListener.class)); + + }).when(connection).removeAsyncStanzaListener(Mockito.any(StanzaListener.class)); assertEquals(0, packetListSet.size()); endpoint.setOutputChannel(new QueueChannel()); @@ -90,32 +93,32 @@ public class ChatMessageListeningEndpointTests { assertEquals(0, packetListSet.size()); } - @Test(expected=IllegalArgumentException.class) - public void testNonInitializationFailure(){ + @Test(expected = IllegalArgumentException.class) + public void testNonInitializationFailure() { ChatMessageListeningEndpoint endpoint = new ChatMessageListeningEndpoint(mock(XMPPConnection.class)); endpoint.start(); } @Test - public void testWithImplicitXmppConnection(){ + public void testWithImplicitXmppConnection() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); bf.registerSingleton(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, mock(XMPPConnection.class)); ChatMessageListeningEndpoint endpoint = new ChatMessageListeningEndpoint(); endpoint.setBeanFactory(bf); endpoint.setOutputChannel(new QueueChannel()); endpoint.afterPropertiesSet(); - assertNotNull(TestUtils.getPropertyValue(endpoint,"xmppConnection")); + assertNotNull(TestUtils.getPropertyValue(endpoint, "xmppConnection")); } - @Test(expected=IllegalArgumentException.class) - public void testNoXmppConnection(){ + @Test(expected = IllegalArgumentException.class) + public void testNoXmppConnection() { ChatMessageListeningEndpoint endpoint = new ChatMessageListeningEndpoint(); endpoint.setBeanFactory(mock(BeanFactory.class)); endpoint.afterPropertiesSet(); } @Test - public void testWithErrorChannel() throws NotConnectedException{ + public void testWithErrorChannel() throws NotConnectedException { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); XMPPConnection connection = mock(XMPPConnection.class); bf.registerSingleton(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, connection); @@ -124,25 +127,28 @@ public class ChatMessageListeningEndpointTests { DirectChannel outChannel = new DirectChannel(); outChannel.subscribe(new MessageHandler() { + @Override public void handleMessage(org.springframework.messaging.Message message) throws MessagingException { throw new RuntimeException("ooops"); } + }); PollableChannel errorChannel = new QueueChannel(); endpoint.setBeanFactory(bf); endpoint.setOutputChannel(outChannel); endpoint.setErrorChannel(errorChannel); endpoint.afterPropertiesSet(); - PacketListener listener = (PacketListener) TestUtils.getPropertyValue(endpoint, "packetListener"); + StanzaListener listener = (StanzaListener) TestUtils.getPropertyValue(endpoint, "stanzaListener"); Message smackMessage = new Message("kermit@frog.com"); smackMessage.setBody("hello"); smackMessage.setThread("1234"); listener.processPacket(smackMessage); ErrorMessage msg = - (ErrorMessage) errorChannel.receive(); - assertEquals("hello", ((MessagingException)msg.getPayload()).getFailedMessage().getPayload()); + (ErrorMessage) errorChannel.receive(); + assertEquals("hello", ((MessagingException) msg.getPayload()).getFailedMessage().getPayload()); } + } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java index 4223b2aae8..781e45da9b 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,19 +18,20 @@ package org.springframework.integration.xmpp.inbound; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import java.util.HashSet; +import java.util.Map; import java.util.Set; -import org.jivesoftware.smack.Roster; -import org.jivesoftware.smack.RosterListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence.Mode; import org.jivesoftware.smack.packet.Presence.Type; +import org.jivesoftware.smack.roster.Roster; +import org.jivesoftware.smack.roster.RosterListener; import org.junit.Test; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -52,30 +53,37 @@ import org.springframework.messaging.support.ErrorMessage; * @author Oleg Zhurakousky * @author Gunnar Hillert * @author Gary Russell + * @author Artem Bilan */ public class PresenceListeningEndpointTests { @Test + @SuppressWarnings("unchecked") public void testEndpointLifecycle() { final Set rosterSet = new HashSet(); XMPPConnection connection = mock(XMPPConnection.class); Roster roster = mock(Roster.class); - when(connection.getRoster()).thenReturn(roster); + Map instances = TestUtils.getPropertyValue(roster, "INSTANCES", Map.class); + instances.put(connection, roster); doAnswer(new Answer() { + @Override public Object answer(InvocationOnMock invocation) throws Throwable { rosterSet.add((RosterListener) invocation.getArguments()[0]); return null; } + }).when(roster).addRosterListener(Mockito.any(RosterListener.class)); doAnswer(new Answer() { + @Override public Object answer(InvocationOnMock invocation) throws Throwable { - rosterSet.remove(invocation.getArguments()[0]); + rosterSet.remove((RosterListener) invocation.getArguments()[0]); return null; } + }).when(roster).removeRosterListener(Mockito.any(RosterListener.class)); PresenceListeningEndpoint rosterEndpoint = new PresenceListeningEndpoint(connection); rosterEndpoint.setOutputChannel(new QueueChannel()); @@ -88,17 +96,19 @@ public class PresenceListeningEndpointTests { assertEquals(0, rosterSet.size()); } - @Test(expected=IllegalArgumentException.class) + @Test(expected = IllegalArgumentException.class) public void testNonInitializedFailure() { PresenceListeningEndpoint rosterEndpoint = new PresenceListeningEndpoint(mock(XMPPConnection.class)); rosterEndpoint.start(); } @Test + @SuppressWarnings("unchecked") public void testRosterPresenceChangeEvent() { XMPPConnection connection = mock(XMPPConnection.class); Roster roster = mock(Roster.class); - when(connection.getRoster()).thenReturn(roster); + Map instances = TestUtils.getPropertyValue(roster, "INSTANCES", Map.class); + instances.put(connection, roster); PresenceListeningEndpoint rosterEndpoint = new PresenceListeningEndpoint(connection); QueueChannel channel = new QueueChannel(); rosterEndpoint.setOutputChannel(channel); @@ -120,10 +130,10 @@ public class PresenceListeningEndpointTests { endpoint.setBeanFactory(bf); endpoint.setOutputChannel(new QueueChannel()); endpoint.afterPropertiesSet(); - assertNotNull(TestUtils.getPropertyValue(endpoint,"xmppConnection")); + assertNotNull(TestUtils.getPropertyValue(endpoint, "xmppConnection")); } - @Test(expected=IllegalArgumentException.class) + @Test(expected = IllegalArgumentException.class) public void testNoXmppConnection() { PresenceListeningEndpoint handler = new PresenceListeningEndpoint(); handler.setBeanFactory(mock(BeanFactory.class)); @@ -131,7 +141,7 @@ public class PresenceListeningEndpointTests { } @Test - public void testWithErrorChannel(){ + public void testWithErrorChannel() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); XMPPConnection connection = mock(XMPPConnection.class); bf.registerSingleton(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, connection); @@ -140,11 +150,13 @@ public class PresenceListeningEndpointTests { DirectChannel outChannel = new DirectChannel(); outChannel.subscribe(new MessageHandler() { + @Override public void handleMessage(org.springframework.messaging.Message message) throws MessagingException { throw new RuntimeException("ooops"); } + }); PollableChannel errorChannel = new QueueChannel(); endpoint.setBeanFactory(bf); @@ -157,7 +169,10 @@ public class PresenceListeningEndpointTests { listener.presenceChanged(presence); ErrorMessage msg = - (ErrorMessage) errorChannel.receive(); - assertEquals(Type.available.toString(), ((MessagingException)msg.getPayload()).getFailedMessage().getPayload().toString()); + (ErrorMessage) errorChannel.receive(); + assertSame(presence, ((MessagingException) msg.getPayload()) + .getFailedMessage() + .getPayload()); } + } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandlerTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandlerTests.java index 5cbb8e9c70..3f9461e5d4 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandlerTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/ChatMessageSendingMessageHandlerTests.java @@ -40,60 +40,62 @@ import org.springframework.messaging.support.GenericMessage; /** * @author Oleg Zhurakousky * @author Gunnar Hillert - * + * @author Artem Bilan */ public class ChatMessageSendingMessageHandlerTests { @Test - public void validateMessagePostAsString() throws Exception{ + public void validateMessagePostAsString() throws Exception { XMPPConnection connection = mock(XMPPConnection.class); ChatMessageSendingMessageHandler handler = new ChatMessageSendingMessageHandler(connection); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); Message message = MessageBuilder.withPayload("Test Message"). - setHeader(XmppHeaders.TO, "kermit@frog.com"). - build(); + setHeader(XmppHeaders.TO, "kermit@frog.com"). + build(); // first Message new handler.handleMessage(message); class EqualSmackMessage extends ArgumentMatcher { - @Override + + @Override public boolean matches(Object msg) { - org.jivesoftware.smack.packet.Message smackMessage = (org.jivesoftware.smack.packet.Message) msg; - boolean bodyMatches = smackMessage.getBody().equals("Test Message"); - boolean toMatches = smackMessage.getTo().equals("kermit@frog.com"); - return bodyMatches & toMatches; - } + org.jivesoftware.smack.packet.Message smackMessage = (org.jivesoftware.smack.packet.Message) msg; + boolean bodyMatches = smackMessage.getBody().equals("Test Message"); + boolean toMatches = smackMessage.getTo().equals("kermit@frog.com"); + return bodyMatches & toMatches; + } } - verify(connection, times(1)).sendPacket(Mockito.argThat(new EqualSmackMessage())); + verify(connection, times(1)).sendStanza(Mockito.argThat(new EqualSmackMessage())); // assuming we know thread ID although currently we do not provide this capability message = MessageBuilder.withPayload("Hello Kitty"). - setHeader(XmppHeaders.TO, "kermit@frog.com"). - setHeader(XmppHeaders.THREAD, "123"). - build(); + setHeader(XmppHeaders.TO, "kermit@frog.com"). + setHeader(XmppHeaders.THREAD, "123"). + build(); class EqualSmackMessageWithThreadId extends ArgumentMatcher { - @Override + + @Override public boolean matches(Object msg) { - org.jivesoftware.smack.packet.Message smackMessage = (org.jivesoftware.smack.packet.Message) msg; - boolean bodyMatches = smackMessage.getBody().equals("Hello Kitty"); - boolean toMatches = smackMessage.getTo().equals("kermit@frog.com"); - boolean threadIdMatches = smackMessage.getThread().equals("123"); - return bodyMatches & toMatches & threadIdMatches; - } + org.jivesoftware.smack.packet.Message smackMessage = (org.jivesoftware.smack.packet.Message) msg; + boolean bodyMatches = smackMessage.getBody().equals("Hello Kitty"); + boolean toMatches = smackMessage.getTo().equals("kermit@frog.com"); + boolean threadIdMatches = smackMessage.getThread().equals("123"); + return bodyMatches & toMatches & threadIdMatches; + } } reset(connection); handler.handleMessage(message); // in threaded conversation we need to look for existing chat - verify(connection, times(1)).sendPacket(Mockito.argThat(new EqualSmackMessageWithThreadId())); + verify(connection, times(1)).sendStanza(Mockito.argThat(new EqualSmackMessageWithThreadId())); } @Test - public void validateMessagePostAsSmackMessage() throws Exception{ + public void validateMessagePostAsSmackMessage() throws Exception { XMPPConnection connection = mock(XMPPConnection.class); ChatMessageSendingMessageHandler handler = new ChatMessageSendingMessageHandler(connection); handler.setBeanFactory(mock(BeanFactory.class)); @@ -107,7 +109,7 @@ public class ChatMessageSendingMessageHandlerTests { // first Message new handler.handleMessage(message); - verify(connection, times(1)).sendPacket(smackMessage); + verify(connection, times(1)).sendStanza(smackMessage); // assuming we know thread ID although currently we do not provide this capability smackMessage = new org.jivesoftware.smack.packet.Message("kermit@frog.com"); @@ -119,34 +121,36 @@ public class ChatMessageSendingMessageHandlerTests { handler.handleMessage(message); // in threaded conversation we need to look for existing chat - verify(connection, times(1)).sendPacket(smackMessage); + verify(connection, times(1)).sendStanza(smackMessage); } - @Test(expected=MessageHandlingException.class) - public void validateFailureNoChatToUser() throws Exception{ + @Test(expected = MessageHandlingException.class) + public void validateFailureNoChatToUser() throws Exception { ChatMessageSendingMessageHandler handler = new ChatMessageSendingMessageHandler(mock(XMPPConnection.class)); handler.handleMessage(new GenericMessage("hello")); } - @Test(expected=MessageHandlingException.class) - public void validateMessageWithUnsupportedPayload() throws Exception{ + @Test(expected = MessageHandlingException.class) + public void validateMessageWithUnsupportedPayload() throws Exception { ChatMessageSendingMessageHandler handler = new ChatMessageSendingMessageHandler(mock(XMPPConnection.class)); handler.handleMessage(new GenericMessage(123)); } + @Test - public void testWithImplicitXmppConnection(){ + public void testWithImplicitXmppConnection() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); bf.registerSingleton(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, mock(XMPPConnection.class)); ChatMessageSendingMessageHandler handler = new ChatMessageSendingMessageHandler(); handler.setBeanFactory(bf); handler.afterPropertiesSet(); - assertNotNull(TestUtils.getPropertyValue(handler,"xmppConnection")); + assertNotNull(TestUtils.getPropertyValue(handler, "xmppConnection")); } - @Test(expected=IllegalArgumentException.class) - public void testNoXmppConnection(){ + @Test(expected = IllegalArgumentException.class) + public void testNoXmppConnection() { ChatMessageSendingMessageHandler handler = new ChatMessageSendingMessageHandler(); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); } + } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandlerTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandlerTests.java index 6bbdd31d84..9174f3a72d 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandlerTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/outbound/PresenceSendingMessageHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,22 +33,22 @@ import org.springframework.messaging.support.GenericMessage; /** * @author Oleg Zhurakousky * @author Gunnar Hillert - * + * @author Artem Bilan */ public class PresenceSendingMessageHandlerTests { - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) @Test - public void testPresencePayload(){ + public void testPresencePayload() { PresenceSendingMessageHandler handler = new PresenceSendingMessageHandler(mock(XMPPConnection.class)); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); - handler.handleMessage(new GenericMessage(mock(Presence.class))); + handler.handleMessage(new GenericMessage(new Presence(Presence.Type.subscribe))); } - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Test(expected=MessageHandlingException.class) - public void testWrongPayload(){ + @SuppressWarnings({"unchecked", "rawtypes"}) + @Test(expected = MessageHandlingException.class) + public void testWrongPayload() { PresenceSendingMessageHandler handler = new PresenceSendingMessageHandler(mock(XMPPConnection.class)); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); @@ -56,19 +56,20 @@ public class PresenceSendingMessageHandlerTests { } @Test - public void testWithImplicitXmppConnection(){ + public void testWithImplicitXmppConnection() { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); bf.registerSingleton(XmppContextUtils.XMPP_CONNECTION_BEAN_NAME, mock(XMPPConnection.class)); PresenceSendingMessageHandler handler = new PresenceSendingMessageHandler(); handler.setBeanFactory(bf); handler.afterPropertiesSet(); - assertNotNull(TestUtils.getPropertyValue(handler,"xmppConnection")); + assertNotNull(TestUtils.getPropertyValue(handler, "xmppConnection")); } - @Test(expected=IllegalArgumentException.class) - public void testNoXmppConnection(){ + @Test(expected = IllegalArgumentException.class) + public void testNoXmppConnection() { PresenceSendingMessageHandler handler = new PresenceSendingMessageHandler(); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); } + }