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