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