(file) Return to CIMOperationResponseDecoder.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Client

   1 karl  1.51 //%2003////////////////////////////////////////////////////////////////////////
   2 mike  1.2  //
   3 karl  1.51 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development
   4            // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
   5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
   6            // IBM Corp.; EMC Corporation, The Open Group.
   7 mike  1.2  //
   8            // Permission is hereby granted, free of charge, to any person obtaining a copy
   9            // of this software and associated documentation files (the "Software"), to
  10            // deal in the Software without restriction, including without limitation the
  11            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  12            // sell copies of the Software, and to permit persons to whom the Software is
  13            // furnished to do so, subject to the following conditions:
  14 kumpf 1.25 // 
  15 mike  1.2  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  16            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  17            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  18            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  19            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  20            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  21            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  22            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  23            //
  24            //==============================================================================
  25            //
  26            // Author: Mike Brasher (mbrasher@bmc.com)
  27            //
  28            // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
  29            //              Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
  30            //              Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
  31            //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
  32 kumpf 1.23 //              Carol Ann Krug Graves, Hewlett-Packard Company
  33            //                  (carolann_graves@hp.com)
  34 kumpf 1.36 //              Sushma Fernandes, Hewlett-Packard Company
  35            //                  (sushma_fernandes@hp.com)
  36 david 1.38 //              Dave Rosckes (rosckes@us.ibm.com)
  37 kumpf 1.60 //              Seema Gupta (gseema@in.ibm.com) for PEP135
  38            //              Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1
  39 mike  1.2  //
  40            //%/////////////////////////////////////////////////////////////////////////////
  41            
  42            #include <Pegasus/Common/Config.h>
  43            #include <iostream>
  44 kumpf 1.15 #include <Pegasus/Common/Constants.h>
  45 mike  1.2  #include <Pegasus/Common/XmlParser.h>
  46            #include <Pegasus/Common/XmlReader.h>
  47            #include <Pegasus/Common/System.h>
  48            #include <Pegasus/Common/XmlWriter.h>
  49            #include <Pegasus/Common/HTTPMessage.h>
  50            #include <Pegasus/Common/CIMMessage.h>
  51 kumpf 1.60 #include <Pegasus/Common/Exception.h>
  52 mike  1.2  #include "CIMOperationResponseDecoder.h"
  53            
  54 humberto 1.43 // l10n
  55               #include <Pegasus/Common/MessageLoader.h>
  56               
  57 mike     1.2  PEGASUS_USING_STD;
  58               
  59               PEGASUS_NAMESPACE_BEGIN
  60               
  61               CIMOperationResponseDecoder::CIMOperationResponseDecoder(
  62                   MessageQueue* outputQueue,
  63                   MessageQueue* encoderQueue,
  64 karl     1.41     ClientAuthenticator* authenticator,
  65                   Uint32 showInput)
  66 mike     1.2      :
  67 kumpf    1.16     MessageQueue(PEGASUS_QUEUENAME_OPRESPDECODER),
  68 mike     1.2      _outputQueue(outputQueue),
  69                   _encoderQueue(encoderQueue),
  70 karl     1.41     _authenticator(authenticator),
  71                   _showInput(showInput)
  72 mike     1.2  {
  73               }
  74               
  75               CIMOperationResponseDecoder::~CIMOperationResponseDecoder()
  76               {
  77               
  78               }
  79               
  80               void  CIMOperationResponseDecoder::setEncoderQueue(MessageQueue* encoderQueue)
  81               {
  82                   _encoderQueue = encoderQueue;
  83               }
  84               
  85               void CIMOperationResponseDecoder::handleEnqueue()
  86               {
  87                   Message* message = dequeue();
  88               
  89                   if (!message)
  90 kumpf    1.60         return;
  91 mike     1.2  
  92                   switch (message->getType())
  93                   {
  94 kumpf    1.60         case HTTP_MESSAGE:
  95                       {
  96                           HTTPMessage* httpMessage = (HTTPMessage*)message;
  97                           _handleHTTPMessage(httpMessage);
  98                           break;
  99                       }
 100 mike     1.2  
 101 kumpf    1.60         default:
 102 kumpf    1.17             PEGASUS_ASSERT(0);
 103 kumpf    1.60             break;
 104 mike     1.2      }
 105               
 106                   delete message;
 107               }
 108               
 109               void CIMOperationResponseDecoder::_handleHTTPMessage(HTTPMessage* httpMessage)
 110               {
 111                   //
 112                   // Parse the HTTP message:
 113                   //
 114               
 115                   String startLine;
 116                   Array<HTTPHeader> headers;
 117                   Sint8* content;
 118                   Uint32 contentLength;
 119               
 120 kumpf    1.19     if (httpMessage->message.size() == 0)
 121 kumpf    1.60     {
 122                       // l10n
 123               
 124                       // CIMClientMalformedHTTPException* malformedHTTPException =
 125                       //   new CIMClientMalformedHTTPException("Empty HTTP response message.");
 126               
 127                       MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EMPTY_RESPONSE", "Empty HTTP response message.");
 128                       String mlString(MessageLoader::getMessage(mlParms));
 129               
 130                       CIMClientMalformedHTTPException* malformedHTTPException =
 131                           new CIMClientMalformedHTTPException(mlString);
 132               
 133                       ClientExceptionMessage * response =
 134                           new ClientExceptionMessage(malformedHTTPException);
 135               
 136                       _outputQueue->enqueue(response);
 137                       return;
 138                   }
 139 kumpf    1.19 
 140 mike     1.2      httpMessage->parse(startLine, headers, contentLength);
 141               
 142 kumpf    1.19     //
 143                   // Get the status line info
 144                   //
 145                   String httpVersion;
 146                   Uint32 statusCode;
 147                   String reasonPhrase;
 148               
 149                   Boolean parsableMessage = HTTPMessage::parseStatusLine(
 150                       startLine, httpVersion, statusCode, reasonPhrase);
 151                   if (!parsableMessage)
 152                   {
 153 kumpf    1.60         // l10n
 154               
 155                       // CIMClientMalformedHTTPException* malformedHTTPException = new
 156                       //   CIMClientMalformedHTTPException("Malformed HTTP response message.");
 157               
 158                       MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MALFORMED_RESPONSE", "Malformed HTTP response message.");
 159                       String mlString(MessageLoader::getMessage(mlParms));
 160               
 161                       CIMClientMalformedHTTPException* malformedHTTPException =
 162                           new CIMClientMalformedHTTPException(mlString);
 163 kumpf    1.19 
 164 kumpf    1.60         ClientExceptionMessage * response =
 165                           new ClientExceptionMessage(malformedHTTPException);
 166 humberto 1.43 
 167 kumpf    1.60         _outputQueue->enqueue(response);
 168                       return;
 169 kumpf    1.19     }
 170               
 171 karl     1.41 #ifdef PEGASUS_CLIENT_TRACE_ENABLE
 172                   if (_showInput & 1)
 173                   {
 174                       cout << "CIMOperatonResponseDecoder";
 175                       httpMessage->printAll(cout);
 176                   }
 177                   if (_showInput & 2)
 178                   {
 179                       Uint32 size = httpMessage->message.size();
 180                       char* tmpBuf = new char[size+1];
 181               
 182                       strncpy( tmpBuf, httpMessage->message.getData(), size );
 183                       tmpBuf[size] = '\0';
 184                       Logger::put(Logger::STANDARD_LOG,
 185 kumpf    1.60             "CIMCLIENT",
 186                           Logger::TRACE,
 187                           "CIMOperationRequestDecoder::Response, XML content: $1",
 188                           tmpBuf);
 189 karl     1.41         delete []tmpBuf;
 190                   }
 191               #endif
 192               
 193 kumpf    1.8      try
 194 mike     1.2      {
 195 kumpf    1.8          if (_authenticator->checkResponseHeaderForChallenge(headers))
 196                       {
 197                           //
 198                           // Get the original request, put that in the encoder's queue for
 199                           // re-sending with authentication challenge response.
 200                           //
 201                           Message* reqMessage = _authenticator->getRequestMessage();
 202                           _encoderQueue->enqueue(reqMessage);
 203 mike     1.2  
 204 kumpf    1.8              return;
 205                       }
 206                       else
 207                       {
 208                           //
 209                           // Received a valid/error response from the server.
 210                           // We do not need the original request message anymore, hence delete
 211                           // the request message by getting the handle from the ClientAuthenticator.
 212                           //
 213                           Message* reqMessage = _authenticator->getRequestMessage();
 214                           if (reqMessage)
 215                           {
 216 kumpf    1.55                 _authenticator->setRequestMessage(0);
 217 kumpf    1.8                  delete reqMessage;
 218                           }
 219                       }
 220 mike     1.2      }
 221 kumpf    1.8      catch(InvalidAuthHeader& e)
 222 mike     1.2      {
 223 kumpf    1.20         CIMClientMalformedHTTPException* malformedHTTPException =
 224                           new CIMClientMalformedHTTPException(e.getMessage());
 225 kumpf    1.17         ClientExceptionMessage * response =
 226                           new ClientExceptionMessage(malformedHTTPException);
 227 mike     1.2  
 228 kumpf    1.17         _outputQueue->enqueue(response);
 229 kumpf    1.15         return;
 230                   }
 231 kumpf    1.36 
 232 kumpf    1.52     // We have the response.  If authentication failed, we will generate a
 233                   // CIMClientHTTPErrorException below with the "401 Unauthorized" status
 234                   // in the (re-challenge) response.
 235 kumpf    1.15 
 236                   //
 237                   // Check for a success (200 OK) response
 238                   //
 239 kumpf    1.17     if (statusCode != HTTP_STATUSCODE_OK)
 240 kumpf    1.15     {
 241                       String cimError;
 242                       String pegasusError;
 243               
 244 brian.campbell 1.57         HTTPMessage::lookupHeader(headers, "CIMError", cimError, true);
 245 kumpf          1.15         HTTPMessage::lookupHeader(headers, PEGASUS_HTTPHEADERTAG_ERRORDETAIL, pegasusError);
 246 kumpf          1.35         try
 247                             {
 248                                 pegasusError = XmlReader::decodeURICharacters(pegasusError);
 249                             }
 250 brian.campbell 1.57         catch (ParseError&)
 251 kumpf          1.35         {
 252                                 // Ignore this exception.  We're more interested in having the
 253                                 // message in encoded form than knowing that the format is invalid.
 254                             }
 255 kumpf          1.15 
 256 kumpf          1.32         CIMClientHTTPErrorException* httpError =
 257 kumpf          1.54             new CIMClientHTTPErrorException(statusCode, reasonPhrase,
 258                                                                 cimError, pegasusError);
 259 kumpf          1.17         ClientExceptionMessage * response =
 260                                 new ClientExceptionMessage(httpError);
 261 kumpf          1.15 
 262                             _outputQueue->enqueue(response);
 263 kumpf          1.8          return;
 264 mike           1.2      }
 265                     
 266                         //
 267                         // Search for "CIMOperation" header:
 268                         //
 269                         String cimOperation;
 270                     
 271                         if (!HTTPMessage::lookupHeader(
 272 kumpf          1.60         headers, "CIMOperation", cimOperation, true))
 273 mike           1.2      {
 274 humberto       1.43       // l10n
 275                     
 276                           // CIMClientMalformedHTTPException* malformedHTTPException = new
 277                           //   CIMClientMalformedHTTPException("Missing CIMOperation HTTP header");
 278                     
 279 humberto       1.44       MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MISSING_CIMOP_HEADER", "Missing CIMOperation HTTP header");
 280 humberto       1.43       String mlString(MessageLoader::getMessage(mlParms));
 281 kumpf          1.60 
 282 humberto       1.43       CIMClientMalformedHTTPException* malformedHTTPException = new
 283 kumpf          1.60         CIMClientMalformedHTTPException(mlString);
 284                     
 285 kumpf          1.17         ClientExceptionMessage * response =
 286                                 new ClientExceptionMessage(malformedHTTPException);
 287                     
 288                             _outputQueue->enqueue(response);
 289                             return;
 290 mike           1.2      }
 291                     
 292 chuck          1.39 
 293                     // l10n start
 294 kumpf          1.60     ContentLanguages contentLanguages  = ContentLanguages::EMPTY;
 295                         try
 296                         {
 297                             // Get and validate the Content-Language header, if set
 298                             String contentLanguageHeader;
 299                             if (HTTPMessage::lookupHeader(
 300                                     headers,
 301                                     "Content-Language",
 302                                     contentLanguageHeader,
 303                                     false) == true)
 304                             {
 305                                 contentLanguages = ContentLanguages(contentLanguageHeader);
 306                             }
 307                         }
 308                         catch (Exception &)
 309                         {
 310                             // l10n
 311 humberto       1.43 
 312 kumpf          1.60         // CIMClientMalformedHTTPException* malformedHTTPException = new
 313                             //  CIMClientMalformedHTTPException("Malformed Content-Language header.");
 314 humberto       1.43 
 315 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MALFORMED_CONTENT", "Malformed Content-Language header.");
 316                             String mlString(MessageLoader::getMessage(mlParms));
 317 humberto       1.43 
 318 kumpf          1.60         CIMClientMalformedHTTPException* malformedHTTPException =
 319                                 new CIMClientMalformedHTTPException(mlString);
 320 humberto       1.43 
 321 kumpf          1.60         ClientExceptionMessage * response =
 322                                 new ClientExceptionMessage(malformedHTTPException);
 323 humberto       1.43 
 324 kumpf          1.60         _outputQueue->enqueue(response);
 325                             return;
 326                         }
 327                     // l10n end
 328 david          1.42     //
 329                         // Search for "Content-Type" header:
 330                         //
 331 kumpf          1.60 
 332                         // BUG 572, Use of Content-Type header and change error msg.
 333                         // If header exists, test type.  If not, ignore. We will find
 334                         // content type errors in text analysis.
 335                         // content-type header  value format:
 336                         //              type "/" subtype *( ";" parameter )
 337                         // ex. text/xml;Charset="utf8"
 338                         String cimContentType;
 339                     
 340                         if (HTTPMessage::lookupHeader(
 341                                 headers, "Content-Type", cimContentType, true))
 342                         {
 343                             Uint32 len;
 344                             String contentTypeValue;
 345                             if ((len = cimContentType.find(';')) != PEG_NOT_FOUND)
 346                                 contentTypeValue = cimContentType.subString(0,len);
 347                             else
 348                                 contentTypeValue = cimContentType;
 349                     
 350                             if (!String::equalNoCase(contentTypeValue, "text/xml") &&
 351                                 !String::equalNoCase(contentTypeValue, "application/xml"))
 352 kumpf          1.60         {
 353                                 CIMClientMalformedHTTPException* malformedHTTPException = new
 354                                     CIMClientMalformedHTTPException
 355                                         ("Bad Content-Type HTTP header; " + contentTypeValue);
 356                                 ClientExceptionMessage * response =
 357                                     new ClientExceptionMessage(malformedHTTPException);
 358                     
 359                                 _outputQueue->enqueue(response);
 360                                 return;
 361                             }
 362                         }
 363                         // comment out the error rejection code if the content-type header does
 364                         //    not exist
 365 karl           1.48 #ifdef PEGASUS_REJECT_ON_MISSING_CONTENTTYPE_HEADER
 366 kumpf          1.60     else
 367                         {
 368                             CIMClientMalformedHTTPException* malformedHTTPException = new
 369                                 CIMClientMalformedHTTPException
 370                                     ("Missing Content-Type HTTP header; ");
 371                             ClientExceptionMessage * response =
 372                                 new ClientExceptionMessage(malformedHTTPException);
 373                     
 374                             _outputQueue->enqueue(response);
 375                             return;
 376                         }
 377 karl           1.48 #endif
 378 kumpf          1.60 
 379                         // look for any cim status codes. The HTTPConnection level would have
 380                         // added them here.
 381                     
 382                         String cimStatusCodeValue;
 383                         Boolean found = HTTPMessage::lookupHeader(headers, "CIMStatusCode",
 384                             cimStatusCodeValue, true);
 385                         CIMStatusCode cimStatusCodeNumber = CIM_ERR_SUCCESS;
 386                     
 387                         if (found == true &&
 388                             (cimStatusCodeNumber = (CIMStatusCode)
 389                              atoi(cimStatusCodeValue.getCString())) != CIM_ERR_SUCCESS)
 390                         {
 391                             String cimStatusCodeDescription;
 392                             found = HTTPMessage::lookupHeader(headers, "CIMStatusCodeDescription",
 393                                 cimStatusCodeDescription, true);
 394                             if (found == true && cimStatusCodeDescription.size() > 0)
 395                             {
 396                                 try
 397                                 {
 398                                     cimStatusCodeDescription =
 399 kumpf          1.60                     XmlReader::decodeURICharacters(cimStatusCodeDescription);
 400                                 }
 401                                 catch (ParseError&)
 402                                 {
 403                                 }
 404                             } // if there is a description with the code
 405                     
 406                             CIMException* cimStatusException =
 407                                 new CIMException(cimStatusCodeNumber,cimStatusCodeDescription);
 408                             cimStatusException->setContentLanguages(contentLanguages);
 409                             ClientExceptionMessage * response =
 410                                 new ClientExceptionMessage(cimStatusException);
 411                             _outputQueue->enqueue(response);
 412                             return;
 413                         }
 414 brian.campbell 1.59 
 415 mike           1.2      //
 416                         // Zero-terminate the message:
 417                         //
 418                         httpMessage->message.append('\0');
 419 keith.petley   1.40 
 420 mike           1.2      // Calculate the beginning of the content from the message size and
 421                         // the content length.  Subtract 1 to take into account the null
 422                         // character we just added to the end of the message.
 423                     
 424                         content = (Sint8*) httpMessage->message.getData() +
 425 karl           1.41         httpMessage->message.size() - contentLength - 1;
 426 mike           1.2  
 427                         //
 428                         // If it is a method response, then dispatch it to be handled:
 429                         //
 430                     
 431                         if (!String::equalNoCase(cimOperation, "MethodResponse"))
 432                         {
 433 kumpf          1.60         // l10n
 434 humberto       1.43 
 435 kumpf          1.60         // CIMClientMalformedHTTPException* malformedHTTPException =
 436                             //   new CIMClientMalformedHTTPException(
 437                             //        String("Received CIMOperation HTTP header value \"") +
 438                             //        cimOperation + "\", expected \"MethodResponse\"");
 439 humberto       1.43 
 440 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_METHODRESPONSE", "Received CIMOperation HTTP header value \"$1\", expected \"MethodResponse\"", cimOperation);
 441                             String mlString(MessageLoader::getMessage(mlParms));
 442 humberto       1.43 
 443 kumpf          1.60         CIMClientMalformedHTTPException* malformedHTTPException =
 444                                 new CIMClientMalformedHTTPException(mlString);
 445 humberto       1.43 
 446 kumpf          1.60         ClientExceptionMessage * response =
 447                                 new ClientExceptionMessage(malformedHTTPException);
 448 kumpf          1.17 
 449                             _outputQueue->enqueue(response);
 450                             return;
 451 mike           1.2      }
 452                     
 453 chuck          1.39     _handleMethodResponse(content,
 454 kumpf          1.60         contentLanguages);  // l10n
 455 mike           1.2  }
 456                     
 457 chuck          1.39 void CIMOperationResponseDecoder::_handleMethodResponse(char* content,
 458 kumpf          1.60     const ContentLanguages& contentLanguages) //l10n
 459 mike           1.2  {
 460                         Message* response = 0;
 461                     
 462                         //
 463                         // Create and initialize XML parser:
 464                         //
 465                     
 466                         XmlParser parser((char*)content);
 467                         XmlEntry entry;
 468                     
 469                         try
 470                         {
 471 kumpf          1.60         //
 472                             // Process <?xml ... >
 473                             //
 474 mike           1.2  
 475 kumpf          1.11         const char* xmlVersion = 0;
 476                             const char* xmlEncoding = 0;
 477                     
 478 kumpf          1.60         XmlReader::getXmlDeclaration(parser, xmlVersion, xmlEncoding);
 479 mike           1.2  
 480 kumpf          1.60         //
 481                             // Process <CIM ... >
 482                             //
 483 mike           1.2  
 484 kumpf          1.9          const char* cimVersion = 0;
 485                             const char* dtdVersion = 0;
 486                     
 487 kumpf          1.17         // ATTN-RK-P3-20020416: Need to validate these versions?
 488 kumpf          1.60         XmlReader::getCimStartTag(parser, cimVersion, dtdVersion);
 489 mike           1.2  
 490 kumpf          1.60         //
 491                             // Expect <MESSAGE ... >
 492                             //
 493 mike           1.2  
 494 kumpf          1.60         String messageId;
 495                             String protocolVersion;
 496 mike           1.2  
 497 kumpf          1.60         if (!XmlReader::getMessageStartTag(parser, messageId, protocolVersion))
 498                             {
 499                                 // l10n
 500 humberto       1.43 
 501 kumpf          1.60             // throw XmlValidationError(
 502                                 // parser.getLine(), "expected MESSAGE element");
 503 humberto       1.43 
 504 kumpf          1.60             MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_MESSAGE_ELEMENT",
 505                                     "expected MESSAGE element");
 506 humberto       1.43 
 507 kumpf          1.60             throw XmlValidationError(parser.getLine(), mlParms);
 508                             }
 509 humberto       1.43 
 510 kumpf          1.60         if (!String::equalNoCase(protocolVersion, "1.0"))
 511                             {
 512                                 // l10n
 513 mike           1.2  
 514 kumpf          1.60             // CIMClientResponseException* responseException =
 515                                 //   new CIMClientResponseException(
 516                                 //        String("Received unsupported protocol version \"") +
 517                                 //        protocolVersion + "\", expected \"1.0\"");
 518 humberto       1.43 
 519 kumpf          1.60             MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.UNSUPPORTED_PROTOCOL", "Received unsupported protocol version \"$0\", expected \"$1\"", protocolVersion, "1.0");
 520                                 String mlString(MessageLoader::getMessage(mlParms));
 521 humberto       1.43 
 522 kumpf          1.60             CIMClientResponseException* responseException =
 523                                     new CIMClientResponseException(mlString);
 524 humberto       1.43 
 525 kumpf          1.17             ClientExceptionMessage * response =
 526                                     new ClientExceptionMessage(responseException);
 527 mike           1.2  
 528 kumpf          1.17             _outputQueue->enqueue(response);
 529                                 return;
 530 kumpf          1.60         }
 531                     
 532                             //
 533                             // Expect <SIMPLERSP ... >
 534                             //
 535                     
 536                             XmlReader::expectStartTag(parser, entry, "SIMPLERSP");
 537                     
 538                             //
 539                             // Expect <IMETHODRESPONSE ... >
 540                             //
 541 mike           1.2  
 542 kumpf          1.60         const char* iMethodResponseName = 0;
 543                             Boolean isEmptyTag = false;
 544 humberto       1.43 
 545 kumpf          1.60         if (XmlReader::getIMethodResponseStartTag(
 546                                     parser, iMethodResponseName, isEmptyTag))
 547                             {
 548                                 //
 549                                 // Dispatch the method:
 550                                 //
 551                     
 552                                 if (System::strcasecmp(iMethodResponseName, "GetClass") == 0)
 553                                     response = _decodeGetClassResponse(
 554                                         parser, messageId, isEmptyTag);
 555                                 else if (System::strcasecmp(iMethodResponseName, "GetInstance") == 0)
 556                                     response = _decodeGetInstanceResponse(
 557                                         parser, messageId, isEmptyTag);
 558                                 else if (System::strcasecmp(iMethodResponseName, "EnumerateClassNames") == 0)
 559                                     response = _decodeEnumerateClassNamesResponse(
 560                                         parser, messageId, isEmptyTag);
 561                                 else if (System::strcasecmp(iMethodResponseName, "References") == 0)
 562                                     response = _decodeReferencesResponse(
 563                                         parser, messageId, isEmptyTag);
 564                                 else if (System::strcasecmp(iMethodResponseName, "ReferenceNames") == 0)
 565                                     response = _decodeReferenceNamesResponse(
 566 kumpf          1.60                     parser, messageId, isEmptyTag);
 567                                 else if (System::strcasecmp(iMethodResponseName, "AssociatorNames") == 0)
 568                                     response = _decodeAssociatorNamesResponse(
 569                                         parser, messageId, isEmptyTag);
 570                                 else if (System::strcasecmp(iMethodResponseName, "Associators") == 0)
 571                                     response = _decodeAssociatorsResponse(
 572                                         parser, messageId, isEmptyTag);
 573                                 else if (System::strcasecmp(iMethodResponseName, "CreateInstance") == 0)
 574                                     response = _decodeCreateInstanceResponse(
 575                                         parser, messageId, isEmptyTag);
 576                                 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstanceNames") == 0)
 577                                     response = _decodeEnumerateInstanceNamesResponse(
 578                                         parser, messageId, isEmptyTag);
 579                                 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstances") == 0)
 580                                     response = _decodeEnumerateInstancesResponse(
 581                                         parser, messageId, isEmptyTag);
 582                                 else if (System::strcasecmp(iMethodResponseName, "GetProperty") == 0)
 583                                     response = _decodeGetPropertyResponse(
 584                                         parser, messageId, isEmptyTag);
 585                                 else if (System::strcasecmp(iMethodResponseName, "SetProperty") == 0)
 586                                     response = _decodeSetPropertyResponse(
 587 kumpf          1.60                     parser, messageId, isEmptyTag);
 588                                 else if (System::strcasecmp(iMethodResponseName, "DeleteQualifier") == 0)
 589                                     response = _decodeDeleteQualifierResponse(
 590                                         parser, messageId, isEmptyTag);
 591                                 else if (System::strcasecmp(iMethodResponseName, "GetQualifier") == 0)
 592                                     response = _decodeGetQualifierResponse(
 593                                         parser, messageId, isEmptyTag);
 594                                 else if (System::strcasecmp(iMethodResponseName, "SetQualifier") == 0)
 595                                     response = _decodeSetQualifierResponse(
 596                                         parser, messageId, isEmptyTag);
 597                                 else if (System::strcasecmp(iMethodResponseName, "EnumerateQualifiers") == 0)
 598                                     response = _decodeEnumerateQualifiersResponse(
 599                                         parser, messageId, isEmptyTag);
 600                                 else if (System::strcasecmp(iMethodResponseName, "EnumerateClasses") == 0)
 601                                     response = _decodeEnumerateClassesResponse(
 602                                         parser, messageId, isEmptyTag);
 603                                 else if (System::strcasecmp(iMethodResponseName, "CreateClass") == 0)
 604                                     response = _decodeCreateClassResponse(
 605                                         parser, messageId, isEmptyTag);
 606                                 else if (System::strcasecmp(iMethodResponseName, "ModifyClass") == 0)
 607                                     response = _decodeModifyClassResponse(
 608 kumpf          1.60                     parser, messageId, isEmptyTag);
 609                                 else if (System::strcasecmp(iMethodResponseName, "ModifyInstance") == 0)
 610                                     response = _decodeModifyInstanceResponse(
 611                                         parser, messageId, isEmptyTag);
 612                                 else if (System::strcasecmp(iMethodResponseName, "DeleteClass") == 0)
 613                                     response = _decodeDeleteClassResponse(
 614                                         parser, messageId, isEmptyTag);
 615                                 else if (System::strcasecmp(iMethodResponseName, "DeleteInstance") == 0)
 616                                     response = _decodeDeleteInstanceResponse(
 617                                         parser, messageId, isEmptyTag);
 618                                 else if (System::strcasecmp(iMethodResponseName, "ExecQuery") == 0)
 619                                     response = _decodeExecQueryResponse(
 620                                         parser, messageId, isEmptyTag);
 621                                 else
 622                                 {
 623                                     // l10n
 624 humberto       1.43 
 625 mike           1.2                  // Unrecognized IMethodResponse name attribute
 626 kumpf          1.60                 // throw XmlValidationError(parser.getLine(),
 627                                     //   String("Unrecognized IMethodResponse name \"") +
 628                                     //        iMethodResponseName + "\"");
 629                     
 630                                     MessageLoaderParms mlParms(
 631                                         "Client.CIMOperationResponseDecoder.UNRECOGNIZED_NAME",
 632                                         "Unrecognized IMethodResponse name \"$0\"",
 633                                         iMethodResponseName);
 634                                     throw XmlValidationError(parser.getLine(), mlParms);
 635                                 }
 636 humberto       1.43 
 637 kumpf          1.60             //
 638                                 // Handle end tag:
 639                                 //
 640 humberto       1.43 
 641 kumpf          1.60             if (!isEmptyTag)
 642                                 {
 643                                     XmlReader::expectEndTag(parser, "IMETHODRESPONSE");
 644                                 }
 645                             }
 646                             else if (XmlReader::getMethodResponseStartTag(
 647                                          parser, iMethodResponseName, isEmptyTag))
 648                             {
 649                                 response = _decodeInvokeMethodResponse(
 650                                     parser, messageId, iMethodResponseName, isEmptyTag);
 651                     
 652                                 //
 653                                 // Handle end tag:
 654                                 //
 655                                 if (!isEmptyTag)
 656                                 {
 657                                     XmlReader::expectEndTag(parser, "METHODRESPONSE");
 658                                 }
 659                             }
 660                             else
 661                             {
 662 kumpf          1.60             // l10n
 663 humberto       1.43 
 664 kumpf          1.60             // throw XmlValidationError(parser.getLine(),
 665                                 //   "expected METHODRESPONSE or IMETHODRESPONSE element");
 666                     
 667                                 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_METHODRESPONSE_OR_IMETHODRESPONSE_ELEMENT",
 668                                     "expected METHODRESPONSE or IMETHODRESPONSE element");
 669                     
 670                                 throw XmlValidationError(parser.getLine(), mlParms);
 671                             }
 672 mike           1.2  
 673                             //
 674                             // Handle end tags:
 675                             //
 676 kumpf          1.60         XmlReader::expectEndTag(parser, "SIMPLERSP");
 677                             XmlReader::expectEndTag(parser, "MESSAGE");
 678                             XmlReader::expectEndTag(parser, "CIM");
 679 mike           1.2      }
 680 kumpf          1.17     catch (XmlException& x)
 681                         {
 682 kumpf          1.60         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::TRACE,
 683                                 "CIMOperationResponseDecoder::_handleMethodResponse - XmlException has occurred. Message: $0",x.getMessage());
 684 david          1.38 
 685 kumpf          1.17         if (response)
 686                             {
 687 karl           1.41 //#ifdef PEGASUS_SNIA_INTEROP_TEST
 688                     //         httpMessage->printAll(cout);
 689                     //#endif
 690 kumpf          1.60 
 691 kumpf          1.17             delete response;
 692                             }
 693                     
 694                             response = new ClientExceptionMessage(
 695 kumpf          1.20             new CIMClientXmlException(x.getMessage()));
 696 kumpf          1.17     }
 697 mike           1.2      catch (Exception& x)
 698                         {
 699 kumpf          1.50         // Might get MalformedObjectNameException, InvalidNameException, etc.
 700 kumpf          1.17 
 701                             if (response)
 702                             {
 703                                 delete response;
 704                             }
 705 mike           1.2  
 706 kumpf          1.17         response = new ClientExceptionMessage(
 707 kumpf          1.53             new CIMClientResponseException(x.getMessage()));
 708 mike           1.2      }
 709 chuck          1.39 
 710                     //l10n start
 711                     // l10n TODO - might want to move A-L and C-L to Message
 712                     // to make this more maintainable
 713 kumpf          1.60     // Add the language header to the request
 714                         CIMMessage * cimmsg = dynamic_cast<CIMMessage *>(response);
 715                         if (cimmsg != NULL)
 716                         {
 717                             cimmsg->operationContext.set(ContentLanguageListContainer(contentLanguages));
 718                         }
 719                         else
 720                         {
 721                             ;    // l10n TODO - error back to client here
 722                         }
 723                     // l10n end
 724 mike           1.2  
 725                         _outputQueue->enqueue(response);
 726                     }
 727                     
 728                     CIMCreateClassResponseMessage* CIMOperationResponseDecoder::_decodeCreateClassResponse(
 729 kumpf          1.60     XmlParser& parser,
 730                         const String& messageId,
 731                         Boolean isEmptyImethodresponseTag)
 732 mike           1.2  {
 733                         XmlEntry entry;
 734 kumpf          1.12     CIMException cimException;
 735 mike           1.2  
 736 kumpf          1.60     if (!isEmptyImethodresponseTag)
 737 mike           1.2      {
 738 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 739                             {
 740                                 return(new CIMCreateClassResponseMessage(
 741                                     messageId,
 742                                     cimException,
 743                                     QueueIdStack()));
 744                             }
 745 mike           1.2  
 746 kumpf          1.60         if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 747                             {
 748                                 if (entry.type != XmlEntry::EMPTY_TAG)
 749                                 {
 750                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 751                                 }
 752                             }
 753 mike           1.2      }
 754 kumpf          1.60 
 755                         return(new CIMCreateClassResponseMessage(
 756                             messageId,
 757                             cimException,
 758                             QueueIdStack()));
 759 mike           1.2  }
 760                     
 761                     CIMGetClassResponseMessage* CIMOperationResponseDecoder::_decodeGetClassResponse(
 762 kumpf          1.60     XmlParser& parser,
 763                         const String& messageId,
 764                         Boolean isEmptyImethodresponseTag)
 765 mike           1.2  {
 766                         XmlEntry entry;
 767 kumpf          1.12     CIMException cimException;
 768 mike           1.2  
 769 kumpf          1.60     if (isEmptyImethodresponseTag)
 770                         {
 771                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
 772                                 "Expected open of $0 element", "IMETHODRESPONSE");
 773                             throw XmlValidationError(parser.getLine(), mlParms);
 774                         }
 775                         else if (XmlReader::getErrorElement(parser, cimException))
 776 mike           1.2      {
 777 kumpf          1.60         return(new CIMGetClassResponseMessage(
 778                                 messageId,
 779                                 cimException,
 780                                 QueueIdStack(),
 781                                 CIMClass()));
 782 mike           1.2      }
 783 kumpf          1.37     else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 784 mike           1.2      {
 785 kumpf          1.60         CIMClass cimClass;
 786 mike           1.2  
 787 kumpf          1.60         if ((entry.type == XmlEntry::EMPTY_TAG) ||
 788                                 !XmlReader::getClassElement(parser, cimClass))
 789                             {
 790                                 // l10n
 791 humberto       1.43 
 792 kumpf          1.60             // throw XmlValidationError(parser.getLine(),"expected CLASS element");
 793 humberto       1.43 
 794 kumpf          1.60             MessageLoaderParms mlParms(
 795                                     "Client.CIMOperationResponseDecoder.EXPECTED_CLASS_ELEMENT",
 796                                     "expected CLASS element");
 797                                 throw XmlValidationError(parser.getLine(), mlParms);
 798                             }
 799 humberto       1.43 
 800 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
 801 humberto       1.43 
 802 kumpf          1.60         return(new CIMGetClassResponseMessage(
 803                                 messageId,
 804                                 cimException,
 805                                 QueueIdStack(),
 806                                 cimClass));
 807 mike           1.2      }
 808                         else
 809                         {
 810 kumpf          1.60         // l10n
 811 humberto       1.43 
 812 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
 813                             //   "expected ERROR or IRETURNVALUE element");
 814 humberto       1.43 
 815 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
 816                                 "expected ERROR or IRETURNVALUE element");
 817 humberto       1.43 
 818 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
 819 mike           1.2      }
 820                     }
 821                     
 822                     CIMModifyClassResponseMessage* CIMOperationResponseDecoder::_decodeModifyClassResponse(
 823 kumpf          1.60     XmlParser& parser,
 824                         const String& messageId,
 825                         Boolean isEmptyImethodresponseTag)
 826 mike           1.2  {
 827                         XmlEntry entry;
 828 kumpf          1.12     CIMException cimException;
 829 mike           1.2  
 830 kumpf          1.60     if (!isEmptyImethodresponseTag)
 831 mike           1.2      {
 832 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 833                             {
 834                                 return(new CIMModifyClassResponseMessage(
 835                                     messageId,
 836                                     cimException,
 837                                     QueueIdStack()));
 838                             }
 839                     
 840                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 841                             {
 842                                 if (entry.type != XmlEntry::EMPTY_TAG)
 843                                 {
 844                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 845                                 }
 846                             }
 847 mike           1.2      }
 848 kumpf          1.60 
 849                         return(new CIMModifyClassResponseMessage(
 850                             messageId,
 851                             cimException,
 852                             QueueIdStack()));
 853 mike           1.2  }
 854                     
 855                     CIMEnumerateClassNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassNamesResponse(
 856 kumpf          1.60     XmlParser& parser,
 857                         const String& messageId,
 858                         Boolean isEmptyImethodresponseTag)
 859 mike           1.2  {
 860                         XmlEntry entry;
 861 kumpf          1.12     CIMException cimException;
 862 kumpf          1.60     Array<CIMName> classNames;
 863 mike           1.2  
 864 kumpf          1.60     if (!isEmptyImethodresponseTag)
 865 mike           1.2      {
 866 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 867                             {
 868                                 return(new CIMEnumerateClassNamesResponseMessage(
 869                                     messageId,
 870                                     cimException,
 871                                     QueueIdStack(),
 872                                     Array<CIMName>()));
 873                             }
 874                     
 875                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 876                             {
 877                                 if (entry.type != XmlEntry::EMPTY_TAG)
 878                                 {
 879                                     CIMName className;
 880                     
 881                                     while (XmlReader::getClassNameElement(parser, className, false))
 882                                         classNames.append(className);
 883                     
 884                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 885                                 }
 886                             }
 887 mike           1.2      }
 888                     
 889 kumpf          1.60     return(new CIMEnumerateClassNamesResponseMessage(
 890                             messageId,
 891                             cimException,
 892                             QueueIdStack(),
 893                             classNames));
 894 mike           1.2  }
 895                     
 896                     CIMEnumerateClassesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassesResponse(
 897 kumpf          1.60     XmlParser& parser,
 898                         const String& messageId,
 899                         Boolean isEmptyImethodresponseTag)
 900 mike           1.2  {
 901                         XmlEntry entry;
 902 kumpf          1.12     CIMException cimException;
 903 kumpf          1.60     Array<CIMClass> cimClasses;
 904 mike           1.2  
 905 kumpf          1.60     if (!isEmptyImethodresponseTag)
 906 mike           1.2      {
 907 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 908                             {
 909                                 return(new CIMEnumerateClassesResponseMessage(
 910                                     messageId,
 911                                     cimException,
 912                                     QueueIdStack(),
 913                                     Array<CIMClass>()));
 914                             }
 915                     
 916                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 917                             {
 918                                 if (entry.type != XmlEntry::EMPTY_TAG)
 919                                 {
 920                                     CIMClass cimClass;
 921                     
 922                                     while (XmlReader::getClassElement(parser, cimClass))
 923                                         cimClasses.append(cimClass);
 924                     
 925                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 926                                 }
 927                             }
 928 mike           1.2      }
 929                     
 930 kumpf          1.60     return(new CIMEnumerateClassesResponseMessage(
 931                             messageId,
 932                             cimException,
 933                             QueueIdStack(),
 934                             cimClasses));
 935 mike           1.2  }
 936                     
 937                     CIMDeleteClassResponseMessage* CIMOperationResponseDecoder::_decodeDeleteClassResponse(
 938 kumpf          1.60     XmlParser& parser,
 939                         const String& messageId,
 940                         Boolean isEmptyImethodresponseTag)
 941 mike           1.2  {
 942                         XmlEntry entry;
 943 kumpf          1.12     CIMException cimException;
 944 mike           1.2  
 945 kumpf          1.60     if (!isEmptyImethodresponseTag)
 946 mike           1.2      {
 947 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 948                             {
 949                                 return(new CIMDeleteClassResponseMessage(
 950                                     messageId,
 951                                     cimException,
 952                                     QueueIdStack()));
 953                             }
 954                     
 955                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 956                             {
 957                                 if (entry.type != XmlEntry::EMPTY_TAG)
 958                                 {
 959                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 960                                 }
 961                             }
 962 mike           1.2      }
 963 kumpf          1.60 
 964                         return(new CIMDeleteClassResponseMessage(
 965                             messageId,
 966                             cimException,
 967                             QueueIdStack()));
 968 mike           1.2  }
 969                     
 970                     CIMCreateInstanceResponseMessage* CIMOperationResponseDecoder::_decodeCreateInstanceResponse(
 971 kumpf          1.60     XmlParser& parser,
 972                         const String& messageId,
 973                         Boolean isEmptyImethodresponseTag)
 974 mike           1.2  {
 975                         XmlEntry entry;
 976 kumpf          1.12     CIMException cimException;
 977 mike           1.2  
 978 kumpf          1.60     if (isEmptyImethodresponseTag)
 979                         {
 980                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
 981                                 "Expected open of $0 element", "IMETHODRESPONSE");
 982                             throw XmlValidationError(parser.getLine(), mlParms);
 983                         }
 984                         else if (XmlReader::getErrorElement(parser, cimException))
 985 mike           1.2      {
 986 kumpf          1.60         return(new CIMCreateInstanceResponseMessage(
 987                                 messageId,
 988                                 cimException,
 989                                 QueueIdStack(),
 990                                 CIMObjectPath()));
 991 mike           1.2      }
 992                         else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 993                         {
 994 kumpf          1.60         CIMObjectPath instanceName;
 995                             XmlReader::getInstanceNameElement(parser, instanceName);
 996 mike           1.2  
 997 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
 998 mike           1.2  
 999 kumpf          1.60         return(new CIMCreateInstanceResponseMessage(
1000                                 messageId,
1001                                 cimException,
1002                                 QueueIdStack(),
1003                                 instanceName));
1004 mike           1.2      }
1005                         else
1006                         {
1007 kumpf          1.60         // l10n
1008 humberto       1.43 
1009 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
1010                             //   "expected ERROR or IRETURNVALUE element");
1011 humberto       1.43 
1012 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1013                                 "expected ERROR or IRETURNVALUE element");
1014 humberto       1.43 
1015 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
1016 mike           1.2      }
1017                     }
1018                     
1019                     CIMGetInstanceResponseMessage* CIMOperationResponseDecoder::_decodeGetInstanceResponse(
1020 kumpf          1.60     XmlParser& parser,
1021                         const String& messageId,
1022                         Boolean isEmptyImethodresponseTag)
1023 mike           1.2  {
1024                         XmlEntry entry;
1025 kumpf          1.12     CIMException cimException;
1026 mike           1.2  
1027 kumpf          1.60     if (isEmptyImethodresponseTag)
1028                         {
1029                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1030                                 "Expected open of $0 element", "IMETHODRESPONSE");
1031                             throw XmlValidationError(parser.getLine(), mlParms);
1032                         }
1033                         else if (XmlReader::getErrorElement(parser, cimException))
1034 mike           1.2      {
1035 kumpf          1.60         return(new CIMGetInstanceResponseMessage(
1036                                 messageId,
1037                                 cimException,
1038                                 QueueIdStack(),
1039                                 CIMInstance()));
1040 mike           1.2      }
1041 kumpf          1.37     else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1042 mike           1.2      {
1043 kumpf          1.60         CIMInstance cimInstance;
1044 mike           1.2  
1045 kumpf          1.60         if ((entry.type == XmlEntry::EMPTY_TAG) ||
1046                                 !XmlReader::getInstanceElement(parser, cimInstance))
1047                             {
1048                                 // l10n
1049 humberto       1.43 
1050 kumpf          1.60             // throw XmlValidationError(
1051                                 // parser.getLine(), "expected INSTANCE element");
1052 humberto       1.43 
1053 kumpf          1.60             MessageLoaderParms mlParms(
1054                                     "Client.CIMOperationResponseDecoder.EXPECTED_INSTANCE_ELEMENT",
1055                                     "expected INSTANCE element");
1056 humberto       1.43 
1057 kumpf          1.60             throw XmlValidationError(parser.getLine(), mlParms);
1058                             }
1059 mike           1.2  
1060 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
1061 mike           1.2  
1062 kumpf          1.60         return(new CIMGetInstanceResponseMessage(
1063                                 messageId,
1064                                 cimException,
1065                                 QueueIdStack(),
1066                                 cimInstance));
1067 mike           1.2      }
1068                         else
1069                         {
1070 kumpf          1.60         // l10n
1071 humberto       1.43 
1072 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
1073                             //   "expected ERROR or IRETURNVALUE element");
1074 humberto       1.43 
1075 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1076                                 "expected ERROR or IRETURNVALUE element");
1077 humberto       1.43 
1078 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
1079 mike           1.2      }
1080                     }
1081                     
1082                     CIMModifyInstanceResponseMessage* CIMOperationResponseDecoder::_decodeModifyInstanceResponse(
1083 kumpf          1.60     XmlParser& parser,
1084                         const String& messageId,
1085                         Boolean isEmptyImethodresponseTag)
1086 mike           1.2  {
1087                         XmlEntry entry;
1088 kumpf          1.12     CIMException cimException;
1089 mike           1.2  
1090 kumpf          1.60     if (!isEmptyImethodresponseTag)
1091 mike           1.2      {
1092 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1093                             {
1094                                 return(new CIMModifyInstanceResponseMessage(
1095                                     messageId,
1096                                     cimException,
1097                                     QueueIdStack()));
1098                             }
1099                     
1100                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1101                             {
1102                                 if (entry.type != XmlEntry::EMPTY_TAG)
1103                                 {
1104                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1105                                 }
1106                             }
1107 mike           1.2      }
1108 kumpf          1.60 
1109                         return(new CIMModifyInstanceResponseMessage(
1110                             messageId,
1111                             cimException,
1112                             QueueIdStack()));
1113 mike           1.2  }
1114                     
1115                     CIMEnumerateInstanceNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstanceNamesResponse(
1116 kumpf          1.60     XmlParser& parser,
1117                         const String& messageId,
1118                         Boolean isEmptyImethodresponseTag)
1119 mike           1.2  {
1120                         XmlEntry entry;
1121 kumpf          1.12     CIMException cimException;
1122 kumpf          1.60     Array<CIMObjectPath> instanceNames;
1123 mike           1.2  
1124 kumpf          1.60     if (!isEmptyImethodresponseTag)
1125 mike           1.2      {
1126 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1127                             {
1128                                 return(new CIMEnumerateInstanceNamesResponseMessage(
1129                                     messageId,
1130                                     cimException,
1131                                     QueueIdStack(),
1132                                     Array<CIMObjectPath>()));
1133                             }
1134                     
1135                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1136                             {
1137                                 if (entry.type != XmlEntry::EMPTY_TAG)
1138                                 {
1139                                     String className;
1140                                     Array<CIMKeyBinding> keyBindings;
1141                     
1142                                     while (XmlReader::getInstanceNameElement(
1143                                         parser, className, keyBindings))
1144                                     {
1145                                         CIMObjectPath r(
1146                                             String::EMPTY,
1147 kumpf          1.60                         CIMNamespaceName(),
1148                                             className,
1149                                             keyBindings);
1150                                         instanceNames.append(r);
1151                                     }
1152                     
1153                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1154                                 }
1155                             }
1156 mike           1.2      }
1157                     
1158 kumpf          1.60     return(new CIMEnumerateInstanceNamesResponseMessage(
1159                             messageId,
1160                             cimException,
1161                             QueueIdStack(),
1162                             instanceNames));
1163 mike           1.2  }
1164                     
1165                     CIMEnumerateInstancesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstancesResponse(
1166 kumpf          1.60     XmlParser& parser,
1167                         const String& messageId,
1168                         Boolean isEmptyImethodresponseTag)
1169 mike           1.2  {
1170                         XmlEntry entry;
1171 kumpf          1.12     CIMException cimException;
1172 kumpf          1.60     Array<CIMInstance> namedInstances;
1173 mike           1.2  
1174 kumpf          1.60     if (!isEmptyImethodresponseTag)
1175 mike           1.2      {
1176 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1177                             {
1178                                 return(new CIMEnumerateInstancesResponseMessage(
1179                                     messageId,
1180                                     cimException,
1181                                     QueueIdStack(),
1182                                     Array<CIMInstance>()));
1183                             }
1184                     
1185                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1186                             {
1187                                 if (entry.type != XmlEntry::EMPTY_TAG)
1188                                 {
1189                                     CIMInstance namedInstance;
1190                     
1191                                     while (XmlReader::getNamedInstanceElement(
1192                                                parser, namedInstance))
1193                                     {
1194                                         namedInstances.append(namedInstance);
1195                                     }
1196                     
1197 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1198                                 }
1199                             }
1200 mike           1.2      }
1201                     
1202 kumpf          1.60     return(new CIMEnumerateInstancesResponseMessage(
1203                             messageId,
1204                             cimException,
1205                             QueueIdStack(),
1206                             namedInstances));
1207 mike           1.2  }
1208                     
1209                     CIMDeleteInstanceResponseMessage* CIMOperationResponseDecoder::_decodeDeleteInstanceResponse(
1210 kumpf          1.60     XmlParser& parser,
1211                         const String& messageId,
1212                         Boolean isEmptyImethodresponseTag)
1213 mike           1.2  {
1214                         XmlEntry entry;
1215 kumpf          1.12     CIMException cimException;
1216 mike           1.2  
1217 kumpf          1.60     if (!isEmptyImethodresponseTag)
1218 mike           1.2      {
1219 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1220                             {
1221                                 return(new CIMDeleteInstanceResponseMessage(
1222                                     messageId,
1223                                     cimException,
1224                                     QueueIdStack()));
1225                             }
1226                     
1227                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1228                             {
1229                                 if (entry.type != XmlEntry::EMPTY_TAG)
1230                                 {
1231                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1232                                 }
1233                             }
1234 mike           1.2      }
1235 kumpf          1.60 
1236                         return(new CIMDeleteInstanceResponseMessage(
1237                             messageId,
1238                             cimException,
1239                             QueueIdStack()));
1240 mike           1.2  }
1241                     
1242                     CIMGetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeGetPropertyResponse(
1243 kumpf          1.60     XmlParser& parser,
1244                         const String& messageId,
1245                         Boolean isEmptyImethodresponseTag)
1246 mike           1.2  {
1247                         XmlEntry entry;
1248 kumpf          1.12     CIMException cimException;
1249 kumpf          1.60     CIMValue cimValue(CIMTYPE_STRING, false);
1250 mike           1.2  
1251 kumpf          1.60     if (!isEmptyImethodresponseTag)
1252 mike           1.2      {
1253 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1254                             {
1255                                 return(new CIMGetPropertyResponseMessage(
1256                                     messageId,
1257                                     cimException,
1258                                     QueueIdStack(),
1259                                     CIMValue()));
1260                             }
1261 kumpf          1.14 
1262 kumpf          1.60         if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1263                             {
1264                                 if (entry.type != XmlEntry::EMPTY_TAG)
1265                                 {
1266                                     if (!XmlReader::getPropertyValue(parser, cimValue))
1267                                     {
1268 kumpf          1.37                     // No value given; just return a null String value
1269 kumpf          1.60                 }
1270 kumpf          1.37 
1271 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1272                                 }
1273                             }
1274                             else
1275                             {
1276 kumpf          1.14             // No value given; just return a null String value
1277 kumpf          1.60         }
1278                         }
1279 mike           1.2  
1280 kumpf          1.60     return(new CIMGetPropertyResponseMessage(
1281                             messageId,
1282                             cimException,
1283                             QueueIdStack(),
1284                             cimValue));
1285 mike           1.2  }
1286                     
1287                     CIMSetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeSetPropertyResponse(
1288 kumpf          1.60     XmlParser& parser,
1289                         const String& messageId,
1290                         Boolean isEmptyImethodresponseTag)
1291 mike           1.2  {
1292                         XmlEntry entry;
1293 kumpf          1.12     CIMException cimException;
1294 mike           1.2  
1295 kumpf          1.60     if (!isEmptyImethodresponseTag)
1296 mike           1.2      {
1297 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1298                             {
1299                                 return(new CIMSetPropertyResponseMessage(
1300                                     messageId,
1301                                     cimException,
1302                                     QueueIdStack()));
1303                             }
1304                     
1305                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1306                             {
1307                                 if (entry.type != XmlEntry::EMPTY_TAG)
1308                                 {
1309                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1310                                 }
1311                             }
1312 mike           1.2      }
1313 kumpf          1.60 
1314                         return(new CIMSetPropertyResponseMessage(
1315                             messageId,
1316                             cimException,
1317                             QueueIdStack()));
1318 mike           1.2  }
1319                     
1320                     CIMSetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeSetQualifierResponse(
1321 kumpf          1.60     XmlParser& parser,
1322                         const String& messageId,
1323                         Boolean isEmptyImethodresponseTag)
1324 mike           1.2  {
1325                         XmlEntry entry;
1326 kumpf          1.12     CIMException cimException;
1327 mike           1.2  
1328 kumpf          1.60     if (!isEmptyImethodresponseTag)
1329 mike           1.2      {
1330 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1331                             {
1332                                 return(new CIMSetQualifierResponseMessage(
1333                                     messageId,
1334                                     cimException,
1335                                     QueueIdStack()));
1336                             }
1337                     
1338                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1339                             {
1340                                 if (entry.type != XmlEntry::EMPTY_TAG)
1341                                 {
1342                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1343                                 }
1344                             }
1345 mike           1.2      }
1346 kumpf          1.60 
1347                         return(new CIMSetQualifierResponseMessage(
1348                             messageId,
1349                             cimException,
1350                             QueueIdStack()));
1351 mike           1.2  }
1352                     
1353                     CIMGetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeGetQualifierResponse(
1354 kumpf          1.60     XmlParser& parser,
1355                         const String& messageId,
1356                         Boolean isEmptyImethodresponseTag)
1357 mike           1.2  {
1358                         XmlEntry entry;
1359 kumpf          1.12     CIMException cimException;
1360 mike           1.2  
1361 kumpf          1.60     if (isEmptyImethodresponseTag)
1362                         {
1363                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1364                                 "Expected open of $0 element", "IMETHODRESPONSE");
1365                             throw XmlValidationError(parser.getLine(), mlParms);
1366                         }
1367                         else if (XmlReader::getErrorElement(parser, cimException))
1368 mike           1.2      {
1369 kumpf          1.60         return(new CIMGetQualifierResponseMessage(
1370                                 messageId,
1371                                 cimException,
1372                                 QueueIdStack(),
1373                                 CIMQualifierDecl()));
1374 mike           1.2      }
1375                         else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1376                         {
1377 kumpf          1.60         CIMQualifierDecl qualifierDecl;
1378                             XmlReader::getQualifierDeclElement(parser, qualifierDecl);
1379 mike           1.2  
1380 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
1381 mike           1.2  
1382 kumpf          1.60         return(new CIMGetQualifierResponseMessage(
1383                                 messageId,
1384                                 cimException,
1385                                 QueueIdStack(),
1386                                 qualifierDecl));
1387 mike           1.2      }
1388                         else
1389                         {
1390 kumpf          1.60         // l10n
1391 humberto       1.43 
1392 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
1393                             //   "expected ERROR or IRETURNVALUE element");
1394 humberto       1.43 
1395 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1396                             "expected ERROR or IRETURNVALUE element");
1397 humberto       1.43 
1398 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
1399 mike           1.2      }
1400                     }
1401                     
1402                     CIMEnumerateQualifiersResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateQualifiersResponse(
1403 kumpf          1.60     XmlParser& parser,
1404                         const String& messageId,
1405                         Boolean isEmptyImethodresponseTag)
1406 mike           1.2  {
1407                         XmlEntry entry;
1408 kumpf          1.12     CIMException cimException;
1409 kumpf          1.60     Array<CIMQualifierDecl> qualifierDecls;
1410 mike           1.2  
1411 kumpf          1.60     if (!isEmptyImethodresponseTag)
1412 mike           1.2      {
1413 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1414                             {
1415                                 return(new CIMEnumerateQualifiersResponseMessage(
1416                                     messageId,
1417                                     cimException,
1418                                     QueueIdStack(),
1419                                     Array<CIMQualifierDecl>()));
1420                             }
1421                     
1422                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1423                             {
1424                                 if (entry.type != XmlEntry::EMPTY_TAG)
1425                                 {
1426                                     CIMQualifierDecl qualifierDecl;
1427                     
1428                                     while (XmlReader::getQualifierDeclElement(
1429                                                parser, qualifierDecl))
1430                                     {
1431                                         qualifierDecls.append(qualifierDecl);
1432                                     }
1433                     
1434 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1435                                 }
1436                             }
1437 mike           1.2      }
1438                     
1439 kumpf          1.60     return(new CIMEnumerateQualifiersResponseMessage(
1440                             messageId,
1441                             cimException,
1442                             QueueIdStack(),
1443                             qualifierDecls));
1444 mike           1.2  }
1445                     
1446                     CIMDeleteQualifierResponseMessage* CIMOperationResponseDecoder::_decodeDeleteQualifierResponse(
1447 kumpf          1.60     XmlParser& parser,
1448                         const String& messageId,
1449                         Boolean isEmptyImethodresponseTag)
1450 mike           1.2  {
1451                         XmlEntry entry;
1452 kumpf          1.12     CIMException cimException;
1453 mike           1.2  
1454 kumpf          1.60     if (!isEmptyImethodresponseTag)
1455 mike           1.2      {
1456 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1457                             {
1458                                 return(new CIMDeleteQualifierResponseMessage(
1459                                     messageId,
1460                                     cimException,
1461                                     QueueIdStack()));
1462                             }
1463                     
1464                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1465                             {
1466                                 if (entry.type != XmlEntry::EMPTY_TAG)
1467                                 {
1468                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1469                                 }
1470                             }
1471 mike           1.2      }
1472 kumpf          1.60 
1473                         return(new CIMDeleteQualifierResponseMessage(
1474                             messageId,
1475                             cimException,
1476                             QueueIdStack()));
1477 mike           1.2  }
1478                     
1479                     CIMReferenceNamesResponseMessage* CIMOperationResponseDecoder::_decodeReferenceNamesResponse(
1480 kumpf          1.60     XmlParser& parser,
1481                         const String& messageId,
1482                         Boolean isEmptyImethodresponseTag)
1483 mike           1.2  {
1484                         XmlEntry entry;
1485 kumpf          1.12     CIMException cimException;
1486 kumpf          1.60     Array<CIMObjectPath> objectPaths;
1487 mike           1.2  
1488 kumpf          1.60     if (!isEmptyImethodresponseTag)
1489 mike           1.2      {
1490 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1491                             {
1492                                 return(new CIMReferenceNamesResponseMessage(
1493                                     messageId,
1494                                     cimException,
1495                                     QueueIdStack(),
1496                                     Array<CIMObjectPath>()));
1497                             }
1498                     
1499                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1500                             {
1501                                 if (entry.type != XmlEntry::EMPTY_TAG)
1502                                 {
1503                                     CIMObjectPath objectPath;
1504                     
1505                                     while (XmlReader::getObjectPathElement(parser, objectPath))
1506                                         objectPaths.append(objectPath);
1507                     
1508                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1509                                 }
1510                             }
1511 mike           1.2      }
1512                     
1513 kumpf          1.60     return(new CIMReferenceNamesResponseMessage(
1514                             messageId,
1515                             cimException,
1516                             QueueIdStack(),
1517                             objectPaths));
1518 mike           1.2  }
1519                     
1520                     CIMReferencesResponseMessage* CIMOperationResponseDecoder::_decodeReferencesResponse(
1521 kumpf          1.60     XmlParser& parser,
1522                         const String& messageId,
1523                         Boolean isEmptyImethodresponseTag)
1524 mike           1.2  {
1525                         XmlEntry entry;
1526 kumpf          1.12     CIMException cimException;
1527 kumpf          1.60     Array<CIMObject> objectWithPathArray;
1528 mike           1.2  
1529 kumpf          1.60     if (!isEmptyImethodresponseTag)
1530 mike           1.2      {
1531 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1532                             {
1533                                 return(new CIMReferencesResponseMessage(
1534                                     messageId,
1535                                     cimException,
1536                                     QueueIdStack(),
1537                                     Array<CIMObject>()));
1538                             }
1539                     
1540                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1541                             {
1542                                 if (entry.type != XmlEntry::EMPTY_TAG)
1543                                 {
1544                                     CIMObject objectWithPath;
1545                     
1546                                     while (XmlReader::getValueObjectWithPathElement(
1547                                                parser, objectWithPath))
1548                                     {
1549                                         objectWithPathArray.append(objectWithPath);
1550                                     }
1551                     
1552 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1553                                 }
1554                             }
1555 mike           1.2      }
1556                     
1557 kumpf          1.60     return(new CIMReferencesResponseMessage(
1558                             messageId,
1559                             cimException,
1560                             QueueIdStack(),
1561                             objectWithPathArray));
1562 mike           1.2  }
1563                     
1564                     CIMAssociatorNamesResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorNamesResponse(
1565 kumpf          1.60     XmlParser& parser,
1566                         const String& messageId,
1567                         Boolean isEmptyImethodresponseTag)
1568 mike           1.2  {
1569                         XmlEntry entry;
1570 kumpf          1.12     CIMException cimException;
1571 kumpf          1.60     Array<CIMObjectPath> objectPaths;
1572 mike           1.2  
1573 kumpf          1.60     if (!isEmptyImethodresponseTag)
1574 mike           1.2      {
1575 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1576                             {
1577                                 return(new CIMAssociatorNamesResponseMessage(
1578                                     messageId,
1579                                     cimException,
1580                                     QueueIdStack(),
1581                                     Array<CIMObjectPath>()));
1582                             }
1583                     
1584                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1585                             {
1586                                 if (entry.type != XmlEntry::EMPTY_TAG)
1587                                 {
1588                                     CIMObjectPath objectPath;
1589                     
1590                                     while (XmlReader::getObjectPathElement(parser, objectPath))
1591                                         objectPaths.append(objectPath);
1592                     
1593                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1594                                 }
1595                             }
1596 mike           1.2      }
1597                     
1598 kumpf          1.60     return(new CIMAssociatorNamesResponseMessage(
1599                             messageId,
1600                             cimException,
1601                             QueueIdStack(),
1602                             objectPaths));
1603 mike           1.2  }
1604                     
1605                     CIMAssociatorsResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorsResponse(
1606 kumpf          1.60     XmlParser& parser,
1607                         const String& messageId,
1608                         Boolean isEmptyImethodresponseTag)
1609 mike           1.2  {
1610                         XmlEntry entry;
1611 kumpf          1.12     CIMException cimException;
1612 kumpf          1.60     Array<CIMObject> objectWithPathArray;
1613 mike           1.2  
1614 kumpf          1.60     if (!isEmptyImethodresponseTag)
1615 mike           1.2      {
1616 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1617                             {
1618                                 return(new CIMAssociatorsResponseMessage(
1619                                     messageId,
1620                                     cimException,
1621                                     QueueIdStack(),
1622                                     Array<CIMObject>()));
1623                             }
1624                     
1625                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1626                             {
1627                                 if (entry.type != XmlEntry::EMPTY_TAG)
1628                                 {
1629                                     CIMObject objectWithPath;
1630                     
1631                                     while (XmlReader::getValueObjectWithPathElement(
1632                                                parser, objectWithPath))
1633                                     {
1634                                         objectWithPathArray.append(objectWithPath);
1635                                     }
1636                     
1637 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1638                                 }
1639                             }
1640 mike           1.2      }
1641                     
1642 kumpf          1.60     return(new CIMAssociatorsResponseMessage(
1643                             messageId,
1644                             cimException,
1645                             QueueIdStack(),
1646                             objectWithPathArray));
1647 kumpf          1.10 }
1648                     
1649                     CIMExecQueryResponseMessage* CIMOperationResponseDecoder::_decodeExecQueryResponse(
1650 kumpf          1.60     XmlParser& parser,
1651                         const String& messageId,
1652                         Boolean isEmptyImethodresponseTag)
1653 kumpf          1.10 {
1654                         XmlEntry entry;
1655 kumpf          1.12     CIMException cimException;
1656 kumpf          1.60     Array<CIMObject> objectWithPathArray;
1657 kumpf          1.10 
1658 kumpf          1.60     if (!isEmptyImethodresponseTag)
1659 kumpf          1.10     {
1660 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1661                             {
1662                                 return(new CIMExecQueryResponseMessage(
1663                                     messageId,
1664                                     cimException,
1665                                     QueueIdStack(),
1666                                     Array<CIMObject>()));
1667                             }
1668 kumpf          1.10 
1669 kumpf          1.60         if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1670                             {
1671                                 if (entry.type != XmlEntry::EMPTY_TAG)
1672                                 {
1673 kumpf          1.37                 XmlReader::getObjectArray(parser, objectWithPathArray);
1674 kumpf          1.10 
1675 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1676                                 }
1677                             }
1678 mike           1.2      }
1679 kumpf          1.60 
1680                         return(new CIMExecQueryResponseMessage(
1681                             messageId,
1682                             cimException,
1683                             QueueIdStack(),
1684                             objectWithPathArray));
1685 mike           1.2  }
1686                     
1687                     CIMInvokeMethodResponseMessage* CIMOperationResponseDecoder::_decodeInvokeMethodResponse(
1688 kumpf          1.60     XmlParser& parser,
1689                         const String& messageId,
1690                         const String& methodName,
1691                         Boolean isEmptyMethodresponseTag)
1692 mike           1.2  {
1693                         XmlEntry entry;
1694 kumpf          1.12     CIMException cimException;
1695 mike           1.2  
1696 kumpf          1.5      CIMParamValue paramValue;
1697                         Array<CIMParamValue> outParameters;
1698 kumpf          1.6      CIMValue returnValue;
1699 mike           1.2  
1700 kumpf          1.60     if (!isEmptyMethodresponseTag)
1701 mike           1.2      {
1702 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1703                             {
1704                                 return(new CIMInvokeMethodResponseMessage(
1705                                     messageId,
1706                                     cimException,
1707                                     QueueIdStack(),
1708                                     returnValue,
1709                                     outParameters,
1710                                     methodName));
1711                             }
1712                     
1713 kumpf          1.4          Boolean isReturnValue = false;
1714                             Boolean isParamValue = false;
1715                             Boolean gotReturnValue = false;
1716                     
1717                             while ((isReturnValue =
1718 kumpf          1.6                      XmlReader::getReturnValueElement(parser, returnValue)) ||
1719 kumpf          1.5                 (isParamValue =
1720 kumpf          1.60                     XmlReader::getParamValueElement(parser, paramValue)))
1721 kumpf          1.4          {
1722                                 if (isReturnValue)
1723                                 {
1724                                     if (gotReturnValue)
1725                                     {
1726 kumpf          1.60                     // l10n
1727 humberto       1.43 
1728 kumpf          1.60                     // throw XmlValidationError(parser.getLine(),
1729                                         //   "unexpected RETURNVALUE element");
1730 humberto       1.43 
1731 kumpf          1.60                     MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_RETURNVALUE_ELEMENT",
1732                                             "unexpected RETURNVALUE element");
1733 humberto       1.43 
1734 kumpf          1.60                     throw XmlValidationError(parser.getLine(), mlParms);
1735 kumpf          1.4                  }
1736                                     gotReturnValue = true;
1737                                 }
1738                                 else    // isParamValue == true
1739                                 {
1740 kumpf          1.60                 outParameters.append(paramValue);
1741 kumpf          1.4              }
1742                     
1743                                 isReturnValue = false;
1744                                 isParamValue = false;
1745                             }
1746 kumpf          1.60     }
1747 kumpf          1.4  
1748 kumpf          1.60     return(new CIMInvokeMethodResponseMessage(
1749                             messageId,
1750                             cimException,
1751                             QueueIdStack(),
1752                             returnValue,
1753                             outParameters,
1754                             methodName));
1755 mike           1.2  }
1756                     
1757                     PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2