Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml
In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3895/src/org/sblim/cimclient/internal/cimxml
Modified Files:
Tag: Experimental
CIMXMLParserImpl.java
Log Message:
2684 parseEXPMETHODRESPONSE has several issues
Index: CIMXMLParserImpl.java
===================================================================
RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/CIMXMLParserImpl.java,v
retrieving revision 1.14.2.54
retrieving revision 1.14.2.55
diff -u -d -r1.14.2.54 -r1.14.2.55
--- CIMXMLParserImpl.java 7 Oct 2013 17:28:16 -0000 1.14.2.54
+++ CIMXMLParserImpl.java 7 Oct 2013 20:50:24 -0000 1.14.2.55
@@ -70,7 +70,8 @@
* 2679 2013-10-01 blaschke-oss parseIMETHODCALL requires one IPARAMVALUE child element
* 2680 2013-10-02 blaschke-oss IPARAMVALUE parsing broken on DOM/SAX
* 2681 2013-10-02 blaschke-oss parseQUALIFIERDECLARATION does not require TYPE attribute
- * 2683 2013-10-07 blaschke-oss KEYVALUE VALUETYPE optional, "string" default
+ * 2683 2013-10-07 blaschke-oss KEYVALUE VALUETYPE optional, "string" default
+ * 2684 2013-10-07 blaschke-oss parseEXPMETHODRESPONSE has several issues
*/
package org.sblim.cimclient.internal.cimxml;
@@ -3050,6 +3051,17 @@
// ///////////////////////////////////////////////////////////////////////////////////////////
/**
+ * hasNodes
+ *
+ * @param pParentE
+ * @return boolean
+ */
+ private static boolean hasNodes(Element pParentE) {
+ NodeList nl = pParentE.getChildNodes();
+ return (nl != null && nl.getLength() > 0);
+ }
+
+ /**
* searchNodes
*
* @param pParentE
@@ -3268,10 +3280,15 @@
CIMResponse response = new CIMResponse();
+ if (attribute(pExpMethodResponseE, "NAME") == null) throw new CIMXMLParseException(
+ "EXPMETHODRESPONSE element missing NAME attribute!");
+
// ERROR
- Element errorE = (Element) searchFirstNode(pExpMethodResponseE, "ERROR");
- if (errorE != null) {
- WBEMException exception = parseERROR(errorE);
+ Element[] errorA = searchNodes(pExpMethodResponseE, "ERROR");
+ if (errorA != null && errorA.length > 0) {
+ if (errorA.length > 1) throw new CIMXMLParseException(
+ "EXPMETHODRESPONSE element must have only one ERROR child element!");
+ WBEMException exception = parseERROR(errorA[0]);
response.setError(exception);
return response;
}
@@ -3279,14 +3296,18 @@
// RETURNVALUE
Element[] retValElementA = searchNodes(pExpMethodResponseE, "IRETURNVALUE");
if (retValElementA != null && retValElementA.length > 0) {
+ if (retValElementA.length > 1) throw new CIMXMLParseException(
+ "EXPMETHODRESPONSE element must have only one IRETURNVALUE child element!");
Vector<Object> v = new Vector<Object>();
- for (int i = 0; i < retValElementA.length; i++) {
- Element returnvalueE = retValElementA[i];
- v.add(parseIRETURNVALUE(returnvalueE));
- }
+ Element returnvalueE = retValElementA[0];
+ v.add(parseIRETURNVALUE(returnvalueE));
response.setReturnValue(v);
+ return response;
}
+ if (hasNodes(pExpMethodResponseE)) throw new CIMXMLParseException(
+ "EXPMETHODRESPONSE element contains invalid child element!");
+
return response;
}
|