From: Dave B. <bla...@us...> - 2013-10-29 11:39:37
|
Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv8588/src/org/sblim/cimclient/internal/cimxml Modified Files: CIMXMLParserImpl.java Log Message: IPARAMVALUE parsing broken on DOM/SAX Index: CIMXMLParserImpl.java =================================================================== RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/CIMXMLParserImpl.java,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- CIMXMLParserImpl.java 29 Oct 2013 11:28:43 -0000 1.61 +++ CIMXMLParserImpl.java 29 Oct 2013 11:39:35 -0000 1.62 @@ -68,6 +68,7 @@ * 2676 2013-09-27 blaschke-oss parseMULTI(EXP)REQ looking for wrong child elements * 2678 2013-09-30 blaschke-oss parseMULTI___ allows one SIMPLE___ child element * 2679 2013-10-01 blaschke-oss parseIMETHODCALL requires one IPARAMVALUE child element + * 2680 2013-10-02 blaschke-oss IPARAMVALUE parsing broken on DOM/SAX */ package org.sblim.cimclient.internal.cimxml; @@ -1425,7 +1426,7 @@ TypedValue tVal = parseVALUE(valueE); String valueStr = (String) tVal.getValue(); type = typeStr == null ? tVal.getType() : parseScalarTypeStr(typeStr); - value = createJavaObject(type.toString(), valueStr); + value = createJavaObject(type == null ? null : type.toString(), valueStr); } } if (type == null && (pMask & VALUEREF) > 0) { @@ -1447,7 +1448,8 @@ if (valStrA != null) { Object[] values = new Object[valStrA.length]; for (int i = 0; i < valStrA.length; i++) { - values[i] = createJavaObject(type.toString(), valStrA[i]); + values[i] = createJavaObject(type == null ? null : type.toString(), + valStrA[i]); } value = values; } @@ -2275,9 +2277,13 @@ if (name == null) throw new CIMXMLParseException( "IPARAMVALUE element missing NAME attribute!"); // this can parse VALUE, VALUE.ARRAY and VALUE.REFERENCE - TypedValue typedValue = parseSingleValue(pParamValueE, VALUE | VALUEA | VALUEREF); - if (typedValue.getType() != null) { return new CIMArgument<Object>(name, typedValue - .getType(), typedValue.getValue()); } + if (searchFirstNode(pParamValueE, "VALUE") != null + || searchFirstNode(pParamValueE, "VALUE.ARRAY") != null + || searchFirstNode(pParamValueE, "VALUE.REFERENCE") != null) { + TypedValue typedValue = parseSingleValue(pParamValueE, VALUE | VALUEA | VALUEREF); + if (typedValue.getType() != null) { return new CIMArgument<Object>(name, typedValue + .getType(), typedValue.getValue()); } + } // we can have different types too which cannot be handled by // parseSingleValue() @@ -2289,6 +2295,14 @@ return new CIMArgument<Object>(name, type, op); } + // CLASSNAME + Element classNameE = (Element) searchFirstNode(pParamValueE, "CLASSNAME"); + if (classNameE != null) { + CIMObjectPath op = parseCLASSNAME(classNameE); + CIMDataType type = new CIMDataType(op.getObjectName()); + return new CIMArgument<Object>(name, type, op); + } + // QUALIFIER.DECLARATION Element qualiDeclarationE = (Element) searchFirstNode(pParamValueE, "QUALIFIER.DECLARATION"); if (qualiDeclarationE != null) { @@ -2302,30 +2316,24 @@ Element classE = (Element) searchFirstNode(pParamValueE, "CLASS"); if (classE != null) { CIMClass cl = parseCLASS(classE); - // FIXME: ebak: Does it surely have to be mapped to type: REFERENCE? - // Why not map to type: CLASS? - return new CIMArgument<Object>(name, new CIMDataType(cl.getName()), cl); + return new CIMArgument<Object>(name, CIMDataType.CLASS_T, cl); } // INSTANCE Element instanceE = (Element) searchFirstNode(pParamValueE, "INSTANCE"); if (instanceE != null) { CIMInstance inst = parseINSTANCE(instanceE); - // FIXME: ebak: Does it surely have to be mapped to type: REFERENCE? - // Why not map to type: OBJECT? - return new CIMArgument<Object>(name, new CIMDataType(inst.getClassName()), inst); + return new CIMArgument<Object>(name, CIMDataType.OBJECT_T, inst); } // VALUE.NAMEDINSTANCE Element valuenamedisntanceE = (Element) searchFirstNode(pParamValueE, "VALUE.NAMEDINSTANCE"); if (valuenamedisntanceE != null) { CIMInstance inst = parseVALUENAMEDINSTANCE(valuenamedisntanceE); - // FIXME: ebak: Does it surely have to be mapped to type: REFERENCE? - // Why not map to type: OBJECT? - return new CIMArgument<Object>(name, new CIMDataType(inst.getClassName()), inst); + return new CIMArgument<Object>(name, CIMDataType.OBJECT_T, inst); } - return null; + return new CIMArgument<Object>(name, CIMDataType.STRING_T, null); } /** |