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, &params)) {
-            ((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]

Reply via email to