Author: kgiusti
Date: Tue Mar 23 19:03:24 2010
New Revision: 926734
URL: http://svn.apache.org/viewvc?rev=926734&view=rev
Log:
add exception msg generation on method call failure
Modified:
qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
Modified:
qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp?rev=926734&r1=926733&r2=926734&view=diff
==============================================================================
--- qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
(original)
+++ qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
Tue Mar 23 19:03:24 2010
@@ -492,7 +492,8 @@ void ManagementAgentImpl::handleConsoleA
void ManagementAgentImpl::invokeMethodRequest(const string& body, const
string& cid, const string& replyTo)
{
- string methodName;
+ string methodName;
+ bool failed = false;
qpid::messaging::Message inMsg(body);
qpid::messaging::MapView inMap(inMsg);
qpid::messaging::MapView::const_iterator oid, mid;
@@ -502,8 +503,9 @@ void ManagementAgentImpl::invokeMethodRe
if ((oid = inMap.find("_object_id")) == inMap.end() ||
(mid = inMap.find("_method_name")) == inMap.end()) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_PARAMETER_INVALID;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_PARAMETER_INVALID);
+ (outMap["_values"].asMap())["_status"] =
Manageable::STATUS_PARAMETER_INVALID;
+ (outMap["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_PARAMETER_INVALID);
+ failed = true;
} else {
std::string methodName;
ObjectId objId;
@@ -521,24 +523,29 @@ void ManagementAgentImpl::invokeMethodRe
ManagementObjectMap::iterator iter = managementObjects.find(objId);
if (iter == managementObjects.end() || iter->second->isDeleted()) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_UNKNOWN_OBJECT;
-
((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_UNKNOWN_OBJECT);
+ (outMap["_values"].asMap())["_status"] =
Manageable::STATUS_UNKNOWN_OBJECT;
+ (outMap["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_UNKNOWN_OBJECT);
+ failed = true;
} else {
iter->second->doMethod(methodName, inArgs, outMap.asMap());
}
} catch(exception& e) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_EXCEPTION;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
e.what();
+ outMap.clear();
+ (outMap["_values"].asMap())["_status"] =
Manageable::STATUS_EXCEPTION;
+ (outMap["_values"].asMap())["_status_text"] = e.what();
+ failed = true;
}
}
qpid::messaging::Variant::Map headers;
headers["method"] = "response";
- headers["qmf.opcode"] = "_method_response";
- headers["qmf.content"] = "_data";
headers["qmf.agent"] = name_address;
+ if (failed)
+ headers["qmf.opcode"] = "_exception";
+ else
+ headers["qmf.opcode"] = "_method_response";
outMap.encode();
connThreadBody.sendBuffer(outMsg.getContent(), cid, headers,
"qmf.default.direct", replyTo);
Modified:
qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
URL:
http://svn.apache.org/viewvc/qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp?rev=926734&r1=926733&r2=926734&view=diff
==============================================================================
---
qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
(original)
+++
qpid/branches/qmf-devel0.7a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
Tue Mar 23 19:03:24 2010
@@ -849,14 +849,14 @@ void ManagementAgent::handleMethodReques
headers["method"] = "response";
headers["qmf.opcode"] = "_method_response";
- headers["qmf.content"] = "_data";
headers["qmf.agent"] = std::string(agentName);
if ((oid = inMap.find("_object_id")) == inMap.end() ||
(mid = inMap.find("_method_name")) == inMap.end())
{
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_PARAMETER_INVALID;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_PARAMETER_INVALID);
+ headers["qmf.opcode"] = "_exception";
+ (outMap["_values"].asMap())["_status"] =
Manageable::STATUS_PARAMETER_INVALID;
+ (outMap["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_PARAMETER_INVALID);
outMap.encode();
sendBuffer(outMsg.getContent(), cid, headers, dExchange, replyTo);
QPID_LOG(trace, "SEND MethodResponse (invalid param) to=" << replyTo
<< " seq=" << cid);
@@ -876,8 +876,9 @@ void ManagementAgent::handleMethodReques
inArgs = (mid->second).asMap();
}
} catch(exception& e) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_EXCEPTION;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
e.what();
+ headers["qmf.opcode"] = "_exception";
+ (outMap["_values"].asMap())["_status"] = Manageable::STATUS_EXCEPTION;
+ (outMap["_values"].asMap())["_status_text"] = e.what();
outMap.encode();
sendBuffer(outMsg.getContent(), cid, headers, dExchange, replyTo);
QPID_LOG(trace, "SEND MethodResponse (invalid format) to=" << replyTo
<< " seq=" << cid);
@@ -887,8 +888,9 @@ void ManagementAgent::handleMethodReques
ManagementObjectMap::iterator iter = managementObjects.find(objId);
if (iter == managementObjects.end() || iter->second->isDeleted()) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_UNKNOWN_OBJECT;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_UNKNOWN_OBJECT);
+ headers["qmf.opcode"] = "_exception";
+ (outMap["_values"].asMap())["_status"] =
Manageable::STATUS_UNKNOWN_OBJECT;
+ (outMap["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_UNKNOWN_OBJECT);
outMap.encode();
sendBuffer(outMsg.getContent(), cid, headers, dExchange, replyTo);
QPID_LOG(trace, "SEND MethodResponse (unknown object) to=" << replyTo
<< " seq=" << cid);
@@ -901,8 +903,9 @@ void ManagementAgent::handleMethodReques
i = disallowed.find(std::make_pair(iter->second->getClassName(),
methodName));
if (i != disallowed.end()) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_FORBIDDEN;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
i->second;
+ headers["qmf.opcode"] = "_exception";
+ (outMap["_values"].asMap())["_status"] = Manageable::STATUS_FORBIDDEN;
+ (outMap["_values"].asMap())["_status_text"] = i->second;
outMap.encode();
sendBuffer(outMsg.getContent(), cid, headers, dExchange, replyTo);
QPID_LOG(trace, "SEND MethodResponse status=FORBIDDEN text=" <<
i->second << " seq=" << cid);
@@ -916,8 +919,9 @@ void ManagementAgent::handleMethodReques
params[acl::PROP_SCHEMACLASS] = iter->second->getClassName();
if (!acl->authorise(userId, acl::ACT_ACCESS, acl::OBJ_METHOD,
methodName, ¶ms)) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_FORBIDDEN;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_FORBIDDEN);
+ headers["qmf.opcode"] = "_exception";
+ (outMap["_values"].asMap())["_status"] =
Manageable::STATUS_FORBIDDEN;
+ (outMap["_values"].asMap())["_status_text"] =
Manageable::StatusText(Manageable::STATUS_FORBIDDEN);
outMap.encode();
sendBuffer(outMsg.getContent(), cid, headers, dExchange, replyTo);
QPID_LOG(trace, "SEND MethodResponse status=FORBIDDEN" << " seq="
<< cid);
@@ -930,8 +934,10 @@ void ManagementAgent::handleMethodReques
try {
iter->second->doMethod(methodName, inArgs, outMap.asMap());
} catch(exception& e) {
- ((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_EXCEPTION;
- ((outMap["_error"].asMap())["_values"].asMap())["_status_text"] =
e.what();
+ outMap.clear();
+ headers["qmf.opcode"] = "_exception";
+ (outMap["_values"].asMap())["_status"] = Manageable::STATUS_EXCEPTION;
+ (outMap["_values"].asMap())["_status_text"] = e.what();
outMap.encode();
sendBuffer(outMsg.getContent(), cid, headers, dExchange, replyTo);
QPID_LOG(trace, "SEND MethodResponse (exception) to=" << replyTo << "
seq=" << cid);
@@ -1603,7 +1609,6 @@ bool ManagementAgent::authorizeAgentMess
headers["method"] = "response";
headers["qmf.opcode"] = "_method_response";
- headers["qmf.content"] = "_data";
headers["qmf.agent"] = std::string(agentName);
((outMap["_error"].asMap())["_values"].asMap())["_status"] =
Manageable::STATUS_FORBIDDEN;
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]