Java tutorial
/** * Copyright 1999-2011 Alibaba Group * * Licensed 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 com.alibaba.cobar.client.router.config; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.springframework.core.io.Resource; import com.alibaba.cobar.client.router.config.vo.InternalRule; import com.alibaba.cobar.client.router.config.vo.InternalRules; import com.alibaba.cobar.client.support.utils.CollectionUtils; import com.thoughtworks.xstream.XStream; /** * * {@link DefaultCobarClientInternalRouterXmlFactoryBean} will load rule definitions from external xml configuration files.<br> * if you want to directly define rules in spring's IoC Container, see {@link StaticCobarClientInternalRouterFactoryBean}. * @author fujohnwang * @see StaticCobarClientInternalRouterFactoryBean */ public class DefaultCobarClientInternalRouterXmlFactoryBean extends AbstractCobarClientInternalRouterFactoryBean { private Resource configLocation; private Resource[] configLocations; public Resource getConfigLocation() { return configLocation; } public void setConfigLocation(Resource configLocation) { this.configLocation = configLocation; } public Resource[] getConfigLocations() { return configLocations; } public void setConfigLocations(Resource[] configLocations) { this.configLocations = configLocations; } @Override protected List<InternalRule> loadRulesFromExternal() throws IOException { XStream xstream = new XStream(); xstream.alias("rules", InternalRules.class); xstream.alias("rule", InternalRule.class); xstream.addImplicitCollection(InternalRules.class, "rules"); xstream.useAttributeFor(InternalRule.class, "merger"); List<InternalRule> rules = new ArrayList<InternalRule>(); if (getConfigLocation() != null) { InternalRules internalRules = (InternalRules) xstream.fromXML(getConfigLocation().getInputStream()); if (!CollectionUtils.isEmpty(internalRules.getRules())) { rules.addAll(internalRules.getRules()); } } if (getConfigLocations() != null && getConfigLocations().length > 0) { for (Resource resource : getConfigLocations()) { InternalRules internalRules = (InternalRules) xstream.fromXML(resource.getInputStream()); if (!CollectionUtils.isEmpty(internalRules.getRules())) { rules.addAll(internalRules.getRules()); } } } return rules; } }