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
|