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