Index: trunk/src/VBox/Runtime/common/rest/RTCRestClientApiBase.cpp
===================================================================
--- trunk/src/VBox/Runtime/common/rest/RTCRestClientApiBase.cpp	(revision 74012)
+++ trunk/src/VBox/Runtime/common/rest/RTCRestClientApiBase.cpp	(revision 74013)
@@ -68,97 +68,106 @@
     LogFlow(("doCall: %s %s\n", a_pszMethod, RTHttpMethodName(a_enmHttpMethod)));
 
-    /*
-     * Reset the response object, allowing reuse of such.
-     */
-    a_pResponse->reset();
 
     /*
-     * Initialize the HTTP instance.
+     * Reset the response object (allowing reuse of such) and check the request
+     * object for assignment errors.
      */
+    int    rc;
     RTHTTP hHttp = NIL_RTHTTP;
-    int rc = reinitHttpInstance();
-    if (RT_SUCCESS(rc))
+
+    a_pResponse->reset();
+    if (!a_rRequest.hasAssignmentErrors())
     {
-        hHttp = m_hHttp;
-        Assert(hHttp != NIL_RTHTTP);
-
         /*
-         * Prepare the response side.  This may install output callbacks and
-         * indicate this by clearing the ppvBody/ppvHdr variables.
+         * Initialize the HTTP instance.
          */
-        size_t   cbHdrs  = 0;
-        void    *pvHdrs  = NULL;
-        void   **ppvHdrs = &pvHdrs;
-
-        size_t   cbBody  = 0;
-        void    *pvBody  = NULL;
-        void   **ppvBody = &pvBody;
-
-        rc = a_pResponse->receivePrepare(hHttp, &ppvBody, &ppvHdrs);
+        rc = reinitHttpInstance();
         if (RT_SUCCESS(rc))
         {
+            hHttp = m_hHttp;
+            Assert(hHttp != NIL_RTHTTP);
+
             /*
-             * Prepare the request for the transmission.
+             * Prepare the response side.  This may install output callbacks and
+             * indicate this by clearing the ppvBody/ppvHdr variables.
              */
-            RTCString strExtraPath;
-            RTCString strQuery;
-            RTCString strXmitBody;
-            rc = a_rRequest.xmitPrepare(&strExtraPath, &strQuery, hHttp, &strXmitBody);
+            size_t   cbHdrs  = 0;
+            void    *pvHdrs  = NULL;
+            void   **ppvHdrs = &pvHdrs;
+
+            size_t   cbBody  = 0;
+            void    *pvBody  = NULL;
+            void   **ppvBody = &pvBody;
+
+            rc = a_pResponse->receivePrepare(hHttp, &ppvBody, &ppvHdrs);
             if (RT_SUCCESS(rc))
             {
                 /*
-                 * Construct the full URL.
+                 * Prepare the request for the transmission.
                  */
-                RTCString strFullUrl;
-                rc = strFullUrl.assignNoThrow(m_strBasePath);
-                if (strExtraPath.isNotEmpty())
-                {
-                    if (!strExtraPath.startsWith("/") && !strFullUrl.endsWith("/") && RT_SUCCESS(rc))
-                        rc = strFullUrl.appendNoThrow('/');
-                    if (RT_SUCCESS(rc))
-                        rc = strFullUrl.appendNoThrow(strExtraPath);
-                    strExtraPath.setNull();
-                }
-                if (strQuery.isNotEmpty())
-                {
-                    Assert(strQuery.startsWith("?"));
-                    rc = strFullUrl.appendNoThrow(strQuery);
-                    strQuery.setNull();
-                }
+                RTCString strExtraPath;
+                RTCString strQuery;
+                RTCString strXmitBody;
+                rc = a_rRequest.xmitPrepare(&strExtraPath, &strQuery, hHttp, &strXmitBody);
                 if (RT_SUCCESS(rc))
                 {
                     /*
-                     * Perform HTTP request.
+                     * Construct the full URL.
                      */
-                    uint32_t uHttpStatus = 0;
-                    rc = RTHttpPerform(hHttp, strFullUrl.c_str(), a_enmHttpMethod, strXmitBody.c_str(), strXmitBody.length(),
-                                       &uHttpStatus, ppvHdrs, &cbHdrs, ppvBody, &cbBody);
+                    RTCString strFullUrl;
+                    rc = strFullUrl.assignNoThrow(m_strBasePath);
+                    if (strExtraPath.isNotEmpty())
+                    {
+                        if (!strExtraPath.startsWith("/") && !strFullUrl.endsWith("/") && RT_SUCCESS(rc))
+                            rc = strFullUrl.appendNoThrow('/');
+                        if (RT_SUCCESS(rc))
+                            rc = strFullUrl.appendNoThrow(strExtraPath);
+                        strExtraPath.setNull();
+                    }
+                    if (strQuery.isNotEmpty())
+                    {
+                        Assert(strQuery.startsWith("?"));
+                        rc = strFullUrl.appendNoThrow(strQuery);
+                        strQuery.setNull();
+                    }
                     if (RT_SUCCESS(rc))
                     {
-                        a_rRequest.xmitComplete(uHttpStatus, hHttp);
+                        /*
+                         * Perform HTTP request.
+                         */
+                        uint32_t uHttpStatus = 0;
+                        rc = RTHttpPerform(hHttp, strFullUrl.c_str(), a_enmHttpMethod, strXmitBody.c_str(), strXmitBody.length(),
+                                           &uHttpStatus, ppvHdrs, &cbHdrs, ppvBody, &cbBody);
+                        if (RT_SUCCESS(rc))
+                        {
+                            a_rRequest.xmitComplete(uHttpStatus, hHttp);
 
-                        /*
-                         * Do response processing.
-                         */
-                        a_pResponse->receiveComplete(uHttpStatus, hHttp);
-                        if (pvHdrs)
-                        {
-                            a_pResponse->consumeHeaders((const char *)pvHdrs, cbHdrs);
-                            RTHttpFreeResponse(pvHdrs);
+                            /*
+                             * Do response processing.
+                             */
+                            a_pResponse->receiveComplete(uHttpStatus, hHttp);
+                            if (pvHdrs)
+                            {
+                                a_pResponse->consumeHeaders((const char *)pvHdrs, cbHdrs);
+                                RTHttpFreeResponse(pvHdrs);
+                            }
+                            if (pvBody)
+                            {
+                                a_pResponse->consumeBody((const char *)pvBody, cbBody);
+                                RTHttpFreeResponse(pvBody);
+                            }
+                            a_pResponse->receiveFinal();
+
+                            return a_pResponse->getStatus();
                         }
-                        if (pvBody)
-                        {
-                            a_pResponse->consumeBody((const char *)pvBody, cbBody);
-                            RTHttpFreeResponse(pvBody);
-                        }
-                        a_pResponse->receiveFinal();
-
-                        return a_pResponse->getStatus();
                     }
                 }
+                a_rRequest.xmitComplete(rc, hHttp);
             }
-            a_rRequest.xmitComplete(rc, hHttp);
         }
     }
+    else
+        rc = VERR_NO_MEMORY;
+
     a_pResponse->receiveComplete(rc, hHttp);
     RT_NOREF_PV(a_pszMethod);
Index: trunk/src/VBox/Runtime/common/rest/rest-primary-object-types.cpp
===================================================================
--- trunk/src/VBox/Runtime/common/rest/rest-primary-object-types.cpp	(revision 74012)
+++ trunk/src/VBox/Runtime/common/rest/rest-primary-object-types.cpp	(revision 74013)
@@ -176,4 +176,11 @@
 
 
+void RTCRestBool::assignValue(bool a_fValue)
+{
+    m_fValue = a_fValue;
+    m_fNullIndicator = false;
+}
+
+
 int RTCRestBool::resetToDefault()
 {
@@ -336,4 +343,11 @@
 
 
+void RTCRestInt64::assignValue(int64_t a_iValue)
+{
+    m_iValue = a_iValue;
+    m_fNullIndicator = false;
+}
+
+
 int RTCRestInt64::resetToDefault()
 {
@@ -491,4 +505,11 @@
     m_fNullIndicator = false;
     return VINF_SUCCESS;
+}
+
+
+void RTCRestInt32::assignValue(int32_t a_iValue)
+{
+    m_iValue = a_iValue;
+    m_fNullIndicator = false;
 }
 
@@ -642,4 +663,11 @@
 
 
+void RTCRestInt16::assignValue(int16_t a_iValue)
+{
+    m_iValue = a_iValue;
+    m_fNullIndicator = false;
+}
+
+
 int RTCRestInt16::resetToDefault()
 {
@@ -797,4 +825,11 @@
 
 
+void RTCRestDouble::assignValue(double a_rdValue)
+{
+    m_rdValue = a_rdValue;
+    m_fNullIndicator = false;
+}
+
+
 int RTCRestDouble::resetToDefault()
 {
