use of org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint in project wso2-synapse by wso2.
the class DynamicLoadBalanceEndpointFactoryTest method test.
/**
* Testing whether synapse exception is thrown when the membership handler cannot be found.
* The given membership handler is a false one.
* @throws Exception
*/
@Test(expected = SynapseException.class)
public void test() throws Exception {
String inputXml = "<endpoint xmlns=\"http://ws.apache.org/ns/synapse\">" + "<dynamicLoadbalance policy=\"roundRobin\" failover=\"true\">" + " <membershipHandler class=\"org.apache.synapse.core.LoadBalanceMembershipHandler\">" + " <property name=\"name\" value=\"value\"/>" + " </membershipHandler>" + " </dynamicLoadbalance>" + "</endpoint>";
OMElement inputElement = AXIOMUtil.stringToOM(inputXml);
DynamicLoadbalanceEndpoint endpoint = (DynamicLoadbalanceEndpoint) DynamicLoadbalanceEndpointFactory.getEndpointFromElement(inputElement, true, null);
}
use of org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint in project wso2-synapse by wso2.
the class DynamicLoadbalanceEndpointFactory method createEndpoint.
protected Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint, Properties properties) {
OMElement loadbalanceElement = epConfig.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "dynamicLoadbalance"));
if (loadbalanceElement != null) {
DynamicLoadbalanceEndpoint loadbalanceEndpoint = new DynamicLoadbalanceEndpoint();
// set endpoint name
OMAttribute name = epConfig.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
if (name != null) {
loadbalanceEndpoint.setName(name.getAttributeValue());
}
// get the session for this endpoint
OMElement sessionElement = epConfig.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "session"));
if (sessionElement != null) {
OMElement sessionTimeout = sessionElement.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "sessionTimeout"));
if (sessionTimeout != null) {
try {
loadbalanceEndpoint.setSessionTimeout(Long.parseLong(sessionTimeout.getText().trim()));
} catch (NumberFormatException nfe) {
handleException("Invalid session timeout value : " + sessionTimeout.getText());
}
}
String type = sessionElement.getAttributeValue(new QName("type"));
if (type.equalsIgnoreCase("soap")) {
Dispatcher soapDispatcher = new SoapSessionDispatcher();
loadbalanceEndpoint.setDispatcher(soapDispatcher);
} else if (type.equalsIgnoreCase("http")) {
Dispatcher httpDispatcher = new HttpSessionDispatcher();
loadbalanceEndpoint.setDispatcher(httpDispatcher);
}
loadbalanceEndpoint.setSessionAffinity(true);
}
// set if failover is turned off
String failover = loadbalanceElement.getAttributeValue(new QName("failover"));
if (failover != null && failover.equalsIgnoreCase("false")) {
loadbalanceEndpoint.setFailover(false);
} else {
loadbalanceEndpoint.setFailover(true);
}
OMElement eventHandler = loadbalanceElement.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "membershipHandler"));
if (eventHandler != null) {
String clazz = eventHandler.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "class")).trim();
try {
LoadBalanceMembershipHandler lbMembershipHandler = (LoadBalanceMembershipHandler) Class.forName(clazz).newInstance();
Properties lbProperties = new Properties();
for (Iterator props = eventHandler.getChildrenWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "property")); props.hasNext(); ) {
OMElement prop = (OMElement) props.next();
String propName = prop.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "name")).trim();
String propValue = prop.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "value")).trim();
lbProperties.put(propName, propValue);
}
// Set load balance algorithm
LoadbalanceAlgorithm algorithm = LoadbalanceAlgorithmFactory.createLoadbalanceAlgorithm(loadbalanceElement, null);
lbMembershipHandler.init(lbProperties, algorithm);
loadbalanceEndpoint.setLoadBalanceMembershipHandler(lbMembershipHandler);
} catch (Exception e) {
String msg = "Could not instantiate " + "LoadBalanceMembershipHandler implementation " + clazz;
log.error(msg, e);
throw new SynapseException(msg, e);
}
}
processProperties(loadbalanceEndpoint, epConfig);
return loadbalanceEndpoint;
}
return null;
}
use of org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint in project wso2-synapse by wso2.
the class DynamicLoadbalanceEndpointSerializer method serializeEndpoint.
protected OMElement serializeEndpoint(Endpoint endpoint) {
if (!(endpoint instanceof DynamicLoadbalanceEndpoint)) {
handleException("Invalid endpoint type.");
}
fac = OMAbstractFactory.getOMFactory();
OMElement endpointElement = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
DynamicLoadbalanceEndpoint dynamicLoadbalanceEndpoint = (DynamicLoadbalanceEndpoint) endpoint;
// serialize the parameters
serializeProperties(dynamicLoadbalanceEndpoint, endpointElement);
serializeCommonAttributes(endpoint, endpointElement);
Dispatcher dispatcher = dynamicLoadbalanceEndpoint.getDispatcher();
if (dispatcher != null) {
OMElement sessionElement = fac.createOMElement("session", SynapseConstants.SYNAPSE_OMNAMESPACE);
if (dispatcher instanceof SoapSessionDispatcher) {
sessionElement.addAttribute("type", "soap", null);
} else if (dispatcher instanceof HttpSessionDispatcher) {
sessionElement.addAttribute("type", "http", null);
} else if (dispatcher instanceof SimpleClientSessionDispatcher) {
sessionElement.addAttribute("type", "simpleClientSession", null);
} else {
handleException("invalid session dispatcher : " + dispatcher.getClass().getName());
}
long sessionTimeout = dynamicLoadbalanceEndpoint.getSessionTimeout();
if (sessionTimeout != -1) {
OMElement sessionTimeoutElement = fac.createOMElement("sessionTimeout", SynapseConstants.SYNAPSE_OMNAMESPACE);
sessionTimeoutElement.setText(String.valueOf(sessionTimeout));
sessionElement.addChild(sessionTimeoutElement);
}
endpointElement.addChild(sessionElement);
}
OMElement dynamicLoadbalanceElement = fac.createOMElement("dynamicLoadbalance", SynapseConstants.SYNAPSE_OMNAMESPACE);
endpointElement.addChild(dynamicLoadbalanceElement);
// set if failover is turned off in the endpoint
if (!dynamicLoadbalanceEndpoint.isFailover()) {
dynamicLoadbalanceElement.addAttribute("failover", "false", null);
}
LoadBalanceMembershipHandler loadBalanceMembershipHandler = dynamicLoadbalanceEndpoint.getLbMembershipHandler();
dynamicLoadbalanceElement.addAttribute(XMLConfigConstants.LOADBALANCE_ALGORITHM, loadBalanceMembershipHandler.getLoadbalanceAlgorithm().getClass().getName(), null);
OMElement membershipHandlerElement = fac.createOMElement("membershipHandler", SynapseConstants.SYNAPSE_OMNAMESPACE);
dynamicLoadbalanceElement.addChild(membershipHandlerElement);
membershipHandlerElement.addAttribute("class", loadBalanceMembershipHandler.getClass().getName(), null);
Properties membershipHandlerProperties = loadBalanceMembershipHandler.getProperties();
OMElement propertyElement;
for (Object property : membershipHandlerProperties.keySet()) {
propertyElement = fac.createOMElement("property", SynapseConstants.SYNAPSE_OMNAMESPACE);
membershipHandlerElement.addChild(propertyElement);
propertyElement.addAttribute("name", property.toString(), null);
propertyElement.addAttribute("value", membershipHandlerProperties.getProperty((String) property), null);
}
return endpointElement;
}
Aggregations