in modules/core/src/main/java/org/apache/synapse/config/xml/CalloutMediatorFactory.java [76:199]
public Mediator createSpecificMediator(OMElement elem, Properties properties) {
CalloutMediator callout = new CalloutMediator();
OMAttribute attServiceURL = elem.getAttribute(ATT_URL);
OMAttribute attAction = elem.getAttribute(ATT_ACTION);
OMAttribute attPassHeaders = elem.getAttribute(ATT_PASS_HEADERS);
OMAttribute attInitClientOptions = elem.getAttribute(ATT_INIT_AXI2_CLIENT_OPTIONS);
OMElement epElement = elem.getFirstChildWithName(Q_ENDPOINT);
OMElement configElt = elem.getFirstChildWithName(Q_CONFIG);
OMElement sourceElt = elem.getFirstChildWithName(Q_SOURCE);
OMElement targetElt = elem.getFirstChildWithName(Q_TARGET);
OMElement wsSec = elem.getFirstChildWithName(Q_SEC);
if (attServiceURL != null) {
callout.setServiceURL(attServiceURL.getAttributeValue());
}
if (epElement != null) {
Endpoint endpoint = EndpointFactory.getEndpointFromElement(epElement, true, properties);
if (endpoint != null) {
if (endpoint instanceof AbstractEndpoint &&
((AbstractEndpoint) endpoint).isLeafEndpoint()) {
callout.setEndpoint(endpoint);
} else {
handleException("Callout mediator only supports leaf endpoints");
}
}
}
if (attAction != null) {
callout.setAction(attAction.getAttributeValue());
}
if (attPassHeaders != null &&
JavaUtils.isTrueExplicitly(attPassHeaders.getAttributeValue())) {
callout.setPassHeaders(true);
}
if (attInitClientOptions != null &&
JavaUtils.isFalseExplicitly(attInitClientOptions.getAttributeValue())) {
callout.setInitClientOptions(false);
}
if (configElt != null) {
OMAttribute axis2xmlAttr = configElt.getAttribute(ATT_AXIS2XML);
OMAttribute repoAttr = configElt.getAttribute(ATT_REPOSITORY);
if (axis2xmlAttr != null && axis2xmlAttr.getAttributeValue() != null) {
File axis2xml = new File(axis2xmlAttr.getAttributeValue());
if (axis2xml.exists() && axis2xml.isFile()) {
callout.setAxis2xml(axis2xmlAttr.getAttributeValue());
} else {
handleException("Invalid axis2.xml path: " + axis2xmlAttr.getAttributeValue());
}
}
if (repoAttr != null && repoAttr.getAttributeValue() != null) {
File repo = new File(repoAttr.getAttributeValue());
if (repo.exists() && repo.isDirectory()) {
callout.setClientRepository(repoAttr.getAttributeValue());
} else {
handleException("Invalid repository path: " + repoAttr.getAttributeValue());
}
}
}
if (sourceElt != null) {
if (sourceElt.getAttribute(ATT_XPATH) != null) {
try {
callout.setRequestXPath(
SynapseXPathFactory.getSynapseXPath(sourceElt, ATT_XPATH));
} catch (JaxenException e) {
handleException("Invalid source XPath : "
+ sourceElt.getAttributeValue(ATT_XPATH));
}
} else if (sourceElt.getAttribute(ATT_KEY) != null) {
callout.setRequestKey(sourceElt.getAttributeValue(ATT_KEY));
} else {
handleException("A 'xpath' or 'key' attribute " +
"is required for the Callout 'source'");
}
}
if (targetElt != null) {
if (targetElt.getAttribute(ATT_XPATH) != null) {
try {
callout.setTargetXPath(
SynapseXPathFactory.getSynapseXPath(targetElt, ATT_XPATH));
} catch (JaxenException e) {
handleException("Invalid target XPath : "
+ targetElt.getAttributeValue(ATT_XPATH));
}
} else if (targetElt.getAttribute(ATT_KEY) != null) {
callout.setTargetKey(targetElt.getAttributeValue(ATT_KEY));
} else {
handleException("A 'xpath' or 'key' attribute " +
"is required for the Callout 'target'");
}
}
if (wsSec != null) {
callout.setSecurityOn(true);
OMAttribute policyKey = wsSec.getAttribute(ATT_POLICY);
OMAttribute outboundPolicyKey = wsSec.getAttribute(ATT_OUTBOUND_SEC_POLICY);
OMAttribute inboundPolicyKey = wsSec.getAttribute(ATT_INBOUND_SEC_POLICY);
if (policyKey != null) {
callout.setWsSecPolicyKey(policyKey.getAttributeValue());
} else if (outboundPolicyKey != null || inboundPolicyKey != null) {
if (outboundPolicyKey != null) {
callout.setOutboundWsSecPolicyKey(outboundPolicyKey.getAttributeValue());
}
if (inboundPolicyKey != null) {
callout.setInboundWsSecPolicyKey(inboundPolicyKey.getAttributeValue());
}
} else {
callout.setSecurityOn(false);
handleException("A policy key is required to enable security");
}
}
return callout;
}