in activemq-cpp/src/main/activemq/commands/BrokerError.cpp [84:148]
ActiveMQException BrokerError::createExceptionObject() {
StringTokenizer tokenizer(this->exceptionClass, ".");
std::string exceptionClass = this->exceptionClass;
while (tokenizer.hasMoreTokens()) {
exceptionClass = tokenizer.nextToken();
}
std::vector<std::pair<std::string, int> > cmsStackTrace;
std::vector< Pointer<StackTraceElement> >::const_iterator stackIter = this->stackTraceElements.begin();
for (; stackIter != stackTraceElements.end(); ++stackIter) {
Pointer<StackTraceElement> element = *stackIter;
if (element == NULL) {
continue;
}
std::string name = element->ClassName + "." + element->MethodName + "(" +
element->FileName + ")";
cmsStackTrace.push_back(std::make_pair(name, element->LineNumber));
}
cms::CMSException* cause = NULL;
if (exceptionClass == "JMSException") {
cause = new cms::CMSException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "JMSSecurityException") {
cause = new cms::CMSSecurityException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "SecurityException") {
cause = new cms::CMSSecurityException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageEOFException") {
cause = new cms::MessageEOFException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageFormatException") {
cause = new cms::MessageFormatException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageNotReadableException") {
cause = new cms::MessageNotReadableException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageNotWriteableException") {
cause = new cms::MessageNotWriteableException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "InvalidClientIdException") {
cause = new cms::InvalidClientIdException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "InvalidDestinationException") {
cause = new cms::InvalidDestinationException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "InvalidSelectorException") {
cause = new cms::InvalidSelectorException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "IllegalStateException") {
cause = new cms::IllegalStateException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "ResourceAllocationException") {
cause = new cms::ResourceAllocationException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "TransactionInProgressException") {
cause = new cms::TransactionInProgressException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "TransactionRolledBackException") {
cause = new cms::TransactionRolledBackException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "UnsupportedOperationException") {
cause = new cms::UnsupportedOperationException(this->message, NULL, cmsStackTrace);
} else {
cause = new cms::CMSException(this->message, NULL, cmsStackTrace);
}
// Wrap in a activemq exception wrapper to carry the pointer until it can be
// thrown in a context that will convey the correct type to the client.
ActiveMQException wrapper(__FILE__, __LINE__, cause, this->getMessage().c_str());
return wrapper;
}