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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2