/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.synapse.config.xml; import org.apache.axiom.om.OMElement; import org.apache.synapse.Mediator; import org.apache.synapse.commons.evaluators.config.EvaluatorSerializerFinder; import org.apache.synapse.commons.evaluators.config.EvaluatorSerializer; import org.apache.synapse.commons.evaluators.EvaluatorException; import org.apache.synapse.mediators.filters.router.ConditionalRoute; import org.apache.synapse.mediators.filters.router.ConditionalRouterMediator; /** * <pre> * <conditionalRouter continueAfter="(true|false)"> * <route breakRoute="(true|false)"> * <condition ../> * <target ../> * </route> * </conditionalRouter> * </pre> */ public class ConditionalRouterMediatorSerializer extends AbstractMediatorSerializer { public OMElement serializeSpecificMediator(Mediator m) { OMElement conditionalRouterElem = fac.createOMElement("conditionalRouter", synNS); saveTracingState(conditionalRouterElem, m); ConditionalRouterMediator conditionalRouterMediator = (ConditionalRouterMediator) m; if (conditionalRouterMediator.isContinueAfterExplicitlySet()) { conditionalRouterElem.addAttribute("continueAfter", Boolean.toString(conditionalRouterMediator.isContinueAfter()), nullNS); } for (ConditionalRoute conditionalRoute : conditionalRouterMediator.getConditionalRoutes()) { OMElement routeElem = fac.createOMElement("conditionalRoute", synNS); if (conditionalRoute.isBreakRouteExplicitlySet()) { routeElem.addAttribute("breakRoute", Boolean.toString(conditionalRoute.isBreakRoute()), nullNS); } if (conditionalRoute.getEvaluator() != null) { EvaluatorSerializer evaluatorSerializer = EvaluatorSerializerFinder.getInstance().getSerializer( conditionalRoute.getEvaluator().getName()); if (evaluatorSerializer != null) { OMElement conditionElement = fac.createOMElement("condition", synNS); try { evaluatorSerializer.serialize(conditionElement, conditionalRoute.getEvaluator()); } catch (EvaluatorException e) { handleException("Cannot serialize the Evaluator", e); } routeElem.addChild(conditionElement); } } if (conditionalRoute.getTarget() != null) { routeElem.addChild(TargetSerializer.serializeTarget(conditionalRoute.getTarget())); } else { handleException("ConditionalRoute in a conditional router has to have a target"); } if (conditionalRoute.getTarget().isAsynchronous()) { routeElem.addAttribute(fac.createOMAttribute("asynchronous", nullNS, "true")); } conditionalRouterElem.addChild(routeElem); } return conditionalRouterElem; } public String getMediatorClassName() { return ConditionalRouterMediator.class.getName(); } }