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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2