You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2013/02/26 22:33:29 UTC
svn commit: r1450446 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq:
commands/BrokerError.cpp commands/BrokerError.h core/ActiveMQConnection.cpp
exceptions/ActiveMQException.cpp exceptions/ActiveMQException.h
Author: tabish
Date: Tue Feb 26 21:33:29 2013
New Revision: 1450446
URL: http://svn.apache.org/r1450446
Log:
https://issues.apache.org/jira/browse/AMQCPP-467
Improves the way CMSExceptions are created from broker errors and starts on getting the matching type thrown from CMS API methods.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.cpp?rev=1450446&r1=1450445&r2=1450446&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.cpp Tue Feb 26 21:33:29 2013
@@ -20,6 +20,7 @@
#include <decaf/lang/exceptions/NullPointerException.h>
#include <decaf/util/StringTokenizer.h>
#include <string>
+#include <utility>
#include <cms/CMSException.h>
#include <cms/CMSSecurityException.h>
@@ -80,57 +81,68 @@ Pointer<commands::Command> BrokerError::
}
////////////////////////////////////////////////////////////////////////////////
-decaf::lang::Exception BrokerError::createExceptionObject() {
-
- StringTokenizer tokenizer(this->exceptionClass);
-
+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);
+ cause = new cms::CMSException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "JMSSecurityException") {
- cause = new cms::CMSSecurityException(this->message);
+ 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);
+ cause = new cms::MessageEOFException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageFormatException") {
- cause = new cms::MessageFormatException(this->message);
+ cause = new cms::MessageFormatException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageNotReadableException") {
- cause = new cms::MessageNotReadableException(this->message);
+ cause = new cms::MessageNotReadableException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "MessageNotWriteableException") {
- cause = new cms::MessageNotWriteableException(this->message);
+ cause = new cms::MessageNotWriteableException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "InvalidClientIdException") {
- cause = new cms::InvalidClientIdException(this->message);
+ cause = new cms::InvalidClientIdException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "InvalidDestinationException") {
- cause = new cms::InvalidDestinationException(this->message);
+ cause = new cms::InvalidDestinationException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "InvalidSelectorException") {
- cause = new cms::InvalidSelectorException(this->message);
+ cause = new cms::InvalidSelectorException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "IllegalStateException") {
- cause = new cms::IllegalStateException(this->message);
+ cause = new cms::IllegalStateException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "ResourceAllocationException") {
- cause = new cms::ResourceAllocationException(this->message);
+ cause = new cms::ResourceAllocationException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "TransactionInProgressException") {
- cause = new cms::TransactionInProgressException(this->message);
+ cause = new cms::TransactionInProgressException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "TransactionRolledBackException") {
- cause = new cms::TransactionRolledBackException(this->message);
+ cause = new cms::TransactionRolledBackException(this->message, NULL, cmsStackTrace);
} else if (exceptionClass == "UnsupportedOperationException") {
- cause = new cms::UnsupportedOperationException(this->message);
+ cause = new cms::UnsupportedOperationException(this->message, NULL, cmsStackTrace);
} else {
- if (exCause != NULL) {
- cause = new cms::CMSException(this->message);
- } else {
- cause = new cms::CMSException(this->exCause->getMessage());
- }
+ cause = new cms::CMSException(this->message, NULL, cmsStackTrace);
}
- // Wrap in a Decaf exception to carry the pointer until it can be
+ // 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.
- Exception theCause(__FILE__, __LINE__, cause, this->getMessage().c_str());
- return theCause;
+ ActiveMQException wrapper(__FILE__, __LINE__, cause, this->getMessage().c_str());
+ return wrapper;
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.h?rev=1450446&r1=1450445&r2=1450446&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/BrokerError.h Tue Feb 26 21:33:29 2013
@@ -20,7 +20,7 @@
#include <activemq/util/Config.h>
#include <activemq/commands/BaseCommand.h>
-#include <decaf/lang/Exception.h>
+#include <activemq/exceptions/ActiveMQException.h>
#include <decaf/lang/Pointer.h>
#include <string>
@@ -180,14 +180,14 @@ namespace commands {
}
/**
- * Creates and returns a Decaf Exception object that contains the error data from the Broker.
+ * Creates and returns a ActiveMQException object that contains the error data from the Broker.
*
* The returned exception will if possible contain a cms::CMSException pointer that represents
* the actual JMS exception that was forwarded from the broker.
*
- * @return a new instance of a Decaf Exception
+ * @return a new instance of an ActiveMQException
*/
- decaf::lang::Exception createExceptionObject();
+ exceptions::ActiveMQException createExceptionObject();
};
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=1450446&r1=1450445&r2=1450446&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp Tue Feb 26 21:33:29 2013
@@ -1249,18 +1249,11 @@ Pointer<Response> ActiveMQConnection::sy
commands::ExceptionResponse* exceptionResponse = dynamic_cast<ExceptionResponse*>(response.get());
if (exceptionResponse != NULL) {
-
- Exception ex = exceptionResponse->getException()->createExceptionObject();
- if (ex.getCause() != NULL) {
- throw *(ex.getCause());
- }
-
- throw BrokerException(__FILE__, __LINE__, exceptionResponse->getException()->getMessage().c_str());
+ throw exceptionResponse->getException()->createExceptionObject();
}
return response;
}
- AMQ_CATCH_RETHROW(cms::CMSException)
AMQ_CATCH_RETHROW(ActiveMQException)
AMQ_CATCH_EXCEPTION_CONVERT(IOException, ActiveMQException)
AMQ_CATCH_EXCEPTION_CONVERT(decaf::lang::exceptions::UnsupportedOperationException, ActiveMQException)
@@ -1283,7 +1276,6 @@ void ActiveMQConnection::asyncRequest(Po
Pointer<ResponseCallback> callback(new AsyncResponseCallback(this->config, onComplete));
this->config->transport->asyncRequest(command, callback);
}
- AMQ_CATCH_RETHROW(cms::CMSException)
AMQ_CATCH_RETHROW(ActiveMQException)
AMQ_CATCH_EXCEPTION_CONVERT(IOException, ActiveMQException)
AMQ_CATCH_EXCEPTION_CONVERT(decaf::lang::exceptions::UnsupportedOperationException, ActiveMQException)
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.cpp?rev=1450446&r1=1450445&r2=1450446&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.cpp Tue Feb 26 21:33:29 2013
@@ -42,7 +42,20 @@ ActiveMQException::ActiveMQException(con
}
////////////////////////////////////////////////////////////////////////////////
-ActiveMQException::ActiveMQException(const char* file, const int lineNumber, const char* msg, ...) : decaf::lang::Exception() {
+ActiveMQException::ActiveMQException(const char* file, const int lineNumber, const char* msg, ...) :
+ decaf::lang::Exception() {
+
+ va_list vargs;
+ va_start(vargs, msg);
+ buildMessage(msg, vargs);
+
+ // Set the first mark for this exception.
+ Exception::setMark(file, lineNumber);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+ActiveMQException::ActiveMQException(const char* file, const int lineNumber, const std::exception* cause, const char* msg, ...) :
+ decaf::lang::Exception(cause) {
va_list vargs;
va_start(vargs, msg);
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.h?rev=1450446&r1=1450445&r2=1450446&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/exceptions/ActiveMQException.h Tue Feb 26 21:33:29 2013
@@ -26,8 +26,8 @@
#include <decaf/lang/Exception.h>
#include <activemq/exceptions/ExceptionDefines.h>
-namespace activemq{
-namespace exceptions{
+namespace activemq {
+namespace exceptions {
/*
* Base class for all exceptions.
@@ -72,6 +72,24 @@ namespace exceptions{
*/
ActiveMQException(const char* file, const int lineNumber, const char* msg, ...);
+ /**
+ * Constructor - Initializes the file name and line number where
+ * this message occurred. Sets the message to report, using an
+ * optional list of arguments to parse into the message.
+ *
+ * @param file
+ * The file name where exception occurs
+ * @param lineNumber
+ * The line number where the exception occurred.
+ * @param cause
+ * The exception that was the cause for this one to be thrown.
+ * @param msg
+ * The message to report
+ * @param ...
+ * list of primitives that are formatted into the message
+ */
+ ActiveMQException(const char* file, const int lineNumber, const std::exception* cause, const char* msg, ...);
+
virtual ~ActiveMQException() throw();
/**