in client/src/main/java/org/apache/qpid/client/AMQSession.java [603:661]
public void resolveAddress(AMQDestination dest,
boolean isConsumer,
boolean noLocal) throws QpidException
{
if (isResolved(dest))
{
return;
}
else
{
boolean assertNode = (dest.getAssert() == AMQDestination.AddressOption.ALWAYS) ||
(isConsumer && dest.getAssert() == AMQDestination.AddressOption.RECEIVER) ||
(!isConsumer && dest.getAssert() == AMQDestination.AddressOption.SENDER);
boolean createNode = (dest.getCreate() == AMQDestination.AddressOption.ALWAYS) ||
(isConsumer && dest.getCreate() == AMQDestination.AddressOption.RECEIVER) ||
(!isConsumer && dest.getCreate() == AMQDestination.AddressOption.SENDER);
int suppliedType = dest.getNode() == null ? AMQDestination.UNKNOWN_TYPE : dest.getNode().getType();
int type = resolveAddressType(dest);
switch (type)
{
case AMQDestination.QUEUE_TYPE:
setLegacyFieldsForQueueType(dest);
if(createNode)
{
handleQueueNodeCreation(dest,noLocal);
break;
}
else if (isQueueExist(dest,assertNode) || suppliedType == AMQDestination.QUEUE_TYPE)
{
break;
}
case AMQDestination.TOPIC_TYPE:
if(suppliedType != AMQDestination.QUEUE_TYPE)
{
setLegacyFieldsForTopicType(dest);
if (createNode)
{
verifySubject(dest);
handleExchangeNodeCreation(dest);
break;
}
else if (isExchangeExist(dest, assertNode) || suppliedType == AMQDestination.TOPIC_TYPE)
{
verifySubject(dest);
break;
}
}
default:
throw new QpidException(
"The name '" + dest.getAddressName() +
"' supplied in the address doesn't resolve to an exchange or a queue");
}
setResolved(dest);
}
}