in modules/core/src/main/java/org/apache/synapse/mediators/elementary/Source.java [66:180]
public ArrayList<OMNode> evaluate(MessageContext synCtx, SynapseLog synLog)
throws JaxenException {
ArrayList<OMNode> sourceNodeList = new ArrayList<OMNode>();
if (sourceType == EnrichMediator.CUSTOM) {
assert xpath != null : "XPath should be non null in case of CUSTOM";
List selectedNodeList = xpath.selectNodes(synCtx);
if (selectedNodeList != null && selectedNodeList.size() != 0) {
for (Object o : selectedNodeList) {
if (o instanceof OMElement) {
if (clone) {
sourceNodeList.add(((OMElement) o).cloneOMElement());
} else {
sourceNodeList.add((OMElement) o);
}
} else if (o instanceof OMText) {
sourceNodeList.add((OMText) o);
} else if (o instanceof String) {
OMFactory fac = OMAbstractFactory.getOMFactory();
sourceNodeList.add(fac.createOMText(o.toString()));
}
}
} else {
synLog.error("Specified node by xpath cannot be found.");
}
} else if (sourceType == EnrichMediator.BODY) {
if (clone) {
sourceNodeList.add(synCtx.getEnvelope().getBody().getFirstElement().cloneOMElement());
} else {
sourceNodeList.add(synCtx.getEnvelope().getBody().getFirstElement());
}
} else if (sourceType == EnrichMediator.ENVELOPE) {
if (clone) {
sourceNodeList.add(MessageHelper.cloneSOAPEnvelope(synCtx.getEnvelope()));
} else {
sourceNodeList.add(synCtx.getEnvelope());
}
} else if (sourceType == EnrichMediator.PROPERTY) {
assert property != null : "property shouldn't be null when type is PROPERTY";
Object o = synCtx.getProperty(property);
if (o instanceof OMElement) {
if (clone) {
sourceNodeList.add(((OMElement) o).cloneOMElement());
} else {
sourceNodeList.add((OMElement) o);
}
} else if (o instanceof String) {
String sourceStr = (String) o;
OMFactory fac = OMAbstractFactory.getOMFactory();
sourceNodeList.add(fac.createOMText(sourceStr));
} else if (o instanceof ArrayList) {
ArrayList nodesList = (ArrayList) o;
for (Object node : nodesList) {
if (node instanceof OMElement) {
if (node instanceof SOAPEnvelope) {
SOAPEnvelope soapEnvelope = (SOAPEnvelope) node;
soapEnvelope.getOrCreateHeader();
sourceNodeList.add(soapEnvelope);
} else {
OMElement ele = (OMElement) node;
sourceNodeList.add(ele);
}
} else if (node instanceof OMText) {
sourceNodeList.add((OMText) node);
}
}
} else {
synLog.error("Invalid source property type.");
}
} else if (sourceType == EnrichMediator.INLINE) {
if (inlineOMNode instanceof OMElement) {
OMElement inlineOMElement = (OMElement) inlineOMNode;
if (inlineOMElement.getLocalName().equals("Envelope")) {
SOAPEnvelope soapEnvelope = getSOAPEnvFromOM(inlineOMElement);
if (soapEnvelope != null) {
sourceNodeList.add(soapEnvelope);
} else {
synLog.error("Inline Source is not a valid SOAPEnvelope.");
}
} else {
sourceNodeList.add(inlineOMElement.cloneOMElement());
}
} else if (inlineOMNode instanceof OMText) {
sourceNodeList.add(inlineOMNode);
} else if (inlineKey != null) {
Object inlineObj = synCtx.getEntry(inlineKey);
if (inlineObj instanceof OMElement) {
if (((OMElement) inlineObj).getLocalName().equals("Envelope")) {
SOAPEnvelope soapEnvelope = getSOAPEnvFromOM((OMElement) inlineObj);
if (soapEnvelope != null) {
sourceNodeList.add(soapEnvelope);
} else {
synLog.error("Specified Resource as Source is not a valid SOAPEnvelope.");
}
} else {
sourceNodeList.add((OMElement) inlineObj);
}
} else if (inlineObj instanceof OMText) {
sourceNodeList.add((OMText) inlineObj);
} else if (inlineObj instanceof String) {
sourceNodeList.add(
OMAbstractFactory.getOMFactory().createOMText(inlineObj.toString()));
} else {
synLog.error("Specified Resource as Source is not valid.");
}
} else {
synLog.error("Inline Source Content is not valid.");
}
}
return sourceNodeList;
}