From bfe5cca29e36eff2fcc6781cf7f933c9c0af0af4 Mon Sep 17 00:00:00 2001 From: Arnaud Simon Date: Mon, 20 Aug 2007 09:37:02 +0000 Subject: Updated QpidURL scheme git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@567627 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/qpidity/BrokerDetails.java | 2 +- .../java/org/apache/qpidity/BrokerDetailsImpl.java | 60 +- .../main/java/org/apache/qpidity/url/QpidURL.java | 2 +- .../java/org/apache/qpidity/url/QpidURLImpl.java | 696 +++++++++++---------- 4 files changed, 411 insertions(+), 349 deletions(-) (limited to 'java/common') diff --git a/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java b/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java index 3f39dfff41..29a4f5a9c0 100644 --- a/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java +++ b/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java @@ -130,7 +130,7 @@ public interface BrokerDetails /** * Sets the properties associated with this connection * - * @param props + * @param props the new p[roperties. */ public void setProperties(Map props); diff --git a/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java b/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java index 2141886c4f..0112b6f857 100644 --- a/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java +++ b/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java @@ -32,19 +32,20 @@ public class BrokerDetailsImpl implements BrokerDetails //---- The brker details private String _host; - private int _port; + private int _port = 0; private String _virtualHost; private String _userName = DEFAULT_USERNAME; private String _password = DEFAULT_PASSWORD; private String _protocol; - private Map _props = new HashMap();; - + private Map _props = new HashMap(); + ; + //--- Constructors public BrokerDetailsImpl() - { + { } - + /** * Create a new broker details given all the reuqired information * @@ -56,7 +57,7 @@ public class BrokerDetailsImpl implements BrokerDetails * @param password The user password. */ public BrokerDetailsImpl(String protocol, String host, int port, String virtualHost, String userName, - String password,Map props) + String password, Map props) { _protocol = protocol; _host = host; @@ -72,20 +73,12 @@ public class BrokerDetailsImpl implements BrokerDetails * default values are used for the other details. * * @param protocol The protocol used for this broker connection - * @param host The host name. + * @param host The host name. */ public BrokerDetailsImpl(String protocol, String host) { _protocol = protocol; _host = host; - if (protocol.equals(BrokerDetails.PROTOCOL_TCP)) - { - _port = 1234; - } - else if (protocol.equals(BrokerDetails.PROTOCOL_TLS)) - { - _port = 5555; - } _virtualHost = DEFAULT_VIRTUALHOST; _userName = DEFAULT_USERNAME; _password = DEFAULT_PASSWORD; @@ -119,6 +112,17 @@ public class BrokerDetailsImpl implements BrokerDetails */ public int getPort() { + if (_port == 0) + { + if (getProtocol().equals(BrokerDetails.PROTOCOL_TCP)) + { + _port = 1234; + } + else if (getProtocol().equals(BrokerDetails.PROTOCOL_TLS)) + { + _port = 5555; + } + } return _port; } @@ -211,50 +215,50 @@ public class BrokerDetailsImpl implements BrokerDetails { _protocol = protocol; } - + /** * Ex: keystore path - * + * * @return the Properties associated with this connection. */ - public Map getProperties() + public Map getProperties() { return _props; } - + /** * Sets the properties associated with this connection - * + * * @param props */ - public void setProperties(Map props) + public void setProperties(Map props) { _props = props; } - - public void setProperty(String key,String value) + + public void setProperty(String key, String value) { _props.put(key, value); } - + public String toString() { StringBuilder b = new StringBuilder(); b.append("[username=" + _userName); b.append(",password=" + _password); - b.append(",transport="+ _protocol); + b.append(",transport=" + _protocol); b.append(",host=" + _host); - b.append(",port=" + _port + "]"); + b.append(",port=" + getPort() + "]"); b.append(" - Properties["); if (_props != null) { - for (String k:_props.keySet()) + for (String k : _props.keySet()) { b.append(k + "=" + _props.get(k) + ","); } } b.append("]"); - + return b.toString(); } } diff --git a/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java b/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java index ad0d69b5b2..579c13a4eb 100644 --- a/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java +++ b/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java @@ -24,7 +24,7 @@ import java.util.List; /** * The format of the Qpid URL is based on the AMQP one. * The grammar is as follows: - *

