MAILBOX-269 ensure MessageManager has Attachment capability x define capabilites as an EnumSet x make InMemory and Cassandra backend advertise Attachment x check Attachment capability on JMAP server start
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9b5641b9 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9b5641b9 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9b5641b9 Branch: refs/heads/master Commit: 9b5641b972bf3cdc5f7dedc02d8f8309b27d9554 Parents: 45f4356 Author: Matthieu Baechler <matthieu.baech...@linagora.com> Authored: Thu Jun 2 16:29:14 2016 +0200 Committer: Matthieu Baechler <matthieu.baech...@linagora.com> Committed: Tue Jun 7 08:50:58 2016 +0200 ---------------------------------------------------------------------- .../apache/james/mailbox/MailboxManager.java | 13 +++++++-- .../cassandra/CassandraMailboxManager.java | 14 ++++++---- .../inmemory/InMemoryMailboxManager.java | 13 +++++---- .../mailbox/store/StoreMailboxManager.java | 12 +++++--- .../mailbox/store/StoreMessageManager.java | 1 - .../imap/processor/DefaultProcessorChain.java | 2 +- .../james/imap/processor/MoveProcessor.java | 2 +- .../james/imap/processor/MoveProcessorTest.java | 8 ++++-- .../base/MailboxEventAnalyserTest.java | 13 ++++++--- .../james/JamesCapabilitiesServerTest.java | 29 ++++++++++++++++---- .../java/org/apache/james/jmap/JMAPModule.java | 11 +++++--- .../FirstUserConnectionFilterThreadTest.java | 8 +++++- 12 files changed, 88 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java index 1375d1d..ee0be38 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java @@ -19,6 +19,7 @@ package org.apache.james.mailbox; +import java.util.EnumSet; import java.util.List; import org.apache.james.mailbox.exception.BadCredentialsException; @@ -69,14 +70,20 @@ import org.slf4j.Logger; public interface MailboxManager extends RequestAware, MailboxListenerSupport { - enum Capabilities { - Basic, + enum MailboxCapabilities { Move, UserFlags } - List<Capabilities> getSupportedCapabilities(); + EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities(); + + enum MessageCapabilities { + Attachment + } + EnumSet<MessageCapabilities> getSupportedMessageCapabilities(); + + /** * Return the delimiter to use for folders * http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java index 3a9375e..cce0b14 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java @@ -19,10 +19,11 @@ package org.apache.james.mailbox.cassandra; -import java.util.List; +import java.util.EnumSet; import javax.inject.Inject; +import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; @@ -38,8 +39,6 @@ import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; import org.apache.james.mailbox.store.search.MessageSearchIndex; -import com.google.common.collect.Lists; - /** * Cassandra implementation of {@link StoreMailboxManager} */ @@ -64,11 +63,16 @@ public class CassandraMailboxManager extends StoreMailboxManager { } @Override - public List<Capabilities> getSupportedCapabilities() { - return Lists.newArrayList(Capabilities.Basic, Capabilities.Move, Capabilities.UserFlags); + public EnumSet<MailboxManager.MailboxCapabilities> getSupportedMailboxCapabilities() { + return EnumSet.of(MailboxCapabilities.Move, MailboxCapabilities.UserFlags); } @Override + public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { + return EnumSet.of(MessageCapabilities.Attachment); + } + + @Override protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { SimpleMailbox cassandraMailbox = new SimpleMailbox(mailboxPath, randomUidValidity()); cassandraMailbox.setACL(SimpleMailboxACL.EMPTY); http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java index 003eb46..9b373d0 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java @@ -19,7 +19,7 @@ package org.apache.james.mailbox.inmemory; -import java.util.List; +import java.util.EnumSet; import javax.inject.Inject; @@ -35,8 +35,6 @@ import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import com.google.common.collect.Lists; - public class InMemoryMailboxManager extends StoreMailboxManager { @Inject @@ -45,8 +43,13 @@ public class InMemoryMailboxManager extends StoreMailboxManager { } @Override - public List<Capabilities> getSupportedCapabilities() { - return Lists.newArrayList(Capabilities.Basic, Capabilities.Move, Capabilities.UserFlags); + public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() { + return EnumSet.of(MailboxCapabilities.Move, MailboxCapabilities.UserFlags); + } + + @Override + public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { + return EnumSet.of(MessageCapabilities.Attachment); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index d701c46..4dbb447 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.store; import java.util.ArrayList; import java.util.Collections; +import java.util.EnumSet; import java.util.List; import java.util.Locale; import java.util.Random; @@ -70,8 +71,6 @@ import org.apache.james.mailbox.store.transaction.Mapper; import org.apache.james.mailbox.store.transaction.TransactionalMapper; import org.slf4j.Logger; -import com.google.common.collect.Lists; - /** * This base class of an {@link MailboxManager} implementation provides a high-level api for writing your own * {@link MailboxManager} implementation. If you plan to write your own {@link MailboxManager} its most times so easiest @@ -199,10 +198,15 @@ public class StoreMailboxManager implements MailboxManager { } @Override - public List<Capabilities> getSupportedCapabilities() { - return Lists.newArrayList(Capabilities.Basic); + public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() { + return EnumSet.noneOf(MailboxCapabilities.class); } + @Override + public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { + return EnumSet.noneOf(MessageCapabilities.class); + } + /** * Return the {@link DelegatingMailboxListener} which is used by this {@link MailboxManager} * http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 752fa41..e5295f7 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -833,5 +833,4 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana protected MailboxACL getResolvedMailboxACL(MailboxSession mailboxSession) throws UnsupportedRightException { return aclResolver.applyGlobalACL(mailbox.getACL(), new GroupFolderResolver(mailboxSession).isGroupFolder(mailbox)); } - } http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java index 176f347..b9dcf69 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java @@ -58,7 +58,7 @@ public class DefaultProcessorChain { final SubscribeProcessor subscribeProcessor = new SubscribeProcessor(unsubscribeProcessor, mailboxManager, subscriptionManager, statusResponseFactory); final CopyProcessor copyProcessor = new CopyProcessor(subscribeProcessor, mailboxManager, statusResponseFactory); AuthenticateProcessor authenticateProcessor; - if (mailboxManager.getSupportedCapabilities().contains(MailboxManager.Capabilities.Move)) { + if (mailboxManager.getSupportedMailboxCapabilities().contains(MailboxManager.MailboxCapabilities.Move)) { final MoveProcessor moveProcessor = new MoveProcessor(copyProcessor, mailboxManager, statusResponseFactory); authenticateProcessor = new AuthenticateProcessor(moveProcessor, mailboxManager, statusResponseFactory); capabilityProcessor.addProcessor(moveProcessor); http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java index a2a2f84..d0f5332 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java @@ -41,7 +41,7 @@ public class MoveProcessor extends AbstractMessageRangeProcessor<MoveRequest> im public MoveProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory) { super(MoveRequest.class, next, mailboxManager, factory); - moveCapabilitySupported = mailboxManager.getSupportedCapabilities().contains(MailboxManager.Capabilities.Move); + moveCapabilitySupported = mailboxManager.getSupportedMailboxCapabilities().contains(MailboxManager.MailboxCapabilities.Move); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java index 63b299e..a016ace 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java @@ -26,6 +26,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import java.util.EnumSet; + import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapSessionState; @@ -75,9 +77,9 @@ public class MoveProcessorTest { mockImapSession = mock(ImapSession.class); mockMailboxSession = mock(MailboxSession.class); - when(mockMailboxManager.getSupportedCapabilities()).thenReturn(Lists.newArrayList(MailboxManager.Capabilities.Move, MailboxManager.Capabilities.Basic)); + when(mockMailboxManager.getSupportedMailboxCapabilities()).thenReturn(EnumSet.allOf(MailboxManager.MailboxCapabilities.class)); testee = new MoveProcessor(mockNextProcessor, mockMailboxManager, mockStatusResponseFactory); - verify(mockMailboxManager).getSupportedCapabilities(); + verify(mockMailboxManager).getSupportedMailboxCapabilities(); } @Test @@ -87,7 +89,7 @@ public class MoveProcessorTest { @Test public void getImplementedCapabilitiesShouldNotContainMoveWhenUnSupportedByMailboxManager() { - when(mockMailboxManager.getSupportedCapabilities()).thenReturn(Lists.newArrayList(MailboxManager.Capabilities.Basic)); + when(mockMailboxManager.getSupportedMailboxCapabilities()).thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.MailboxCapabilities.Move))); assertThat(new MoveProcessor(mockNextProcessor, mockMailboxManager, mockStatusResponseFactory).getImplementedCapabilities(null)).isEmpty(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java index d5286b3..e34ec64 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java @@ -29,6 +29,7 @@ import java.io.InputStream; import java.util.Arrays; import java.util.Collection; import java.util.Date; +import java.util.EnumSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -66,8 +67,6 @@ import org.apache.james.mailbox.model.UpdatedFlags; import org.junit.Test; import org.slf4j.Logger; -import com.google.common.collect.Lists; - public class MailboxEventAnalyserTest { private static final long BASE_SESSION_ID = 99; @@ -77,10 +76,15 @@ public class MailboxEventAnalyserTest { private final MailboxManager mockManager = new MailboxManager() { @Override - public List<Capabilities> getSupportedCapabilities() { - return Lists.newArrayList(Capabilities.Basic); + public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() { + return EnumSet.noneOf(MailboxCapabilities.class); } + @Override + public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { + return EnumSet.noneOf(MessageCapabilities.class); + } + public void removeListener(MailboxPath mailboxPath, MailboxListener listner, MailboxSession session) throws MailboxException { } @@ -305,6 +309,7 @@ public class MailboxEventAnalyserTest { throw new UnsupportedOperationException("Not implemented"); } + }; } http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java index ebbb0cb..6c889e6 100644 --- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java +++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java @@ -22,6 +22,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.EnumSet; + import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.jmap.methods.GetMessageListMethod; @@ -37,7 +39,6 @@ import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; import com.datastax.driver.core.Session; -import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; import com.google.inject.Module; import com.google.inject.Provides; @@ -85,18 +86,34 @@ public class JamesCapabilitiesServerTest { @Test public void startShouldFailWhenNoMoveCapability() throws Exception { MailboxManager mailboxManager = mock(MailboxManager.class); - when(mailboxManager.getSupportedCapabilities()) - .thenReturn(ImmutableList.of(MailboxManager.Capabilities.Basic)); + when(mailboxManager.getSupportedMailboxCapabilities()) + .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.MailboxCapabilities.Move))); + when(mailboxManager.getSupportedMessageCapabilities()) + .thenReturn(EnumSet.of(MailboxManager.MessageCapabilities.Attachment)); + server = createCassandraJamesServer(mailboxManager); + + assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void startShouldFailWhenNoAttachmentCapability() throws Exception { + MailboxManager mailboxManager = mock(MailboxManager.class); + when(mailboxManager.getSupportedMailboxCapabilities()) + .thenReturn(EnumSet.allOf(MailboxManager.MailboxCapabilities.class)); + when(mailboxManager.getSupportedMessageCapabilities()) + .thenReturn(EnumSet.noneOf(MailboxManager.MessageCapabilities.class)); server = createCassandraJamesServer(mailboxManager); assertThatThrownBy(() -> server.start()).isInstanceOf(IllegalArgumentException.class); } @Test - public void startShouldSucceedWhenMoveCapability() throws Exception { + public void startShouldSucceedWhenRequiredCapabilities() throws Exception { MailboxManager mailboxManager = mock(MailboxManager.class); - when(mailboxManager.getSupportedCapabilities()) - .thenReturn(ImmutableList.of(MailboxManager.Capabilities.Move)); + when(mailboxManager.getSupportedMailboxCapabilities()) + .thenReturn(EnumSet.of(MailboxManager.MailboxCapabilities.Move)); + when(mailboxManager.getSupportedMessageCapabilities()) + .thenReturn(EnumSet.of(MailboxManager.MessageCapabilities.Attachment)); server = createCassandraJamesServer(mailboxManager); server.start(); http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java index 40ff85f..744a220 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java @@ -62,7 +62,8 @@ public class JMAPModule extends AbstractModule { bind(MailboxBasedHtmlTextExtractor.class).in(Scopes.SINGLETON); bind(HtmlTextExtractor.class).to(MailboxBasedHtmlTextExtractor.class); - Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(MoveCapabilityPrecondition.class); + Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(RequiredCapabilitiesPrecondition.class); + Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(RequiredCapabilitiesPrecondition.class); Multibinder<CamelMailetContainerModule.TransportProcessorCheck> transportProcessorChecks = Multibinder.newSetBinder(binder(), CamelMailetContainerModule.TransportProcessorCheck.class); transportProcessorChecks.addBinding().to(VacationMailetCheck.class); @@ -90,19 +91,21 @@ public class JMAPModule extends AbstractModule { } @Singleton - public static class MoveCapabilityPrecondition implements ConfigurationPerformer { + public static class RequiredCapabilitiesPrecondition implements ConfigurationPerformer { private final MailboxManager mailboxManager; @Inject - public MoveCapabilityPrecondition(MailboxManager mailboxManager) { + public RequiredCapabilitiesPrecondition(MailboxManager mailboxManager) { this.mailboxManager = mailboxManager; } @Override public void initModule() { - Preconditions.checkArgument(mailboxManager.getSupportedCapabilities().contains(MailboxManager.Capabilities.Move), + Preconditions.checkArgument(mailboxManager.getSupportedMailboxCapabilities().contains(MailboxManager.MailboxCapabilities.Move), "MOVE support in MailboxManager is required by JMAP Module"); + Preconditions.checkArgument(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.Attachment), + "Attachment support in MailboxManager is required by JMAP Module"); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/9b5641b9/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java index 3918c91..1eb33c9 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java @@ -18,6 +18,7 @@ ****************************************************************/ package org.apache.james.jmap; +import java.util.EnumSet; import java.util.List; import org.apache.james.mailbox.MailboxListener; @@ -193,7 +194,12 @@ public class FirstUserConnectionFilterThreadTest { } @Override - public List<Capabilities> getSupportedCapabilities() { + public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() { + return null; + } + + @Override + public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { return null; } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org