summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-08-25 15:31:34 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-08-25 15:31:34 +0000
commitf9592e0d891b2eca8b91e06e6da0f8cd6c15f24c (patch)
treec99af5d88f0e88eb52281efd9cf6ea2ded45c879
parent9556a8d9c53be396a25cd4c29842b79e99bc1746 (diff)
downloadqpid-python-f9592e0d891b2eca8b91e06e6da0f8cd6c15f24c.tar.gz
Merging from trunk r1618840:1619054 in the Java tree
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.30@1620349 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Sender.java7
-rw-r--r--qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/framing/ConnectionHandler.java15
-rw-r--r--qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/Binary.java42
-rw-r--r--qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/security/SaslMechanisms.java2
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java2
-rw-r--r--qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java67
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java9
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java1
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java25
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java45
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java9
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java50
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java6
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPort.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java6
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java6
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypter.java38
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java14
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java2
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java71
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactoryTest.java343
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterTest.java221
-rw-r--r--qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/firewall/InetNetwork.java58
-rw-r--r--qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java1
-rw-r--r--qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java2
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java2
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java39
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/index.html2
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js2
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js27
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java4
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java26
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/FieldTableSupport.java6
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java9
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/util/BlockingWaiter.java12
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java28
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java2
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java8
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/url/URLHelper.java8
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/Strings.java4
-rw-r--r--qpid/java/perftests/src/main/java/org/apache/qpid/disttest/client/ParticipantExecutor.java5
-rw-r--r--qpid/java/perftests/src/main/java/org/apache/qpid/disttest/controller/TestRunner.java7
-rw-r--r--qpid/java/perftests/src/main/java/org/apache/qpid/disttest/jms/ControllerJmsDelegate.java7
-rw-r--r--qpid/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java2
-rwxr-xr-xqpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java2
-rw-r--r--qpid/java/systests/src/test/java/org/apache/qpid/server/SupportedProtocolVersionsTest.java5
52 files changed, 830 insertions, 434 deletions
diff --git a/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Sender.java b/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Sender.java
index adeab4ab5d..2b76344085 100644
--- a/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Sender.java
+++ b/qpid/java/amqp-1-0-client/src/main/java/org/apache/qpid/amqp_1_0/client/Sender.java
@@ -448,9 +448,9 @@ public class Sender implements DeliveryStateHandler
public void handle(Binary deliveryTag, DeliveryState state, Boolean settled)
{
+ OutcomeAction action;
if(state instanceof Outcome)
{
- OutcomeAction action;
if((action = _outcomeActions.remove(deliveryTag)) != null)
{
@@ -464,7 +464,6 @@ public class Sender implements DeliveryStateHandler
}
else if(state instanceof TransactionalState)
{
- OutcomeAction action;
if((action = _outcomeActions.remove(deliveryTag)) != null)
{
final Outcome outcome = ((TransactionalState) state).getOutcome();
@@ -472,6 +471,10 @@ public class Sender implements DeliveryStateHandler
}
}
+ else if(state == null && settled && (action = _outcomeActions.remove(deliveryTag)) != null)
+ {
+ action.onOutcome(deliveryTag, _defaultOutcome);
+ }
}
public SendingLinkEndpoint getEndpoint()
diff --git a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/framing/ConnectionHandler.java b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/framing/ConnectionHandler.java
index b5ab25c3fb..96a31cd4e6 100644
--- a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/framing/ConnectionHandler.java
+++ b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/framing/ConnectionHandler.java
@@ -318,22 +318,7 @@ public class ConnectionHandler
{
_writer.setValue(frame);
- try
- {
_writer.writeToBuffer(_buffer);
- }
- catch(RuntimeException e)
- {
- e.printStackTrace();
- throw e;
- }
- catch(Error e)
- {
- e.printStackTrace();
- throw e;
- }
-
-
}
else
{
diff --git a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/Binary.java b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/Binary.java
index 8074354051..b617167528 100644
--- a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/Binary.java
+++ b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/Binary.java
@@ -23,8 +23,6 @@ package org.apache.qpid.amqp_1_0.type;
import java.nio.ByteBuffer;
import java.util.Collection;
-import static java.lang.Math.min;
-
public class Binary
{
@@ -64,32 +62,32 @@ public class Binary
public final boolean equals(Object o)
{
- Binary buf = (Binary) o;
- if(o == null)
- {
- return false;
- }
- final int size = _length;
- if (size != buf._length)
+ if(o instanceof Binary)
{
- return false;
- }
-
- final byte[] myData = _data;
- final byte[] theirData = buf._data;
- int myOffset = _offset;
- int theirOffset = buf._offset;
- final int myLimit = myOffset + size;
+ Binary buf = (Binary) o;
- while(myOffset < myLimit)
- {
- if (myData[myOffset++] != theirData[theirOffset++])
+ final int size = _length;
+ if (size == buf._length)
{
- return false;
+ final byte[] myData = _data;
+ final byte[] theirData = buf._data;
+ int myOffset = _offset;
+ int theirOffset = buf._offset;
+ final int myLimit = myOffset + size;
+
+ while (myOffset < myLimit)
+ {
+ if (myData[myOffset++] != theirData[theirOffset++])
+ {
+ return false;
+ }
+ }
+
+ return true;
}
}
- return true;
+ return false;
}
diff --git a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/security/SaslMechanisms.java b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/security/SaslMechanisms.java
index 9598035899..20b0cd926a 100644
--- a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/security/SaslMechanisms.java
+++ b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/security/SaslMechanisms.java
@@ -58,7 +58,7 @@ public class SaslMechanisms
{
builder.append(',');
}
- builder.append("saslServerMechanisms=").append(_saslServerMechanisms == null ? "" : Arrays.asList(_saslServerMechanisms));
+ builder.append("saslServerMechanisms=").append(Arrays.asList(_saslServerMechanisms));
}
builder.append('}');
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java
index 55805b5626..6f03dc51df 100644
--- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java
+++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHost.java
@@ -58,7 +58,7 @@ import org.apache.qpid.server.virtualhost.VirtualHostImpl;
Object that represents the VirtualHost whilst the VirtualHostNode is in the replica role. The
real virtualhost will be elsewhere in the group.
*/
-@ManagedObject( category = false, type = "BDB_HA_REPLICA" )
+@ManagedObject( category = false, type = "BDB_HA_REPLICA", register = false )
public class BDBHAReplicaVirtualHost extends AbstractConfiguredObject<BDBHAReplicaVirtualHost>
implements VirtualHostImpl<BDBHAReplicaVirtualHost, AMQQueue<?>, ExchangeImpl<?>>,
VirtualHost<BDBHAReplicaVirtualHost,AMQQueue<?>, ExchangeImpl<?>>
diff --git a/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java b/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
index 3c6cb4270e..9e63e96fb7 100644
--- a/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
+++ b/qpid/java/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
@@ -87,30 +87,33 @@ public class ConfiguredObjectRegistrationGenerator extends AbstractProcessor
PackageElement packageElement = elementUtils.getPackageOf(e);
String packageName = packageElement.getQualifiedName().toString();
String className = e.getSimpleName().toString();
- for(AnnotationMirror a : e.getAnnotationMirrors())
+ AnnotationMirror annotation = getAnnotation(e, annotationElement);
+
+ AnnotationValue registerValue = getAnnotationValue(annotation, "register");
+
+ if(registerValue == null || (Boolean) registerValue.getValue() )
{
- if(a.getAnnotationType().asElement().equals(annotationElement))
+ AnnotationValue typeValue = getAnnotationValue(annotation, "type");
+
+ if (typeValue != null)
{
- for(Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : a.getElementValues().entrySet())
- {
- if(entry.getKey().getSimpleName().toString().equals("type"))
- {
- _typeMap.put(packageName + "." + className, (String) entry.getValue().getValue());
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "looking for " + packageName + "." + className);
- _categoryMap.put(packageName + "." + className, getCategory((TypeElement)e));
- break;
- }
- }
- break;
+ _typeMap.put(packageName + "." + className, (String) typeValue.getValue());
+ processingEnv.getMessager()
+ .printMessage(Diagnostic.Kind.NOTE,
+ "looking for " + packageName + "." + className);
+ _categoryMap.put(packageName + "." + className, getCategory((TypeElement) e));
+
}
+
+
+ Set<String> classNames = _managedObjectClasses.get(packageName);
+ if (classNames == null)
+ {
+ classNames = new HashSet<>();
+ _managedObjectClasses.put(packageName, classNames);
+ }
+ classNames.add(className);
}
- Set<String> classNames = _managedObjectClasses.get(packageName);
- if (classNames == null)
- {
- classNames = new HashSet<>();
- _managedObjectClasses.put(packageName, classNames);
- }
- classNames.add(className);
}
}
for (Map.Entry<String, Set<String>> entry : _managedObjectClasses.entrySet())
@@ -129,6 +132,30 @@ public class ConfiguredObjectRegistrationGenerator extends AbstractProcessor
return false;
}
+ private AnnotationValue getAnnotationValue(final AnnotationMirror annotation, final String attribute)
+ {
+ for(Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : annotation.getElementValues().entrySet())
+ {
+ if(entry.getKey().getSimpleName().toString().equals(attribute))
+ {
+ return entry.getValue();
+ }
+ }
+ return null;
+ }
+
+ private AnnotationMirror getAnnotation(final Element e, final TypeElement annotationElement)
+ {
+ for(AnnotationMirror a : e.getAnnotationMirrors())
+ {
+ if (a.getAnnotationType().asElement().equals(annotationElement))
+ {
+ return a;
+ }
+ }
+ return null;
+ }
+
private String getCategory(final TypeElement e)
{
Elements elementUtils = processingEnv.getElementUtils();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java
index ccda1e1fe1..765e1e4fa5 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java
@@ -40,9 +40,6 @@ public class BrokerProperties
public static final String PROPERTY_DEFAULT_SUPPORTED_PROTOCOL_REPLY = "qpid.broker_default_supported_protocol_version_reply";
public static final String PROPERTY_DISABLED_FEATURES = "qpid.broker_disabled_features";
- public static final String PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES = "qpid.broker_default_amqp_protocol_excludes";
- public static final String PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES = "qpid.broker_default_amqp_protocol_includes";
-
public static final String PROPERTY_MANAGEMENT_RIGHTS_INFER_ALL_ACCESS = "qpid.broker_jmx_method_rights_infer_all_access";
public static final String PROPERTY_USE_CUSTOM_RMI_SOCKET_FACTORY = "qpid.broker_jmx_use_custom_rmi_socket_factory";
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java
index 350e4fcd44..27d914c639 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectFactoryImpl.java
@@ -137,15 +137,6 @@ public class ConfiguredObjectFactoryImpl implements ConfiguredObjectFactory
else
{
factory = getConfiguredObjectTypeFactory(category, null);
- if(factory == null)
- {
- ManagedObject annotation = categoryClass.getAnnotation(ManagedObject.class);
- factory = getConfiguredObjectTypeFactory(category, annotation.defaultType());
- if(factory == null)
- {
- throw new NoFactoryForTypeException(category, annotation.defaultType());
- }
- }
}
return factory;
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java
index 8cfb84135e..f18869bced 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedObject.java
@@ -35,4 +35,5 @@ public @interface ManagedObject
boolean creatable() default true;
String defaultType() default ""; // in this case the class/interface itself is to be used
String type() default "";
+ boolean register() default true;
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java
index e98ff1a79a..eca3b0c7b1 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java
@@ -20,7 +20,6 @@
*/
package org.apache.qpid.server.model;
-import java.security.AccessControlException;
import java.util.Collection;
import java.util.Set;
@@ -64,30 +63,6 @@ public interface Port<X extends Port<X>> extends ConfiguredObject<X>
@ManagedAttribute
Collection<TrustStore> getTrustStores();
-
-
-
-
-
- void addTransport(Transport transport) throws IllegalStateException,
- AccessControlException,
- IllegalArgumentException;
-
- Transport removeTransport(Transport transport) throws IllegalStateException,
- AccessControlException,
- IllegalArgumentException;
-
-
- void addProtocol(Protocol protocol) throws IllegalStateException,
- AccessControlException,
- IllegalArgumentException;
-
- Protocol removeProtocol(Protocol protocol) throws IllegalStateException,
- AccessControlException,
- IllegalArgumentException;
-
- Collection<Protocol> getAvailableProtocols();
-
//children
Collection<VirtualHostAlias> getVirtualHostBindings();
Collection<Connection> getConnections();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
index 32587c0f4e..61790441f9 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
@@ -190,40 +190,12 @@ abstract public class AbstractPort<X extends AbstractPort<X>> extends AbstractCo
}
@Override
- public void addTransport(Transport transport)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- @Override
- public Transport removeTransport(Transport transport)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- @Override
public Set<Protocol> getProtocols()
{
return _protocols;
}
@Override
- public void addProtocol(Protocol protocol)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- @Override
- public Protocol removeProtocol(Protocol protocol)
- throws IllegalStateException, AccessControlException, IllegalArgumentException
- {
- throw new IllegalStateException();
- }
-
- @Override
public Collection<VirtualHostAlias> getVirtualHostBindings()
{
List<VirtualHostAlias> aliases = new ArrayList<VirtualHostAlias>();
@@ -251,19 +223,6 @@ abstract public class AbstractPort<X extends AbstractPort<X>> extends AbstractCo
}
@Override
- public Set<Protocol> getAvailableProtocols()
- {
- Set<Protocol> protocols = getProtocols();
- if(protocols == null || protocols.isEmpty())
- {
- protocols = getDefaultProtocols();
- }
- return protocols;
- }
-
- protected abstract Set<Protocol> getDefaultProtocols();
-
- @Override
public State getState()
{
return _state;
@@ -382,11 +341,11 @@ abstract public class AbstractPort<X extends AbstractPort<X>> extends AbstractCo
for (Port<?> existingPort : existingPorts)
{
- Collection<Protocol> portProtocols = existingPort.getAvailableProtocols();
+ Collection<Protocol> portProtocols = existingPort.getProtocols();
if (portProtocols != null)
{
final ArrayList<Protocol> intersection = new ArrayList(portProtocols);
- intersection.retainAll(getAvailableProtocols());
+ intersection.retainAll(getProtocols());
if(!intersection.isEmpty())
{
throw new IllegalConfigurationException("Port for protocols " + intersection + " already exists. Only one management port per protocol can be created.");
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
index fa599b4d5f..b50a289b22 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPort.java
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.ManagedAttribute;
+import org.apache.qpid.server.model.ManagedContextDefault;
import org.apache.qpid.server.model.ManagedObject;
import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.Protocol;
@@ -42,6 +43,11 @@ public interface AmqpPort<X extends AmqpPort<X>> extends Port<X>
String SEND_BUFFER_SIZE = "sendBufferSize";
String RECEIVE_BUFFER_SIZE = "receiveBufferSize";
+ String DEFAULT_AMQP_PROTOCOLS = "qpid.port.default_amqp_protocols";
+
+ @ManagedContextDefault(name = DEFAULT_AMQP_PROTOCOLS)
+ String INSTALLED_PROTOCOLS = AmqpPortImpl.getInstalledProtocolsAsString();
+
@ManagedAttribute( defaultValue = AmqpPort.DEFAULT_AMQP_TCP_NO_DELAY )
boolean isTcpNoDelay();
@@ -66,8 +72,9 @@ public interface AmqpPort<X extends AmqpPort<X>> extends Port<X>
validValues = {"org.apache.qpid.server.model.port.AmqpPortImpl#getAllAvailableTransportCombinations()"})
Set<Transport> getTransports();
- @ManagedAttribute( validValues = {"org.apache.qpid.server.model.port.AmqpPortImpl#getAllAvailableProtocolCombinations()"} )
+ @ManagedAttribute( defaultValue = "${" + DEFAULT_AMQP_PROTOCOLS + "}", validValues = {"org.apache.qpid.server.model.port.AmqpPortImpl#getAllAvailableProtocolCombinations()"} )
Set<Protocol> getProtocols();
VirtualHostImpl getVirtualHost(String name);
+
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
index 1fbc0c8bc1..2c958b00d0 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AmqpPortImpl.java
@@ -25,7 +25,6 @@ import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.EnumSet;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@@ -43,6 +42,7 @@ import org.apache.qpid.server.logging.messages.BrokerMessages;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.KeyStore;
import org.apache.qpid.server.model.ManagedAttributeField;
+import org.apache.qpid.server.model.ManagedContextDefault;
import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
import org.apache.qpid.server.model.Protocol;
import org.apache.qpid.server.model.State;
@@ -53,6 +53,7 @@ import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.plugin.TransportProviderFactory;
import org.apache.qpid.server.transport.AcceptingTransport;
import org.apache.qpid.server.transport.TransportProvider;
+import org.apache.qpid.server.util.ServerScopedRuntimeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
import org.apache.qpid.transport.network.security.ssl.QpidMultipleTrustManager;
@@ -110,34 +111,6 @@ public class AmqpPortImpl extends AbstractPortWithAuthProvider<AmqpPortImpl> imp
return (VirtualHostImpl) _broker.findVirtualHostByName(name);
}
- protected Set<Protocol> getDefaultProtocols()
- {
- Set<Protocol> defaultProtocols = EnumSet.of(Protocol.AMQP_0_8, Protocol.AMQP_0_9, Protocol.AMQP_0_9_1,
- Protocol.AMQP_0_10, Protocol.AMQP_1_0);
- String excludedProtocols = System.getProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES);
- if (excludedProtocols != null)
- {
- String[] excludes = excludedProtocols.split(",");
- for (String exclude : excludes)
- {
- Protocol protocol = Protocol.valueOf(exclude);
- defaultProtocols.remove(protocol);
- }
- }
- String includedProtocols = System.getProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES);
- if (includedProtocols != null)
- {
- String[] includes = includedProtocols.split(",");
- for (String include : includes)
- {
- Protocol protocol = Protocol.valueOf(include);
- defaultProtocols.add(protocol);
- }
- }
- return defaultProtocols;
- }
-
-
@Override
protected State onActivate()
{
@@ -178,7 +151,7 @@ public class AmqpPortImpl extends AbstractPortWithAuthProvider<AmqpPortImpl> imp
_transport = transportProvider.createTransport(transportSet,
sslContext,
this,
- getAvailableProtocols(),
+ getProtocols(),
defaultSupportedProtocolReply);
_transport.start();
@@ -363,4 +336,21 @@ public class AmqpPortImpl extends AbstractPortWithAuthProvider<AmqpPortImpl> imp
}
return Collections.unmodifiableSet(combinationsAsString);
}
+
+
+ public static String getInstalledProtocolsAsString()
+ {
+ Set<Protocol> installedProtocols = getInstalledProtocols();
+ ObjectMapper mapper = new ObjectMapper();
+
+ try(StringWriter output = new StringWriter())
+ {
+ mapper.writeValue(output, installedProtocols);
+ return output.toString();
+ }
+ catch (IOException e)
+ {
+ throw new ServerScopedRuntimeException(e);
+ }
+ }
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
index fa2af121ae..51d31cb8ab 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPort.java
@@ -51,7 +51,7 @@ public interface HttpPort<X extends HttpPort<X>> extends Port<X>
validValues = {"[ \"TCP\" ]", "[ \"SSL\" ]", "[ \"TCP\", \"SSL\" ]"})
Set<Transport> getTransports();
- @ManagedAttribute( validValues = { "[ \"HTTP\"]"} )
+ @ManagedAttribute( defaultValue = "HTTP", validValues = { "[ \"HTTP\"]"} )
Set<Protocol> getProtocols();
void setPortManager(PortManager manager);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
index a89ba9bbff..33abee9bde 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/HttpPortImpl.java
@@ -40,12 +40,6 @@ public class HttpPortImpl extends AbstractPortWithAuthProvider<HttpPortImpl> imp
super(attributes, broker);
}
- @Override
- protected Set<Protocol> getDefaultProtocols()
- {
- return Collections.singleton(Protocol.HTTP);
- }
-
public void setPortManager(PortManager manager)
{
_portManager = manager;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPort.java
index 48754e92e4..981d81a342 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPort.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPort.java
@@ -51,7 +51,7 @@ public interface JmxPort<X extends JmxPort<X>> extends Port<X>
validValues = {"[ \"TCP\" ]", "[ \"SSL\" ]"})
Set<Transport> getTransports();
- @ManagedAttribute( validValues = { "[ \"JMX_RMI\"]"} )
+ @ManagedAttribute( defaultValue = "JMX_RMI", validValues = { "[ \"JMX_RMI\"]"} )
Set<Protocol> getProtocols();
void setPortManager(PortManager manager);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java
index ac691c0860..a235613c29 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java
@@ -48,12 +48,6 @@ public class JmxPortImpl extends AbstractPortWithAuthProvider<JmxPortImpl> imple
}
@Override
- protected Set<Protocol> getDefaultProtocols()
- {
- return Collections.singleton(Protocol.JMX_RMI);
- }
-
- @Override
public void setPortManager(PortManager manager)
{
_portManager = manager;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
index d2420aa343..8fad90ada3 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
@@ -32,7 +32,7 @@ import org.apache.qpid.server.model.Transport;
public interface RmiPort<X extends RmiPort<X>> extends Port<X>
{
- @ManagedAttribute( validValues = { "[ \"RMI\"]"} )
+ @ManagedAttribute( defaultValue = "RMI", validValues = { "[ \"RMI\"]"} )
Set<Protocol> getProtocols();
@ManagedAttribute( defaultValue = "TCP",
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
index e236b7cb91..82e68d75c8 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
@@ -56,12 +56,6 @@ public class RmiPortImpl extends AbstractPort<RmiPortImpl> implements RmiPort<Rm
}
- @Override
- protected Set<Protocol> getDefaultProtocols()
- {
- return Collections.singleton(Protocol.RMI);
- }
-
public void setPortManager(PortManager manager)
{
_portManager = manager;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
index 5b62f7cffd..0e532cee89 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleAuthenticationManager.java
@@ -46,7 +46,7 @@ import org.apache.qpid.server.security.auth.UsernamePrincipal;
import org.apache.qpid.server.security.auth.sasl.plain.PlainPasswordCallback;
import org.apache.qpid.server.security.auth.sasl.plain.PlainSaslServer;
-@ManagedObject( category = false, type = "Simple" )
+@ManagedObject( category = false, type = "Simple", register = false )
public class SimpleAuthenticationManager extends AbstractAuthenticationManager<SimpleAuthenticationManager>
{
private static final Logger _logger = Logger.getLogger(SimpleAuthenticationManager.class);
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypter.java
index c0c92f0389..b094ea96f9 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypter.java
@@ -36,17 +36,25 @@ import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.xml.bind.DatatypeConverter;
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
-
class AESKeyFileEncrypter implements ConfigurationSecretEncrypter
{
private static final String CIPHER_NAME = "AES/CBC/PKCS5Padding";
private static final int AES_INITIALIZATION_VECTOR_LENGTH = 16;
+ private static final String AES_ALGORITHM = "AES";
private final SecretKey _secretKey;
private final SecureRandom _random = new SecureRandom();
AESKeyFileEncrypter(SecretKey secretKey)
{
+ if(secretKey == null)
+ {
+ throw new NullPointerException("A non null secret key must be supplied");
+ }
+ if(!AES_ALGORITHM.equals(secretKey.getAlgorithm()))
+ {
+ throw new IllegalArgumentException("Provided secret key was for the algorithm: " + secretKey.getAlgorithm()
+ + "when" + AES_ALGORITHM + "was needed.");
+ }
_secretKey = secretKey;
}
@@ -68,19 +76,26 @@ class AESKeyFileEncrypter implements ConfigurationSecretEncrypter
}
catch (IOException | InvalidAlgorithmParameterException | InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException e)
{
- throw new IllegalConfigurationException("Unable to encrypt secret", e);
+ throw new IllegalArgumentException("Unable to encrypt secret", e);
}
}
@Override
public String decrypt(final String encrypted)
{
+ if(!isValidBase64(encrypted))
+ {
+ throw new IllegalArgumentException("Encrypted value is not valid Base 64 data: '" + encrypted + "'");
+ }
byte[] encryptedBytes = DatatypeConverter.parseBase64Binary(encrypted);
try
{
Cipher cipher = Cipher.getInstance(CIPHER_NAME);
- cipher.init(Cipher.DECRYPT_MODE, _secretKey, new IvParameterSpec(encryptedBytes, 0,
- AES_INITIALIZATION_VECTOR_LENGTH));
+
+ IvParameterSpec ivParameterSpec = new IvParameterSpec(encryptedBytes, 0, AES_INITIALIZATION_VECTOR_LENGTH);
+
+ cipher.init(Cipher.DECRYPT_MODE, _secretKey, ivParameterSpec);
+
return new String(readFromCipherStream(encryptedBytes,
AES_INITIALIZATION_VECTOR_LENGTH,
encryptedBytes.length - AES_INITIALIZATION_VECTOR_LENGTH,
@@ -88,10 +103,15 @@ class AESKeyFileEncrypter implements ConfigurationSecretEncrypter
}
catch (IOException | InvalidAlgorithmParameterException | InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException e)
{
- throw new IllegalConfigurationException("Unable to encrypt secret", e);
+ throw new IllegalArgumentException("Unable to encrypt secret", e);
}
}
+ private boolean isValidBase64(final String encrypted)
+ {
+ return encrypted.matches("^([\\w\\d+/]{4})*([\\w\\d+/]{2}==|[\\w\\d+/]{3}=)?$");
+ }
+
private byte[] readFromCipherStream(final byte[] unencryptedBytes, final Cipher cipher) throws IOException
{
@@ -106,16 +126,16 @@ class AESKeyFileEncrypter implements ConfigurationSecretEncrypter
offset,
length), cipher))
{
- byte[] buf = new byte[1024];
+ byte[] buf = new byte[512];
int pos = 0;
int read;
while ((read = cipherInputStream.read(buf, pos, buf.length - pos)) != -1)
{
pos += read;
- if (pos == buf.length - 1)
+ if (pos == buf.length)
{
byte[] tmp = buf;
- buf = new byte[buf.length + 1024];
+ buf = new byte[buf.length + 512];
System.arraycopy(tmp, 0, buf, 0, tmp.length);
}
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java
index 447f19b7ce..ef92c2a131 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java
@@ -46,13 +46,15 @@ import org.apache.qpid.server.plugin.PluggableService;
@PluggableService
public class AESKeyFileEncrypterFactory implements ConfigurationSecretEncrypterFactory
{
- private static final String ENCRYPTER_KEY_FILE = "encrypter.key.file";
+ static final String ENCRYPTER_KEY_FILE = "encrypter.key.file";
private static final int AES_KEY_SIZE_BITS = 256;
private static final int AES_KEY_SIZE_BYTES = AES_KEY_SIZE_BITS / 8;
private static final String AES_ALGORITHM = "AES";
- public static String TYPE = "AESKeyFile";
+ public static final String TYPE = "AESKeyFile";
+
+ static final String DEFAULT_KEYS_SUBDIR_NAME = ".keys";
@Override
public ConfigurationSecretEncrypter createEncrypter(final ConfiguredObject<?> object)
@@ -66,7 +68,7 @@ public class AESKeyFileEncrypterFactory implements ConfigurationSecretEncrypterF
{
fileLocation = object.getContextValue(String.class, BrokerOptions.QPID_WORK_DIR)
- + File.separator + ".keys" + File.separator
+ + File.separator + DEFAULT_KEYS_SUBDIR_NAME + File.separator
+ object.getCategoryClass().getSimpleName() + "_"
+ object.getName() + ".key";
@@ -94,14 +96,14 @@ public class AESKeyFileEncrypterFactory implements ConfigurationSecretEncrypterF
|| permissions.contains(PosixFilePermission.GROUP_WRITE)
|| permissions.contains(PosixFilePermission.OTHERS_WRITE))
{
- throw new IllegalStateException("Key file '"
+ throw new IllegalArgumentException("Key file '"
+ fileLocation
+ "' has incorrect permissions. Only the owner "
+ "should be able to read or write this file.");
}
if(Files.size(file.toPath()) != AES_KEY_SIZE_BYTES)
{
- throw new IllegalConfigurationException("Key file '" + fileLocation + "' contains an incorrect about of data");
+ throw new IllegalArgumentException("Key file '" + fileLocation + "' contains an incorrect about of data");
}
try(FileInputStream inputStream = new FileInputStream(file))
@@ -151,7 +153,7 @@ public class AESKeyFileEncrypterFactory implements ConfigurationSecretEncrypterF
}
catch (NoSuchAlgorithmException | IOException e)
{
- throw new IllegalConfigurationException("Cannot create key file: " + e.getMessage(), e);
+ throw new IllegalArgumentException("Cannot create key file: " + e.getMessage(), e);
}
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
index 450fc30bf2..eacc4f2458 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
@@ -251,7 +251,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
{
for(Port port :_broker.getPorts())
{
- if (Protocol.hasAmqpProtocol(port.getAvailableProtocols()))
+ if (Protocol.hasAmqpProtocol(port.getProtocols()))
{
_aliases.add(new VirtualHostAliasAdapter(this, port));
}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java
index 48681a6075..523203c756 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/PortFactoryTest.java
@@ -25,16 +25,13 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
-import org.apache.qpid.server.configuration.BrokerProperties;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
@@ -100,8 +97,6 @@ public class PortFactoryTest extends QpidTestCase
}
- setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES, null);
- setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES, null);
_factory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
_attributes.put(Port.ID, _portId);
_attributes.put(Port.NAME, getName());
@@ -114,62 +109,6 @@ public class PortFactoryTest extends QpidTestCase
_attributes.put(Port.BINDING_ADDRESS, "127.0.0.1");
}
- public void testDefaultProtocols()
- {
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(Port.PORT, 1);
- attributes.put(Port.NAME, getName());
- attributes.put(Port.DESIRED_STATE, State.QUIESCED);
-
- attributes.put(Port.AUTHENTICATION_PROVIDER, _authProviderName);
- Port<?> port = _factory.create(Port.class, attributes, _broker);
-
- Collection<Protocol> protocols = port.getAvailableProtocols();
-
- EnumSet<Protocol> expected = EnumSet.of(Protocol.AMQP_0_8, Protocol.AMQP_0_9, Protocol.AMQP_0_9_1, Protocol.AMQP_0_10,
- Protocol.AMQP_1_0);
- assertEquals("Unexpected protocols", new HashSet<Protocol>(expected), new HashSet<Protocol>(protocols));
- }
-
- public void testDefaultProtocolsWhenProtocolExcludeSystemPropertyIsSet()
- {
- setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES, Protocol.AMQP_1_0.name() + ","
- + Protocol.AMQP_0_10.name());
-
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(Port.PORT, 1);
- attributes.put(Port.NAME, getName());
- attributes.put(Port.AUTHENTICATION_PROVIDER, _authProviderName);
- attributes.put(Port.DESIRED_STATE, State.QUIESCED);
- Port<?> port = _factory.create(Port.class, attributes, _broker);
-
-
- Collection<Protocol> protocols = port.getAvailableProtocols();
-
- EnumSet<Protocol> expected = EnumSet.of(Protocol.AMQP_0_8, Protocol.AMQP_0_9, Protocol.AMQP_0_9_1);
- assertEquals("Unexpected protocols", new HashSet<Protocol>(expected), new HashSet<Protocol>(protocols));
- }
-
- public void testDefaultProtocolsWhenProtocolIncludeSystemPropertyIsSet()
- {
- setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES, Protocol.AMQP_1_0.name() + ","
- + Protocol.AMQP_0_10.name() + "," + Protocol.AMQP_0_9_1.name());
- setTestSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES, Protocol.AMQP_0_10.name() + ","
- + Protocol.AMQP_0_9_1.name());
-
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(Port.PORT, 1);
- attributes.put(Port.NAME, getName());
- attributes.put(Port.AUTHENTICATION_PROVIDER, _authProviderName);
- attributes.put(Port.DESIRED_STATE, State.QUIESCED);
- Port<?> port = _factory.create(Port.class, attributes, _broker);
-
- Collection<Protocol> protocols = port.getAvailableProtocols();
-
- EnumSet<Protocol> expected = EnumSet.of(Protocol.AMQP_0_8, Protocol.AMQP_0_9, Protocol.AMQP_0_9_1, Protocol.AMQP_0_10);
- assertEquals("Unexpected protocols", new HashSet<Protocol>(expected), new HashSet<Protocol>(protocols));
- }
-
public void testCreatePortWithMinimumAttributes()
{
Map<String, Object> attributes = new HashMap<String, Object>();
@@ -184,8 +123,6 @@ public class PortFactoryTest extends QpidTestCase
assertTrue(port instanceof AmqpPort);
assertEquals("Unexpected port", 1, port.getPort());
assertEquals("Unexpected transports", Collections.singleton(PortFactory.DEFAULT_TRANSPORT), port.getTransports());
- assertEquals("Unexpected protocols", EnumSet.of(Protocol.AMQP_0_8, Protocol.AMQP_0_9, Protocol.AMQP_0_9_1, Protocol.AMQP_0_10,
- Protocol.AMQP_1_0), port.getAvailableProtocols());
assertEquals("Unexpected send buffer size", PortFactory.DEFAULT_AMQP_SEND_BUFFER_SIZE,
port.getAttribute(AmqpPort.SEND_BUFFER_SIZE));
assertEquals("Unexpected receive buffer size", PortFactory.DEFAULT_AMQP_RECEIVE_BUFFER_SIZE,
@@ -333,7 +270,7 @@ public class PortFactoryTest extends QpidTestCase
{
assertEquals(_tcpTransports, port.getTransports());
}
- assertEquals(amqp010ProtocolSet, port.getAvailableProtocols());
+ assertEquals(amqp010ProtocolSet, port.getProtocols());
assertEquals("Unexpected send buffer size", 2, port.getAttribute(AmqpPort.SEND_BUFFER_SIZE));
assertEquals("Unexpected receive buffer size", 1, port.getAttribute(AmqpPort.RECEIVE_BUFFER_SIZE));
assertEquals("Unexpected need client auth", needClientAuth, port.getAttribute(Port.NEED_CLIENT_AUTH));
@@ -361,7 +298,7 @@ public class PortFactoryTest extends QpidTestCase
assertEquals(_portId, port.getId());
assertEquals(_portNumber, port.getPort());
assertEquals(_tcpTransports, port.getTransports());
- assertEquals(nonAmqpProtocolSet, port.getAvailableProtocols());
+ assertEquals(nonAmqpProtocolSet, port.getProtocols());
}
public void testCreateNonAmqpPortWithPartiallySetAttributes()
@@ -382,7 +319,7 @@ public class PortFactoryTest extends QpidTestCase
assertEquals(_portId, port.getId());
assertEquals(_portNumber, port.getPort());
assertEquals(Collections.singleton(PortFactory.DEFAULT_TRANSPORT), port.getTransports());
- assertEquals(nonAmqpProtocolSet, port.getAvailableProtocols());
+ assertEquals(nonAmqpProtocolSet, port.getProtocols());
}
@@ -411,7 +348,7 @@ public class PortFactoryTest extends QpidTestCase
attributes.put(Port.PROTOCOLS, Collections.singleton(Protocol.RMI));
Port rmiPort = mock(Port.class);
- when(rmiPort.getAvailableProtocols()).thenReturn(Collections.singleton(Protocol.RMI));
+ when(rmiPort.getProtocols()).thenReturn(Collections.singleton(Protocol.RMI));
when(_broker.getPorts()).thenReturn(Collections.singletonList(rmiPort));
try
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactoryTest.java
new file mode 100644
index 0000000000..320c5dbdc8
--- /dev/null
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactoryTest.java
@@ -0,0 +1,343 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.encryption;
+
+import static org.mockito.Matchers.anyMap;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.attribute.PosixFilePermission;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.crypto.Cipher;
+
+import org.mockito.ArgumentCaptor;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import org.apache.qpid.server.BrokerOptions;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class AESKeyFileEncrypterFactoryTest extends QpidTestCase
+{
+ private Broker _broker;
+ private Path _tmpDir;
+ private AESKeyFileEncrypterFactory _factory;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ _broker = mock(Broker.class);
+ _tmpDir = Files.createTempDirectory(getTestName());
+
+ when(_broker.getContextKeys(eq(false))).thenReturn(Collections.<String>emptySet());
+ when(_broker.getContextValue(eq(String.class), eq(BrokerOptions.QPID_WORK_DIR))).thenReturn(_tmpDir.toString());
+ when(_broker.getCategoryClass()).thenReturn(Broker.class);
+ when(_broker.getName()).thenReturn(getName());
+ final ArgumentCaptor<Map> contextCaptor = ArgumentCaptor.forClass(Map.class);
+
+ when(_broker.setAttribute(eq("context"), anyMap(), contextCaptor.capture() )).thenAnswer(new Answer<Void>() {
+
+ @Override
+ public Void answer(final InvocationOnMock invocationOnMock) throws Throwable
+ {
+ Map replacementContext = contextCaptor.getValue();
+ when(_broker.getContext()).thenReturn(replacementContext);
+ return null;
+ }
+ });
+
+ _factory = new AESKeyFileEncrypterFactory();
+ }
+
+ public void testCreateKeyInDefaultLocation() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ ConfigurationSecretEncrypter encrypter = _factory.createEncrypter(_broker);
+
+ KeyFilePathChecker keyFilePathChecker = new KeyFilePathChecker();
+
+ doChecks(encrypter, keyFilePathChecker);
+
+ String pathName = (String) _broker.getContext().get(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE);
+
+ // check the context variable was set
+ assertEquals(keyFilePathChecker.getKeyFile().toString(), pathName);
+ }
+ }
+
+ private void doChecks(final ConfigurationSecretEncrypter encrypter,
+ final KeyFilePathChecker keyFilePathChecker) throws IOException
+ {
+ // walk the directory to find the file
+ Files.walkFileTree(_tmpDir, keyFilePathChecker);
+
+ // check the file was actually found
+ assertNotNull(keyFilePathChecker.getKeyFile());
+
+ String secret = "notasecret";
+
+ // check the encrypter works
+ assertEquals(secret, encrypter.decrypt(encrypter.encrypt(secret)));
+
+ }
+
+ public void testSettingContextKeyLeadsToFileCreation() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ String filename = UUID.randomUUID().toString() + ".key";
+ String subdirName = getTestName() + File.separator + "test";
+ String fileLocation = _tmpDir.toString() + File.separator + subdirName + File.separator + filename;
+
+ when(_broker.getContextKeys(eq(false))).thenReturn(Collections.singleton(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE));
+ when(_broker.getContextValue(eq(String.class),
+ eq(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE))).thenReturn(fileLocation);
+
+ ConfigurationSecretEncrypter encrypter = _factory.createEncrypter(_broker);
+
+ KeyFilePathChecker keyFilePathChecker = new KeyFilePathChecker(subdirName, filename);
+
+ doChecks(encrypter, keyFilePathChecker);
+ }
+ }
+
+
+ public void testUnableToCreateFileInSpecifiedLocation() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+
+ String filename = UUID.randomUUID().toString() + ".key";
+ String subdirName = getTestName() + File.separator + "test";
+ String fileLocation = _tmpDir.toString() + File.separator + subdirName + File.separator + filename;
+
+ when(_broker.getContextKeys(eq(false))).thenReturn(Collections.singleton(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE));
+ when(_broker.getContextValue(eq(String.class),
+ eq(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE))).thenReturn(fileLocation);
+
+ Files.createDirectories(Paths.get(fileLocation));
+
+ try
+ {
+ ConfigurationSecretEncrypter encrypter = _factory.createEncrypter(_broker);
+ fail("should not be able to create a key file where a directory currently is");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+ }
+ }
+
+
+ public void testPermissionsAreChecked() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+
+ String filename = UUID.randomUUID().toString() + ".key";
+ String subdirName = getTestName() + File.separator + "test";
+ String fileLocation = _tmpDir.toString() + File.separator + subdirName + File.separator + filename;
+
+ when(_broker.getContextKeys(eq(false))).thenReturn(Collections.singleton(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE));
+ when(_broker.getContextValue(eq(String.class),
+ eq(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE))).thenReturn(fileLocation);
+
+ Files.createDirectories(Paths.get(_tmpDir.toString(), subdirName));
+
+ File file = new File(fileLocation);
+ file.createNewFile();
+ Files.setPosixFilePermissions(file.toPath(),
+ EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.GROUP_READ));
+
+ try
+ {
+ ConfigurationSecretEncrypter encrypter = _factory.createEncrypter(_broker);
+ fail("should not be able to create a key file where the file is readable");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+ }
+ }
+
+ public void testInvalidKey() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ String filename = UUID.randomUUID().toString() + ".key";
+ String subdirName = getTestName() + File.separator + "test";
+ String fileLocation = _tmpDir.toString() + File.separator + subdirName + File.separator + filename;
+
+ when(_broker.getContextKeys(eq(false))).thenReturn(Collections.singleton(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE));
+ when(_broker.getContextValue(eq(String.class),
+ eq(AESKeyFileEncrypterFactory.ENCRYPTER_KEY_FILE))).thenReturn(fileLocation);
+
+ Files.createDirectories(Paths.get(_tmpDir.toString(), subdirName));
+
+ File file = new File(fileLocation);
+ try (FileOutputStream fos = new FileOutputStream(file))
+ {
+ fos.write("This is not an AES key. It is a string saying it is not an AES key".getBytes(
+ StandardCharsets.US_ASCII));
+ }
+ Files.setPosixFilePermissions(file.toPath(), EnumSet.of(PosixFilePermission.OWNER_READ));
+
+ try
+ {
+ ConfigurationSecretEncrypter encrypter = _factory.createEncrypter(_broker);
+ fail("should not be able to start where the key is not a valid key");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+ }
+ }
+
+ @Override
+ public void tearDown() throws Exception
+ {
+ Files.walkFileTree(_tmpDir,
+ new SimpleFileVisitor<Path>()
+ {
+ @Override
+ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs)
+ throws IOException
+ {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(final Path dir, final IOException exc)
+ throws IOException
+ {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ super.tearDown();
+ }
+
+ private boolean isStrongEncryptionEnabled() throws NoSuchAlgorithmException
+ {
+ return Cipher.getMaxAllowedKeyLength("AES")>=256;
+ }
+
+ private class KeyFilePathChecker extends SimpleFileVisitor<Path>
+ {
+
+ private final String _fileName;
+ private final String _subdirName;
+ private Path _keyFile;
+ private boolean _inKeysSubdir;
+
+ public KeyFilePathChecker()
+ {
+ this(AESKeyFileEncrypterFactory.DEFAULT_KEYS_SUBDIR_NAME, "Broker_" + AESKeyFileEncrypterFactoryTest.this.getName() + ".key");
+ }
+
+ public KeyFilePathChecker(final String subdirName, final String fileName)
+ {
+ _subdirName = subdirName;
+ _fileName = fileName;
+ }
+
+ @Override
+ public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException
+ {
+ if(!_inKeysSubdir && dir.endsWith(_subdirName))
+ {
+ _inKeysSubdir = true;
+ assertFalse(Files.getPosixFilePermissions(dir).contains(PosixFilePermission.OTHERS_READ));
+ assertFalse(Files.getPosixFilePermissions(dir).contains(PosixFilePermission.OTHERS_WRITE));
+ assertFalse(Files.getPosixFilePermissions(dir).contains(PosixFilePermission.OTHERS_EXECUTE));
+
+ assertFalse(Files.getPosixFilePermissions(dir).contains(PosixFilePermission.GROUP_READ));
+ assertFalse(Files.getPosixFilePermissions(dir).contains(PosixFilePermission.GROUP_WRITE));
+ assertFalse(Files.getPosixFilePermissions(dir).contains(PosixFilePermission.GROUP_EXECUTE));
+ return FileVisitResult.CONTINUE;
+ }
+ else
+ {
+ return _inKeysSubdir ? FileVisitResult.SKIP_SUBTREE : FileVisitResult.CONTINUE;
+ }
+
+ }
+
+ @Override
+ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException
+ {
+ if(_inKeysSubdir)
+ {
+ if(file.endsWith(_fileName))
+ {
+ _keyFile = file;
+
+ assertFalse(Files.getPosixFilePermissions(file).contains(PosixFilePermission.OTHERS_READ));
+ assertFalse(Files.getPosixFilePermissions(file).contains(PosixFilePermission.OTHERS_WRITE));
+ assertFalse(Files.getPosixFilePermissions(file).contains(PosixFilePermission.OTHERS_EXECUTE));
+
+ assertFalse(Files.getPosixFilePermissions(file).contains(PosixFilePermission.GROUP_READ));
+ assertFalse(Files.getPosixFilePermissions(file).contains(PosixFilePermission.GROUP_WRITE));
+ assertFalse(Files.getPosixFilePermissions(file).contains(PosixFilePermission.GROUP_EXECUTE));
+
+ return FileVisitResult.TERMINATE;
+ }
+ }
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException
+ {
+ _inKeysSubdir = false;
+ return FileVisitResult.CONTINUE;
+ }
+
+ public Path getKeyFile()
+ {
+ return _keyFile;
+ }
+
+ }
+}
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterTest.java
new file mode 100644
index 0000000000..3feb458a8b
--- /dev/null
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterTest.java
@@ -0,0 +1,221 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.encryption;
+
+import java.nio.charset.StandardCharsets;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.HashSet;
+import java.util.Random;
+import java.util.Set;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class AESKeyFileEncrypterTest extends QpidTestCase
+{
+ private final SecureRandom _random = new SecureRandom();
+ public static final String PLAINTEXT = "notaverygoodpassword";
+
+ public void testSimpleEncryptDecrypt() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ doTestSimpleEncryptDecrypt(PLAINTEXT);
+ }
+ }
+
+
+ public void testRepeatedEncryptionsReturnDifferentValues() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ SecretKeySpec secretKey = createSecretKey();
+ AESKeyFileEncrypter encrypter = new AESKeyFileEncrypter(secretKey);
+
+ Set<String> encryptions = new HashSet<>();
+
+ int iterations = 100;
+
+ for (int i = 0; i < iterations; i++)
+ {
+ encryptions.add(encrypter.encrypt(PLAINTEXT));
+ }
+
+ assertEquals("Not all encryptions were distinct", iterations, encryptions.size());
+
+ for (String encrypted : encryptions)
+ {
+ assertEquals("Not all encryptions decrypt correctly", PLAINTEXT, encrypter.decrypt(encrypted));
+ }
+ }
+ }
+
+ public void testCreationFailsOnInvalidSecret() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ try
+ {
+ new AESKeyFileEncrypter(null);
+ fail("An encrypter should not be creatable from a null key");
+ }
+ catch (NullPointerException e)
+ {
+ // pass
+ }
+
+ try
+ {
+ PBEKeySpec keySpec = new PBEKeySpec("password".toCharArray());
+ SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
+ new AESKeyFileEncrypter(factory.generateSecret(keySpec));
+ fail("An encrypter should not be creatable from the wrong type of secret key");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+ }
+ }
+
+ public void testEncryptionOfEmptyString() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ String text = "";
+ doTestSimpleEncryptDecrypt(text);
+ }
+ }
+
+ private void doTestSimpleEncryptDecrypt(final String text)
+ {
+ SecretKeySpec secretKey = createSecretKey();
+ AESKeyFileEncrypter encrypter = new AESKeyFileEncrypter(secretKey);
+
+ String encrypted = encrypter.encrypt(text);
+ assertNotNull("Encrypter did not return a result from encryption", encrypted);
+ assertFalse("Plain text and encrypted version are equal", text.equals(encrypted));
+ String decrypted = encrypter.decrypt(encrypted);
+ assertNotNull("Encrypter did not return a result from decryption",decrypted);
+ assertTrue("Encryption was not reversible", text.equals(decrypted));
+ }
+
+ public void testEncryptingNullFails() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ try
+ {
+ SecretKeySpec secretKey = createSecretKey();
+ AESKeyFileEncrypter encrypter = new AESKeyFileEncrypter(secretKey);
+
+ String encrypted = encrypter.encrypt(null);
+ fail("Attempting to encrypt null should fail");
+ }
+ catch (NullPointerException e)
+ {
+ // pass
+ }
+ }
+ }
+
+ public void testEncryptingVeryLargeSecret() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ Random random = new Random();
+ byte[] data = new byte[4096];
+ random.nextBytes(data);
+ for (int i = 0; i < data.length; i++)
+ {
+ data[i] = (byte) (data[i] & 0xEF);
+ }
+ doTestSimpleEncryptDecrypt(new String(data, StandardCharsets.US_ASCII));
+ }
+ }
+
+ private boolean isStrongEncryptionEnabled() throws NoSuchAlgorithmException
+ {
+ return Cipher.getMaxAllowedKeyLength("AES")>=256;
+ }
+
+ public void testDecryptNonsense() throws Exception
+ {
+ if(isStrongEncryptionEnabled())
+ {
+ SecretKeySpec secretKey = createSecretKey();
+ AESKeyFileEncrypter encrypter = new AESKeyFileEncrypter(secretKey);
+
+
+ try
+ {
+ encrypter.decrypt(null);
+ fail("Should not decrypt a null value");
+ }
+ catch (NullPointerException e)
+ {
+ // pass
+ }
+
+ try
+ {
+ encrypter.decrypt("");
+ fail("Should not decrypt the empty String");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+
+ try
+ {
+ encrypter.decrypt("thisisnonsense");
+ fail("Should not decrypt a small amount of nonsense");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+
+ try
+ {
+ String answer = encrypter.decrypt("thisisn'tvalidBase64!soitshouldfailwithanIllegalArgumentException");
+ fail("Should not decrypt a larger amount of nonsense");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // pass
+ }
+ }
+ }
+
+ private SecretKeySpec createSecretKey()
+ {
+ final byte[] keyData = new byte[32];
+ _random.nextBytes(keyData);
+ return new SecretKeySpec(keyData, "AES");
+ }
+}
diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/firewall/InetNetwork.java b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/firewall/InetNetwork.java
index 2e979b38f1..7294d9c5e8 100644
--- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/firewall/InetNetwork.java
+++ b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/firewall/InetNetwork.java
@@ -61,10 +61,10 @@ class InetNetwork
@Override
public boolean equals(Object obj)
{
- return (obj != null) &&
- (obj instanceof InetNetwork) &&
- ((InetNetwork)obj).network.equals(network) &&
- ((InetNetwork)obj).netmask.equals(netmask);
+ return (obj != null) &&
+ (obj instanceof InetNetwork) &&
+ ((InetNetwork) obj).network.equals(network) &&
+ ((InetNetwork) obj).netmask.equals(netmask);
}
public static InetNetwork getFromString(String netspec) throws java.net.UnknownHostException
@@ -95,15 +95,13 @@ class InetNetwork
{
try
{
- return getByAddress(
- new byte[]
- {
- (byte) (mask[0] & ip[0]),
- (byte) (mask[1] & ip[1]),
- (byte) (mask[2] & ip[2]),
- (byte) (mask[3] & ip[3])
- }
- );
+ return InetAddress.getByAddress(new byte[]
+ {
+ (byte) (mask[0] & ip[0]),
+ (byte) (mask[1] & ip[1]),
+ (byte) (mask[2] & ip[2]),
+ (byte) (mask[3] & ip[3])
+ });
}
catch (Exception _)
{
@@ -127,7 +125,7 @@ class InetNetwork
*/
static private String normalizeFromAsterisk(final String netspec)
{
- String[] masks = { "0.0.0.0/0.0.0.0", "0.0.0/255.0.0.0", "0.0/255.255.0.0", "0/255.255.255.0" };
+ String[] masks = {"0.0.0.0/0.0.0.0", "0.0.0/255.0.0.0", "0.0/255.255.0.0", "0/255.255.255.0"};
char[] srcb = netspec.toCharArray();
int octets = 0;
for (int i = 1; i < netspec.length(); i++)
@@ -137,7 +135,7 @@ class InetNetwork
octets++;
}
}
- return (octets == 0) ? masks[0] : netspec.substring(0, netspec.length() -1 ).concat(masks[octets]);
+ return (octets == 0) ? masks[0] : netspec.substring(0, netspec.length() - 1).concat(masks[octets]);
}
/*
@@ -148,30 +146,14 @@ class InetNetwork
*/
static private String normalizeFromCIDR(final String netspec)
{
- final int bits = 32 - Integer.parseInt(netspec.substring(netspec.indexOf('/')+1));
- final int mask = (bits == 32) ? 0 : 0xFFFFFFFF - ((1 << bits)-1);
+ final int bits = 32 - Integer.parseInt(netspec.substring(netspec.indexOf('/') + 1));
+ final int mask = (bits == 32) ? 0 : 0xFFFFFFFF - ((1 << bits) - 1);
return netspec.substring(0, netspec.indexOf('/') + 1) +
- Integer.toString(mask >> 24 & 0xFF, 10) + "." +
- Integer.toString(mask >> 16 & 0xFF, 10) + "." +
- Integer.toString(mask >> 8 & 0xFF, 10) + "." +
- Integer.toString(mask >> 0 & 0xFF, 10);
+ Integer.toString(mask >> 24 & 0xFF, 10) + "." +
+ Integer.toString(mask >> 16 & 0xFF, 10) + "." +
+ Integer.toString(mask >> 8 & 0xFF, 10) + "." +
+ Integer.toString(mask >> 0 & 0xFF, 10);
}
- private static InetAddress getByAddress(byte[] ip) throws java.net.UnknownHostException
- {
- InetAddress addr = InetAddress.getByAddress(ip);
-
- if (addr == null) {
- addr = InetAddress.getByName
- (
- Integer.toString(ip[0] & 0xFF, 10) + "." +
- Integer.toString(ip[1] & 0xFF, 10) + "." +
- Integer.toString(ip[2] & 0xFF, 10) + "." +
- Integer.toString(ip[3] & 0xFF, 10)
- );
- }
-
- return addr;
- }
-} \ No newline at end of file
+}
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java
index ec0c38ec42..db7ee54cb2 100644
--- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java
+++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java
@@ -285,6 +285,7 @@ public class ConsumerTarget_0_10 extends AbstractConsumerTarget implements FlowC
else if(!msgCompressed
&& compressionSupported
&& (messageProps == null || messageProps.getContentEncoding()==null)
+ && body != null
&& body.remaining() > _session.getConnection().getMessageCompressionThreshold())
{
byte[] compressed = GZIPUtils.compressBufferToArray(body);
diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
index deaa3ef50b..def75527f3 100644
--- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
+++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
@@ -628,7 +628,7 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS
queueEntry.release();
_unsettledMap.remove(deliveryTag);
}
- else if(initialUnsettledMap != null && (initialUnsettledMap.get(deliveryTag) instanceof Outcome))
+ else if(initialUnsettledMap.get(deliveryTag) instanceof Outcome)
{
Outcome outcome = (Outcome) initialUnsettledMap.get(deliveryTag);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
index d29144f09b..f55b373119 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
@@ -441,7 +441,7 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem
Collection<Port<?>> httpPorts = new HashSet<>();
for (Port<?> port : ports)
{
- if (port.getAvailableProtocols().contains(Protocol.HTTP))
+ if (port.getProtocols().contains(Protocol.HTTP))
{
httpPorts.add(port);
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
index 171c0d1e1c..dc1f5bba46 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
@@ -17,7 +17,6 @@
package org.apache.qpid.server.management.plugin.servlet.rest;
import java.io.IOException;
-import java.io.PrintWriter;
import java.io.Writer;
import java.security.AccessControlException;
import java.util.ArrayList;
@@ -43,6 +42,7 @@ import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
@@ -407,7 +407,7 @@ public class RestServlet extends AbstractServlet
}
catch (RuntimeException e)
{
- setResponseStatus(response, e);
+ setResponseStatus(request, response, e);
}
return;
}
@@ -423,7 +423,7 @@ public class RestServlet extends AbstractServlet
Collection<ConfiguredObject>[] objects = new Collection[_hierarchy.length];
if (_hierarchy.length == 1)
{
- createOrUpdate(providedObject, _hierarchy[0], getBroker(), null, response);
+ createOrUpdate(providedObject, _hierarchy[0], getBroker(), null, request, response);
}
else
{
@@ -486,13 +486,14 @@ public class RestServlet extends AbstractServlet
ConfiguredObject theParent = parents.remove(0);
ConfiguredObject[] otherParents = parents.toArray(new ConfiguredObject[parents.size()]);
- createOrUpdate(providedObject, objClass, theParent, otherParents, response);
+ createOrUpdate(providedObject, objClass, theParent, otherParents, request, response);
}
}
private void createOrUpdate(Map<String, Object> providedObject, Class<? extends ConfiguredObject> objClass,
- ConfiguredObject theParent, ConfiguredObject[] otherParents, HttpServletResponse response) throws IOException
+ ConfiguredObject theParent, ConfiguredObject[] otherParents, HttpServletRequest request,
+ HttpServletResponse response) throws IOException
{
try
{
@@ -513,7 +514,7 @@ public class RestServlet extends AbstractServlet
}
catch (RuntimeException e)
{
- setResponseStatus(response, e);
+ setResponseStatus(request, response, e);
}
}
@@ -552,24 +553,40 @@ public class RestServlet extends AbstractServlet
return true;
}
- private void setResponseStatus(HttpServletResponse response, RuntimeException e) throws IOException
+ private void setResponseStatus(HttpServletRequest request, HttpServletResponse response, RuntimeException e) throws IOException
{
if (e instanceof AccessControlException)
{
if (LOGGER.isDebugEnabled())
{
- LOGGER.debug("Caught security exception, sending " + HttpServletResponse.SC_FORBIDDEN, e);
+ LOGGER.debug("AccessControlException, sending " + HttpServletResponse.SC_FORBIDDEN, e);
}
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
}
else
{
- LOGGER.warn("Caught exception", e);
+ if (e instanceof IllegalConfigurationException || e instanceof IllegalArgumentException)
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug(e.getClass().getSimpleName() + " processing request : " + e.getMessage());
+ }
+ else if (LOGGER.isTraceEnabled())
+ {
+ LOGGER.trace(e.getClass().getSimpleName() + " processing request", e);
+ }
+ }
+ else
+ {
+ LOGGER.warn("Unexpected exception processing request ", e);
+ }
+
response.setStatus(HttpServletResponse.SC_CONFLICT);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
- PrintWriter out = response.getWriter();
+
+ Writer out = getOutputWriter(request, response);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
mapper.writeValue(out, Collections.singletonMap("errorMessage", e.getMessage()));
@@ -596,7 +613,7 @@ public class RestServlet extends AbstractServlet
}
catch(RuntimeException e)
{
- setResponseStatus(response, e);
+ setResponseStatus(request, response, e);
}
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
index 3c0cb9a5f6..11f229237c 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
@@ -125,7 +125,7 @@
</div>
<div class="dijitDialogPaneActionBar">
<input type="button" id="errorDialog.button.cancel" value="Cancel" label="Cancel" dojoType="dijit.form.Button" onClick="dijit.byId('errorDialog').hide();"/>
- <input type="button" id="errorDialog.button.relogin" value="Login" label="Login" dojoType="dijit.form.Button" onClick="dijit.byId('errorDialog').hide(); document.location.href = '/';"/>
+ <input type="button" id="errorDialog.button.relogin" value="Login" label="Login" dojoType="dijit.form.Button" onClick="dijit.byId('errorDialog').hide(); window.location='logout';"/>
</div>
</div>
</div>
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js
index 8d58b6dec0..e5d96d44e7 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/GridUpdater.js
@@ -160,7 +160,7 @@ define(["dojo/_base/xhr",
if (this.serviceUrl)
{
var requestUrl = lang.isFunction(this.serviceUrl) ? this.serviceUrl() : this.serviceUrl;
- xhr.get({url: requestUrl, sync: true, handleAs: "json"}).then(processData, util.errorHandler);
+ xhr.get({url: requestUrl, sync: true, handleAs: "json"}).then(processData, util.xhrErrorHandler);
}
else
{
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
index 441d6776e7..cb0cc792e8 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
@@ -345,15 +345,18 @@ define(["dojo/_base/xhr",
var hasMessage = error.hasOwnProperty("message");
var message;
- if (error.status == 401)
+ if (error.status == 0)
{
- message = hasMessage ? error.message : "Authentication required";
+ message = "Unable to contact the Broker";
+ }
+ else if (error.status == 401)
+ {
+ message = "Authentication required";
userMustReauth = true;
}
else if (error.status == 403)
{
- message = hasMessage ? error.message : "Forbidden";
- userMustReauth = true;
+ message = "Access Forbidden";
}
else
{
@@ -398,22 +401,6 @@ define(["dojo/_base/xhr",
}
};
- util.errorHandler = function errorHandler(error)
- {
- if(error.status == 401)
- {
- alert("Authentication Failed");
- }
- else if(error.status == 403)
- {
- alert("Access Denied");
- }
- else
- {
- alert(error);
- }
- }
-
util.sendRequest = function (url, method, attributes, sync)
{
var success = false;
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
index ead6ba6865..98c6d9ffe8 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
@@ -184,12 +184,12 @@ public class JMXManagementPluginImpl
private boolean isConnectorPort(Port<?> port)
{
- return port.getAvailableProtocols().contains(Protocol.JMX_RMI);
+ return port.getProtocols().contains(Protocol.JMX_RMI);
}
private boolean isRegistryPort(Port<?> port)
{
- return port.getAvailableProtocols().contains(Protocol.RMI);
+ return port.getProtocols().contains(Protocol.RMI);
}
@Override
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
index 43b0f9da67..d6b8a25b8a 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java
@@ -146,7 +146,7 @@ public class Main
{
execute();
}
- catch(Throwable e)
+ catch(Exception e)
{
System.err.println("Exception during startup: " + e);
e.printStackTrace();
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
index 46473900c0..19720ea386 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
@@ -101,7 +101,7 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic
{
ssn.flushAcknowledgments(true);
}
- catch (Throwable t)
+ catch (Exception t)
{
_logger.error("error flushing acks", t);
}
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java
index 71d07b1fa0..9748038b9b 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java
@@ -20,14 +20,12 @@
*/
package org.apache.qpid.client.message;
-import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
-import java.util.zip.GZIPInputStream;
import javax.jms.JMSException;
@@ -164,30 +162,6 @@ public abstract class AbstractJMSMessageFactory implements MessageFactory
return message;
}
- private ByteBuffer uncompressBody(final InputStream bodyInputStream) throws AMQException
- {
- final ByteBuffer data;
- try(GZIPInputStream gzipInputStream = new GZIPInputStream(bodyInputStream))
- {
- ByteArrayOutputStream uncompressedBuffer = new ByteArrayOutputStream();
- int read;
- byte[] buf = new byte[4096];
- while((read = gzipInputStream.read(buf))!=-1)
- {
- uncompressedBuffer.write(buf,0,read);
- }
- byte[] uncompressedBytes = uncompressedBuffer.toByteArray();
- data = ByteBuffer.wrap(uncompressedBytes);
- }
- catch (IOException e)
- {
- // TODO - shouldn't happen
- throw new AMQException("Error uncompressing gzipped message data", e);
- }
- return data;
- }
-
-
public AbstractJMSMessage createMessage(long messageNbr, boolean redelivered, ContentHeaderBody contentHeader,
AMQShortString exchange, AMQShortString routingKey, List bodies,
AMQSession_0_8.DestinationCache<AMQQueue> queueDestinationCache,
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/FieldTableSupport.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/FieldTableSupport.java
index c3f36a545a..3d3b753ad3 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/FieldTableSupport.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/FieldTableSupport.java
@@ -20,12 +20,12 @@
*/
package org.apache.qpid.client.message;
-import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.framing.FieldTable;
-
import java.util.HashMap;
import java.util.Map;
+import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.framing.FieldTable;
+
public class FieldTableSupport
{
private FieldTableSupport()
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java b/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
index 681082526c..48bfe74cfc 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
@@ -172,6 +172,10 @@ public class AMQProtocolHandler implements ProtocolEngine
private long _writtenBytes;
private long _readBytes;
+ private int _messageReceivedCount;
+ private int _messagesOut;
+
+
private NetworkConnection _network;
private Sender<ByteBuffer> _sender;
private long _lastReadTime = System.currentTimeMillis();
@@ -451,9 +455,6 @@ public class AMQProtocolHandler implements ProtocolEngine
_lastFailoverException = null;
}
- private static int _messageReceivedCount;
-
-
public void received(ByteBuffer msg)
{
_readBytes += msg.remaining();
@@ -559,8 +560,6 @@ public class AMQProtocolHandler implements ProtocolEngine
}
- private static int _messagesOut;
-
public StateWaiter createWaiter(Set<AMQState> states) throws AMQException
{
return getStateManager().createWaiter(states);
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/util/BlockingWaiter.java b/qpid/java/client/src/main/java/org/apache/qpid/client/util/BlockingWaiter.java
index 53b6730ef7..21f1623dd1 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/util/BlockingWaiter.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/util/BlockingWaiter.java
@@ -20,6 +20,11 @@
*/
package org.apache.qpid.client.util;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -27,11 +32,6 @@ import org.apache.qpid.AMQException;
import org.apache.qpid.AMQTimeoutException;
import org.apache.qpid.client.failover.FailoverException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-
/**
* BlockingWaiter is a 'rendezvous' which delegates handling of
* incoming Objects to a listener implemented as a sub-class of this and hands off the process or
@@ -243,7 +243,7 @@ public abstract class BlockingWaiter<T>
}
else
{
- _logger.error("WARNING: new error '" + e == null ? "null" : e.getMessage() + "' arrived while old one not yet processed:" + _error.getMessage());
+ _logger.error("WARNING: new error '" + (e == null ? "null" : e.getMessage()) + "' arrived while old one not yet processed:" + _error.getMessage());
}
if (_waiting.get())
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java
index b490aee898..ef0da9b918 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java
@@ -136,42 +136,42 @@ public class BasicContentHeaderProperties
{
int size = 0;
- if ((_propertyFlags & (CONTENT_TYPE_MASK)) > 0)
+ if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
{
size += EncodingUtils.encodedShortStringLength(_contentType);
}
- if ((_propertyFlags & ENCODING_MASK) > 0)
+ if ((_propertyFlags & ENCODING_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_encoding);
}
- if ((_propertyFlags & HEADERS_MASK) > 0)
+ if ((_propertyFlags & HEADERS_MASK) != 0)
{
size += EncodingUtils.encodedFieldTableLength(_headers);
}
- if ((_propertyFlags & DELIVERY_MODE_MASK) > 0)
+ if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
{
size += 1;
}
- if ((_propertyFlags & PRIORITY_MASK) > 0)
+ if ((_propertyFlags & PRIORITY_MASK) != 0)
{
size += 1;
}
- if ((_propertyFlags & CORRELATION_ID_MASK) > 0)
+ if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_correlationId);
}
- if ((_propertyFlags & REPLY_TO_MASK) > 0)
+ if ((_propertyFlags & REPLY_TO_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_replyTo);
}
- if ((_propertyFlags & EXPIRATION_MASK) > 0)
+ if ((_propertyFlags & EXPIRATION_MASK) != 0)
{
if (_expiration == 0L)
{
@@ -183,32 +183,32 @@ public class BasicContentHeaderProperties
}
}
- if ((_propertyFlags & MESSAGE_ID_MASK) > 0)
+ if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_messageId);
}
- if ((_propertyFlags & TIMESTAMP_MASK) > 0)
+ if ((_propertyFlags & TIMESTAMP_MASK) != 0)
{
size += 8;
}
- if ((_propertyFlags & TYPE_MASK) > 0)
+ if ((_propertyFlags & TYPE_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_type);
}
- if ((_propertyFlags & USER_ID_MASK) > 0)
+ if ((_propertyFlags & USER_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_userId);
}
- if ((_propertyFlags & APPLICATION_ID_MASK) > 0)
+ if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_appId);
}
- if ((_propertyFlags & CLUSTER_ID_MASK) > 0)
+ if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_clusterId);
}
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
index e8499539be..b52b59aa15 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
@@ -210,7 +210,7 @@ final class IoReceiver implements Runnable
}
}
}
- catch (Throwable t)
+ catch (Exception t)
{
if (shouldReport(t))
{
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java
index a90ea52202..2a70087c10 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java
@@ -21,13 +21,13 @@
package org.apache.qpid.transport.network.security.sasl;
+import javax.security.sasl.Sasl;
+import javax.security.sasl.SaslClient;
+
import org.apache.qpid.transport.Connection;
import org.apache.qpid.transport.ConnectionException;
import org.apache.qpid.transport.ConnectionListener;
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
-
public abstract class SASLEncryptor implements ConnectionListener
{
private SaslClient saslClient;
@@ -45,7 +45,7 @@ public abstract class SASLEncryptor implements ConnectionListener
if (conn.getSaslClient() != null)
{
saslClient = conn.getSaslClient();
- if (saslClient.isComplete() && saslClient.getNegotiatedProperty(Sasl.QOP) == "auth-conf")
+ if (saslClient.isComplete() && "auth-conf".equals(saslClient.getNegotiatedProperty(Sasl.QOP)))
{
sendBuffSize = Integer.parseInt(
(String)saslClient.getNegotiatedProperty(Sasl.RAW_SEND_SIZE));
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/url/URLHelper.java b/qpid/java/common/src/main/java/org/apache/qpid/url/URLHelper.java
index 8516e7fa0e..c7fea15576 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/url/URLHelper.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/url/URLHelper.java
@@ -151,15 +151,15 @@ public class URLHelper
}
else
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append('?');
- for (String key : options.keySet())
+ for (Map.Entry<String,String> entry : options.entrySet())
{
- sb.append(key);
+ sb.append(entry.getKey());
sb.append("='");
- sb.append(options.get(key));
+ sb.append(entry.getValue());
sb.append("'");
sb.append(DEFAULT_OPTION_SEPERATOR);
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/Strings.java b/qpid/java/common/src/main/java/org/apache/qpid/util/Strings.java
index b7b9bf8c6e..6dd6a989cb 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/Strings.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/Strings.java
@@ -323,9 +323,9 @@ public final class Strings
sb.append("<");
if (map != null)
{
- for(String key : map.keySet())
+ for(Map.Entry<String,Object> entry : map.entrySet())
{
- sb.append(key).append(" = ").append(map.get(key)).append(" ");
+ sb.append(entry.getKey()).append(" = ").append(entry.getValue()).append(" ");
}
}
sb.append(">");
diff --git a/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/client/ParticipantExecutor.java b/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/client/ParticipantExecutor.java
index 10f62708a4..f34ac941bc 100644
--- a/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/client/ParticipantExecutor.java
+++ b/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/client/ParticipantExecutor.java
@@ -25,10 +25,11 @@ import java.util.concurrent.ThreadFactory;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
-import org.apache.qpid.disttest.message.ParticipantResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.qpid.disttest.message.ParticipantResult;
+
public class ParticipantExecutor
{
private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantExecutor.class);
@@ -100,7 +101,7 @@ public class ParticipantExecutor
}
result = _participant.doIt(_client.getClientName());
}
- catch (Throwable t)
+ catch (Exception t)
{
String errorMessage = "Unhandled error: " + t.getMessage();
LOGGER.error(errorMessage, t);
diff --git a/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/controller/TestRunner.java b/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/controller/TestRunner.java
index e973f07c12..a60a7ec88f 100644
--- a/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/controller/TestRunner.java
+++ b/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/controller/TestRunner.java
@@ -26,6 +26,9 @@ import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.apache.qpid.disttest.DistributedTestException;
import org.apache.qpid.disttest.controller.config.QueueConfig;
import org.apache.qpid.disttest.controller.config.TestInstance;
@@ -36,8 +39,6 @@ import org.apache.qpid.disttest.message.ParticipantResult;
import org.apache.qpid.disttest.message.Response;
import org.apache.qpid.disttest.message.StartTestCommand;
import org.apache.qpid.disttest.message.TearDownTestCommand;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class TestRunner
{
@@ -72,7 +73,7 @@ public class TestRunner
{
deleteQueues();
}
- catch (Throwable t)
+ catch (Exception t)
{
LOGGER.error("Failed to delete test queues during shutdown", t);
}
diff --git a/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/jms/ControllerJmsDelegate.java b/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/jms/ControllerJmsDelegate.java
index 782f7ae2fd..330407e375 100644
--- a/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/jms/ControllerJmsDelegate.java
+++ b/qpid/java/perftests/src/main/java/org/apache/qpid/disttest/jms/ControllerJmsDelegate.java
@@ -36,13 +36,14 @@ import javax.jms.Session;
import javax.naming.Context;
import javax.naming.NamingException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.apache.qpid.disttest.DistributedTestException;
import org.apache.qpid.disttest.controller.CommandListener;
import org.apache.qpid.disttest.controller.config.QueueConfig;
import org.apache.qpid.disttest.message.Command;
import org.apache.qpid.disttest.message.RegisterClientCommand;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class ControllerJmsDelegate
{
@@ -121,7 +122,7 @@ public class ControllerJmsDelegate
processCommandWithFirstSupportingListener(command);
LOGGER.debug("Finished processing command for message " + jmsMessageID);
}
- catch (Throwable t)
+ catch (Exception t)
{
LOGGER.error("Can't handle JMS message", t);
}
diff --git a/qpid/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java b/qpid/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
index 845e7e58c3..74d2f1cf97 100644
--- a/qpid/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
+++ b/qpid/java/qpid-test-utils/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
@@ -74,7 +74,7 @@ public class QpidTestCase extends TestCase
String testExcludes = System.getProperty(TEST_EXCLUDES);
//For the maven build, process the test.excludes property
- if(testExcludes != null && exclusionListURIs == "")
+ if(testExcludes != null && "".equals(exclusionListURIs))
{
for (String exclude : testExcludes.split("\\s+"))
{
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
index 0345485167..386cd80f38 100755
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
@@ -550,8 +550,6 @@ public class QpidBrokerTestCase extends QpidTestCase
// in to the external broker's QPID_OPTS string.
setSystemProperty("amqj.protocol.logging.level");
setSystemProperty("root.logging.level");
- setSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES);
- setSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES);
setSystemProperty("test.port");
setSystemProperty("test.mport");
diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/server/SupportedProtocolVersionsTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/server/SupportedProtocolVersionsTest.java
index b94827f249..85a523329a 100644
--- a/qpid/java/systests/src/test/java/org/apache/qpid/server/SupportedProtocolVersionsTest.java
+++ b/qpid/java/systests/src/test/java/org/apache/qpid/server/SupportedProtocolVersionsTest.java
@@ -34,7 +34,6 @@ import org.apache.qpid.configuration.ClientProperties;
import org.apache.qpid.framing.ProtocolVersion;
import org.apache.qpid.server.configuration.BrokerProperties;
import org.apache.qpid.server.model.Protocol;
-import org.apache.qpid.server.model.adapter.PortFactoryTest;
import org.apache.qpid.server.plugin.AMQPProtocolVersionWrapper;
import org.apache.qpid.test.utils.QpidBrokerTestCase;
@@ -43,7 +42,6 @@ import org.apache.qpid.test.utils.QpidBrokerTestCase;
* versions entirely, rather than selectively excluding them on particular ports,
* and it is possible to configure the reply to an unsupported protocol initiation.
*<p>
- * Protocol exclusion/inclusion are unit tested as part of {@link PortFactoryTest}
*/
public class SupportedProtocolVersionsTest extends QpidBrokerTestCase
{
@@ -55,8 +53,7 @@ public class SupportedProtocolVersionsTest extends QpidBrokerTestCase
private void clearProtocolSupportManipulations() throws Exception
{
//Remove the QBTC provided protocol manipulations, giving only the protocols which default to enabled
- setSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_EXCLUDES, null);
- setSystemProperty(BrokerProperties.PROPERTY_BROKER_DEFAULT_AMQP_PROTOCOL_INCLUDES, null);
+
setSystemProperty(QpidBrokerTestCase.TEST_AMQP_PORT_PROTOCOLS_PROPERTY, getProtocolsAsString(getAllAmqpProtocols()));
}