in client/src/main/java/org/apache/qpid/client/url/URLParser.java [44:166]
private void parseURL(String fullURL) throws URLSyntaxException
{
// Connection URL format
// amqp://[user:pass@][clientid]/[virtualhost]?brokerlist='tcp://host:port?option=\'value\',option=\'value\';tcp://host:port?option=\'value\'',failover='method?option=\'value\',option='value''"
// Options are of course optional except for requiring a single broker in the broker list.
try
{
URI connection = new URI(fullURL);
if ((connection.getScheme() == null) || !(connection.getScheme().equalsIgnoreCase(AMQConnectionURL.AMQ_PROTOCOL)))
{
throw new URISyntaxException(fullURL, "Not an AMQP URL");
}
if ((connection.getHost() == null) || connection.getHost().equals(""))
{
String tmp = connection.getAuthority();
// hack to read a clientid such as "my_clientID"
if (tmp != null && tmp.indexOf('@') < tmp.length()-1)
{
_url.setClientName(tmp.substring(tmp.indexOf('@')+1,tmp.length()));
}
else
{
String uid = AMQConnectionFactory.getUniqueClientID();
if (uid == null)
{
throw URLHelper.parseError(-1, "Client Name not specified", fullURL);
}
else
{
_url.setClientName(uid);
}
}
}
else
{
_url.setClientName(connection.getHost());
}
String userInfo = connection.getUserInfo();
if (userInfo == null)
{
// Fix for Java 1.5 which doesn't parse UserInfo for non http URIs
userInfo = connection.getAuthority();
if (userInfo != null)
{
int atIndex = userInfo.indexOf('@');
if (atIndex != -1)
{
userInfo = userInfo.substring(0, atIndex);
}
else
{
userInfo = null;
}
}
}
if (userInfo != null)
{
parseUserInfo(userInfo);
}
String virtualHost = connection.getPath();
if ((virtualHost != null) && (!virtualHost.equals("")))
{
_url.setVirtualHost(virtualHost);
}
else
{
int authLength = connection.getAuthority().length();
int start = AMQConnectionURL.AMQ_PROTOCOL.length() + 3;
int testIndex = start + authLength;
if ((testIndex < fullURL.length()) && (fullURL.charAt(testIndex) == '?'))
{
throw URLHelper.parseError(start, testIndex - start, "Virtual host found", fullURL);
}
else
{
throw URLHelper.parseError(-1, "Virtual host not specified", fullURL);
}
}
URLHelper.parseOptions(_url.getOptions(), connection.getQuery());
processOptions();
}
catch (URISyntaxException uris)
{
if (uris instanceof URLSyntaxException)
{
throw (URLSyntaxException) uris;
}
int slash = fullURL.indexOf("\\");
if (slash == -1)
{
throw URLHelper.parseError(uris.getIndex(), uris.getReason(), uris.getInput());
}
else
{
if ((slash != 0) && (fullURL.charAt(slash - 1) == ':'))
{
throw URLHelper.parseError(slash - 2, fullURL.indexOf('?') - slash + 2,
"Virtual host looks like a windows path, forward slash not allowed in URL", fullURL);
}
else
{
throw URLHelper.parseError(slash, "Forward slash not allowed in URL", fullURL);
}
}
}
}