in modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediatorFactory.java [62:171]
public Mediator createSpecificMediator(OMElement elem, Properties properties) {
XQueryMediator xQueryMediator = new XQueryMediator();
OMAttribute xqueryKey = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE,
"key"));
OMAttribute attrTarget = elem.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE,
"target"));
if (xqueryKey != null) {
// KeyFactory for creating dynamic or static Key
ValueFactory keyFac = new ValueFactory();
// create dynamic or static key based on OMElement
Value generatedKey = keyFac.createValue(XMLConfigConstants.KEY, elem);
if (generatedKey != null) {
// set generated key as the Key
xQueryMediator.setQueryKey(generatedKey);
} else {
handleException("The 'key' attribute is required for the XQuery mediator");
}
} else {
handleException("The 'key' attribute is required for the XQuery mediator");
}
if (attrTarget != null) {
String targetValue = attrTarget.getAttributeValue();
if (targetValue != null && !"".equals(targetValue)) {
try {
xQueryMediator.setTarget(SynapseXPathFactory.getSynapseXPath(elem, ATT_TARGET));
} catch (JaxenException e) {
handleException("Invalid XPath specified for the target attribute : " +
targetValue);
}
}
}
// after successfully creating the mediator
// set its common attributes such as tracing etc
processAuditStatus(xQueryMediator, elem);
OMElement dataSource = elem.getFirstChildWithName(
new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "dataSource"));
if (dataSource != null) {
xQueryMediator.addAllDataSourceProperties(
MediatorPropertyFactory.getMediatorProperties(dataSource));
}
Iterator it = elem.getChildrenWithName(new QName(XMLConfigConstants.SYNAPSE_NAMESPACE,
"variable"));
while (it.hasNext()) {
OMElement variableOM = (OMElement) it.next();
String name = variableOM.getAttributeValue(ATT_NAME_Q);
if (name != null && !"".equals(name)) {
String type = variableOM.getAttributeValue(ATT_TYPE_Q);
if (type != null && !"".equals(type)) {
String value = variableOM.getAttributeValue(ATT_VALUE_Q);
MediatorVariable variable;
if (value != null && !"".equals(value)) {
variable = new MediatorBaseVariable(
new QName(name.trim()));
variable.setValue(value.trim());
} else {
String key = variableOM.getAttributeValue(ATT_KEY_Q);
String expr = variableOM.getAttributeValue(ATT_EXPR_Q);
variable = new MediatorCustomVariable(
new QName(name.trim()));
if (key != null) {
((MediatorCustomVariable) variable).setRegKey(key.trim());
}
if (expr != null && !"".equals(expr)) {
try {
SynapseXPath xpath = new SynapseXPath(expr);
OMElementUtils.addNameSpaces(xpath, variableOM, log);
((MediatorCustomVariable) variable).setExpression(xpath);
} catch (JaxenException e) {
handleException("Invalid XPath specified for" +
" the expression attribute : " + expr);
}
}
}
if ("INT".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_INT);
} else if ("INTEGER".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_INTEGER);
} else if ("BOOLEAN".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_BOOLEAN);
} else if ("BYTE".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_BYTE);
} else if ("DOUBLE".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_DOUBLE);
} else if ("SHORT".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_SHORT);
} else if ("LONG".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_LONG);
} else if ("FLOAT".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_FLOAT);
} else if ("STRING".equals(type.trim())) {
variable.setType(XQItemType.XQBASETYPE_STRING);
} else if ("DOCUMENT".equals(type.trim())) {
variable.setType(XQItemType.XQITEMKIND_DOCUMENT);
} else if ("DOCUMENT_ELEMENT".equals(type.trim())) {
variable.setType(XQItemType.XQITEMKIND_DOCUMENT_ELEMENT);
} else if ("ELEMENT".equals(type.trim())) {
variable.setType(XQItemType.XQITEMKIND_ELEMENT);
} else {
handleException("Unsupported Type");
}
xQueryMediator.addVariable(variable);
}
}
}
return xQueryMediator;
}