qpid_url = "qpid:" prot_addr_list ["/" future-parameters] + *

qpid_url = "qpid:" [user_props] prot_addr_list ["/" future-parameters] *

prot_addr_list = [prot_addr ","]* prot_addr *

prot_addr = tcp_prot_addr | tls_prot_addr | future_prot_addr *

tcp_prot_addr = tcp_id tcp_addr diff --git a/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java b/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java index a9f3fd0712..20d5730d4f 100644 --- a/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java +++ b/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java @@ -27,60 +27,66 @@ import java.util.List; /** * The format Qpid URL is based on the AMQP one. * The grammar is as follows: - *

qpid_url = "qpid:" port_addr_list ["/" future-parameters] + *

qpid_url = "qpid:" [client_props "@"] port_addr_list ["/" future-parameters] *

port_addr_list = [port_addr ","]* port_addr *

port_addr = tcp_port_addr | tls_prot_addr | future_prot_addr *

tcp_port_addr = tcp_id tcp_addr *

tcp_id = "tcp:" | "" - *

tcp_addr = [host [":" port] ] - *

host = + *

tcp_addr = host [":" port] + *

host = *

port = number *

tls_prot_addr = tls_id tls_addr *

tls_id = "tls:" | "" - *

tls_addr = [host [":" port] ] + *

tls_addr = host [":" port] *

future_prot_addr = future_prot_id future_prot_addr *

future_prot_id = *

future_prot_addr = *

future_parameters = - * - * Ex: qpid:virtualhost=test@client_id1:tcp:myhost.com:5672,virtualhost=prod,keystore=/opt/keystore@client_id2:tls:mysecurehost.com:5672 + *

client_props = [client_prop ";"]* client_prop + *

client_prop = prop "=" val + *

prop = chars as per + *

val = valid as per + *

+ * Ex: qpid:virtualhost=tcp:host-foo,test,client_id=foo@tcp:myhost.com:5672,virtualhost=prod; + * keystore=/opt/keystore@client_id2@tls:mysecurehost.com:5672 */ public class QpidURLImpl implements QpidURL { - private static final char[] URL_START_SEQ = new char[]{'q','p','i','d',':'}; + private static final char[] URL_START_SEQ = new char[]{'q', 'p', 'i', 'd', ':'}; private static final char PROPERTY_EQUALS_CHAR = '='; - private static final char PROPERTY_SEPARATOR_CHAR = ','; + private static final char PROPERTY_SEPARATOR_CHAR = ';'; private static final char ADDRESS_SEPERATOR_CHAR = ','; - private static final char CLIENT_ID_TRANSPORT_SEPARATOR_CHAR = ':'; + + //private static final char CLIENT_ID_TRANSPORT_SEPARATOR_CHAR = ':'; private static final char TRANSPORT_HOST_SEPARATOR_CHAR = ':'; private static final char HOST_PORT_SEPARATOR_CHAR = ':'; private static final char AT_CHAR = '@'; - + enum URLParserState { - QPID_URL_START, - ADDRESS_START, - PROPERTY_NAME, - PROPERTY_EQUALS, - PROPERTY_VALUE, - PROPERTY_SEPARATOR, - AT_CHAR, - CLIENT_ID, - CLIENT_ID_TRANSPORT_SEPARATOR, - TRANSPORT, - TRANSPORT_HOST_SEPARATOR, - HOST, - HOST_PORT_SEPARATOR, - PORT, - ADDRESS_END, - ADDRESS_SEPERATOR, - QPID_URL_END, - ERROR; + QPID_URL_START, + ADDRESS_START, + PROPERTY_NAME, + PROPERTY_EQUALS, + PROPERTY_VALUE, + PROPERTY_SEPARATOR, + AT_CHAR, + // CLIENT_ID, + // CLIENT_ID_TRANSPORT_SEPARATOR, + TRANSPORT, + TRANSPORT_HOST_SEPARATOR, + HOST, + HOST_PORT_SEPARATOR, + PORT, + ADDRESS_END, + ADDRESS_SEPERATOR, + QPID_URL_END, + ERROR } - + //-- Constructors - - private char[] _url; + + private char[] _url; private List _brokerDetailList = new ArrayList(); private String _error; private int _index = 0; @@ -88,315 +94,367 @@ public class QpidURLImpl implements QpidURL private String _currentPropName; private boolean _endOfURL = false; private URLParserState _currentParserState; - + public QpidURLImpl(String url) throws MalformedURLException - { + { _url = url.toCharArray(); _endOfURL = false; _currentParserState = URLParserState.QPID_URL_START; URLParserState prevState = _currentParserState; // for error handling - BrokerDetails _brokerDetails = new BrokerDetailsImpl(); try - { - while ( _currentParserState != URLParserState.ERROR && _currentParserState != URLParserState.QPID_URL_END) + { + while (_currentParserState != URLParserState.ERROR && _currentParserState != URLParserState.QPID_URL_END) { prevState = _currentParserState; _currentParserState = next(); - } - - if(_currentParserState == URLParserState.ERROR) + } + + if (_currentParserState == URLParserState.ERROR) { - _error = "Invalid URL format [current_state = " + prevState + ", broker details parsed so far " + _currentBroker + " ] error at (" + _index +") due to " + _error; - MalformedURLException ex = new MalformedURLException(_error); + _error = + "Invalid URL format [current_state = " + prevState + ", broker details parsed so far " + _currentBroker + " ] error at (" + _index + ") due to " + _error; + MalformedURLException ex; + ex = new MalformedURLException(_error); throw ex; } } - catch(ArrayIndexOutOfBoundsException e) + catch (ArrayIndexOutOfBoundsException e) { - _error = "Invalid URL format [current_state = " + prevState + ", broker details parsed so far " + _currentBroker + " ] error at (" + _index +")"; - MalformedURLException ex = new MalformedURLException(_error); + e.printStackTrace(); + _error = + "Invalid URL format [current_state = " + prevState + ", broker details parsed so far " + _currentBroker + " ] error at (" + _index + ")"; + MalformedURLException ex; + ex = new MalformedURLException(_error); throw ex; } } - + //-- interface QpidURL public List getAllBrokerDetails() { return _brokerDetailList; } - public String getURL() - { - return new String(_url); - } - - private URLParserState next() - { - switch(_currentParserState) - { - case QPID_URL_START: - return checkSequence(URL_START_SEQ,URLParserState.ADDRESS_START); - case ADDRESS_START: - return startAddress(); - case PROPERTY_NAME: - return extractPropertyName(); - case PROPERTY_EQUALS: - _index++; // skip the equal sign - return URLParserState.PROPERTY_VALUE; - case PROPERTY_VALUE: - return extractPropertyValue(); - case PROPERTY_SEPARATOR: - _index++; // skip "," - return URLParserState.PROPERTY_NAME; - case AT_CHAR: - _index++; // skip the @ sign - case CLIENT_ID: - return extractClientId(); - case CLIENT_ID_TRANSPORT_SEPARATOR: - _index++; // skip ":" - return URLParserState.TRANSPORT; - case TRANSPORT: - return extractTransport(); - case TRANSPORT_HOST_SEPARATOR: - _index++; // skip ":" - return URLParserState.HOST; - case HOST: - return extractHost(); - case HOST_PORT_SEPARATOR: - _index++; // skip ":" - return URLParserState.PORT; - case PORT: - extractPort(); - case ADDRESS_END: - return endAddress(); - case ADDRESS_SEPERATOR: - _index++; // skip "," - return URLParserState.ADDRESS_START; - default: - return URLParserState.ERROR; - } - } - - private URLParserState checkSequence(char[] expected,URLParserState nextPart) - { - for(int i=0;i