diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-09-01 15:20:35 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-09-01 15:20:35 +0000 |
| commit | 1375adcc2dc0f1b7637d838ecffd328a7eca96ff (patch) | |
| tree | d889183e6f273df76185def635c8910293906130 /qpid/java/client/src | |
| parent | 4d7d63621523d4ca43e7a41de0d37239ec5278e7 (diff) | |
| download | qpid-python-1375adcc2dc0f1b7637d838ecffd328a7eca96ff.tar.gz | |
QPID-6052 : Address review comments from Robbie Gemmell
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1621826 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/client/src')
5 files changed, 168 insertions, 271 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java index 6e1ca889c0..fa0a6be91c 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java @@ -129,7 +129,7 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate if (subject != null) { messageProps.getApplicationHeaders().remove(QpidMessageProperties.QPID_SUBJECT); - messageProps.getApplicationHeaders().put("JMS_" + QpidMessageProperties.QPID_SUBJECT_JMS_PROPER,subject); + messageProps.getApplicationHeaders().put(QpidMessageProperties.QPID_SUBJECT_JMS_PROPERTY,subject); } } dest = (AMQDestination) convertToAddressBasedDestination(_deliveryProps.getExchange(), @@ -705,7 +705,7 @@ public class AMQMessageDelegate_0_10 extends AbstractAMQMessageDelegate } else if (isStrictJMS && QpidMessageProperties.QPID_SUBJECT.equals(propertyName)) { - return (String)getApplicationHeaders().get("JMS_" + QpidMessageProperties.QPID_SUBJECT_JMS_PROPER); + return (String)getApplicationHeaders().get(QpidMessageProperties.QPID_SUBJECT_JMS_PROPERTY); } else { diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java index 0c8c853f07..486023e847 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; import javax.jms.Destination; @@ -135,16 +136,9 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate { String subject = null; if (contentHeader.getHeaders() != null - && contentHeader.getHeaders().containsKey(QpidMessageProperties.QPID_SUBJECT) - && STRICT_JMS) + && contentHeader.getHeaders().containsKey(QpidMessageProperties.QPID_SUBJECT)) { subject = contentHeader.getHeaders().getString(QpidMessageProperties.QPID_SUBJECT); - if (subject != null) - { - contentHeader.getHeaders().remove(QpidMessageProperties.QPID_SUBJECT); - contentHeader.getHeaders().setString("JMS_" + QpidMessageProperties.QPID_SUBJECT_JMS_PROPER, - subject); - } } if(type == null) { @@ -512,7 +506,8 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate public Enumeration getPropertyNames() throws JMSException { - return getJmsHeaders().getPropertyNames(); + Set<String> keys = getJmsHeaders().getPropertyNames(); + return Collections.enumeration(keys); } public void setBooleanProperty(String propertyName, boolean b) throws JMSException @@ -584,7 +579,7 @@ public class AMQMessageDelegate_0_8 extends AbstractAMQMessageDelegate } checkWritableProperties(); - getJmsHeaders().setDouble(propertyName, new Double(v)); + getJmsHeaders().setDouble(propertyName, v); } public void setStringProperty(String propertyName, String value) throws JMSException diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java index 122a5c4ef2..e27b3d81cb 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java @@ -20,77 +20,76 @@ */ package org.apache.qpid.client.message; -import org.apache.qpid.AMQPInvalidClassException; -import org.apache.qpid.framing.AMQShortString; -import org.apache.qpid.framing.FieldTable; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; import javax.jms.JMSException; import javax.jms.MessageFormatException; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.ByteBuffer; -import java.util.Enumeration; + +import org.apache.qpid.AMQPInvalidClassException; +import org.apache.qpid.framing.FieldTable; public final class JMSHeaderAdapter { - private final FieldTable _headers; + private static final Map<String,String> AMQP_TO_JMS_HEADER_NAME_MAPPINGS; + private static final Map<String,String> JMS_TO_AMQP_HEADER_NAME_MAPPINGS; - public JMSHeaderAdapter(FieldTable headers) - { - _headers = headers; - } - public FieldTable getHeaders() + static { - return _headers; - } + String[][] mappings = { + { QpidMessageProperties.QPID_SUBJECT, QpidMessageProperties.QPID_SUBJECT_JMS_PROPERTY } + }; - public boolean getBoolean(String string) throws JMSException - { - checkPropertyName(string); - Boolean b = getHeaders().getBoolean(string); + Map<String,String> amqpToJmsHeaderNameMappings = new HashMap<>(); + Map<String,String> jmsToAmqpHeaderNameMappings = new HashMap<>(); - if (b == null) + for(String[] mapping : mappings) { - if (getHeaders().containsKey(string)) - { - Object str = getHeaders().getObject(string); - - if (!(str instanceof String)) - { - throw new MessageFormatException("getBoolean can't use " + string + " item."); - } - else - { - return Boolean.valueOf((String) str); - } - } - else - { - b = Boolean.valueOf(null); - } + amqpToJmsHeaderNameMappings.put(mapping[0], mapping[1]); + jmsToAmqpHeaderNameMappings.put(mapping[1], mapping[0]); } - return b; + AMQP_TO_JMS_HEADER_NAME_MAPPINGS = Collections.unmodifiableMap(amqpToJmsHeaderNameMappings); + JMS_TO_AMQP_HEADER_NAME_MAPPINGS = Collections.unmodifiableMap(jmsToAmqpHeaderNameMappings); } - public boolean getBoolean(AMQShortString string) throws JMSException + private static final boolean STRICT_JMS = Boolean.getBoolean("strict-jms"); + + + private final FieldTable _headers; + + public JMSHeaderAdapter(FieldTable headers) { - checkPropertyName(string); - Boolean b = getHeaders().getBoolean(string); + _headers = headers; + } + + + private String mapJmsToAmqpName(String name) + { + return JMS_TO_AMQP_HEADER_NAME_MAPPINGS.containsKey(name) ? JMS_TO_AMQP_HEADER_NAME_MAPPINGS.get(name) : name; + } + + public boolean getBoolean(String name) throws JMSException + { + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Boolean b = _headers.getBoolean(amqpName); if (b == null) { - if (getHeaders().containsKey(string)) + if (_headers.containsKey(amqpName)) { - Object str = getHeaders().getObject(string); + Object str = _headers.getObject(amqpName); if (!(str instanceof String)) { - throw new MessageFormatException("getBoolean can't use " + string + " item."); + throw new MessageFormatException("getBoolean can't use " + name + " item."); } else { @@ -106,42 +105,16 @@ public final class JMSHeaderAdapter return b; } - public char getCharacter(String string) throws JMSException - { - checkPropertyName(string); - Character c = getHeaders().getCharacter(string); - if (c == null) - { - if (getHeaders().isNullStringValue(string)) - { - throw new NullPointerException("Cannot convert null char"); - } - else - { - throw new MessageFormatException("getChar can't use " + string + " item."); - } - } - else - { - return (char) c; - } - } - - public byte[] getBytes(String string) throws JMSException + public byte[] getBytes(String name) throws JMSException { - return getBytes(new AMQShortString(string)); - } - - public byte[] getBytes(AMQShortString string) throws JMSException - { - checkPropertyName(string); - - byte[] bs = getHeaders().getBytes(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + byte[] bs = _headers.getBytes(amqpName); if (bs == null) { - throw new MessageFormatException("getBytes can't use " + string + " item."); + throw new MessageFormatException("getBytes can't use " + name + " item."); } else { @@ -149,19 +122,20 @@ public final class JMSHeaderAdapter } } - public byte getByte(String string) throws JMSException + public byte getByte(String name) throws JMSException { - checkPropertyName(string); - Byte b = getHeaders().getByte(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Byte b = _headers.getByte(amqpName); if (b == null) { - if (getHeaders().containsKey(string)) + if (_headers.containsKey(amqpName)) { - Object str = getHeaders().getObject(string); + Object str = _headers.getObject(amqpName); if (!(str instanceof String)) { - throw new MessageFormatException("getByte can't use " + string + " item."); + throw new MessageFormatException("getByte can't use " + name + " item."); } else { @@ -177,59 +151,63 @@ public final class JMSHeaderAdapter return b; } - public short getShort(String string) throws JMSException + public short getShort(String name) throws JMSException { - checkPropertyName(string); - Short s = getHeaders().getShort(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Short s = _headers.getShort(amqpName); if (s == null) { - s = Short.valueOf(getByte(string)); + s = Short.valueOf(getByte(amqpName)); } return s; } - public int getInteger(String string) throws JMSException + public int getInteger(String name) throws JMSException { - checkPropertyName(string); - Integer i = getHeaders().getInteger(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Integer i = _headers.getInteger(amqpName); if (i == null) { - i = Integer.valueOf(getShort(string)); + i = Integer.valueOf(getShort(amqpName)); } return i; } - public long getLong(String string) throws JMSException + public long getLong(String name) throws JMSException { - checkPropertyName(string); - Long l = getHeaders().getLong(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Long l = _headers.getLong(amqpName); if (l == null) { - l = Long.valueOf(getInteger(string)); + l = Long.valueOf(getInteger(amqpName)); } return l; } - public float getFloat(String string) throws JMSException + public float getFloat(String name) throws JMSException { - checkPropertyName(string); - Float f = getHeaders().getFloat(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Float f = _headers.getFloat(amqpName); if (f == null) { - if (getHeaders().containsKey(string)) + if (_headers.containsKey(amqpName)) { - Object str = getHeaders().getObject(string); + Object str = _headers.getObject(amqpName); if (!(str instanceof String)) { - throw new MessageFormatException("getFloat can't use " + string + " item."); + throw new MessageFormatException("getFloat can't use " + name + " item."); } else { @@ -238,7 +216,7 @@ public final class JMSHeaderAdapter } else { - throw new NullPointerException("No such property: " + string); + throw new NullPointerException("No such property: " + name); } } @@ -246,32 +224,34 @@ public final class JMSHeaderAdapter return f; } - public double getDouble(String string) throws JMSException + public double getDouble(String name) throws JMSException { - checkPropertyName(string); - Double d = getHeaders().getDouble(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + Double d = _headers.getDouble(amqpName); if (d == null) { - d = Double.valueOf(getFloat(string)); + d = Double.valueOf(getFloat(amqpName)); } return d; } - public String getString(String string) throws JMSException + public String getString(String name) throws JMSException { - checkPropertyName(string); - String s = getHeaders().getString(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + String s = _headers.getString(amqpName); if (s == null) { - if (getHeaders().containsKey(string)) + if (_headers.containsKey(amqpName)) { - Object o = getHeaders().getObject(string); + Object o = _headers.getObject(amqpName); if (o instanceof byte[]) { - throw new MessageFormatException("getObject couldn't find " + string + " item."); + throw new MessageFormatException("getObject couldn't find " + name + " item."); } else { @@ -290,115 +270,76 @@ public final class JMSHeaderAdapter return s; } - public Object getObject(String string) throws JMSException - { - checkPropertyName(string); - return getHeaders().getObject(string); - } - - public void setBoolean(AMQShortString string, boolean b) throws JMSException - { - checkPropertyName(string); - getHeaders().setBoolean(string, b); - } - - public void setBoolean(String string, boolean b) throws JMSException - { - checkPropertyName(string); - getHeaders().setBoolean(string, b); - } - - public void setChar(String string, char c) throws JMSException - { - checkPropertyName(string); - getHeaders().setChar(string, c); - } - - public Object setBytes(AMQShortString string, byte[] bytes) - { - checkPropertyName(string); - return getHeaders().setBytes(string, bytes); - } - - public Object setBytes(String string, byte[] bytes) - { - checkPropertyName(string); - return getHeaders().setBytes(string, bytes); - } - - public Object setBytes(String string, byte[] bytes, int start, int length) - { - checkPropertyName(string); - return getHeaders().setBytes(string, bytes, start, length); - } - - public void setByte(String string, byte b) throws JMSException + public Object getObject(String name) throws JMSException { - checkPropertyName(string); - getHeaders().setByte(string, b); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + return _headers.getObject(amqpName); } - public void setByte(AMQShortString string, byte b) throws JMSException + public void setBoolean(String name, boolean b) throws JMSException { - checkPropertyName(string); - getHeaders().setByte(string, b); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setBoolean(amqpName, b); } - - public void setShort(String string, short i) throws JMSException + public void setByte(String name, byte b) throws JMSException { - checkPropertyName(string); - getHeaders().setShort(string, i); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setByte(amqpName, b); } - public void setInteger(String string, int i) throws JMSException + public void setShort(String name, short i) throws JMSException { - checkPropertyName(string); - getHeaders().setInteger(string, i); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setShort(amqpName, i); } - public void setInteger(AMQShortString string, int i) throws JMSException + public void setInteger(String name, int i) throws JMSException { - checkPropertyName(string); - getHeaders().setInteger(string, i); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setInteger(amqpName, i); } - public void setLong(String string, long l) throws JMSException + public void setLong(String name, long l) throws JMSException { - checkPropertyName(string); - getHeaders().setLong(string, l); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setLong(amqpName, l); } - public void setFloat(String string, float v) throws JMSException + public void setFloat(String name, float v) throws JMSException { - checkPropertyName(string); - getHeaders().setFloat(string, v); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setFloat(amqpName, v); } - public void setDouble(String string, double v) throws JMSException + public void setDouble(String name, double v) throws JMSException { - checkPropertyName(string); - getHeaders().setDouble(string, v); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setDouble(amqpName, v); } - public void setString(String string, String string1) throws JMSException + public void setString(String name, String value) throws JMSException { - checkPropertyName(string); - getHeaders().setString(string, string1); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); + _headers.setString(amqpName, value); } - public void setString(AMQShortString string, String string1) throws JMSException + public void setObject(String name, Object object) throws JMSException { - checkPropertyName(string); - getHeaders().setString(string, string1); - } - - public void setObject(String string, Object object) throws JMSException - { - checkPropertyName(string); + checkPropertyName(name); + String amqpName = mapJmsToAmqpName(name); try { - getHeaders().setObject(string, object); + _headers.setObject(amqpName, object); } catch (AMQPInvalidClassException aice) { @@ -409,85 +350,45 @@ public final class JMSHeaderAdapter } } - public boolean itemExists(String string) throws JMSException - { - checkPropertyName(string); - return getHeaders().containsKey(string); - } - - public Enumeration getPropertyNames() + public Set<String> getPropertyNames() { - return getHeaders().getPropertyNames(); + Set<String> names = new LinkedHashSet<>(_headers.keys()); + for(Map.Entry<String,String> entry : AMQP_TO_JMS_HEADER_NAME_MAPPINGS.entrySet()) + { + if(names.contains(entry.getKey())) + { + names.add(entry.getValue()); + if(STRICT_JMS) + { + names.remove(entry.getKey()); + } + } + } + return names; } public void clear() { - getHeaders().clear(); - } - - public boolean propertyExists(AMQShortString propertyName) - { - checkPropertyName(propertyName); - return getHeaders().propertyExists(propertyName); + _headers.clear(); } - public boolean propertyExists(String propertyName) + public boolean propertyExists(String name) { - checkPropertyName(propertyName); - return getHeaders().propertyExists(propertyName); + checkPropertyName(name); + String propertyName = mapJmsToAmqpName(name); + return _headers.propertyExists(propertyName); } - public Object put(Object key, Object value) + public Object remove(String name) { - checkPropertyName(key.toString()); - return getHeaders().setObject(key.toString(), value); - } - - public Object remove(AMQShortString propertyName) - { - checkPropertyName(propertyName); - return getHeaders().remove(propertyName); - } - - public Object remove(String propertyName) - { - checkPropertyName(propertyName); - return getHeaders().remove(propertyName); + checkPropertyName(name); + String propertyName = mapJmsToAmqpName(name); + return _headers.remove(propertyName); } public boolean isEmpty() { - return getHeaders().isEmpty(); - } - - public void writeToBuffer(final ByteBuffer data) - { - try - { - getHeaders().writeToBuffer(new DataOutputStream(new OutputStream() - { - @Override - public void write(final int b) - { - data.put((byte)b); - } - - @Override - public void write(final byte[] b, final int off, final int len) - { - data.put(b, off, len); - } - })); - } - catch (IOException e) - { - throw new IllegalArgumentException("Unexpected IO Exception - should never happen", e); - } - } - - public Enumeration getMapNames() - { - return getPropertyNames(); + return _headers.isEmpty(); } protected void checkPropertyName(CharSequence propertyName) @@ -501,10 +402,10 @@ public final class JMSHeaderAdapter throw new IllegalArgumentException("Property name must not be the empty string"); } - checkIdentiferFormat(propertyName); + checkIdentifierFormat(propertyName); } - protected void checkIdentiferFormat(CharSequence propertyName) + protected void checkIdentifierFormat(CharSequence propertyName) { // JMS requirements 3.5.1 Property Names // Identifiers: @@ -536,7 +437,7 @@ public final class JMSHeaderAdapter // JMSType. JMSMessageID, JMSCorrelationID, and JMSType values may be // null and if so are treated as a NULL value. - if (Boolean.getBoolean("strict-jms")) + if (STRICT_JMS) { // JMS start character if (!(Character.isJavaIdentifierStart(propertyName.charAt(0)))) diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/QpidMessageProperties.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/QpidMessageProperties.java index 21bb206349..254980d554 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/QpidMessageProperties.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/QpidMessageProperties.java @@ -30,7 +30,8 @@ public class QpidMessageProperties } public static final String QPID_SUBJECT = "qpid.subject"; - public static final String QPID_SUBJECT_JMS_PROPER = "qpid_subject"; + public static final String QPID_SUBJECT_JMS_PROPERTY = "JMS_qpid_subject"; + public static final String QPID_SUBJECT_JMS_PROPER = QPID_SUBJECT_JMS_PROPERTY.substring(4); // AMQP 0-10 related properties public static final String AMQP_0_10_APP_ID = "x-amqp-0-10.app-id"; diff --git a/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java b/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java index 68f678c1b8..2edd38ea55 100644 --- a/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java +++ b/qpid/java/client/src/test/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10Test.java @@ -124,7 +124,7 @@ public class AMQMessageDelegate_0_10Test extends QpidTestCase for (Enumeration props = delegate.getPropertyNames(); props.hasMoreElements();) { String key = (String)props.nextElement(); - if (key.equals("JMS_" + QpidMessageProperties.QPID_SUBJECT_JMS_PROPER)) + if (key.equals(QpidMessageProperties.QPID_SUBJECT_JMS_PROPERTY)) { propFound = true; } |
