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