in modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediator.java [425:617]
private void bindVariable(XQDynamicContext xqDynamicContext, MediatorVariable variable,
SynapseLog synLog) throws XQException {
if (variable != null) {
QName name = variable.getName();
int type = variable.getType();
Object value = variable.getValue();
if (value != null && type != -1) {
if (synLog.isTraceOrDebugEnabled()) {
synLog.traceOrDebug("Binding a variable to the DynamicContext with a name : "
+ name + " and a value : " + value);
}
switch (type) {
//Binding the basic type As-Is and XML element as an InputSource
case (XQItemType.XQBASETYPE_BOOLEAN): {
boolean booleanValue = false;
if (value instanceof String) {
booleanValue = Boolean.parseBoolean((String) value);
} else if (value instanceof Boolean) {
booleanValue = (Boolean) value;
} else {
handleException("Incompatible type for the Boolean");
}
xqDynamicContext.bindBoolean(name, booleanValue, null);
break;
}
case (XQItemType.XQBASETYPE_INTEGER): {
int intValue = -1;
if (value instanceof String) {
try {
intValue = Integer.parseInt((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value + "' " +
"for the Integer", e);
}
} else if (value instanceof Integer) {
intValue = (Integer) value;
} else {
handleException("Incompatible type for the Integer");
}
if (intValue != -1) {
xqDynamicContext.bindInt(name, intValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_INT): {
int intValue = -1;
if (value instanceof String) {
try {
intValue = Integer.parseInt((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value +
"' for the Int", e);
}
} else if (value instanceof Integer) {
intValue = (Integer) value;
} else {
handleException("Incompatible type for the Int");
}
if (intValue != -1) {
xqDynamicContext.bindInt(name, intValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_LONG): {
long longValue = -1;
if (value instanceof String) {
try {
longValue = Long.parseLong((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value + "' " +
"for the long ", e);
}
} else if (value instanceof Long) {
longValue = (Long) value;
} else {
handleException("Incompatible type for the Long");
}
if (longValue != -1) {
xqDynamicContext.bindLong(name, longValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_SHORT): {
short shortValue = -1;
if (value instanceof String) {
try {
shortValue = Short.parseShort((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value + "' " +
"for the short ", e);
}
} else if (value instanceof Short) {
shortValue = (Short) value;
} else {
handleException("Incompatible type for the Short");
}
if (shortValue != -1) {
xqDynamicContext.bindShort(name, shortValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_DOUBLE): {
double doubleValue = -1;
if (value instanceof String) {
try {
doubleValue = Double.parseDouble((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value + "' " +
"for the double ", e);
}
} else if (value instanceof Double) {
doubleValue = (Double) value;
} else {
handleException("Incompatible type for the Double");
}
if (doubleValue != -1) {
xqDynamicContext.bindDouble(name, doubleValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_FLOAT): {
float floatValue = -1;
if (value instanceof String) {
try {
floatValue = Float.parseFloat((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value + "' " +
"for the float ", e);
}
} else if (value instanceof Float) {
floatValue = (Float) value;
} else {
handleException("Incompatible type for the Float");
}
if (floatValue != -1) {
xqDynamicContext.bindFloat(name, floatValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_BYTE): {
byte byteValue = -1;
if (value instanceof String) {
try {
byteValue = Byte.parseByte((String) value);
} catch (NumberFormatException e) {
handleException("Incompatible value '" + value + "' " +
"for the byte ", e);
}
} else if (value instanceof Byte) {
byteValue = (Byte) value;
} else {
handleException("Incompatible type for the Byte");
}
if (byteValue != -1) {
xqDynamicContext.bindByte(name, byteValue, null);
}
break;
}
case (XQItemType.XQBASETYPE_STRING): {
if (value instanceof String) {
xqDynamicContext.bindObject(name, value, null);
} else {
handleException("Incompatible type for the String");
}
break;
}
case (XQItemType.XQITEMKIND_DOCUMENT): {
bindOMNode(name, value, xqDynamicContext);
break;
}
case (XQItemType.XQITEMKIND_ELEMENT): {
bindOMNode(name, value, xqDynamicContext);
break;
}
case (XQItemType.XQITEMKIND_DOCUMENT_ELEMENT): {
bindOMNode(name, value, xqDynamicContext);
break;
}
default: {
handleException("Unsupported type for the binding type" + type +
" in the variable name " + name);
break;
}
}
}
}
}