From: Dave B. <bla...@us...> - 2013-10-07 20:50:27
|
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; } |