From: Dave B. <bla...@us...> - 2013-11-06 02:35:28
|
Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv19871/src/org/sblim/cimclient/internal/cimxml Modified Files: Tag: Experimental 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.14.2.64 retrieving revision 1.14.2.65 diff -u -d -r1.14.2.64 -r1.14.2.65 --- CIMXMLParserImpl.java 29 Oct 2013 18:46:27 -0000 1.14.2.64 +++ CIMXMLParserImpl.java 6 Nov 2013 02:35:25 -0000 1.14.2.65 @@ -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; @@ -1497,6 +1498,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); @@ -1530,7 +1534,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 @@ -3138,6 +3142,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 |