From a7e970bbe3aaa533400271db5f1ddfd07f0b6b0c Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 4 Jan 2011 15:57:49 -0500 Subject: [PATCH] INT-1728 added validation to ChatMessageListeningEndpoint to make sure that it ignores messages with 'null' content, since such messages may be sent by a different clients (e.g., Adium). An example of valid chat message with no content is message with the ChatState of 'composing'. For now we are ignoring such messages. --- .../inbound/ChatMessageListeningEndpoint.java | 23 +++++++++++++++---- .../src/test/java/log4j.xml | 8 +++---- 2 files changed, 22 insertions(+), 9 deletions(-) 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 108191ab69..14ba994271 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 @@ -25,6 +25,7 @@ import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.xmpp.XmppHeaders; import org.springframework.integration.xmpp.core.AbstractXmppConnectionAwareEndpoint; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * This component logs in as a user and forwards any messages to that @@ -85,11 +86,23 @@ public class ChatMessageListeningEndpoint extends AbstractXmppConnectionAwareEnd if (packet instanceof org.jivesoftware.smack.packet.Message) { org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) packet; Chat chat = xmppConnection.getChatManager().getThreadChat(xmppMessage.getThread()); - Object payload = (extractPayload ? xmppMessage.getBody() : xmppMessage); - MessageBuilder messageBuilder = MessageBuilder.withPayload(payload) - .setHeader(XmppHeaders.TYPE, xmppMessage.getType()) - .setHeader(XmppHeaders.CHAT, chat); - sendMessage(messageBuilder.build()); + + String messageBody = xmppMessage.getBody(); + /* + * Since there are several types of chat messages with different ChatState (e.g., composing, paused etc) + * we need to perform further validation since for now we only support messages that have + * content (e.g., Use A says 'Hello' to User B). We don't yet support messages with no + * content (e.g., User A is typing a message for User B etc.). + * See https://jira.springsource.org/browse/INT-1728 + * Also see: packet.getExtensions() + */ + if (StringUtils.hasText(messageBody)){ + Object payload = (extractPayload ? messageBody : xmppMessage); + MessageBuilder messageBuilder = MessageBuilder.withPayload(payload) + .setHeader(XmppHeaders.TYPE, xmppMessage.getType()) + .setHeader(XmppHeaders.CHAT, chat); + sendMessage(messageBuilder.build()); + } } } } diff --git a/spring-integration-xmpp/src/test/java/log4j.xml b/spring-integration-xmpp/src/test/java/log4j.xml index abc6a92001..1cdfc45657 100644 --- a/spring-integration-xmpp/src/test/java/log4j.xml +++ b/spring-integration-xmpp/src/test/java/log4j.xml @@ -10,12 +10,12 @@ - + - - - + + +