From: Dave B. <bla...@us...> - 2013-11-25 13:24:22
|
Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv10675/src/org/sblim/cimclient/internal/cimxml Modified Files: CIMXMLParserImpl.java Log Message: 2699 parseQUALIFIER does not require TYPE attribute Index: CIMXMLParserImpl.java =================================================================== RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/CIMXMLParserImpl.java,v retrieving revision 1.73 retrieving revision 1.74 diff -u -d -r1.73 -r1.74 --- CIMXMLParserImpl.java 25 Nov 2013 12:55:37 -0000 1.73 +++ CIMXMLParserImpl.java 25 Nov 2013 13:24:19 -0000 1.74 @@ -80,6 +80,7 @@ * 2694 2013-10-25 blaschke-oss NAME attribute not required by DOM parser (part 2) * 2695 2013-10-25 blaschke-oss parseMETHODCALL allows LOCALCLASSPATH and LOCALINSTANCEPATH * 2696 2013-10-29 blaschke-oss parseIRETURNVALUE ignores VALUE and VALUE.ARRAY + * 2699 2013-11-05 blaschke-oss parseQUALIFIER does not require TYPE attribute */ package org.sblim.cimclient.internal.cimxml; @@ -1496,6 +1497,9 @@ String name = attribute(pQualifierE, "NAME"); if (name == null) throw new CIMXMLParseException( "QUALIFIER element missing NAME attribute!"); + String typeStr = attribute(pQualifierE, "TYPE"); + if (typeStr == null && !hasTypeAttrsInNodes(pQualifierE)) throw new CIMXMLParseException( + "QUALIFIER element missing TYPE attribute!"); boolean propagated = MOF.TRUE.equalsIgnoreCase(pQualifierE.getAttribute("PROPAGATED")); // FLAVORS int flavors = parseFLAVORS(pQualifierE); @@ -1529,7 +1533,7 @@ String name = attribute(pQualifierTypeE, "NAME"); if (name == null) throw new CIMXMLParseException( "QUALIFIER.DECLARATION element missing NAME attribute!"); - if (attribute(pQualifierTypeE, "TYPE") == null) throw new CIMXMLParseException( + if (attribute(pQualifierTypeE, "TYPE") == null && !hasTypeAttrsInNodes(pQualifierTypeE)) throw new CIMXMLParseException( "QUALIFIER.DECLARATION element missing TYPE attribute!"); // SCOPES @@ -3137,6 +3141,30 @@ } /** + * hasTypeAttrsInNodes + * + * SVC CIMOM sends typed CIM-XML elements in a non-standard way. The TYPE + * attribute is included in the VALUE or VALUE.ARRAY element not in the + * enclosing element as the standard says. + * + * @param pParentE + * @return boolean + */ + private static boolean hasTypeAttrsInNodes(Element pParentE) { + NodeList nl = pParentE.getChildNodes(); + if (nl == null || nl.getLength() == 0) return false; + for (int i = 0; i < nl.getLength(); i++) { + Node n = nl.item(i); + String name = n.getNodeName(); + if ("VALUE".equalsIgnoreCase(name) || "VALUE.ARRAY".equalsIgnoreCase(name)) { + NamedNodeMap nm = n.getAttributes(); + if (nm != null && nm.getNamedItem("TYPE") != null) return true; + } + } + return false; + } + + /** * searchNodes * * @param pParentE |